Merge branch 'develop' of github.com:matrix-org/matrix-react-sdk into joriks/style-fighting

This commit is contained in:
Jorik Schellekens 2020-08-04 15:04:56 +01:00
commit 271eeeabee
315 changed files with 8146 additions and 2874 deletions

View file

@ -14,7 +14,11 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
import { JSXElementConstructor } from "react";
// Based on https://stackoverflow.com/a/53229857/3532235
export type Without<T, U> = {[P in Exclude<keyof T, keyof U>] ? : never};
export type XOR<T, U> = (T | U) extends object ? (Without<T, U> & U) | (Without<U, T> & T) : T | U;
export type Writeable<T> = { -readonly [P in keyof T]: T[P] };
export type ComponentClass = keyof JSX.IntrinsicElements | JSXElementConstructor<any>;

View file

@ -25,6 +25,7 @@ import { PlatformPeg } from "../PlatformPeg";
import RoomListLayoutStore from "../stores/room-list/RoomListLayoutStore";
import {IntegrationManagers} from "../integrations/IntegrationManagers";
import {ModalManager} from "../Modal";
import SettingsStore from "../settings/SettingsStore";
declare global {
interface Window {
@ -43,6 +44,7 @@ declare global {
mxPlatformPeg: PlatformPeg;
mxIntegrationManagers: typeof IntegrationManagers;
singletonModalManager: ModalManager;
mxSettingsStore: SettingsStore;
}
// workaround for https://github.com/microsoft/TypeScript/issues/30933

View file

@ -62,10 +62,11 @@ import Matrix from 'matrix-js-sdk';
import dis from './dispatcher/dispatcher';
import WidgetUtils from './utils/WidgetUtils';
import WidgetEchoStore from './stores/WidgetEchoStore';
import SettingsStore, { SettingLevel } from './settings/SettingsStore';
import SettingsStore from './settings/SettingsStore';
import {generateHumanReadableId} from "./utils/NamingUtils";
import {Jitsi} from "./widgets/Jitsi";
import {WidgetType} from "./widgets/WidgetType";
import {SettingLevel} from "./settings/SettingLevel";
global.mxCalls = {
//room_id: MatrixCall

View file

@ -15,7 +15,8 @@
*/
import * as Matrix from 'matrix-js-sdk';
import SettingsStore, {SettingLevel} from "./settings/SettingsStore";
import SettingsStore from "./settings/SettingsStore";
import {SettingLevel} from "./settings/SettingLevel";
export default {
hasAnyLabeledDevices: async function() {

View file

@ -306,6 +306,11 @@ async function _restoreFromLocalStorage(opts) {
}
const pickleKey = await PlatformPeg.get().getPickleKey(userId, deviceId);
if (pickleKey) {
console.log("Got pickle key");
} else {
console.log("No pickle key available");
}
console.log(`Restoring session for ${userId}`);
await _doSetLoggedIn({
@ -364,6 +369,12 @@ export async function setLoggedIn(credentials) {
? await PlatformPeg.get().createPickleKey(credentials.userId, credentials.deviceId)
: null;
if (pickleKey) {
console.log("Created pickle key");
} else {
console.log("Pickle key not created");
}
return _doSetLoggedIn(Object.assign({}, credentials, {pickleKey}), true);
}
@ -501,6 +512,14 @@ function _persistCredentialsToLocalStorage(credentials) {
localStorage.setItem("mx_access_token", credentials.accessToken);
localStorage.setItem("mx_is_guest", JSON.stringify(credentials.guest));
if (credentials.pickleKey) {
localStorage.setItem("mx_has_pickle_key", true);
} else {
if (localStorage.getItem("mx_has_pickle_key")) {
console.error("Expected a pickle key, but none provided. Encryption may not work.");
}
}
// if we didn't get a deviceId from the login, leave mx_device_id unset,
// rather than setting it to "undefined".
//

View file

@ -256,7 +256,7 @@ class _MatrixClientPeg implements IMatrixClientPeg {
deviceId: creds.deviceId,
pickleKey: creds.pickleKey,
timelineSupport: true,
forceTURN: !SettingsStore.getValue('webRtcAllowPeerToPeer', false),
forceTURN: !SettingsStore.getValue('webRtcAllowPeerToPeer'),
fallbackICEServerAllowed: !!SettingsStore.getValue('fallbackICEServerAllowed'),
verificationMethods: [
verificationMethods.SAS,

View file

@ -27,10 +27,11 @@ import dis from './dispatcher/dispatcher';
import * as sdk from './index';
import { _t } from './languageHandler';
import Modal from './Modal';
import SettingsStore, {SettingLevel} from "./settings/SettingsStore";
import SettingsStore from "./settings/SettingsStore";
import {
hideToast as hideNotificationsToast,
} from "./toasts/DesktopNotificationsToast";
import {SettingLevel} from "./settings/SettingLevel";
/*
* Dispatches:

View file

@ -20,9 +20,10 @@ import PropTypes from 'prop-types';
import dis from "../../../../dispatcher/dispatcher";
import { _t } from '../../../../languageHandler';
import SettingsStore, {SettingLevel} from "../../../../settings/SettingsStore";
import SettingsStore from "../../../../settings/SettingsStore";
import EventIndexPeg from "../../../../indexing/EventIndexPeg";
import {Action} from "../../../../dispatcher/actions";
import {SettingLevel} from "../../../../settings/SettingLevel";
/*
* Allows the user to disable the Event Index.

View file

@ -19,11 +19,12 @@ 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 SettingsStore from "../../../../settings/SettingsStore";
import Modal from '../../../../Modal';
import {formatBytes, formatCountLong} from "../../../../utils/FormattingUtils";
import EventIndexPeg from "../../../../indexing/EventIndexPeg";
import {SettingLevel} from "../../../../settings/SettingLevel";
/*
* Allows the user to introspect the event index state and disable it.

View file

@ -142,7 +142,8 @@ export default class QueryMatcher<T extends Object> {
private processQuery(query: string): string {
if (this._options.fuzzy !== false) {
return removeHiddenChars(query).toLowerCase();
// lower case both the input and the output for consistency
return removeHiddenChars(query.toLowerCase()).toLowerCase();
}
return query.toLowerCase();
}

View file

@ -118,7 +118,7 @@ export default class RoomProvider extends AutocompleteProvider {
}
getName() {
return '💬 ' + _t('Rooms');
return _t('Rooms');
}
renderCompletions(completions: React.ReactNode[]): React.ReactNode {

View file

@ -137,7 +137,7 @@ export default class UserProvider extends AutocompleteProvider {
}
getName(): string {
return '👥 ' + _t('Users');
return _t('Users');
}
_makeUsers() {

View file

@ -210,6 +210,11 @@ const FilePanel = createReactClass({
const TimelinePanel = sdk.getComponent("structures.TimelinePanel");
const Loader = sdk.getComponent("elements.Spinner");
const emptyState = (<div className="mx_RightPanel_empty mx_FilePanel_empty">
<h2>{_t('No files visible in this room')}</h2>
<p>{_t('Attach files from chat or just drag and drop them anywhere in a room.')}</p>
</div>);
if (this.state.timelineSet) {
// console.log("rendering TimelinePanel for timelineSet " + this.state.timelineSet.room.roomId + " " +
// "(" + this.state.timelineSet._timelines.join(", ") + ")" + " with key " + this.props.roomId);
@ -223,7 +228,7 @@ const FilePanel = createReactClass({
onPaginationRequest={this.onPaginationRequest}
tileShape="file_grid"
resizeNotifier={this.props.resizeNotifier}
empty={_t('There are no visible files in this room')}
empty={emptyState}
/>
</div>
);

View file

@ -44,7 +44,6 @@ interface IProps {
}
interface IState {
searchFilter: string;
showBreadcrumbs: boolean;
showTagPanel: boolean;
}
@ -69,7 +68,6 @@ export default class LeftPanel extends React.Component<IProps, IState> {
super(props);
this.state = {
searchFilter: "",
showBreadcrumbs: BreadcrumbsStore.instance.visible,
showTagPanel: SettingsStore.getValue('TagPanel.enableTagPanel'),
};
@ -97,10 +95,6 @@ export default class LeftPanel extends React.Component<IProps, IState> {
this.props.resizeNotifier.off("middlePanelResizedNoisy", this.onResize);
}
private onSearch = (term: string): void => {
this.setState({searchFilter: term});
};
private onExplore = () => {
dis.fire(Action.ViewRoomDirectory);
};
@ -366,7 +360,6 @@ export default class LeftPanel extends React.Component<IProps, IState> {
onKeyDown={this.onKeyDown}
>
<RoomSearch
onQueryUpdate={this.onSearch}
isMinimized={this.props.isMinimized}
onVerticalArrow={this.onKeyDown}
onEnter={this.onEnter}
@ -392,7 +385,6 @@ export default class LeftPanel extends React.Component<IProps, IState> {
onKeyDown={this.onKeyDown}
resizeNotifier={null}
collapsed={false}
searchFilter={this.state.searchFilter}
onFocus={this.onFocus}
onBlur={this.onBlur}
isMinimized={this.props.isMinimized}

View file

@ -54,6 +54,8 @@ import LeftPanel from "./LeftPanel";
import CallContainer from '../views/voip/CallContainer';
import { ViewRoomDeltaPayload } from "../../dispatcher/payloads/ViewRoomDeltaPayload";
import RoomListStore from "../../stores/room-list/RoomListStore";
import NonUrgentToastContainer from "./NonUrgentToastContainer";
import { ToggleRightPanelPayload } from "../../dispatcher/payloads/ToggleRightPanelPayload";
// We need to fetch each pinned message individually (if we don't already have it)
// so each pinned message may trigger a request. Limit the number per room for sanity.
@ -472,8 +474,8 @@ class LoggedInView extends React.Component<IProps, IState> {
case Key.PERIOD:
if (ctrlCmdOnly && (this.props.page_type === "room_view" || this.props.page_type === "group_view")) {
dis.dispatch({
action: 'toggle_right_panel',
dis.dispatch<ToggleRightPanelPayload>({
action: Action.ToggleRightPanel,
type: this.props.page_type === "room_view" ? "room" : "group",
});
handled = true;
@ -687,6 +689,7 @@ class LoggedInView extends React.Component<IProps, IState> {
</DragDropContext>
</div>
<CallContainer />
<NonUrgentToastContainer />
</MatrixClientContext.Provider>
);
}

View file

@ -16,77 +16,24 @@ limitations under the License.
*/
import React from 'react';
import ResizeHandle from '../views/elements/ResizeHandle';
import {Resizer, FixedDistributor} from '../../resizer';
import { Resizable } from 're-resizable';
export default class MainSplit extends React.Component {
constructor(props) {
super(props);
this._setResizeContainerRef = this._setResizeContainerRef.bind(this);
this._onResized = this._onResized.bind(this);
_onResized = (event, direction, refToElement, delta) => {
window.localStorage.setItem("mx_rhs_size", this._loadSidePanelSize().width + delta.width);
}
_onResized(size) {
window.localStorage.setItem("mx_rhs_size", size);
if (this.props.resizeNotifier) {
this.props.resizeNotifier.notifyRightHandleResized();
}
}
_loadSidePanelSize() {
let rhsSize = parseInt(window.localStorage.getItem("mx_rhs_size"), 10);
_createResizer() {
const classNames = {
handle: "mx_ResizeHandle",
vertical: "mx_ResizeHandle_vertical",
reverse: "mx_ResizeHandle_reverse",
};
const resizer = new Resizer(
this.resizeContainer,
FixedDistributor,
{onResized: this._onResized},
);
resizer.setClassNames(classNames);
let rhsSize = window.localStorage.getItem("mx_rhs_size");
if (rhsSize !== null) {
rhsSize = parseInt(rhsSize, 10);
} else {
if (isNaN(rhsSize)) {
rhsSize = 350;
}
resizer.forHandleAt(0).resize(rhsSize);
resizer.attach();
this.resizer = resizer;
}
_setResizeContainerRef(div) {
this.resizeContainer = div;
}
componentDidMount() {
if (this.props.panel) {
this._createResizer();
}
}
componentWillUnmount() {
if (this.resizer) {
this.resizer.detach();
this.resizer = null;
}
}
componentDidUpdate(prevProps) {
const wasPanelSet = this.props.panel && !prevProps.panel;
const wasPanelCleared = !this.props.panel && prevProps.panel;
if (this.resizeContainer && wasPanelSet) {
// The resizer can only be created when **both** expanded and the panel is
// set. Once both are true, the container ref will mount, which is required
// for the resizer to work.
this._createResizer();
} else if (this.resizer && wasPanelCleared) {
this.resizer.detach();
this.resizer = null;
}
return {
height: "100%",
width: rhsSize,
};
}
render() {
@ -97,13 +44,29 @@ export default class MainSplit extends React.Component {
let children;
if (hasResizer) {
children = <React.Fragment>
<ResizeHandle reverse={true} />
children = <Resizable
defaultSize={this._loadSidePanelSize()}
minWidth={264}
maxWidth="50%"
enable={{
top: false,
right: false,
bottom: false,
left: true,
topRight: false,
bottomRight: false,
bottomLeft: false,
topLeft: false,
}}
onResizeStop={this._onResized}
className="mx_RightPanel_ResizeWrapper"
handleClasses={{left: "mx_RightPanel_ResizeHandle"}}
>
{ panelView }
</React.Fragment>;
</Resizable>;
}
return <div className="mx_MainSplit" ref={hasResizer ? this._setResizeContainerRef : undefined}>
return <div className="mx_MainSplit">
{ bodyView }
{ children }
</div>;

View file

@ -51,7 +51,7 @@ import { getHomePageUrl } from '../../utils/pages';
import createRoom from "../../createRoom";
import {_t, _td, getCurrentLanguage} from '../../languageHandler';
import SettingsStore, { SettingLevel } from "../../settings/SettingsStore";
import SettingsStore from "../../settings/SettingsStore";
import ThemeController from "../../settings/controllers/ThemeController";
import { startAnyRegistrationFlow } from "../../Registration.js";
import { messageForSyncError } from '../../utils/ErrorUtils';
@ -75,6 +75,7 @@ import {showToast as showNotificationsToast} from "../../toasts/DesktopNotificat
import { OpenToTabPayload } from "../../dispatcher/payloads/OpenToTabPayload";
import ErrorDialog from "../views/dialogs/ErrorDialog";
import { RoomNotificationStateStore } from "../../stores/notifications/RoomNotificationStateStore";
import { SettingLevel } from "../../settings/SettingLevel";
/** constants for MatrixChat.state.view */
export enum Views {

View file

@ -346,9 +346,9 @@ export default class MessagePanel extends React.Component {
}
}
_isUnmounting() {
_isUnmounting = () => {
return !this._isMounted;
}
};
// TODO: Implement granular (per-room) hide options
_shouldShowEvent(mxEv) {
@ -571,12 +571,10 @@ export default class MessagePanel extends React.Component {
const readReceipts = this._readReceiptsByEvent[eventId];
// Dev note: `this._isUnmounting.bind(this)` is important - it ensures that
// the function is run in the context of this class and not EventTile, therefore
// ensuring the right `this._mounted` variable is used by read receipts (which
// don't update their position if we, the MessagePanel, is unmounting).
// use txnId as key if available so that we don't remount during sending
ret.push(
<li key={eventId}
<li
key={mxEv.getTxnId() || eventId}
ref={this._collectEventNode.bind(this, eventId)}
data-scroll-tokens={scrollToken}
>
@ -590,7 +588,7 @@ export default class MessagePanel extends React.Component {
readReceipts={readReceipts}
readReceiptMap={this._readReceiptMap}
showUrlPreview={this.props.showUrlPreview}
checkUnmounting={this._isUnmounting.bind(this)}
checkUnmounting={this._isUnmounting}
eventSendStatus={mxEv.getAssociatedStatus()}
tileShape={this.props.tileShape}
isTwelveHour={this.props.isTwelveHour}

View file

@ -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.
*/
import * as React from "react";
import { ComponentClass } from "../../@types/common";
import NonUrgentToastStore from "../../stores/NonUrgentToastStore";
import { UPDATE_EVENT } from "../../stores/AsyncStore";
interface IProps {
}
interface IState {
toasts: ComponentClass[],
}
export default class NonUrgentToastContainer extends React.PureComponent<IProps, IState> {
public constructor(props, context) {
super(props, context);
this.state = {
toasts: NonUrgentToastStore.instance.components,
};
NonUrgentToastStore.instance.on(UPDATE_EVENT, this.onUpdateToasts);
}
public componentWillUnmount() {
NonUrgentToastStore.instance.off(UPDATE_EVENT, this.onUpdateToasts);
}
private onUpdateToasts = () => {
this.setState({toasts: NonUrgentToastStore.instance.components});
};
public render() {
const toasts = this.state.toasts.map((t, i) => {
return (
<div className="mx_NonUrgentToastContainer_toast" key={`toast-${i}`}>
{React.createElement(t, {})}
</div>
);
});
return (
<div className="mx_NonUrgentToastContainer" role="alert">
{toasts}
</div>
);
}
}

View file

@ -36,6 +36,11 @@ const NotificationPanel = createReactClass({
const TimelinePanel = sdk.getComponent("structures.TimelinePanel");
const Loader = sdk.getComponent("elements.Spinner");
const emptyState = (<div className="mx_RightPanel_empty mx_NotificationPanel_empty">
<h2>{_t('Youre all caught up')}</h2>
<p>{_t('You have no visible notifications in this room.')}</p>
</div>);
const timelineSet = MatrixClientPeg.get().getNotifTimelineSet();
if (timelineSet) {
return (
@ -46,7 +51,7 @@ const NotificationPanel = createReactClass({
timelineSet={timelineSet}
showUrlPreview={false}
tileShape="notif"
empty={_t('You have no visible notifications')}
empty={emptyState}
/>
</div>
);

View file

@ -26,7 +26,7 @@ import dis from '../../dispatcher/dispatcher';
import RateLimitedFunc from '../../ratelimitedfunc';
import { showGroupInviteDialog, showGroupAddRoomDialog } from '../../GroupAddressPicker';
import GroupStore from '../../stores/GroupStore';
import {RIGHT_PANEL_PHASES, RIGHT_PANEL_PHASES_NO_ARGS} from "../../stores/RightPanelStorePhases";
import {RightPanelPhases, RIGHT_PANEL_PHASES_NO_ARGS} from "../../stores/RightPanelStorePhases";
import RightPanelStore from "../../stores/RightPanelStore";
import MatrixClientContext from "../../contexts/MatrixClientContext";
import {Action} from "../../dispatcher/actions";
@ -75,8 +75,8 @@ export default class RightPanel extends React.Component {
const userForPanel = this._getUserForPanel();
if (this.props.groupId) {
if (!RIGHT_PANEL_PHASES_NO_ARGS.includes(rps.groupPanelPhase)) {
dis.dispatch({action: "set_right_panel_phase", phase: RIGHT_PANEL_PHASES.GroupMemberList});
return RIGHT_PANEL_PHASES.GroupMemberList;
dis.dispatch({action: Action.SetRightPanelPhase, phase: RightPanelPhases.GroupMemberList});
return RightPanelPhases.GroupMemberList;
}
return rps.groupPanelPhase;
} else if (userForPanel) {
@ -98,11 +98,11 @@ export default class RightPanel extends React.Component {
) {
return rps.roomPanelPhase;
}
return RIGHT_PANEL_PHASES.RoomMemberInfo;
return RightPanelPhases.RoomMemberInfo;
} else {
if (!RIGHT_PANEL_PHASES_NO_ARGS.includes(rps.roomPanelPhase)) {
dis.dispatch({action: "set_right_panel_phase", phase: RIGHT_PANEL_PHASES.RoomMemberList});
return RIGHT_PANEL_PHASES.RoomMemberList;
dis.dispatch({action: Action.SetRightPanelPhase, phase: RightPanelPhases.RoomMemberList});
return RightPanelPhases.RoomMemberList;
}
return rps.roomPanelPhase;
}
@ -149,7 +149,7 @@ export default class RightPanel extends React.Component {
onInviteToGroupButtonClick() {
showGroupInviteDialog(this.props.groupId).then(() => {
this.setState({
phase: RIGHT_PANEL_PHASES.GroupMemberList,
phase: RightPanelPhases.GroupMemberList,
});
});
}
@ -165,9 +165,9 @@ export default class RightPanel extends React.Component {
return;
}
// redraw the badge on the membership list
if (this.state.phase === RIGHT_PANEL_PHASES.RoomMemberList && member.roomId === this.props.roomId) {
if (this.state.phase === RightPanelPhases.RoomMemberList && member.roomId === this.props.roomId) {
this._delayedUpdate();
} else if (this.state.phase === RIGHT_PANEL_PHASES.RoomMemberInfo && member.roomId === this.props.roomId &&
} else if (this.state.phase === RightPanelPhases.RoomMemberInfo && member.roomId === this.props.roomId &&
member.userId === this.state.member.userId) {
// refresh the member info (e.g. new power level)
this._delayedUpdate();
@ -175,7 +175,7 @@ export default class RightPanel extends React.Component {
}
onAction(payload) {
if (payload.action === "after_right_panel_phase_change") {
if (payload.action === Action.AfterRightPanelPhaseChange) {
this.setState({
phase: payload.phase,
groupRoomId: payload.groupRoomId,
@ -206,7 +206,7 @@ export default class RightPanel extends React.Component {
// or the member list if we were in the member panel... phew.
dis.dispatch({
action: Action.ViewUser,
member: this.state.phase === RIGHT_PANEL_PHASES.EncryptionPanel ? this.state.member : null,
member: this.state.phase === RightPanelPhases.EncryptionPanel ? this.state.member : null,
});
}
};
@ -225,21 +225,21 @@ export default class RightPanel extends React.Component {
let panel = <div />;
switch (this.state.phase) {
case RIGHT_PANEL_PHASES.RoomMemberList:
case RightPanelPhases.RoomMemberList:
if (this.props.roomId) {
panel = <MemberList roomId={this.props.roomId} key={this.props.roomId} />;
}
break;
case RIGHT_PANEL_PHASES.GroupMemberList:
case RightPanelPhases.GroupMemberList:
if (this.props.groupId) {
panel = <GroupMemberList groupId={this.props.groupId} key={this.props.groupId} />;
}
break;
case RIGHT_PANEL_PHASES.GroupRoomList:
case RightPanelPhases.GroupRoomList:
panel = <GroupRoomList groupId={this.props.groupId} key={this.props.groupId} />;
break;
case RIGHT_PANEL_PHASES.RoomMemberInfo:
case RIGHT_PANEL_PHASES.EncryptionPanel:
case RightPanelPhases.RoomMemberInfo:
case RightPanelPhases.EncryptionPanel:
panel = <UserInfo
user={this.state.member}
roomId={this.props.roomId}
@ -250,26 +250,26 @@ export default class RightPanel extends React.Component {
verificationRequestPromise={this.state.verificationRequestPromise}
/>;
break;
case RIGHT_PANEL_PHASES.Room3pidMemberInfo:
case RightPanelPhases.Room3pidMemberInfo:
panel = <ThirdPartyMemberInfo event={this.state.event} key={this.props.roomId} />;
break;
case RIGHT_PANEL_PHASES.GroupMemberInfo:
case RightPanelPhases.GroupMemberInfo:
panel = <UserInfo
user={this.state.member}
groupId={this.props.groupId}
key={this.state.member.userId}
onClose={this.onCloseUserInfo} />;
break;
case RIGHT_PANEL_PHASES.GroupRoomInfo:
case RightPanelPhases.GroupRoomInfo:
panel = <GroupRoomInfo
groupRoomId={this.state.groupRoomId}
groupId={this.props.groupId}
key={this.state.groupRoomId} />;
break;
case RIGHT_PANEL_PHASES.NotificationPanel:
case RightPanelPhases.NotificationPanel:
panel = <NotificationPanel />;
break;
case RIGHT_PANEL_PHASES.FilePanel:
case RightPanelPhases.FilePanel:
panel = <FilePanel roomId={this.props.roomId} resizeNotifier={this.props.resizeNotifier} />;
break;
}

View file

@ -24,9 +24,10 @@ import { throttle } from 'lodash';
import { Key } from "../../Keyboard";
import AccessibleButton from "../views/elements/AccessibleButton";
import { Action } from "../../dispatcher/actions";
import RoomListStore from "../../stores/room-list/RoomListStore";
import { NameFilterCondition } from "../../stores/room-list/filters/NameFilterCondition";
interface IProps {
onQueryUpdate: (newQuery: string) => void;
isMinimized: boolean;
onVerticalArrow(ev: React.KeyboardEvent): void;
onEnter(ev: React.KeyboardEvent): boolean;
@ -40,6 +41,7 @@ interface IState {
export default class RoomSearch extends React.PureComponent<IProps, IState> {
private dispatcherRef: string;
private inputRef: React.RefObject<HTMLInputElement> = createRef();
private searchFilter: NameFilterCondition = new NameFilterCondition();
constructor(props: IProps) {
super(props);
@ -52,6 +54,21 @@ export default class RoomSearch extends React.PureComponent<IProps, IState> {
this.dispatcherRef = defaultDispatcher.register(this.onAction);
}
public componentDidUpdate(prevProps: Readonly<IProps>, prevState: Readonly<IState>): void {
if (prevState.query !== this.state.query) {
const hadSearch = !!this.searchFilter.search.trim();
const haveSearch = !!this.state.query.trim();
this.searchFilter.search = this.state.query;
if (!hadSearch && haveSearch) {
// started a new filter - add the condition
RoomListStore.instance.addFilter(this.searchFilter);
} else if (hadSearch && !haveSearch) {
// cleared a filter - remove the condition
RoomListStore.instance.removeFilter(this.searchFilter);
} // else the filter hasn't changed enough for us to care here
}
}
public componentWillUnmount() {
defaultDispatcher.unregister(this.dispatcherRef);
}
@ -78,19 +95,8 @@ export default class RoomSearch extends React.PureComponent<IProps, IState> {
private onChange = () => {
if (!this.inputRef.current) return;
this.setState({query: this.inputRef.current.value});
this.onSearchUpdated();
};
// it wants this at the top of the file, but we know better
// tslint:disable-next-line
private onSearchUpdated = throttle(
() => {
// We can't use the state variable because it can lag behind the input.
// The lag is most obvious when deleting/clearing text with the keyboard.
this.props.onQueryUpdate(this.inputRef.current.value);
}, 200, {trailing: true, leading: true},
);
private onFocus = (ev: React.FocusEvent<HTMLInputElement>) => {
this.setState({focused: true});
ev.target.select();

View file

@ -48,7 +48,7 @@ import RightPanel from './RightPanel';
import RoomViewStore from '../../stores/RoomViewStore';
import RoomScrollStateStore from '../../stores/RoomScrollStateStore';
import WidgetEchoStore from '../../stores/WidgetEchoStore';
import SettingsStore, {SettingLevel} from "../../settings/SettingsStore";
import SettingsStore from "../../settings/SettingsStore";
import AccessibleButton from "../views/elements/AccessibleButton";
import RightPanelStore from "../../stores/RightPanelStore";
import {haveTileForEvent} from "../views/rooms/EventTile";
@ -56,6 +56,7 @@ import RoomContext from "../../contexts/RoomContext";
import MatrixClientContext from "../../contexts/MatrixClientContext";
import { shieldStatusForRoom } from '../../utils/ShieldUtils';
import {Action} from "../../dispatcher/actions";
import {SettingLevel} from "../../settings/SettingLevel";
const DEBUG = false;
let debuglog = function() {};

View file

@ -26,7 +26,7 @@ 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 SettingsStore from "../../settings/SettingsStore";
import {getCustomTheme} from "../../theme";
import {getHostingLink} from "../../utils/HostingLink";
import {ButtonEvent} from "../views/elements/AccessibleButton";
@ -37,6 +37,7 @@ import { UPDATE_EVENT } from "../../stores/AsyncStore";
import BaseAvatar from '../views/avatars/BaseAvatar';
import classNames from "classnames";
import AccessibleTooltipButton from "../views/elements/AccessibleTooltipButton";
import { SettingLevel } from "../../settings/SettingLevel";
interface IProps {
isMinimized: boolean;

View file

@ -72,7 +72,7 @@ export default class SoftLogout extends React.Component {
this._initLogin();
MatrixClientPeg.get().flagAllGroupSessionsForBackup().then(remaining => {
MatrixClientPeg.get().countSessionsNeedingBackup().then(remaining => {
this.setState({keyBackupNeeded: remaining > 0});
});
}

View file

@ -16,10 +16,11 @@ limitations under the License.
import SdkConfig from "../../../SdkConfig";
import {getCurrentLanguage} from "../../../languageHandler";
import SettingsStore, {SettingLevel} from "../../../settings/SettingsStore";
import SettingsStore from "../../../settings/SettingsStore";
import PlatformPeg from "../../../PlatformPeg";
import * as sdk from '../../../index';
import React from 'react';
import {SettingLevel} from "../../../settings/SettingLevel";
function onChange(newLang) {
if (getCurrentLanguage() !== newLang) {

View file

@ -19,8 +19,8 @@ import PropTypes from 'prop-types';
import createReactClass from 'create-react-class';
import * as sdk from '../../../index';
import { _t } from '../../../languageHandler';
import {SettingLevel} from "../../../settings/SettingsStore";
import SettingsStore from "../../../settings/SettingsStore";
import {SettingLevel} from "../../../settings/SettingLevel";
export default createReactClass({
propTypes: {

View file

@ -349,7 +349,7 @@ export default class InviteDialog extends React.PureComponent {
// Also pull in all the rooms tagged as DefaultTagID.DM so we don't miss anything. Sometimes the
// room list doesn't tag the room for the DMRoomMap, but does for the room list.
const dmTaggedRooms = RoomListStore.instance.orderedLists[DefaultTagID.DM];
const dmTaggedRooms = RoomListStore.instance.orderedLists[DefaultTagID.DM] || [];
const myUserId = MatrixClientPeg.get().getUserId();
for (const dmRoom of dmTaggedRooms) {
const otherMembers = dmRoom.getJoinedMembers().filter(u => u.userId !== myUserId);

View file

@ -0,0 +1,124 @@
/*
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 BaseDialog from './BaseDialog';
import { _t } from '../../../languageHandler';
import { EchoStore } from "../../../stores/local-echo/EchoStore";
import { formatTime } from "../../../DateUtils";
import SettingsStore from "../../../settings/SettingsStore";
import { RoomEchoContext } from "../../../stores/local-echo/RoomEchoContext";
import RoomAvatar from "../avatars/RoomAvatar";
import { TransactionStatus } from "../../../stores/local-echo/EchoTransaction";
import Spinner from "../elements/Spinner";
import AccessibleButton from "../elements/AccessibleButton";
import { UPDATE_EVENT } from "../../../stores/AsyncStore";
import { MatrixClientPeg } from "../../../MatrixClientPeg";
interface IProps {
onFinished: (bool) => void;
}
export default class ServerOfflineDialog extends React.PureComponent<IProps> {
public componentDidMount() {
EchoStore.instance.on(UPDATE_EVENT, this.onEchosUpdated);
}
public componentWillUnmount() {
EchoStore.instance.off(UPDATE_EVENT, this.onEchosUpdated);
}
private onEchosUpdated = () => {
this.forceUpdate(); // no state to worry about
};
private renderTimeline(): React.ReactElement[] {
return EchoStore.instance.contexts.map((c, i) => {
if (!c.firstFailedTime) return null; // not useful
if (!(c instanceof RoomEchoContext)) throw new Error("Cannot render unknown context: " + c);
const header = (
<div className="mx_ServerOfflineDialog_content_context_timeline_header">
<RoomAvatar width={24} height={24} room={c.room} />
<span>{c.room.name}</span>
</div>
);
const entries = c.transactions
.filter(t => t.status === TransactionStatus.Error || t.didPreviouslyFail)
.map((t, j) => {
let button = <Spinner w={19} h={19} />;
if (t.status === TransactionStatus.Error) {
button = (
<AccessibleButton kind="link" onClick={() => t.run()}>{_t("Resend")}</AccessibleButton>
);
}
return (
<div className="mx_ServerOfflineDialog_content_context_txn" key={`txn-${j}`}>
<span className="mx_ServerOfflineDialog_content_context_txn_desc">
{t.auditName}
</span>
{button}
</div>
);
});
return (
<div className="mx_ServerOfflineDialog_content_context" key={`context-${i}`}>
<div className="mx_ServerOfflineDialog_content_context_timestamp">
{formatTime(c.firstFailedTime, SettingsStore.getValue("showTwelveHourTimestamps"))}
</div>
<div className="mx_ServerOfflineDialog_content_context_timeline">
{header}
{entries}
</div>
</div>
)
});
}
public render() {
let timeline = this.renderTimeline().filter(c => !!c); // remove nulls for next check
if (timeline.length === 0) {
timeline = [<div key={1}>{_t("You're all caught up.")}</div>];
}
const serverName = MatrixClientPeg.getHomeserverName();
return <BaseDialog title={_t("Server isn't responding")}
className='mx_ServerOfflineDialog'
contentId='mx_Dialog_content'
onFinished={this.props.onFinished}
hasCancel={true}
>
<div className="mx_ServerOfflineDialog_content">
<p>{_t(
"Your server isn't responding to some of your requests. " +
"Below are some of the most likely reasons.",
)}</p>
<ul>
<li>{_t("The server (%(serverName)s) took too long to respond.", {serverName})}</li>
<li>{_t("Your firewall or anti-virus is blocking the request.")}</li>
<li>{_t("A browser extension is preventing the request.")}</li>
<li>{_t("The server is offline.")}</li>
<li>{_t("The server has denied your request.")}</li>
<li>{_t("Your area is experiencing difficulties connecting to the internet.")}</li>
<li>{_t("A connection error occurred while trying to contact the server.")}</li>
<li>{_t("The server is not configured to indicate what the problem is (CORS).")}</li>
</ul>
<hr />
<h2>{_t("Recent changes that have not yet been received")}</h2>
{timeline}
</div>
</BaseDialog>;
}
}

View file

@ -17,10 +17,11 @@ limitations under the License.
import React from 'react';
import PropTypes from 'prop-types';
import {_t} from "../../../languageHandler";
import SettingsStore, {SettingLevel} from "../../../settings/SettingsStore";
import SettingsStore from "../../../settings/SettingsStore";
import * as sdk from "../../../index";
import LabelledToggleSwitch from "../elements/LabelledToggleSwitch";
import WidgetUtils from "../../../utils/WidgetUtils";
import {SettingLevel} from "../../../settings/SettingLevel";
export default class WidgetOpenIDPermissionsDialog extends React.Component {
static propTypes = {

View file

@ -35,12 +35,13 @@ import dis from '../../../dispatcher/dispatcher';
import ActiveWidgetStore from '../../../stores/ActiveWidgetStore';
import classNames from 'classnames';
import {IntegrationManagers} from "../../../integrations/IntegrationManagers";
import SettingsStore, {SettingLevel} from "../../../settings/SettingsStore";
import SettingsStore 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";
import {SettingLevel} from "../../../settings/SettingLevel";
const ALLOWED_APP_URL_SCHEMES = ['https:', 'http:'];
const ENABLE_REACT_PERF = false;

View file

@ -15,8 +15,9 @@ limitations under the License.
*/
import React from 'react';
import SettingsStore, {SettingLevel} from "../../../settings/SettingsStore";
import SettingsStore from "../../../settings/SettingsStore";
import Draggable, {ILocationState} from './Draggable';
import { SettingLevel } from "../../../settings/SettingLevel";
interface IProps {
// Current room

View file

@ -20,11 +20,12 @@ import SettingsStore from "../../../settings/SettingsStore";
import { _t } from '../../../languageHandler';
import ToggleSwitch from "./ToggleSwitch";
import StyledCheckbox from "./StyledCheckbox";
import { SettingLevel } from "../../../settings/SettingLevel";
interface IProps {
// The setting must be a boolean
name: string;
level: string;
level: SettingLevel;
roomId?: string; // for per-room settings
label?: string; // untranslated
isExplicit?: boolean;
@ -52,8 +53,8 @@ export default class SettingsFlag extends React.Component<IProps, IState> {
};
}
private onChange = (checked: boolean): void => {
this.save(checked);
private onChange = async (checked: boolean) => {
await this.save(checked);
this.setState({ value: checked });
if (this.props.onChange) this.props.onChange(checked);
};
@ -62,8 +63,8 @@ export default class SettingsFlag extends React.Component<IProps, IState> {
this.onChange(e.target.checked);
};
private save = (val?: boolean): void => {
return SettingsStore.setValue(
private save = async (val?: boolean) => {
await SettingsStore.setValue(
this.props.name,
this.props.roomId,
this.props.level,

View file

@ -47,11 +47,10 @@ export default class TextWithTooltip extends React.Component {
return (
<span onMouseOver={this.onMouseOver} onMouseLeave={this.onMouseLeave} className={this.props.class}>
{this.props.children}
<Tooltip
{this.state.hover && <Tooltip
label={this.props.tooltip}
visible={this.state.hover}
tooltipClassName={this.props.tooltipClass}
className={"mx_TextWithTooltip_tooltip"} />
className={"mx_TextWithTooltip_tooltip"} /> }
</span>
);
}

View file

@ -24,8 +24,9 @@ import GroupStore from '../../../stores/GroupStore';
import PropTypes from 'prop-types';
import { showGroupInviteDialog } from '../../../GroupAddressPicker';
import AccessibleButton from '../elements/AccessibleButton';
import {RIGHT_PANEL_PHASES} from "../../../stores/RightPanelStorePhases";
import {RightPanelPhases} from "../../../stores/RightPanelStorePhases";
import AutoHideScrollbar from "../../structures/AutoHideScrollbar";
import {Action} from "../../../dispatcher/actions";
const INITIAL_LOAD_NUM_MEMBERS = 30;
@ -164,9 +165,9 @@ export default createReactClass({
onInviteToGroupButtonClick() {
showGroupInviteDialog(this.props.groupId).then(() => {
dis.dispatch({
action: 'set_right_panel_phase',
phase: RIGHT_PANEL_PHASES.GroupMemberList,
groupId: this.props.groupId,
action: Action.SetRightPanelPhase,
phase: RightPanelPhases.GroupMemberList,
refireParams: { groupId: this.props.groupId },
});
});
},

View file

@ -22,7 +22,8 @@ import { _t } from '../../../languageHandler';
import {getNameForEventRoom, userLabelForEventRoom}
from '../../../utils/KeyVerificationStateObserver';
import dis from "../../../dispatcher/dispatcher";
import {RIGHT_PANEL_PHASES} from "../../../stores/RightPanelStorePhases";
import {RightPanelPhases} from "../../../stores/RightPanelStorePhases";
import {Action} from "../../../dispatcher/actions";
export default class MKeyVerificationRequest extends React.Component {
constructor(props) {
@ -48,8 +49,8 @@ export default class MKeyVerificationRequest extends React.Component {
const {verificationRequest} = this.props.mxEvent;
const member = MatrixClientPeg.get().getUser(verificationRequest.otherUserId);
dis.dispatch({
action: "set_right_panel_phase",
phase: RIGHT_PANEL_PHASES.EncryptionPanel,
action: Action.SetRightPanelPhase,
phase: RightPanelPhases.EncryptionPanel,
refireParams: {verificationRequest, member},
});
};

View file

@ -15,10 +15,10 @@ limitations under the License.
*/
import React from "react";
import PropTypes from "prop-types";
import * as sdk from "../../../index";
import {_t} from "../../../languageHandler";
import {RoomMember} from "matrix-js-sdk/src/models/room-member";
export const PendingActionSpinner = ({text}) => {
const Spinner = sdk.getComponent('elements.Spinner');
@ -28,7 +28,17 @@ export const PendingActionSpinner = ({text}) => {
</div>;
};
const EncryptionInfo = ({
interface IProps {
waitingForOtherParty: boolean;
waitingForNetwork: boolean;
member: RoomMember;
onStartVerification: () => Promise<void>;
isRoomEncrypted: boolean;
inDialog: boolean;
isSelfVerification: boolean;
}
const EncryptionInfo: React.FC<IProps> = ({
waitingForOtherParty,
waitingForNetwork,
member,
@ -36,10 +46,10 @@ const EncryptionInfo = ({
isRoomEncrypted,
inDialog,
isSelfVerification,
}) => {
let content;
}: IProps) => {
let content: JSX.Element;
if (waitingForOtherParty || waitingForNetwork) {
let text;
let text: string;
if (waitingForOtherParty) {
if (isSelfVerification) {
text = _t("Waiting for you to accept on your other session…");
@ -61,7 +71,7 @@ const EncryptionInfo = ({
);
}
let description;
let description: JSX.Element;
if (isRoomEncrypted) {
description = (
<div>
@ -97,10 +107,5 @@ const EncryptionInfo = ({
</div>
</React.Fragment>;
};
EncryptionInfo.propTypes = {
member: PropTypes.object.isRequired,
onStartVerification: PropTypes.func.isRequired,
request: PropTypes.object,
};
export default EncryptionInfo;

View file

@ -15,7 +15,6 @@ limitations under the License.
*/
import React, {useCallback, useEffect, useState} from "react";
import PropTypes from "prop-types";
import EncryptionInfo from "./EncryptionInfo";
import VerificationPanel from "./VerificationPanel";
@ -26,11 +25,23 @@ import Modal from "../../../Modal";
import {PHASE_REQUESTED, PHASE_UNSENT} from "matrix-js-sdk/src/crypto/verification/request/VerificationRequest";
import * as sdk from "../../../index";
import {_t} from "../../../languageHandler";
import {VerificationRequest} from "matrix-js-sdk/src/crypto/verification/request/VerificationRequest";
import {RoomMember} from "matrix-js-sdk/src/models/room-member";
// cancellation codes which constitute a key mismatch
const MISMATCHES = ["m.key_mismatch", "m.user_error", "m.mismatched_sas"];
const EncryptionPanel = (props) => {
interface IProps {
member: RoomMember;
onClose: () => void;
verificationRequest: VerificationRequest;
verificationRequestPromise: Promise<VerificationRequest>;
layout: string;
inDialog: boolean;
isRoomEncrypted: boolean;
}
const EncryptionPanel: React.FC<IProps> = (props: IProps) => {
const {verificationRequest, verificationRequestPromise, member, onClose, layout, isRoomEncrypted} = props;
const [request, setRequest] = useState(verificationRequest);
// state to show a spinner immediately after clicking "start verification",
@ -48,10 +59,10 @@ const EncryptionPanel = (props) => {
useEffect(() => {
async function awaitPromise() {
setRequesting(true);
const request = await verificationRequestPromise;
const requestFromPromise = await verificationRequestPromise;
setRequesting(false);
setRequest(request);
setPhase(request.phase);
setRequest(requestFromPromise);
setPhase(requestFromPromise.phase);
}
if (verificationRequestPromise) {
awaitPromise();
@ -90,7 +101,7 @@ const EncryptionPanel = (props) => {
}
}, [request]);
let cancelButton;
let cancelButton: JSX.Element;
if (layout !== "dialog" && request && request.pending) {
const AccessibleButton = sdk.getComponent("elements.AccessibleButton");
cancelButton = (<AccessibleButton
@ -104,9 +115,9 @@ const EncryptionPanel = (props) => {
setRequesting(true);
const cli = MatrixClientPeg.get();
const roomId = await ensureDMExists(cli, member.userId);
const verificationRequest = await cli.requestVerificationDM(member.userId, roomId);
setRequest(verificationRequest);
setPhase(verificationRequest.phase);
const verificationRequest_ = await cli.requestVerificationDM(member.userId, roomId);
setRequest(verificationRequest_);
setPhase(verificationRequest_.phase);
}, [member.userId]);
const requested =
@ -144,12 +155,5 @@ const EncryptionPanel = (props) => {
</React.Fragment>);
}
};
EncryptionPanel.propTypes = {
member: PropTypes.object.isRequired,
onClose: PropTypes.func.isRequired,
verificationRequest: PropTypes.object,
layout: PropTypes.string,
inDialog: PropTypes.bool,
};
export default EncryptionPanel;

View file

@ -21,65 +21,68 @@ limitations under the License.
import React from 'react';
import { _t } from '../../../languageHandler';
import HeaderButton from './HeaderButton';
import HeaderButtons, {HEADER_KIND_GROUP} from './HeaderButtons';
import {RIGHT_PANEL_PHASES} from "../../../stores/RightPanelStorePhases";
import HeaderButtons, {HeaderKind} from './HeaderButtons';
import {RightPanelPhases} from "../../../stores/RightPanelStorePhases";
import {Action} from "../../../dispatcher/actions";
import {ActionPayload} from "../../../dispatcher/payloads";
import {ViewUserPayload} from "../../../dispatcher/payloads/ViewUserPayload";
const GROUP_PHASES = [
RIGHT_PANEL_PHASES.GroupMemberInfo,
RIGHT_PANEL_PHASES.GroupMemberList,
RightPanelPhases.GroupMemberInfo,
RightPanelPhases.GroupMemberList,
];
const ROOM_PHASES = [
RIGHT_PANEL_PHASES.GroupRoomList,
RIGHT_PANEL_PHASES.GroupRoomInfo,
RightPanelPhases.GroupRoomList,
RightPanelPhases.GroupRoomInfo,
];
interface IProps {}
export default class GroupHeaderButtons extends HeaderButtons {
constructor(props) {
super(props, HEADER_KIND_GROUP);
this._onMembersClicked = this._onMembersClicked.bind(this);
this._onRoomsClicked = this._onRoomsClicked.bind(this);
constructor(props: IProps) {
super(props, HeaderKind.Group);
this.onMembersClicked = this.onMembersClicked.bind(this);
this.onRoomsClicked = this.onRoomsClicked.bind(this);
}
onAction(payload: ActionPayload) {
protected onAction(payload: ActionPayload) {
super.onAction(payload);
if (payload.action === Action.ViewUser) {
if (payload.member) {
this.setPhase(RIGHT_PANEL_PHASES.RoomMemberInfo, {member: payload.member});
if ((payload as ViewUserPayload).member) {
this.setPhase(RightPanelPhases.RoomMemberInfo, {member: payload.member});
} else {
this.setPhase(RIGHT_PANEL_PHASES.GroupMemberList);
this.setPhase(RightPanelPhases.GroupMemberList);
}
} else if (payload.action === "view_group") {
this.setPhase(RIGHT_PANEL_PHASES.GroupMemberList);
this.setPhase(RightPanelPhases.GroupMemberList);
} else if (payload.action === "view_group_room") {
this.setPhase(
RIGHT_PANEL_PHASES.GroupRoomInfo,
RightPanelPhases.GroupRoomInfo,
{groupRoomId: payload.groupRoomId, groupId: payload.groupId},
);
} else if (payload.action === "view_group_room_list") {
this.setPhase(RIGHT_PANEL_PHASES.GroupRoomList);
this.setPhase(RightPanelPhases.GroupRoomList);
} else if (payload.action === "view_group_member_list") {
this.setPhase(RIGHT_PANEL_PHASES.GroupMemberList);
this.setPhase(RightPanelPhases.GroupMemberList);
} else if (payload.action === "view_group_user") {
this.setPhase(RIGHT_PANEL_PHASES.GroupMemberInfo, {member: payload.member});
this.setPhase(RightPanelPhases.GroupMemberInfo, {member: payload.member});
}
}
_onMembersClicked() {
if (this.state.phase === RIGHT_PANEL_PHASES.GroupMemberInfo) {
private onMembersClicked() {
if (this.state.phase === RightPanelPhases.GroupMemberInfo) {
// send the active phase to trigger a toggle
this.setPhase(RIGHT_PANEL_PHASES.GroupMemberInfo);
this.setPhase(RightPanelPhases.GroupMemberInfo);
} else {
// This toggles for us, if needed
this.setPhase(RIGHT_PANEL_PHASES.GroupMemberList);
this.setPhase(RightPanelPhases.GroupMemberList);
}
}
_onRoomsClicked() {
private onRoomsClicked() {
// This toggles for us, if needed
this.setPhase(RIGHT_PANEL_PHASES.GroupRoomList);
this.setPhase(RightPanelPhases.GroupRoomList);
}
renderButtons() {
@ -87,13 +90,13 @@ export default class GroupHeaderButtons extends HeaderButtons {
<HeaderButton key="groupMembersButton" name="groupMembersButton"
title={_t('Members')}
isHighlighted={this.isPhase(GROUP_PHASES)}
onClick={this._onMembersClicked}
onClick={this.onMembersClicked}
analytics={['Right Panel', 'Group Member List Button', 'click']}
/>,
<HeaderButton key="roomsButton" name="roomsButton"
title={_t('Rooms')}
isHighlighted={this.isPhase(ROOM_PHASES)}
onClick={this._onRoomsClicked}
onClick={this.onRoomsClicked}
analytics={['Right Panel', 'Group Room List Button', 'click']}
/>,
];

View file

@ -19,25 +19,40 @@ limitations under the License.
*/
import React from 'react';
import PropTypes from 'prop-types';
import classNames from 'classnames';
import Analytics from '../../../Analytics';
import AccessibleTooltipButton from "../elements/AccessibleTooltipButton";
interface IProps {
// Whether this button is highlighted
isHighlighted: boolean;
// click handler
onClick: () => void;
// The badge to display above the icon
badge?: React.ReactNode;
// The parameters to track the click event
analytics: string[];
// Button name
name: string;
// Button title
title: string;
}
// TODO: replace this, the composer buttons and the right panel buttons with a unified
// representation
export default class HeaderButton extends React.Component {
constructor() {
super();
export default class HeaderButton extends React.Component<IProps> {
constructor(props: IProps) {
super(props);
this.onClick = this.onClick.bind(this);
}
onClick(ev) {
private onClick() {
Analytics.trackEvent(...this.props.analytics);
this.props.onClick();
}
render() {
public render() {
const classes = classNames({
mx_RightPanel_headerButton: true,
mx_RightPanel_headerButton_highlight: this.props.isHighlighted,
@ -53,19 +68,3 @@ export default class HeaderButton extends React.Component {
/>;
}
}
HeaderButton.propTypes = {
// Whether this button is highlighted
isHighlighted: PropTypes.bool.isRequired,
// click handler
onClick: PropTypes.func.isRequired,
// The badge to display above the icon
badge: PropTypes.node,
// The parameters to track the click event
analytics: PropTypes.arrayOf(PropTypes.string).isRequired,
// Button name
name: PropTypes.string.isRequired,
// Button title
title: PropTypes.string.isRequired,
};

View file

@ -1,88 +0,0 @@
/*
Copyright 2015, 2016 OpenMarket Ltd
Copyright 2017 Vector Creations Ltd
Copyright 2017 New Vector Ltd
Copyright 2018 New Vector Ltd
Copyright 2019 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 dis from '../../../dispatcher/dispatcher';
import RightPanelStore from "../../../stores/RightPanelStore";
export const HEADER_KIND_ROOM = "room";
export const HEADER_KIND_GROUP = "group";
const HEADER_KINDS = [HEADER_KIND_GROUP, HEADER_KIND_ROOM];
export default class HeaderButtons extends React.Component {
constructor(props, kind) {
super(props);
if (!HEADER_KINDS.includes(kind)) throw new Error(`Invalid header kind: ${kind}`);
const rps = RightPanelStore.getSharedInstance();
this.state = {
headerKind: kind,
phase: kind === HEADER_KIND_ROOM ? rps.visibleRoomPanelPhase : rps.visibleGroupPanelPhase,
};
}
componentDidMount() {
this._storeToken = RightPanelStore.getSharedInstance().addListener(this.onRightPanelUpdate.bind(this));
this._dispatcherRef = dis.register(this.onAction.bind(this)); // used by subclasses
}
componentWillUnmount() {
if (this._storeToken) this._storeToken.remove();
if (this._dispatcherRef) dis.unregister(this._dispatcherRef);
}
onAction(payload) {
// Ignore - intended to be overridden by subclasses
}
setPhase(phase, extras) {
dis.dispatch({
action: 'set_right_panel_phase',
phase: phase,
refireParams: extras,
});
}
isPhase(phases: string | string[]) {
if (Array.isArray(phases)) {
return phases.includes(this.state.phase);
} else {
return phases === this.state.phase;
}
}
onRightPanelUpdate() {
const rps = RightPanelStore.getSharedInstance();
if (this.state.headerKind === HEADER_KIND_ROOM) {
this.setState({phase: rps.visibleRoomPanelPhase});
} else if (this.state.headerKind === HEADER_KIND_GROUP) {
this.setState({phase: rps.visibleGroupPanelPhase});
}
}
render() {
// inline style as this will be swapped around in future commits
return <div className="mx_HeaderButtons" role="tablist">
{this.renderButtons()}
</div>;
}
}

View file

@ -0,0 +1,110 @@
/*
Copyright 2015, 2016 OpenMarket Ltd
Copyright 2017 Vector Creations Ltd
Copyright 2017 New Vector Ltd
Copyright 2018 New Vector Ltd
Copyright 2019 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 dis from '../../../dispatcher/dispatcher';
import RightPanelStore from "../../../stores/RightPanelStore";
import {RightPanelPhases} from "../../../stores/RightPanelStorePhases";
import {Action} from '../../../dispatcher/actions';
import {SetRightPanelPhasePayload, SetRightPanelPhaseRefireParams} from '../../../dispatcher/payloads/SetRightPanelPhasePayload';
import {EventSubscription} from "fbemitter";
export enum HeaderKind {
Room = "room",
Group = "group",
}
interface IState {
headerKind: HeaderKind;
phase: RightPanelPhases;
}
interface IProps {}
export default class HeaderButtons extends React.Component<IProps, IState> {
private storeToken: EventSubscription;
private dispatcherRef: string;
constructor(props: IProps, kind: HeaderKind) {
super(props);
const rps = RightPanelStore.getSharedInstance();
this.state = {
headerKind: kind,
phase: kind === HeaderKind.Room ? rps.visibleRoomPanelPhase : rps.visibleGroupPanelPhase,
};
}
public componentDidMount() {
this.storeToken = RightPanelStore.getSharedInstance().addListener(this.onRightPanelUpdate.bind(this));
this.dispatcherRef = dis.register(this.onAction.bind(this)); // used by subclasses
}
public componentWillUnmount() {
if (this.storeToken) this.storeToken.remove();
if (this.dispatcherRef) dis.unregister(this.dispatcherRef);
}
protected onAction(payload) {
// Ignore - intended to be overridden by subclasses
}
public setPhase(phase: RightPanelPhases, extras?: Partial<SetRightPanelPhaseRefireParams>) {
dis.dispatch<SetRightPanelPhasePayload>({
action: Action.SetRightPanelPhase,
phase: phase,
refireParams: extras,
});
}
public isPhase(phases: string | string[]) {
if (Array.isArray(phases)) {
return phases.includes(this.state.phase);
} else {
return phases === this.state.phase;
}
}
private onRightPanelUpdate() {
const rps = RightPanelStore.getSharedInstance();
if (this.state.headerKind === HeaderKind.Room) {
this.setState({phase: rps.visibleRoomPanelPhase});
} else if (this.state.headerKind === HeaderKind.Group) {
this.setState({phase: rps.visibleGroupPanelPhase});
}
}
// XXX: Make renderButtons a prop
public renderButtons(): JSX.Element[] {
// Ignore - intended to be overridden by subclasses
// Return empty fragment to satisfy the type
return [
<React.Fragment>
</React.Fragment>
];
}
public render() {
// inline style as this will be swapped around in future commits
return <div className="mx_HeaderButtons" role="tablist">
{this.renderButtons()}
</div>;
}
}

View file

@ -21,82 +21,82 @@ limitations under the License.
import React from 'react';
import { _t } from '../../../languageHandler';
import HeaderButton from './HeaderButton';
import HeaderButtons, {HEADER_KIND_ROOM} from './HeaderButtons';
import {RIGHT_PANEL_PHASES} from "../../../stores/RightPanelStorePhases";
import HeaderButtons, {HeaderKind} from './HeaderButtons';
import {RightPanelPhases} from "../../../stores/RightPanelStorePhases";
import {Action} from "../../../dispatcher/actions";
import {ActionPayload} from "../../../dispatcher/payloads";
const MEMBER_PHASES = [
RIGHT_PANEL_PHASES.RoomMemberList,
RIGHT_PANEL_PHASES.RoomMemberInfo,
RIGHT_PANEL_PHASES.EncryptionPanel,
RIGHT_PANEL_PHASES.Room3pidMemberInfo,
RightPanelPhases.RoomMemberList,
RightPanelPhases.RoomMemberInfo,
RightPanelPhases.EncryptionPanel,
RightPanelPhases.Room3pidMemberInfo,
];
export default class RoomHeaderButtons extends HeaderButtons {
constructor(props) {
super(props, HEADER_KIND_ROOM);
this._onMembersClicked = this._onMembersClicked.bind(this);
this._onFilesClicked = this._onFilesClicked.bind(this);
this._onNotificationsClicked = this._onNotificationsClicked.bind(this);
super(props, HeaderKind.Room);
this.onMembersClicked = this.onMembersClicked.bind(this);
this.onFilesClicked = this.onFilesClicked.bind(this);
this.onNotificationsClicked = this.onNotificationsClicked.bind(this);
}
onAction(payload: ActionPayload) {
protected onAction(payload: ActionPayload) {
super.onAction(payload);
if (payload.action === Action.ViewUser) {
if (payload.member) {
this.setPhase(RIGHT_PANEL_PHASES.RoomMemberInfo, {member: payload.member});
this.setPhase(RightPanelPhases.RoomMemberInfo, {member: payload.member});
} else {
this.setPhase(RIGHT_PANEL_PHASES.RoomMemberList);
this.setPhase(RightPanelPhases.RoomMemberList);
}
} else if (payload.action === "view_3pid_invite") {
if (payload.event) {
this.setPhase(RIGHT_PANEL_PHASES.Room3pidMemberInfo, {event: payload.event});
this.setPhase(RightPanelPhases.Room3pidMemberInfo, {event: payload.event});
} else {
this.setPhase(RIGHT_PANEL_PHASES.RoomMemberList);
this.setPhase(RightPanelPhases.RoomMemberList);
}
}
}
_onMembersClicked() {
if (this.state.phase === RIGHT_PANEL_PHASES.RoomMemberInfo) {
private onMembersClicked() {
if (this.state.phase === RightPanelPhases.RoomMemberInfo) {
// send the active phase to trigger a toggle
// XXX: we should pass refireParams here but then it won't collapse as we desire it to
this.setPhase(RIGHT_PANEL_PHASES.RoomMemberInfo);
this.setPhase(RightPanelPhases.RoomMemberInfo);
} else {
// This toggles for us, if needed
this.setPhase(RIGHT_PANEL_PHASES.RoomMemberList);
this.setPhase(RightPanelPhases.RoomMemberList);
}
}
_onFilesClicked() {
private onFilesClicked() {
// This toggles for us, if needed
this.setPhase(RIGHT_PANEL_PHASES.FilePanel);
this.setPhase(RightPanelPhases.FilePanel);
}
_onNotificationsClicked() {
private onNotificationsClicked() {
// This toggles for us, if needed
this.setPhase(RIGHT_PANEL_PHASES.NotificationPanel);
this.setPhase(RightPanelPhases.NotificationPanel);
}
renderButtons() {
public renderButtons() {
return [
<HeaderButton key="membersButton" name="membersButton"
title={_t('Members')}
isHighlighted={this.isPhase(MEMBER_PHASES)}
onClick={this._onMembersClicked}
onClick={this.onMembersClicked}
analytics={['Right Panel', 'Member List Button', 'click']}
/>,
<HeaderButton key="filesButton" name="filesButton"
title={_t('Files')}
isHighlighted={this.isPhase(RIGHT_PANEL_PHASES.FilePanel)}
onClick={this._onFilesClicked}
isHighlighted={this.isPhase(RightPanelPhases.FilePanel)}
onClick={this.onFilesClicked}
analytics={['Right Panel', 'File List Button', 'click']}
/>,
<HeaderButton key="notifsButton" name="notifsButton"
title={_t('Notifications')}
isHighlighted={this.isPhase(RIGHT_PANEL_PHASES.NotificationPanel)}
onClick={this._onNotificationsClicked}
isHighlighted={this.isPhase(RightPanelPhases.NotificationPanel)}
onClick={this.onNotificationsClicked}
analytics={['Right Panel', 'Notification List Button', 'click']}
/>,
];

View file

@ -40,7 +40,7 @@ import E2EIcon from "../rooms/E2EIcon";
import {useEventEmitter} from "../../../hooks/useEventEmitter";
import {textualPowerLevel} from '../../../Roles';
import MatrixClientContext from "../../../contexts/MatrixClientContext";
import {RIGHT_PANEL_PHASES} from "../../../stores/RightPanelStorePhases";
import {RightPanelPhases} from "../../../stores/RightPanelStorePhases";
import EncryptionPanel from "./EncryptionPanel";
import { useAsyncMemo } from '../../../hooks/useAsyncMemo';
import { verifyUser, legacyVerifyUser, verifyDevice } from '../../../verification';
@ -550,7 +550,9 @@ const RedactMessagesButton = ({member}) => {
let eventsToRedact = [];
while (timeline) {
eventsToRedact = timeline.getEvents().reduce((events, event) => {
if (event.getSender() === userId && !event.isRedacted() && !event.isRedaction()) {
if (event.getSender() === userId && !event.isRedacted() && !event.isRedaction() &&
event.getType() !== "m.room.create"
) {
return events.concat(event);
} else {
return events;
@ -1480,7 +1482,7 @@ const UserInfoHeader = ({onClose, member, e2eStatus}) => {
</React.Fragment>;
};
const UserInfo = ({user, groupId, roomId, onClose, phase=RIGHT_PANEL_PHASES.RoomMemberInfo, ...props}) => {
const UserInfo = ({user, groupId, roomId, onClose, phase=RightPanelPhases.RoomMemberInfo, ...props}) => {
const cli = useContext(MatrixClientContext);
// Load room if we are given a room id and memoize it
@ -1500,8 +1502,8 @@ const UserInfo = ({user, groupId, roomId, onClose, phase=RIGHT_PANEL_PHASES.Room
let content;
switch (phase) {
case RIGHT_PANEL_PHASES.RoomMemberInfo:
case RIGHT_PANEL_PHASES.GroupMemberInfo:
case RightPanelPhases.RoomMemberInfo:
case RightPanelPhases.GroupMemberInfo:
content = (
<BasicUserInfo
room={room}
@ -1511,7 +1513,7 @@ const UserInfo = ({user, groupId, roomId, onClose, phase=RIGHT_PANEL_PHASES.Room
isRoomEncrypted={isRoomEncrypted} />
);
break;
case RIGHT_PANEL_PHASES.EncryptionPanel:
case RightPanelPhases.EncryptionPanel:
classes.push("mx_UserInfo_smallAvatar");
content = (
<EncryptionPanel {...props} member={member} onClose={onClose} isRoomEncrypted={isRoomEncrypted} />

View file

@ -15,12 +15,15 @@ limitations under the License.
*/
import React from "react";
import PropTypes from "prop-types";
import {MatrixClientPeg} from "../../../MatrixClientPeg";
import * as sdk from '../../../index';
import {verificationMethods} from 'matrix-js-sdk/src/crypto';
import {SCAN_QR_CODE_METHOD} from "matrix-js-sdk/src/crypto/verification/QRCode";
import {VerificationRequest} from "matrix-js-sdk/src/crypto/verification/request/VerificationRequest";
import {RoomMember} from "matrix-js-sdk/src/models/room-member";
import {ReciprocateQRCode} from "matrix-js-sdk/src/crypto/verification/QRCode";
import {SAS} from "matrix-js-sdk/src/crypto/verification/SAS";
import VerificationQRCode from "../elements/crypto/VerificationQRCode";
import {_t} from "../../../languageHandler";
@ -36,37 +39,51 @@ import {
} from "matrix-js-sdk/src/crypto/verification/request/VerificationRequest";
import Spinner from "../elements/Spinner";
export default class VerificationPanel extends React.PureComponent {
static propTypes = {
layout: PropTypes.string,
request: PropTypes.object.isRequired,
member: PropTypes.object.isRequired,
phase: PropTypes.oneOf([
PHASE_UNSENT,
PHASE_REQUESTED,
PHASE_READY,
PHASE_STARTED,
PHASE_CANCELLED,
PHASE_DONE,
]).isRequired,
onClose: PropTypes.func.isRequired,
isRoomEncrypted: PropTypes.bool,
};
// XXX: Should be defined in matrix-js-sdk
enum VerificationPhase {
PHASE_UNSENT,
PHASE_REQUESTED,
PHASE_READY,
PHASE_DONE,
PHASE_STARTED,
PHASE_CANCELLED,
}
constructor(props) {
interface IProps {
layout: string;
request: VerificationRequest;
member: RoomMember;
phase: VerificationPhase;
onClose: () => void;
isRoomEncrypted: boolean;
inDialog: boolean;
key: number;
}
interface IState {
sasEvent?: SAS;
emojiButtonClicked?: boolean;
reciprocateButtonClicked?: boolean;
reciprocateQREvent?: ReciprocateQRCode;
}
export default class VerificationPanel extends React.PureComponent<IProps, IState> {
private hasVerifier: boolean;
constructor(props: IProps) {
super(props);
this.state = {};
this._hasVerifier = false;
this.hasVerifier = false;
}
renderQRPhase() {
private renderQRPhase() {
const {member, request} = this.props;
const showSAS = request.otherPartySupportsMethod(verificationMethods.SAS);
const showQR = request.otherPartySupportsMethod(SCAN_QR_CODE_METHOD);
const showSAS: boolean = request.otherPartySupportsMethod(verificationMethods.SAS);
const showQR: boolean = request.otherPartySupportsMethod(SCAN_QR_CODE_METHOD);
const AccessibleButton = sdk.getComponent('elements.AccessibleButton');
const brand = SdkConfig.get().brand;
const noCommonMethodError = !showSAS && !showQR ?
const noCommonMethodError: JSX.Element = !showSAS && !showQR ?
<p>{_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 " +
@ -77,41 +94,41 @@ export default class VerificationPanel extends React.PureComponent {
if (this.props.layout === 'dialog') {
// HACK: This is a terrible idea.
let qrBlock;
let sasBlock;
let qrBlockDialog: JSX.Element;
let sasBlockDialog: JSX.Element;
if (showQR) {
qrBlock =
qrBlockDialog =
<div className='mx_VerificationPanel_QRPhase_startOption'>
<p>{_t("Scan this unique code")}</p>
<VerificationQRCode qrCodeData={request.qrCodeData} />
</div>;
}
if (showSAS) {
sasBlock =
sasBlockDialog =
<div className='mx_VerificationPanel_QRPhase_startOption'>
<p>{_t("Compare unique emoji")}</p>
<span className='mx_VerificationPanel_QRPhase_helpText'>{_t("Compare a unique set of emoji if you don't have a camera on either device")}</span>
<AccessibleButton disabled={this.state.emojiButtonClicked} onClick={this._startSAS} kind='primary'>
<AccessibleButton disabled={this.state.emojiButtonClicked} onClick={this.startSAS} kind='primary'>
{_t("Start")}
</AccessibleButton>
</div>;
}
const or = qrBlock && sasBlock ?
const or = qrBlockDialog && sasBlockDialog ?
<div className='mx_VerificationPanel_QRPhase_betweenText'>{_t("or")}</div> : null;
return (
<div>
{_t("Verify this session by completing one of the following:")}
<div className='mx_VerificationPanel_QRPhase_startOptions'>
{qrBlock}
{qrBlockDialog}
{or}
{sasBlock}
{sasBlockDialog}
{noCommonMethodError}
</div>
</div>
);
}
let qrBlock;
let qrBlock: JSX.Element;
if (showQR) {
qrBlock = <div className="mx_UserInfo_container">
<h3>{_t("Verify by scanning")}</h3>
@ -125,7 +142,7 @@ export default class VerificationPanel extends React.PureComponent {
</div>;
}
let sasBlock;
let sasBlock: JSX.Element;
if (showSAS) {
const disabled = this.state.emojiButtonClicked;
const sasLabel = showQR ?
@ -140,7 +157,7 @@ export default class VerificationPanel extends React.PureComponent {
disabled={disabled}
kind="primary"
className="mx_UserInfo_wideButton mx_VerificationPanel_verifyByEmojiButton"
onClick={this._startSAS}
onClick={this.startSAS}
>
{_t("Verify by emoji")}
</AccessibleButton>
@ -159,22 +176,22 @@ export default class VerificationPanel extends React.PureComponent {
</React.Fragment>;
}
_onReciprocateYesClick = () => {
private onReciprocateYesClick = () => {
this.setState({reciprocateButtonClicked: true});
this.state.reciprocateQREvent.confirm();
};
_onReciprocateNoClick = () => {
private onReciprocateNoClick = () => {
this.setState({reciprocateButtonClicked: true});
this.state.reciprocateQREvent.cancel();
};
_getDevice() {
private getDevice() {
const deviceId = this.props.request && this.props.request.channel.deviceId;
return MatrixClientPeg.get().getStoredDevice(MatrixClientPeg.get().getUserId(), deviceId);
}
renderQRReciprocatePhase() {
private renderQRReciprocatePhase() {
const {member, request} = this.props;
let Button;
// a bit of a hack, but the FormButton should only be used in the right panel
@ -189,7 +206,7 @@ export default class VerificationPanel extends React.PureComponent {
_t("Almost there! Is %(displayName)s showing the same shield?", {
displayName: member.displayName || member.name || member.userId,
});
let body;
let body: JSX.Element;
if (this.state.reciprocateQREvent) {
// riot web doesn't support scanning yet, so assume here we're the client being scanned.
//
@ -202,11 +219,11 @@ export default class VerificationPanel extends React.PureComponent {
<Button
label={_t("No")} kind="danger"
disabled={this.state.reciprocateButtonClicked}
onClick={this._onReciprocateNoClick}>{_t("No")}</Button>
onClick={this.onReciprocateNoClick}>{_t("No")}</Button>
<Button
label={_t("Yes")} kind="primary"
disabled={this.state.reciprocateButtonClicked}
onClick={this._onReciprocateYesClick}>{_t("Yes")}</Button>
onClick={this.onReciprocateYesClick}>{_t("Yes")}</Button>
</div>
</React.Fragment>;
} else {
@ -218,10 +235,10 @@ export default class VerificationPanel extends React.PureComponent {
</div>;
}
renderVerifiedPhase() {
private renderVerifiedPhase() {
const {member, request} = this.props;
let text;
let text: string;
if (!request.isSelfVerification) {
if (this.props.isRoomEncrypted) {
text = _t("Verify all users in a room to ensure it's secure.");
@ -230,9 +247,9 @@ export default class VerificationPanel extends React.PureComponent {
}
}
let description;
let description: string;
if (request.isSelfVerification) {
const device = this._getDevice();
const device = this.getDevice();
if (!device) {
// This can happen if the device is logged out while we're still showing verification
// UI for it.
@ -264,19 +281,19 @@ export default class VerificationPanel extends React.PureComponent {
);
}
renderCancelledPhase() {
private renderCancelledPhase() {
const {member, request} = this.props;
const AccessibleButton = sdk.getComponent('elements.AccessibleButton');
let startAgainInstruction;
let startAgainInstruction: string;
if (request.isSelfVerification) {
startAgainInstruction = _t("Start verification again from the notification.");
} else {
startAgainInstruction = _t("Start verification again from their profile.");
}
let text;
let text: string;
if (request.cancellationCode === "m.timeout") {
text = _t("Verification timed out.") + ` ${startAgainInstruction}`;
} else if (request.cancellingUserId === request.otherUserId) {
@ -304,7 +321,7 @@ export default class VerificationPanel extends React.PureComponent {
);
}
render() {
public render() {
const {member, phase, request} = this.props;
const displayName = member.displayName || member.name || member.userId;
@ -321,10 +338,10 @@ export default class VerificationPanel extends React.PureComponent {
const emojis = this.state.sasEvent ?
<VerificationShowSas
displayName={displayName}
device={this._getDevice()}
device={this.getDevice()}
sas={this.state.sasEvent.sas}
onCancel={this._onSasMismatchesClick}
onDone={this._onSasMatchesClick}
onCancel={this.onSasMismatchesClick}
onDone={this.onSasMatchesClick}
inDialog={this.props.inDialog}
isSelf={request.isSelfVerification}
/> : <Spinner />;
@ -345,7 +362,7 @@ export default class VerificationPanel extends React.PureComponent {
return null;
}
_startSAS = async () => {
private startSAS = async () => {
this.setState({emojiButtonClicked: true});
const verifier = this.props.request.beginKeyVerification(verificationMethods.SAS);
try {
@ -355,31 +372,31 @@ export default class VerificationPanel extends React.PureComponent {
}
};
_onSasMatchesClick = () => {
private onSasMatchesClick = () => {
this.state.sasEvent.confirm();
};
_onSasMismatchesClick = () => {
private onSasMismatchesClick = () => {
this.state.sasEvent.mismatch();
};
_updateVerifierState = () => {
private updateVerifierState = () => {
const {request} = this.props;
const {sasEvent, reciprocateQREvent} = request.verifier;
request.verifier.off('show_sas', this._updateVerifierState);
request.verifier.off('show_reciprocate_qr', this._updateVerifierState);
request.verifier.off('show_sas', this.updateVerifierState);
request.verifier.off('show_reciprocate_qr', this.updateVerifierState);
this.setState({sasEvent, reciprocateQREvent});
};
_onRequestChange = async () => {
private onRequestChange = async () => {
const {request} = this.props;
const hadVerifier = this._hasVerifier;
this._hasVerifier = !!request.verifier;
if (!hadVerifier && this._hasVerifier) {
request.verifier.on('show_sas', this._updateVerifierState);
request.verifier.on('show_reciprocate_qr', this._updateVerifierState);
const hadVerifier = this.hasVerifier;
this.hasVerifier = !!request.verifier;
if (!hadVerifier && this.hasVerifier) {
request.verifier.on('show_sas', this.updateVerifierState);
request.verifier.on('show_reciprocate_qr', this.updateVerifierState);
try {
// on the requester side, this is also awaited in _startSAS,
// on the requester side, this is also awaited in startSAS,
// but that's ok as verify should return the same promise.
await request.verifier.verify();
} catch (err) {
@ -388,23 +405,22 @@ export default class VerificationPanel extends React.PureComponent {
}
};
componentDidMount() {
public componentDidMount() {
const {request} = this.props;
request.on("change", this._onRequestChange);
request.on("change", this.onRequestChange);
if (request.verifier) {
const {request} = this.props;
const {sasEvent, reciprocateQREvent} = request.verifier;
this.setState({sasEvent, reciprocateQREvent});
}
this._onRequestChange();
this.onRequestChange();
}
componentWillUnmount() {
public componentWillUnmount() {
const {request} = this.props;
if (request.verifier) {
request.verifier.off('show_sas', this._updateVerifierState);
request.verifier.off('show_reciprocate_qr', this._updateVerifierState);
request.verifier.off('show_sas', this.updateVerifierState);
request.verifier.off('show_reciprocate_qr', this.updateVerifierState);
}
request.off("change", this._onRequestChange);
request.off("change", this.onRequestChange);
}
}

View file

@ -20,7 +20,8 @@ import createReactClass from 'create-react-class';
import Tinter from '../../../Tinter';
import dis from '../../../dispatcher/dispatcher';
import SettingsStore, {SettingLevel} from "../../../settings/SettingsStore";
import SettingsStore from "../../../settings/SettingsStore";
import {SettingLevel} from "../../../settings/SettingLevel";
const ROOM_COLORS = [
// magic room default values courtesy of Ribot

View file

@ -22,10 +22,11 @@ import PropTypes from 'prop-types';
import createReactClass from 'create-react-class';
import * as sdk from "../../../index";
import { _t, _td } from '../../../languageHandler';
import SettingsStore, {SettingLevel} from "../../../settings/SettingsStore";
import SettingsStore from "../../../settings/SettingsStore";
import dis from "../../../dispatcher/dispatcher";
import {MatrixClientPeg} from "../../../MatrixClientPeg";
import {Action} from "../../../dispatcher/actions";
import {SettingLevel} from "../../../settings/SettingLevel";
export default createReactClass({

View file

@ -685,6 +685,9 @@ export default createReactClass({
mx_EventTile_emote: msgtype === 'm.emote',
});
// If the tile is in the Sending state, don't speak the message.
const ariaLive = (this.props.eventSendStatus !== null) ? 'off' : undefined;
let permalink = "#";
if (this.props.permalinkCreator) {
permalink = this.props.permalinkCreator.forEvent(this.props.mxEvent.getId());
@ -819,7 +822,7 @@ export default createReactClass({
case 'notif': {
const room = this.context.getRoom(this.props.mxEvent.getRoomId());
return (
<div className={classes}>
<div className={classes} aria-live={ariaLive} aria-atomic="true">
<div className="mx_EventTile_roomName">
<a href={permalink} onClick={this.onPermalinkClicked}>
{ room ? room.name : '' }
@ -845,7 +848,7 @@ export default createReactClass({
}
case 'file_grid': {
return (
<div className={classes}>
<div className={classes} aria-live={ariaLive} aria-atomic="true">
<div className="mx_EventTile_line">
<EventTileType ref={this._tile}
mxEvent={this.props.mxEvent}
@ -881,7 +884,7 @@ export default createReactClass({
);
}
return (
<div className={classes}>
<div className={classes} aria-live={ariaLive} aria-atomic="true">
{ ircTimestamp }
{ avatar }
{ sender }
@ -911,7 +914,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 (
<div className={classes} tabIndex={-1}>
<div className={classes} tabIndex={-1} aria-live={ariaLive} aria-atomic="true">
{ ircTimestamp }
<div className="mx_EventTile_msgOption">
{ readAvatars }

View file

@ -72,6 +72,7 @@ export default class NotificationBadge extends React.PureComponent<XOR<IProps, I
public componentWillUnmount() {
SettingsStore.unwatchSetting(this.countWatcherRef);
this.props.notification.off(NOTIFICATION_STATE_UPDATE, this.onNotificationUpdate);
}
public componentDidUpdate(prevProps: Readonly<IProps>) {

View file

@ -73,7 +73,7 @@ export default class ReplyPreview extends React.Component {
return <div className="mx_ReplyPreview">
<div className="mx_ReplyPreview_section">
<div className="mx_ReplyPreview_header mx_ReplyPreview_title">
{ '💬 ' + _t('Replying') }
{ _t('Replying') }
</div>
<div className="mx_ReplyPreview_header mx_ReplyPreview_cancel">
<img className="mx_filterFlipColor" src={require("../../../../res/img/cancel.svg")} width="18" height="18"

View file

@ -31,7 +31,6 @@ import dis from "../../../dispatcher/dispatcher";
import defaultDispatcher from "../../../dispatcher/dispatcher";
import RoomSublist from "./RoomSublist";
import { ActionPayload } from "../../../dispatcher/payloads";
import { NameFilterCondition } from "../../../stores/room-list/filters/NameFilterCondition";
import { MatrixClientPeg } from "../../../MatrixClientPeg";
import GroupAvatar from "../avatars/GroupAvatar";
import TemporaryTile from "./TemporaryTile";
@ -42,6 +41,8 @@ import { ViewRoomDeltaPayload } from "../../../dispatcher/payloads/ViewRoomDelta
import { RoomNotificationStateStore } from "../../../stores/notifications/RoomNotificationStateStore";
import SettingsStore from "../../../settings/SettingsStore";
import CustomRoomTagStore from "../../../stores/CustomRoomTagStore";
import { arrayFastClone, arrayHasDiff } from "../../../utils/arrays";
import { objectShallowClone, objectWithOnly } from "../../../utils/objects";
interface IProps {
onKeyDown: (ev: React.KeyboardEvent) => void;
@ -50,7 +51,6 @@ interface IProps {
onResize: () => void;
resizeNotifier: ResizeNotifier;
collapsed: boolean;
searchFilter: string;
isMinimized: boolean;
}
@ -80,7 +80,7 @@ interface ITagAesthetics {
sectionLabel: string;
sectionLabelRaw?: string;
addRoomLabel?: string;
onAddRoom?: (dispatcher: Dispatcher<ActionPayload>) => void;
onAddRoom?: (dispatcher?: Dispatcher<ActionPayload>) => void;
isInvite: boolean;
defaultHidden: boolean;
}
@ -104,14 +104,18 @@ const TAG_AESTHETICS: {
isInvite: false,
defaultHidden: false,
addRoomLabel: _td("Start chat"),
onAddRoom: (dispatcher: Dispatcher<ActionPayload>) => dispatcher.dispatch({action: 'view_create_chat'}),
onAddRoom: (dispatcher?: Dispatcher<ActionPayload>) => {
(dispatcher || defaultDispatcher).dispatch({action: 'view_create_chat'});
},
},
[DefaultTagID.Untagged]: {
sectionLabel: _td("Rooms"),
isInvite: false,
defaultHidden: false,
addRoomLabel: _td("Create room"),
onAddRoom: (dispatcher: Dispatcher<ActionPayload>) => dispatcher.dispatch({action: 'view_create_room'}),
onAddRoom: (dispatcher?: Dispatcher<ActionPayload>) => {
(dispatcher || defaultDispatcher).dispatch({action: 'view_create_room'})
},
},
[DefaultTagID.LowPriority]: {
sectionLabel: _td("Low priority"),
@ -144,8 +148,7 @@ function customTagAesthetics(tagId: TagID): ITagAesthetics {
};
}
export default class RoomList extends React.Component<IProps, IState> {
private searchFilter: NameFilterCondition = new NameFilterCondition();
export default class RoomList extends React.PureComponent<IProps, IState> {
private dispatcherRef;
private customTagStoreRef;
@ -159,21 +162,6 @@ export default class RoomList extends React.Component<IProps, IState> {
this.dispatcherRef = defaultDispatcher.register(this.onAction);
}
public componentDidUpdate(prevProps: Readonly<IProps>): void {
if (prevProps.searchFilter !== this.props.searchFilter) {
const hadSearch = !!this.searchFilter.search.trim();
const haveSearch = !!this.props.searchFilter.trim();
this.searchFilter.search = this.props.searchFilter;
if (!hadSearch && haveSearch) {
// started a new filter - add the condition
RoomListStore.instance.addFilter(this.searchFilter);
} else if (hadSearch && !haveSearch) {
// cleared a filter - remove the condition
RoomListStore.instance.removeFilter(this.searchFilter);
} // else the filter hasn't changed enough for us to care here
}
}
public componentDidMount(): void {
RoomListStore.instance.on(LISTS_UPDATE_EVENT, this.updateLists);
this.customTagStoreRef = CustomRoomTagStore.addListener(this.updateLists);
@ -231,17 +219,46 @@ export default class RoomList extends React.Component<IProps, IState> {
console.log("new lists", newLists);
}
this.setState({sublists: newLists}, () => {
this.props.onResize();
const previousListIds = Object.keys(this.state.sublists);
const newListIds = Object.keys(newLists).filter(t => {
if (!isCustomTag(t)) return true; // always include non-custom tags
// if the tag is custom though, only include it if it is enabled
return CustomRoomTagStore.getTags()[t];
});
let doUpdate = arrayHasDiff(previousListIds, newListIds);
if (!doUpdate) {
// so we didn't have the visible sublists change, but did the contents of those
// sublists change significantly enough to break the sticky headers? Probably, so
// let's check the length of each.
for (const tagId of newListIds) {
const oldRooms = this.state.sublists[tagId];
const newRooms = newLists[tagId];
if (oldRooms.length !== newRooms.length) {
doUpdate = true;
break;
}
}
}
if (doUpdate) {
// We have to break our reference to the room list store if we want to be able to
// diff the object for changes, so do that.
const newSublists = objectWithOnly(newLists, newListIds);
const sublists = objectShallowClone(newSublists, (k, v) => arrayFastClone(v));
this.setState({sublists}, () => {
this.props.onResize();
});
}
};
private renderCommunityInvites(): React.ReactElement[] {
private renderCommunityInvites(): TemporaryTile[] {
// TODO: Put community invites in a more sensible place (not in the room list)
// See https://github.com/vector-im/riot-web/issues/14456
return MatrixClientPeg.get().getGroups().filter(g => {
if (g.myMembership !== 'invite') return false;
return !this.searchFilter || this.searchFilter.matches(g.name || "");
return g.myMembership === 'invite';
}).map(g => {
const avatar = (
<GroupAvatar
@ -277,8 +294,7 @@ export default class RoomList extends React.Component<IProps, IState> {
const tagOrder = TAG_ORDER.reduce((p, c) => {
if (c === CUSTOM_TAGS_BEFORE_TAG) {
const customTags = Object.keys(this.state.sublists)
.filter(t => isCustomTag(t))
.filter(t => CustomRoomTagStore.getTags()[t]); // isSelected
.filter(t => isCustomTag(t));
p.push(...customTags);
}
p.push(c);
@ -298,21 +314,18 @@ export default class RoomList extends React.Component<IProps, IState> {
: TAG_AESTHETICS[orderedTagId];
if (!aesthetics) throw new Error(`Tag ${orderedTagId} does not have aesthetics`);
const onAddRoomFn = aesthetics.onAddRoom ? () => aesthetics.onAddRoom(dis) : null;
components.push(
<RoomSublist
key={`sublist-${orderedTagId}`}
tagId={orderedTagId}
forRooms={true}
rooms={orderedRooms}
startAsHidden={aesthetics.defaultHidden}
label={aesthetics.sectionLabelRaw ? aesthetics.sectionLabelRaw : _t(aesthetics.sectionLabel)}
onAddRoom={onAddRoomFn}
onAddRoom={aesthetics.onAddRoom}
addRoomLabel={aesthetics.addRoomLabel ? _t(aesthetics.addRoomLabel) : aesthetics.addRoomLabel}
isMinimized={this.props.isMinimized}
onResize={this.props.onResize}
extraBadTilesThatShouldntExist={extraTiles}
isFiltered={!!this.searchFilter.search}
/>
);
}

View file

@ -288,7 +288,6 @@ export default createReactClass({
const AccessibleButton = sdk.getComponent('elements.AccessibleButton');
let showSpinner = false;
let darkStyle = false;
let title;
let subTitle;
let primaryActionHandler;
@ -316,7 +315,6 @@ export default createReactClass({
break;
}
case MessageCase.NotLoggedIn: {
darkStyle = true;
title = _t("Join the conversation with an account");
primaryActionLabel = _t("Sign Up");
primaryActionHandler = this.onRegisterClick;
@ -557,7 +555,6 @@ export default createReactClass({
const classes = classNames("mx_RoomPreviewBar", "dark-panel", `mx_RoomPreviewBar_${messageCase}`, {
"mx_RoomPreviewBar_panel": this.props.canPreview,
"mx_RoomPreviewBar_dialog": !this.props.canPreview,
"mx_RoomPreviewBar_dark": darkStyle,
});
return (

View file

@ -21,7 +21,8 @@ import * as sdk from "../../../index";
import { _t } from "../../../languageHandler";
import Modal from "../../../Modal";
import {MatrixClientPeg} from "../../../MatrixClientPeg";
import SettingsStore, {SettingLevel} from "../../../settings/SettingsStore";
import SettingsStore from "../../../settings/SettingsStore";
import {SettingLevel} from "../../../settings/SettingLevel";
export default class RoomRecoveryReminder extends React.PureComponent {
static propTypes = {

View file

@ -32,13 +32,12 @@ import {
StyledMenuItemCheckbox,
StyledMenuItemRadio,
} from "../../structures/ContextMenu";
import RoomListStore from "../../../stores/room-list/RoomListStore";
import RoomListStore, { LISTS_UPDATE_EVENT } from "../../../stores/room-list/RoomListStore";
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 { ActionPayload } from "../../../dispatcher/payloads";
@ -47,6 +46,10 @@ 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 { arrayFastClone, arrayHasOrderChange } from "../../../utils/arrays";
import { objectExcluding, objectHasDiff } from "../../../utils/objects";
import TemporaryTile from "./TemporaryTile";
import { ListNotificationState } from "../../../stores/notifications/ListNotificationState";
const SHOW_N_BUTTON_HEIGHT = 28; // As defined by CSS
const RESIZE_HANDLE_HEIGHT = 4; // As defined by CSS
@ -59,7 +62,6 @@ polyfillTouchEvent();
interface IProps {
forRooms: boolean;
rooms?: Room[];
startAsHidden: boolean;
label: string;
onAddRoom?: () => void;
@ -67,11 +69,10 @@ 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.
extraBadTilesThatShouldntExist?: React.ReactElement[];
extraBadTilesThatShouldntExist?: TemporaryTile[];
// TODO: Account for https://github.com/vector-im/riot-web/issues/14179
}
@ -85,11 +86,12 @@ interface ResizeDelta {
type PartialDOMRect = Pick<DOMRect, "left" | "top" | "height">;
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
height: number;
rooms: Room[];
filteredExtraTiles?: TemporaryTile[];
}
export default class RoomSublist extends React.Component<IProps, IState> {
@ -98,22 +100,27 @@ export default class RoomSublist extends React.Component<IProps, IState> {
private dispatcherRef: string;
private layout: ListLayout;
private heightAtStart: number;
private isBeingFiltered: boolean;
private notificationState: ListNotificationState;
constructor(props: IProps) {
super(props);
this.layout = RoomListLayoutStore.instance.getLayoutFor(this.props.tagId);
this.heightAtStart = 0;
const height = this.calculateInitialHeight();
this.isBeingFiltered = !!RoomListStore.instance.getFirstNameFilterCondition();
this.notificationState = RoomNotificationStateStore.instance.getListState(this.props.tagId);
this.state = {
notificationState: RoomNotificationStateStore.instance.getListState(this.props.tagId),
contextMenuPosition: null,
isResizing: false,
isExpanded: this.props.isFiltered ? this.props.isFiltered : !this.layout.isCollapsed,
height,
isExpanded: this.isBeingFiltered ? this.isBeingFiltered : !this.layout.isCollapsed,
height: 0, // to be fixed in a moment, we need `rooms` to calculate this.
rooms: arrayFastClone(RoomListStore.instance.orderedLists[this.props.tagId] || []),
};
this.state.notificationState.setRooms(this.props.rooms);
// Why Object.assign() and not this.state.height? Because TypeScript says no.
this.state = Object.assign(this.state, {height: this.calculateInitialHeight()});
this.dispatcherRef = defaultDispatcher.register(this.onAction);
RoomListStore.instance.on(LISTS_UPDATE_EVENT, this.onListsUpdated);
}
private calculateInitialHeight() {
@ -141,12 +148,22 @@ export default class RoomSublist extends React.Component<IProps, IState> {
return padding;
}
private get numTiles(): number {
return RoomSublist.calcNumTiles(this.props);
private get extraTiles(): TemporaryTile[] | null {
if (this.state.filteredExtraTiles) {
return this.state.filteredExtraTiles;
}
if (this.props.extraBadTilesThatShouldntExist) {
return this.props.extraBadTilesThatShouldntExist;
}
return null;
}
private static calcNumTiles(props) {
return (props.rooms || []).length + (props.extraBadTilesThatShouldntExist || []).length;
private get numTiles(): number {
return RoomSublist.calcNumTiles(this.state.rooms, this.extraTiles);
}
private static calcNumTiles(rooms: Room[], extraTiles: any[]) {
return (rooms || []).length + (extraTiles || []).length;
}
private get numVisibleTiles(): number {
@ -154,33 +171,116 @@ export default class RoomSublist extends React.Component<IProps, IState> {
return Math.min(nVisible, this.numTiles);
}
public componentDidUpdate(prevProps: Readonly<IProps>) {
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 componentDidUpdate(prevProps: Readonly<IProps>, prevState: Readonly<IState>) {
const prevExtraTiles = prevState.filteredExtraTiles || prevProps.extraBadTilesThatShouldntExist;
// 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 (RoomSublist.calcNumTiles(prevProps) !== this.numTiles) {
if (RoomSublist.calcNumTiles(prevState.rooms, prevExtraTiles) !== this.numTiles) {
this.setState({height: this.calculateInitialHeight()});
}
}
public componentWillUnmount() {
this.state.notificationState.destroy();
defaultDispatcher.unregister(this.dispatcherRef);
public shouldComponentUpdate(nextProps: Readonly<IProps>, nextState: Readonly<IState>): boolean {
if (objectHasDiff(this.props, nextProps)) {
// Something we don't care to optimize has updated, so update.
return true;
}
// Do the same check used on props for state, without the rooms we're going to no-op
const prevStateNoRooms = objectExcluding(this.state, ['rooms']);
const nextStateNoRooms = objectExcluding(nextState, ['rooms']);
if (objectHasDiff(prevStateNoRooms, nextStateNoRooms)) {
return true;
}
// If we're supposed to handle extra tiles, take the performance hit and re-render all the
// time so we don't have to consider them as part of the visible room optimization.
const prevExtraTiles = this.props.extraBadTilesThatShouldntExist || [];
const nextExtraTiles = (nextState.filteredExtraTiles || nextProps.extraBadTilesThatShouldntExist) || [];
if (prevExtraTiles.length > 0 || nextExtraTiles.length > 0) {
return true;
}
// If we're about to update the height of the list, we don't really care about which rooms
// are visible or not for no-op purposes, so ensure that the height calculation runs through.
if (RoomSublist.calcNumTiles(nextState.rooms, nextExtraTiles) !== this.numTiles) {
return true;
}
// Before we go analyzing the rooms, we can see if we're collapsed. If we're collapsed, we don't need
// to render anything. We do this after the height check though to ensure that the height gets appropriately
// calculated for when/if we become uncollapsed.
if (!nextState.isExpanded) {
return false;
}
// Quickly double check we're not about to break something due to the number of rooms changing.
if (this.state.rooms.length !== nextState.rooms.length) {
return true;
}
// Finally, determine if the room update (as presumably that's all that's left) is within
// our visible range. If it is, then do a render. If the update is outside our visible range
// then we can skip the update.
//
// We also optimize for order changing here: if the update did happen in our visible range
// but doesn't result in the list re-sorting itself then there's no reason for us to update
// on our own.
const prevSlicedRooms = this.state.rooms.slice(0, this.numVisibleTiles);
const nextSlicedRooms = nextState.rooms.slice(0, this.numVisibleTiles);
if (arrayHasOrderChange(prevSlicedRooms, nextSlicedRooms)) {
return true;
}
// Finally, nothing happened so no-op the update
return false;
}
public componentWillUnmount() {
defaultDispatcher.unregister(this.dispatcherRef);
RoomListStore.instance.off(LISTS_UPDATE_EVENT, this.onListsUpdated);
}
private onListsUpdated = () => {
const stateUpdates: IState & any = {}; // &any is to avoid a cast on the initializer
if (this.props.extraBadTilesThatShouldntExist) {
const nameCondition = RoomListStore.instance.getFirstNameFilterCondition();
if (nameCondition) {
stateUpdates.filteredExtraTiles = this.props.extraBadTilesThatShouldntExist
.filter(t => nameCondition.matches(t.props.displayName || ""));
} else if (this.state.filteredExtraTiles) {
stateUpdates.filteredExtraTiles = null;
}
}
const currentRooms = this.state.rooms;
const newRooms = arrayFastClone(RoomListStore.instance.orderedLists[this.props.tagId] || []);
if (arrayHasOrderChange(currentRooms, newRooms)) {
stateUpdates.rooms = newRooms;
}
const isStillBeingFiltered = !!RoomListStore.instance.getFirstNameFilterCondition();
if (isStillBeingFiltered !== this.isBeingFiltered) {
this.isBeingFiltered = isStillBeingFiltered;
if (isStillBeingFiltered) {
stateUpdates.isExpanded = true;
} else {
stateUpdates.isExpanded = !this.layout.isCollapsed;
}
}
if (Object.keys(stateUpdates).length > 0) {
this.setState(stateUpdates);
}
};
private onAction = (payload: ActionPayload) => {
if (payload.action === "view_room" && payload.show_room_tile && this.props.rooms) {
if (payload.action === "view_room" && payload.show_room_tile && this.state.rooms) {
// 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 roomIndex = this.props.rooms.findIndex((r) => r.roomId === payload.room_id);
const roomIndex = this.state.rooms.findIndex((r) => r.roomId === payload.room_id);
if (!this.state.isExpanded && roomIndex > -1) {
this.toggleCollapsed();
@ -302,12 +402,12 @@ export default class RoomSublist extends React.Component<IProps, IState> {
let room;
if (this.props.tagId === DefaultTagID.Invite) {
// switch to first room as that'll be the top of the list for the user
room = this.props.rooms && this.props.rooms[0];
room = this.state.rooms && this.state.rooms[0];
} else {
// find the first room with a count of the same colour as the badge count
room = this.props.rooms.find((r: Room) => {
const notifState = this.state.notificationState.getForRoom(r);
return notifState.count > 0 && notifState.color === this.state.notificationState.color;
room = this.state.rooms.find((r: Room) => {
const notifState = this.notificationState.getForRoom(r);
return notifState.count > 0 && notifState.color === this.notificationState.color;
});
}
@ -399,8 +499,8 @@ export default class RoomSublist extends React.Component<IProps, IState> {
const tiles: React.ReactElement[] = [];
if (this.props.rooms) {
const visibleRooms = this.props.rooms.slice(0, this.numVisibleTiles);
if (this.state.rooms) {
const visibleRooms = this.state.rooms.slice(0, this.numVisibleTiles);
for (const room of visibleRooms) {
tiles.push(
<RoomTile
@ -414,8 +514,9 @@ export default class RoomSublist extends React.Component<IProps, IState> {
}
}
if (this.props.extraBadTilesThatShouldntExist) {
tiles.push(...this.props.extraBadTilesThatShouldntExist);
if (this.extraTiles) {
// HACK: We break typing here, but this 'extra tiles' property shouldn't exist.
(tiles as any[]).push(...this.extraTiles);
}
// We only have to do this because of the extra tiles. We do it conditionally
@ -522,7 +623,7 @@ export default class RoomSublist extends React.Component<IProps, IState> {
const badge = (
<NotificationBadge
forceCount={true}
notification={this.state.notificationState}
notification={this.notificationState}
onClick={this.onBadgeClick}
tabIndex={tabIndex}
aria-label={ariaLabel}

View file

@ -17,12 +17,13 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
import React, {createRef} from "react";
import React, { createRef } from "react";
import { Room } from "matrix-js-sdk/src/models/room";
import classNames from "classnames";
import { RovingTabIndexWrapper } from "../../../accessibility/RovingTabIndex";
import AccessibleButton, { ButtonEvent } from "../../views/elements/AccessibleButton";
import dis from '../../../dispatcher/dispatcher';
import defaultDispatcher from '../../../dispatcher/dispatcher';
import { Key } from "../../../Keyboard";
import ActiveRoomObserver from "../../../ActiveRoomObserver";
import { _t } from "../../../languageHandler";
@ -30,49 +31,41 @@ import {
ChevronFace,
ContextMenu,
ContextMenuTooltipButton,
MenuItemRadio,
MenuItemCheckbox,
MenuItem,
MenuItemCheckbox,
MenuItemRadio,
} from "../../structures/ContextMenu";
import { DefaultTagID, TagID } from "../../../stores/room-list/models";
import { MessagePreviewStore } from "../../../stores/room-list/MessagePreviewStore";
import { MessagePreviewStore, ROOM_PREVIEW_CHANGED } from "../../../stores/room-list/MessagePreviewStore";
import DecoratedRoomAvatar from "../avatars/DecoratedRoomAvatar";
import {
getRoomNotifsState,
setRoomNotifsState,
ALL_MESSAGES,
ALL_MESSAGES_LOUD,
MENTIONS_ONLY,
MUTE,
} from "../../../RoomNotifs";
import { ALL_MESSAGES, ALL_MESSAGES_LOUD, MENTIONS_ONLY, MUTE, } from "../../../RoomNotifs";
import { MatrixClientPeg } from "../../../MatrixClientPeg";
import NotificationBadge from "./NotificationBadge";
import { Volume } from "../../../RoomNotifsTypes";
import RoomListStore from "../../../stores/room-list/RoomListStore";
import RoomListActions from "../../../actions/RoomListActions";
import defaultDispatcher from "../../../dispatcher/dispatcher";
import {ActionPayload} from "../../../dispatcher/payloads";
import { ActionPayload } from "../../../dispatcher/payloads";
import { RoomNotificationStateStore } from "../../../stores/notifications/RoomNotificationStateStore";
import { NotificationState } from "../../../stores/notifications/NotificationState";
import { NOTIFICATION_STATE_UPDATE, NotificationState } from "../../../stores/notifications/NotificationState";
import AccessibleTooltipButton from "../elements/AccessibleTooltipButton";
import { EchoChamber } from "../../../stores/local-echo/EchoChamber";
import { CachedRoomKey, RoomEchoChamber } from "../../../stores/local-echo/RoomEchoChamber";
import { PROPERTY_UPDATED } from "../../../stores/local-echo/GenericEchoChamber";
interface IProps {
room: Room;
showMessagePreview: boolean;
isMinimized: boolean;
tag: TagID;
// TODO: Incoming call boxes: https://github.com/vector-im/riot-web/issues/14177
}
type PartialDOMRect = Pick<DOMRect, "left" | "bottom">;
interface IState {
hover: boolean;
notificationState: NotificationState;
selected: boolean;
notificationsMenuPosition: PartialDOMRect;
generalMenuPosition: PartialDOMRect;
messagePreview?: string;
}
const messagePreviewId = (roomId: string) => `mx_RoomTile_messagePreview_${roomId}`;
@ -111,25 +104,42 @@ const NotifOption: React.FC<INotifOptionProps> = ({active, onClick, iconClassNam
);
};
export default class RoomTile extends React.Component<IProps, IState> {
export default class RoomTile extends React.PureComponent<IProps, IState> {
private dispatcherRef: string;
private roomTileRef = createRef<HTMLDivElement>();
private notificationState: NotificationState;
private roomProps: RoomEchoChamber;
constructor(props: IProps) {
super(props);
this.state = {
hover: false,
notificationState: RoomNotificationStateStore.instance.getRoomState(this.props.room),
selected: ActiveRoomObserver.activeRoomId === this.props.room.roomId,
notificationsMenuPosition: null,
generalMenuPosition: null,
// generatePreview() will return nothing if the user has previews disabled
messagePreview: this.generatePreview(),
};
ActiveRoomObserver.addListener(this.props.room.roomId, this.onActiveRoomUpdate);
this.dispatcherRef = defaultDispatcher.register(this.onAction);
MessagePreviewStore.instance.on(ROOM_PREVIEW_CHANGED, this.onRoomPreviewChanged);
this.notificationState = RoomNotificationStateStore.instance.getRoomState(this.props.room);
this.notificationState.on(NOTIFICATION_STATE_UPDATE, this.onNotificationUpdate);
this.roomProps = EchoChamber.forRoom(this.props.room);
this.roomProps.on(PROPERTY_UPDATED, this.onRoomPropertyUpdate);
}
private onNotificationUpdate = () => {
this.forceUpdate(); // notification state changed - update
};
private onRoomPropertyUpdate = (property: CachedRoomKey) => {
if (property === CachedRoomKey.NotificationVolume) this.onNotificationUpdate();
// else ignore - not important for this tile
};
private get showContextMenu(): boolean {
return !this.props.isMinimized && this.props.tag !== DefaultTagID.Invite;
}
@ -150,6 +160,8 @@ export default class RoomTile extends React.Component<IProps, IState> {
ActiveRoomObserver.removeListener(this.props.room.roomId, this.onActiveRoomUpdate);
}
defaultDispatcher.unregister(this.dispatcherRef);
MessagePreviewStore.instance.off(ROOM_PREVIEW_CHANGED, this.onRoomPreviewChanged);
this.notificationState.off(NOTIFICATION_STATE_UPDATE, this.onNotificationUpdate);
}
private onAction = (payload: ActionPayload) => {
@ -160,6 +172,21 @@ export default class RoomTile extends React.Component<IProps, IState> {
}
};
private onRoomPreviewChanged = (room: Room) => {
if (this.props.room && room.roomId === this.props.room.roomId) {
// generatePreview() will return nothing if the user has previews disabled
this.setState({messagePreview: this.generatePreview()});
}
};
private generatePreview(): string | null {
if (!this.showMessagePreview) {
return null;
}
return MessagePreviewStore.instance.getPreviewForRoom(this.props.room, this.props.tag);
}
private scrollIntoView = () => {
if (!this.roomTileRef.current) return;
this.roomTileRef.current.scrollIntoView({
@ -168,14 +195,6 @@ export default class RoomTile extends React.Component<IProps, IState> {
});
};
private onTileMouseEnter = () => {
this.setState({hover: true});
};
private onTileMouseLeave = () => {
this.setState({hover: false});
};
private onTileClick = (ev: React.KeyboardEvent) => {
ev.preventDefault();
ev.stopPropagation();
@ -292,17 +311,9 @@ export default class RoomTile extends React.Component<IProps, IState> {
ev.stopPropagation();
if (MatrixClientPeg.get().isGuest()) return;
// get key before we go async and React discards the nativeEvent
const key = (ev as React.KeyboardEvent).key;
try {
// TODO add local echo - https://github.com/vector-im/riot-web/issues/14280
await setRoomNotifsState(this.props.room.roomId, newState);
} catch (error) {
// TODO: some form of error notification to the user to inform them that their state change failed.
// See https://github.com/vector-im/riot-web/issues/14281
console.error(error);
}
this.roomProps.notificationVolume = newState;
const key = (ev as React.KeyboardEvent).key;
if (key === Key.ENTER) {
// Implements https://www.w3.org/TR/wai-aria-practices/#keyboard-interaction-12
this.setState({notificationsMenuPosition: null}); // hide the menu
@ -320,7 +331,7 @@ export default class RoomTile extends React.Component<IProps, IState> {
return null;
}
const state = getRoomNotifsState(this.props.room.roomId);
const state = this.roomProps.notificationVolume;
let contextMenu = null;
if (this.state.notificationsMenuPosition) {
@ -482,7 +493,7 @@ export default class RoomTile extends React.Component<IProps, IState> {
badge = (
<div className="mx_RoomTile_badgeContainer" aria-hidden="true">
<NotificationBadge
notification={this.state.notificationState}
notification={this.notificationState}
forceCount={false}
roomId={this.props.room.roomId}
/>
@ -495,24 +506,18 @@ export default class RoomTile extends React.Component<IProps, IState> {
name = name.replace(":", ":\u200b"); // add a zero-width space to allow linewrapping after the colon
let messagePreview = null;
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 = (
<div className="mx_RoomTile_messagePreview" id={messagePreviewId(this.props.room.roomId)}>
{text}
</div>
);
}
if (this.showMessagePreview && this.state.messagePreview) {
messagePreview = (
<div className="mx_RoomTile_messagePreview" id={messagePreviewId(this.props.room.roomId)}>
{this.state.messagePreview}
</div>
);
}
const nameClasses = classNames({
"mx_RoomTile_name": true,
"mx_RoomTile_nameWithPreview": !!messagePreview,
"mx_RoomTile_nameHasUnreadEvents": this.state.notificationState.isUnread,
"mx_RoomTile_nameHasUnreadEvents": this.notificationState.isUnread,
});
let nameContainer = (
@ -529,15 +534,15 @@ export default class RoomTile extends React.Component<IProps, IState> {
// 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 (this.state.notificationState.hasMentions) {
} else if (this.notificationState.hasMentions) {
ariaLabel += " " + _t("%(count)s unread messages including mentions.", {
count: this.state.notificationState.count,
count: this.notificationState.count,
});
} else if (this.state.notificationState.hasUnreadCount) {
} else if (this.notificationState.hasUnreadCount) {
ariaLabel += " " + _t("%(count)s unread messages.", {
count: this.state.notificationState.count,
count: this.notificationState.count,
});
} else if (this.state.notificationState.isUnread) {
} else if (this.notificationState.isUnread) {
ariaLabel += " " + _t("Unread messages.");
}
@ -560,8 +565,6 @@ export default class RoomTile extends React.Component<IProps, IState> {
tabIndex={isActive ? 0 : -1}
inputRef={ref}
className={classes}
onMouseEnter={this.onTileMouseEnter}
onMouseLeave={this.onTileMouseLeave}
onClick={this.onTileClick}
onContextMenu={this.onContextMenu}
role="treeitem"

View file

@ -29,6 +29,7 @@ import SettingsStore from "../../../settings/SettingsStore";
import {ContextMenu} from "../../structures/ContextMenu";
import {WidgetType} from "../../../widgets/WidgetType";
import AccessibleTooltipButton from "../elements/AccessibleTooltipButton";
import {Action} from "../../../dispatcher/actions";
// This should be below the dialog level (4000), but above the rest of the UI (1000-2000).
// We sit in a context menu, so this should be given to the context menu.
@ -182,7 +183,7 @@ export default class Stickerpicker extends React.Component {
case "stickerpicker_close":
this.setState({showStickers: false});
break;
case "after_right_panel_phase_change":
case Action.AfterRightPanelPhaseChange:
case "show_left_panel":
case "hide_left_panel":
this.setState({showStickers: false});

View file

@ -18,7 +18,7 @@ import React from 'react';
import * as sdk from '../../../index';
import {_t} from "../../../languageHandler";
import {SettingLevel} from "../../../settings/SettingsStore";
import {SettingLevel} from "../../../settings/SettingLevel";
const SETTING_MANUALLY_VERIFY_ALL_SESSIONS = "e2ee.manuallyVerifyAllSessions";

View file

@ -20,10 +20,11 @@ import { _t } from '../../../languageHandler';
import SdkConfig from "../../../SdkConfig";
import * as sdk from '../../../index';
import Modal from '../../../Modal';
import SettingsStore, {SettingLevel} from "../../../settings/SettingsStore";
import SettingsStore from "../../../settings/SettingsStore";
import AccessibleButton from "../elements/AccessibleButton";
import {formatBytes, formatCountLong} from "../../../utils/FormattingUtils";
import EventIndexPeg from "../../../indexing/EventIndexPeg";
import {SettingLevel} from "../../../settings/SettingLevel";
export default class EventIndexPanel extends React.Component {
constructor() {

View file

@ -20,7 +20,7 @@ import createReactClass from 'create-react-class';
import * as sdk from '../../../index';
import { _t } from '../../../languageHandler';
import {MatrixClientPeg} from '../../../MatrixClientPeg';
import SettingsStore, {SettingLevel} from '../../../settings/SettingsStore';
import SettingsStore from '../../../settings/SettingsStore';
import Modal from '../../../Modal';
import {
NotificationUtils,
@ -31,6 +31,7 @@ import {
import SdkConfig from "../../../SdkConfig";
import LabelledToggleSwitch from "../elements/LabelledToggleSwitch";
import AccessibleButton from "../elements/AccessibleButton";
import {SettingLevel} from "../../../settings/SettingLevel";
// TODO: this "view" component still has far too much application logic in it,
// which should be factored out to other files.

View file

@ -18,7 +18,8 @@ import React from 'react';
import {_t} from "../../../languageHandler";
import {IntegrationManagers} from "../../../integrations/IntegrationManagers";
import * as sdk from '../../../index';
import SettingsStore, {SettingLevel} from "../../../settings/SettingsStore";
import SettingsStore from "../../../settings/SettingsStore";
import {SettingLevel} from "../../../settings/SettingLevel";
export default class SetIntegrationManager extends React.Component {
constructor() {

View file

@ -21,7 +21,7 @@ import {MatrixClientPeg} from "../../../../../MatrixClientPeg";
import AccessibleButton from "../../../elements/AccessibleButton";
import Notifier from "../../../../../Notifier";
import SettingsStore from '../../../../../settings/SettingsStore';
import { SettingLevel } from '../../../../../settings/SettingsStore';
import {SettingLevel} from "../../../../../settings/SettingLevel";
export default class NotificationsSettingsTab extends React.Component {
static propTypes = {

View file

@ -20,10 +20,10 @@ import {_t} from "../../../../../languageHandler";
import {MatrixClientPeg} from "../../../../../MatrixClientPeg";
import * as sdk from "../../../../..";
import LabelledToggleSwitch from "../../../elements/LabelledToggleSwitch";
import {SettingLevel} from "../../../../../settings/SettingsStore";
import Modal from "../../../../../Modal";
import QuestionDialog from "../../../dialogs/QuestionDialog";
import StyledRadioGroup from '../../../elements/StyledRadioGroup';
import {SettingLevel} from "../../../../../settings/SettingLevel";
export default class SecurityRoomSettingsTab extends React.Component {
static propTypes = {

View file

@ -18,7 +18,7 @@ limitations under the License.
import React from 'react';
import {_t} from "../../../../../languageHandler";
import SdkConfig from "../../../../../SdkConfig";
import SettingsStore, {SettingLevel} from "../../../../../settings/SettingsStore";
import SettingsStore from "../../../../../settings/SettingsStore";
import { enumerateThemes } from "../../../../../theme";
import ThemeWatcher from "../../../../../settings/watchers/ThemeWatcher";
import Slider from "../../../elements/Slider";
@ -35,6 +35,7 @@ import Field from '../../../elements/Field';
import EventTilePreview from '../../../elements/EventTilePreview';
import StyledRadioGroup from "../../../elements/StyledRadioGroup";
import classNames from 'classnames';
import { SettingLevel } from "../../../../../settings/SettingLevel";
interface IProps {
}

View file

@ -20,7 +20,6 @@ import React from 'react';
import {_t} from "../../../../../languageHandler";
import ProfileSettings from "../../ProfileSettings";
import * as languageHandler from "../../../../../languageHandler";
import {SettingLevel} from "../../../../../settings/SettingsStore";
import SettingsStore from "../../../../../settings/SettingsStore";
import LanguageDropdown from "../../../elements/LanguageDropdown";
import AccessibleButton from "../../../elements/AccessibleButton";
@ -37,6 +36,7 @@ import IdentityAuthClient from "../../../../../IdentityAuthClient";
import {abbreviateUrl} from "../../../../../utils/UrlUtils";
import { getThreepidsWithBindStatus } from '../../../../../boundThreepids';
import Spinner from "../../../elements/Spinner";
import {SettingLevel} from "../../../../../settings/SettingLevel";
export default class GeneralUserSettingsTab extends React.Component {
static propTypes = {

View file

@ -17,9 +17,10 @@ limitations under the License.
import React from 'react';
import {_t} from "../../../../../languageHandler";
import PropTypes from "prop-types";
import SettingsStore, {SettingLevel} from "../../../../../settings/SettingsStore";
import SettingsStore from "../../../../../settings/SettingsStore";
import LabelledToggleSwitch from "../../../elements/LabelledToggleSwitch";
import * as sdk from "../../../../../index";
import {SettingLevel} from "../../../../../settings/SettingLevel";
export class LabsSettingToggle extends React.Component {
static propTypes = {

View file

@ -17,12 +17,12 @@ limitations under the License.
import React from 'react';
import {_t} from "../../../../../languageHandler";
import {SettingLevel} from "../../../../../settings/SettingsStore";
import LabelledToggleSwitch from "../../../elements/LabelledToggleSwitch";
import SettingsStore from "../../../../../settings/SettingsStore";
import Field from "../../../elements/Field";
import * as sdk from "../../../../..";
import PlatformPeg from "../../../../../PlatformPeg";
import {SettingLevel} from "../../../../../settings/SettingLevel";
export default class PreferencesUserSettingsTab extends React.Component {
static ROOM_LIST_SETTINGS = [

View file

@ -19,7 +19,6 @@ 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";
import AccessibleButton from "../../../elements/AccessibleButton";
@ -29,6 +28,7 @@ import * as sdk from "../../../../..";
import {sleep} from "../../../../../utils/promise";
import dis from "../../../../../dispatcher/dispatcher";
import {privateShouldBeEncrypted} from "../../../../../createRoom";
import {SettingLevel} from "../../../../../settings/SettingLevel";
export class IgnoredUser extends React.Component {
static propTypes = {

View file

@ -21,10 +21,10 @@ import SdkConfig from "../../../../../SdkConfig";
import CallMediaHandler from "../../../../../CallMediaHandler";
import Field from "../../../elements/Field";
import AccessibleButton from "../../../elements/AccessibleButton";
import {SettingLevel} from "../../../../../settings/SettingsStore";
import {MatrixClientPeg} from "../../../../../MatrixClientPeg";
import * as sdk from "../../../../../index";
import Modal from "../../../../../Modal";
import {SettingLevel} from "../../../../../settings/SettingLevel";
export default class VoiceUserSettingsTab extends React.Component {
constructor() {

View file

@ -0,0 +1,40 @@
/*
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 { _t } from "../../../languageHandler";
import AccessibleButton from "../elements/AccessibleButton";
import Modal from "../../../Modal";
import ServerOfflineDialog from "../dialogs/ServerOfflineDialog";
export default class NonUrgentEchoFailureToast extends React.PureComponent {
private openDialog = () => {
Modal.createTrackedDialog('Local Echo Server Error', '', ServerOfflineDialog, {});
};
public render() {
return (
<div className="mx_NonUrgentEchoFailureToast">
<span className="mx_NonUrgentEchoFailureToast_icon" />
{_t("Your server isn't responding to some <a>requests</a>.", {}, {
'a': (sub) => (
<AccessibleButton kind="link" onClick={this.openDialog}>{sub}</AccessibleButton>
),
})}
</div>
)
}
}

View file

@ -19,7 +19,8 @@ import React from "react";
import * as sdk from "../../../index";
import { _t } from '../../../languageHandler';
import {MatrixClientPeg} from '../../../MatrixClientPeg';
import {RIGHT_PANEL_PHASES} from "../../../stores/RightPanelStorePhases";
import {RightPanelPhases} from "../../../stores/RightPanelStorePhases";
import {SetRightPanelPhasePayload} from "../../../dispatcher/payloads/SetRightPanelPhasePayload"
import {userLabelForEventRoom} from "../../../utils/KeyVerificationStateObserver";
import dis from "../../../dispatcher/dispatcher";
import ToastStore from "../../../stores/ToastStore";
@ -27,6 +28,7 @@ import Modal from "../../../Modal";
import GenericToast from "./GenericToast";
import {VerificationRequest} from "matrix-js-sdk/src/crypto/verification/request/VerificationRequest";
import {DeviceInfo} from "matrix-js-sdk/src/crypto/deviceinfo";
import {Action} from "../../../dispatcher/actions";
interface IProps {
toastKey: string;
@ -104,9 +106,9 @@ export default class VerificationRequestToast extends React.PureComponent<IProps
room_id: request.channel.roomId,
should_peek: false,
});
dis.dispatch({
action: "set_right_panel_phase",
phase: RIGHT_PANEL_PHASES.EncryptionPanel,
dis.dispatch<SetRightPanelPhasePayload>({
action: Action.SetRightPanelPhase,
phase: RightPanelPhases.EncryptionPanel,
refireParams: {
verificationRequest: request,
member: cli.getUser(request.otherUserId),

View file

@ -79,4 +79,19 @@ export enum Action {
* Changes room based on room list order and payload parameters. Should be used with ViewRoomDeltaPayload.
*/
ViewRoomDelta = "view_room_delta",
/**
* Sets the phase for the right panel. Should be used with SetRightPanelPhasePayload.
*/
SetRightPanelPhase = "set_right_panel_phase",
/**
* Toggles the right panel. Should be used with ToggleRightPanelPayload.
*/
ToggleRightPanel = "toggle_right_panel",
/**
* Trigged after the phase of the right panel is set. Should be used with AfterRightPanelPhaseChangePayload.
*/
AfterRightPanelPhaseChange = "after_right_panel_phase_change",
}

View file

@ -0,0 +1,30 @@
/*
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 { RightPanelPhases } from "../../stores/RightPanelStorePhases";
import { SetRightPanelPhaseRefireParams } from "./SetRightPanelPhasePayload";
import { ActionPayload } from "../payloads";
import { Action } from "../actions";
import { VerificationRequest } from "matrix-js-sdk/src/crypto/verification/request/VerificationRequest";
interface AfterRightPanelPhaseChangeAction extends ActionPayload {
action: Action.AfterRightPanelPhaseChange;
phase: RightPanelPhases;
verificationRequestPromise?: Promise<VerificationRequest>;
}
export type AfterRightPanelPhaseChangePayload
= AfterRightPanelPhaseChangeAction & SetRightPanelPhaseRefireParams;

View file

@ -0,0 +1,37 @@
/*
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 { VerificationRequest } from "matrix-js-sdk/src/crypto/verification/request/VerificationRequest";
import { RoomMember } from "matrix-js-sdk/src/models/room-member";
import { RightPanelPhases } from "../../stores/RightPanelStorePhases";
import { ActionPayload } from "../payloads";
import { Action } from "../actions";
export interface SetRightPanelPhasePayload extends ActionPayload {
action: Action.SetRightPanelPhase;
phase: RightPanelPhases;
refireParams?: SetRightPanelPhaseRefireParams;
}
export interface SetRightPanelPhaseRefireParams {
member?: RoomMember;
verificationRequest?: VerificationRequest;
groupId?: string;
groupRoomId?: string;
// XXX: The type for event should 'view_3pid_invite' action's payload
event?: any;
}

View file

@ -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 ToggleRightPanelPayload extends ActionPayload {
action: Action.ToggleRightPanel;
/**
* The type of room that the panel is toggled in.
*/
type: "group" | "room";
}

View file

@ -15,8 +15,9 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
import SettingsStore, {SettingLevel} from "../settings/SettingsStore";
import SettingsStore from "../settings/SettingsStore";
import {orderBy} from "lodash";
import { SettingLevel } from "../settings/SettingLevel";
interface ILegacyFormat {
[emoji: string]: [number, number]; // [count, date]

View file

@ -60,5 +60,310 @@
"powered by Matrix": "مشغل بواسطة Matrix",
"The platform you're on": "المنصة الحالية",
"Your language of choice": "اللغة المختارة",
"e.g. %(exampleValue)s": "مثال %(exampleValue)s"
"e.g. %(exampleValue)s": "مثال %(exampleValue)s",
"Use Single Sign On to continue": "استخدم تسجيل الدخول الموحد للاستمرار",
"Confirm adding this email address by using Single Sign On to prove your identity.": "اكد اضافة بريدك الالكتروني عن طريق الدخول الموحد (SSO) لتثبت هويتك.",
"Single Sign On": "تسجيل الدخول الموحد",
"Confirm adding email": "تأكيد اضافة بريدك الالكتروني",
"Click the button below to confirm adding this email address.": "انقر على الزر ادناه لتأكد اضافة هذا البريد الالكتروني.",
"Confirm": "تأكيد",
"Add Email Address": "اضافة بريد الكتروني",
"Confirm adding this phone number by using Single Sign On to prove your identity.": "قم بتأكيد اضافة رقم الهاتف هذا باستخدام تقنية الدخول الموحد لتثبت هويتك.",
"Confirm adding phone number": "قم بتأكيد اضافة رقم الهاتف",
"Click the button below to confirm adding this phone number.": "انقر الزر ادناه لتأكيد اضافة رقم الهاتف.",
"Add Phone Number": "اضافة رقم هاتف",
"Which officially provided instance you are using, if any": "التي تقدم البيئة التي تستخدمها بشكل رسمي، اذا كان هناك",
"Whether you're using %(brand)s on a device where touch is the primary input mechanism": "عندما تستخدم %(brand)s على جهاز تكون شاشة اللمس هي طريقة الادخال الرئيسية",
"Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "اذا كنت تستخدم او لا تستخدم ميزة 'breadcrumbs' (الافاتار فوق قائمة الغرف)",
"Whether you're using %(brand)s as an installed Progressive Web App": "اذا كنت تستخدم %(brand)s كتطبيق ويب",
"Your user agent": "وكيل المستخدم الخاص بك",
"Unable to load! Check your network connectivity and try again.": "غير قادر على التحميل! قم فحص اتصالك الشبكي وحاول مرة اخرى.",
"Call Timeout": "مهلة الاتصال",
"Call failed due to misconfigured server": "فشل الاتصال بسبب إعداد السيرفر بشكل خاطئ",
"Please ask the administrator of your homeserver (<code>%(homeserverDomain)s</code>) to configure a TURN server in order for calls to work reliably.": "يرجى مطالبة مسئول سيرفرك (<code>%(homeserverDomain)s</code>) بإعداد سيرفر TURN لكي تعمل المكالمات بشكل صحيح.",
"Alternatively, you can try to use the public server at <code>turn.matrix.org</code>, but this will not be as reliable, and it will share your IP address with that server. You can also manage this in Settings.": "بدلاً من ذلك، يمكنك محاولة استخدام السيرفر العام على <code>turn.matrix.org</code>، ولكن هذا لن يكون موثوقًا به، وسيشارك عنوان IP الخاص بك مع هذا السيرفر. يمكنك أيضًا تعديل ذلك في الإعدادات.",
"Try using turn.matrix.org": "جرب استخدام turn.matrix.org",
"OK": "حسنا",
"Unable to capture screen": "غير قادر على التقاط الشاشة",
"Call Failed": "فل الاتصال",
"You are already in a call.": "أنت بالفعل في مكالمة.",
"VoIP is unsupported": "تقنية VoIP غير مدعومة",
"You cannot place VoIP calls in this browser.": "لايمكنك اجراء مكالمات VoIP عبر هذا المتصفح.",
"A call is currently being placed!": "يتم حاليًا إجراء مكالمة!",
"A call is already in progress!": "المكالمة جارية بالفعل!",
"Permission Required": "مطلوب صلاحية",
"You do not have permission to start a conference call in this room": "ليس لديك صلاحية لبدء مكالمة جماعية في هذه الغرفة",
"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'.",
"The file '%(fileName)s' exceeds this homeserver's size limit for uploads": "إن حجم الملف '%(fileName)s' يتجاوز الحد المسموح به للرفع في السيرفر",
"Upload Failed": "فشل الرفع",
"Server may be unavailable, overloaded, or you hit a bug.": "قد يكون السيرفر غير متوفر، او محملا بشكل زائد او انك طلبت ميزة بها مشكلة.",
"The server does not support the room version specified.": "السيرفر لا يدعم إصدار الغرفة المحدد.",
"Failure to create room": "فشل في انشاء الغرفة",
"Cancel entering passphrase?": "هل تريد إلغاء إدخال عبارة المرور؟",
"Are you sure you want to cancel entering passphrase?": "هل أنت متأكد من أنك تريد إلغاء إدخال عبارة المرور؟",
"Go Back": "الرجوع للخلف",
"Setting up keys": "إعداد المفاتيح",
"Sun": "احد",
"Mon": "اثنين",
"Tue": "ثلاثاء",
"Wed": "اربعاء",
"Thu": "خميس",
"Fri": "جمعة",
"Sat": "سبت",
"Jan": "يناير",
"Feb": "فبراير",
"Mar": "مارس",
"Apr": "ابريل",
"May": "مايو",
"Jun": "يونيو",
"Jul": "يوليو",
"Aug": "اغسطس",
"Sep": "سبتمبر",
"Oct": "اكتوبر",
"Nov": "نوفمبر",
"Dec": "ديسمبر",
"PM": "مساء",
"AM": "صباحا",
"%(weekDayName)s %(time)s": "%(weekDayName)s %(time)s",
"%(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",
"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": "تحذير: أي شخص تضيفه إلى مجتمع سيكون مرئيًا للعامة لأي شخص يعرف معرف المجتمع",
"Invite new community members": "دعوى اعضاء جدد للمجتمع",
"Name or Matrix ID": "الاسم او معرف Matrix",
"Invite to Community": "دعوة الى المجتمع",
"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 address": "اسم او عنوان الغرفة",
"Add to community": "اضافة لمجتمع",
"Failed to invite the following users to %(groupId)s:": "فشل في اضافة المستخدمين التاليين الى %(groupId)s:",
"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:",
"Unnamed Room": "غرفة بدون اسم",
"Identity server has no terms of service": "سيرفر الهوية ليس لديه شروط للخدمة",
"This action requires accessing the default identity server <server /> to validate an email address or phone number, but the server does not have any terms of service.": "هذا الحدث يتطلب الوصول الى السيرفر الافتراضي للهوية <server /> للتحقق من البريد الالكتروني او رقم الهاتف، ولكن هذا السيرفر ليس لديه اي شروط للخدمة.",
"Only continue if you trust the owner of the server.": "لا تستمر إلا إذا كنت تثق في مالك السيرفر.",
"Trust": "ثِق",
"%(name)s is requesting verification": "%(name)s يطلب التحقق",
"%(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 على هذا السيرفر.",
"Use your account to sign in to the latest version": "استخدم حسابك للدخول الى الاصدار الاخير",
"Were excited to announce Riot is now Element": "نحن سعيدون باعلان ان Riot اصبح الان Element",
"Riot is now Element!": "Riot اصبح الان Element!",
"Learn More": "تعلم المزيد",
"Sign In or Create Account": "قم بتسجيل الدخول او انشاء حساب جديد",
"Use your account or create a new one to continue.": "استخدم حسابك او قم بانشاء حساب اخر للاستمرار.",
"Create Account": "انشاء حساب",
"Sign In": "الدخول",
"Default": "افتراضي",
"Restricted": "مقيد",
"Moderator": "مشرف",
"Admin": "مدير",
"Custom (%(level)s)": "(%(level)s) مخصص",
"Failed to invite": "فشل في الدعوة",
"Operation failed": "فشلت العملية",
"Failed to invite users to the room:": "فشل في دعوة المستخدمين للغرفة:",
"Failed to invite the following users to the %(roomName)s room:": "فشل في دعوة المستخدمين التالية اسمائهم الى الغرفة %(roomName)s:",
"You need to be logged in.": "تحتاج إلى تسجيل الدخول.",
"You need to be able to invite users to do that.": "يجب أن تكون قادرًا على دعوة المستخدمين للقيام بذلك.",
"Unable to create widget.": "غير قادر على إنشاء Widget.",
"Missing roomId.": "معرف الغرفة مفقود.",
"Failed to send request.": "فشل في ارسال الطلب.",
"This room is not recognised.": "لم يتم التعرف على هذه الغرفة.",
"Power level must be positive integer.": "يجب أن يكون مستوى الطاقة عددًا صحيحًا موجبًا.",
"You are not in this room.": "أنت لست في هذه الغرفة.",
"You do not have permission to do that in this room.": "ليس لديك صلاحية للقيام بذلك في هذه الغرفة.",
"Missing room_id in request": "رقم الغرفة مفقود في الطلب",
"Room %(roomId)s not visible": "الغرفة %(roomId)s غير مرئية",
"Missing user_id in request": "رقم المستخدم مفقود في الطلب",
"Messages": "الرسائل",
"Actions": "الإجراءات",
"Advanced": "متقدم",
"Other": "أخرى",
"Command error": "خطأ في الأمر",
"Usage": "الاستخدام",
"Prepends ¯\\_(ツ)_/¯ to a plain-text message": "ادخل احد الرموز ¯\\_(ツ)_/¯ قبل نص الرسالة",
"Sends a message as plain text, without interpreting it as markdown": "ارسال رسالة كنص، دون تفسيرها على انها معلمات",
"Sends a message as html, without interpreting it as markdown": "ارسال رسالة بشكل HTML، دون تفسيرها على انها معلمات",
"Searches DuckDuckGo for results": "البحث في DuckDuckGo للحصول على نتائج",
"/ddg is not a command": "/ddg ليس امر",
"To use it, just wait for autocomplete results to load and tab through them.": "لاستخدامها، فقط انتظر حتى يكتمل تحميل النتائج والمرور عليها.",
"Upgrades a room to a new version": "ترقية الغرفة الى الاصدار الجديد",
"You do not have the required permissions to use this command.": "ليس لديك الأذونات المطلوبة لاستخدام هذا الأمر.",
"Error upgrading room": "خطأ في ترقية الغرفة",
"Double check that your server supports the room version chosen and try again.": "تحقق مرة أخرى من أن سيرفرك يدعم إصدار الغرفة المختار وحاول مرة أخرى.",
"Changes your display nickname": "يغير لقب العرض الخاص بك",
"Changes your display nickname in the current room only": "يغير لقب العرض الخاص بك في الغرفة الحالية فقط",
"Changes the avatar of the current room": "يغير الصورة الرمزية للغرفة الحالية",
"Changes your avatar in this current room only": "تغيير الصورة الرمزية الخاصة بك في هذه الغرفة الحالية فقط",
"Changes your avatar in all rooms": "يغير صورتك الرمزية في جميع الغرف",
"Gets or sets the room topic": "الحصول على أو تحديد موضوع الغرفة",
"Failed to set topic": "فشل في تحديد الموضوع",
"This room has no topic.": "هذه الغرفة ليس لها موضوع.",
"Sets the room name": "يضبط اسم الغرفة",
"Invites user with given id to current room": "يدعو المستخدم حسب المعرّف المعطى إلى الغرفة الحالية",
"Use an identity server": "خادوم التعريف",
"Use an identity server to invite by email. Click continue to use the default identity server (%(defaultIdentityServerName)s) or manage in Settings.": "استخدم سيرفر للهوية للدعوة عبر البريد الالكتروني. انقر على استمرار لاستخدام سيرفر الهوية الافتراضي (%(defaultIdentityServerName)s) او قم بضبط الاعدادات.",
"Use an identity server to invite by email. Manage in Settings.": "استخدم سيرفر الهوية للدعوة عبر البريد الالكتروني. ضبط الاعدادات.",
"Joins room with given address": "الانضمام الى الغرفة بحسب العنوان المعطى",
"Leave room": "اترك الغرفة",
"Unrecognised room address:": "عنوان الغرفة غير معروف:",
"Kicks user with given id": "يطرد المستخدم حسب المعرّف المعطى",
"Bans user with given id": "يحظر المستخدم حسب المعرّف المعطى",
"Unbans user with given ID": "يُلغي الحظر عن المستخدم حسب المعرّف المعطى",
"Ignores a user, hiding their messages from you": "يتجاهل المستخدم، ويخفي رسائله عنك",
"Ignored user": "مستخدم متجاهل",
"You are now ignoring %(userId)s": "انت تقوم الان بتجاهل %(userId)s",
"Stops ignoring a user, showing their messages going forward": "يوقف تجاهل المستخدم ويظهر رسائله من الان فصاعدا",
"Unignored user": "المستخدم غير متجاهل",
"You are no longer ignoring %(userId)s": "انت لم تعد متجاهلا للمستخدم %(userId)s",
"Define the power level of a user": "قم بتعريف مستوى الطاقة للمستخدم",
"Command failed": "فشل الامر",
"Could not find user in room": "لم يستطع ايجاد مستخدم في غرفة",
"Deops user with given id": "يُلغي إدارية المستخدم حسب المعرّف المعطى",
"Opens the Developer Tools dialog": "يفتح نافذة ادوات المطور",
"Adds a custom widget by URL to the room": "يضيف Widget خاص عبر URL الى الغرفة",
"Please supply a widget URL or embed code": "رجاء قم بتحديد Widget URL او قم بتضمين كود",
"Please supply a https:// or http:// widget URL": "يرجى ادخال a https:// او http:// widget URL",
"You cannot modify widgets in this room.": "لا يمكنك تعديل الحاجيات في هذه الغرفة.",
"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\" المعطى. هذا يعني ان اتصالك اصبح مكشوف!",
"Verified key": "مفتاح مؤكد",
"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. تم تحديد الجلسة على انها مؤكدة.",
"Forces the current outbound group session in an encrypted room to be discarded": "يفرض تجاهل جلسة المجموعة الصادرة الحالية في غرفة مشفرة",
"Sends the given message coloured as a rainbow": "يرسل رسالة معينة ملونة مثل قوس قزح",
"Sends the given emote coloured as a rainbow": "يرسل الرمز المعطى باللون كقوس قزح",
"Displays list of commands with usages and descriptions": "يعرض قائمة الأوامر مع الوصف وطرق الاستخدام",
"Displays information about a user": "يعرض معلومات عن المستخدم",
"Send a bug report with logs": "إرسال تقرير خطأ يحتوي على سجلات الاحداث",
"Logs sent": "تم ارسال سجل الاحداث",
"Opens chat with the given user": "يفتح دردشة من المستخدم المعطى",
"Sends a message to the given user": "يرسل رسالة الى المستخدم المعطى",
"Displays action": "يعرض إجراءً",
"Reason": "السبب",
"%(targetName)s accepted the invitation for %(displayName)s.": "%(targetName)s قبل دعوة %(displayName)s.",
"%(targetName)s accepted an invitation.": "%(targetName)s قبل الدعوة.",
"%(senderName)s requested a VoIP conference.": "%(senderName)s طلب مكالمة VoIP جماعية.",
"%(senderName)s invited %(targetName)s.": "%(senderName)s دعا %(targetName)s.",
"%(senderName)s banned %(targetName)s.": "%(senderName)s حظر %(targetName)s.",
"%(oldDisplayName)s changed their display name to %(displayName)s.": "%(oldDisplayName)s غير اسم العرض الخاص به الى %(displayName)s.",
"%(senderName)s set their display name to %(displayName)s.": "%(senderName)s حدد اسم العرض:%(displayName)s.",
"%(senderName)s removed their display name (%(oldDisplayName)s).": "%(senderName)s ازال اسم العرض (%(oldDisplayName)s).",
"%(senderName)s removed their profile picture.": "%(senderName)s ازال صورة البروفايل الخاصة به.",
"%(senderName)s changed their profile picture.": "%(senderName)s غير صورة البروفايل الخاصة به.",
"%(senderName)s set a profile picture.": "%(senderName)s غير صورة البروفايل الخاصة به.",
"%(senderName)s made no change.": "%(senderName)s لم يقم باية تعديلات.",
"VoIP conference started.": "بدأ اجتماع VoIP.",
"%(targetName)s joined the room.": "%(targetName)s انضم الى الغرفة.",
"VoIP conference finished.": "انتهى اجتماع VoIP.",
"%(targetName)s rejected the invitation.": "%(targetName)s رفض الدعوة.",
"%(targetName)s left the room.": "%(targetName)s غادر الغرفة.",
"%(senderName)s unbanned %(targetName)s.": "%(senderName)s الغى الحظر على %(targetName)s.",
"%(senderName)s withdrew %(targetName)s's invitation.": "%(senderName)s سحب دعوة %(targetName)s.",
"%(senderName)s kicked %(targetName)s.": "%(senderName)s طرد %(targetName)s.",
"%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s غير الموضوع الى \"%(topic)s\".",
"%(senderDisplayName)s removed the room name.": "%(senderDisplayName)s ازال اسم الغرفة.",
"%(senderDisplayName)s changed the room name from %(oldRoomName)s to %(newRoomName)s.": "%(senderDisplayName)s غير اسم الغرفة من %(oldRoomName)s الى %(newRoomName)s.",
"%(senderDisplayName)s changed the room name to %(roomName)s.": "%(senderDisplayName)s غير اسم الغرفة الى %(roomName)s.",
"%(senderDisplayName)s upgraded this room.": "%(senderDisplayName)s قام بترقية هذه الغرفة.",
"%(senderDisplayName)s made the room public to whoever knows the link.": "%(senderDisplayName)s قام بجعل هذة الغرفة عامة لكل شخص يعرف الرابط.",
"%(senderDisplayName)s made the room invite only.": "%(senderDisplayName)s جعل ممكنه لكل من لديه دعوة فقط.",
"%(senderDisplayName)s changed the join rule to %(rule)s": "%(senderDisplayName)s قام بتغيير قاعدة الانضمام الى %(rule)s",
"%(senderDisplayName)s has allowed guests to join the room.": "%(senderDisplayName)s قام بالسماح للضيوف بالانضمام الى الغرفة.",
"%(senderDisplayName)s has prevented guests from joining the room.": "%(senderDisplayName)s قام بإيقاف امكانية انضمام الضيوف الى الغرفة.",
"%(senderDisplayName)s changed guest access to %(rule)s": "%(senderDisplayName)s غير طريقة دخول الضيوف الى %(rule)s",
"%(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 في هذه الغرفة.",
"%(senderDisplayName)s sent an image.": "قام %(senderDisplayName)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 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 لهذه الغرفة.",
"%(senderName)s removed the alternative addresses %(addresses)s for this room.|other": "قام %(senderName)s بإزالة العناوين البديلة %(addresses)s لهذه الغرفة.",
"%(senderName)s removed the alternative addresses %(addresses)s for this room.|one": "قام %(senderName)s بإزالة العنوان البديل %(addresses)s لهذه الغرفة.",
"%(senderName)s changed the alternative addresses for this room.": "قام %(senderName)s بتعديل العناوين البديلة لهذه الغرفة.",
"%(senderName)s changed the main and alternative addresses for this room.": "قام %(senderName)s بتعديل العناوين الرئيسية و البديلة لهذه الغرفة.",
"%(senderName)s changed the addresses for this room.": "قام %(senderName)s بتعديل عناوين هذه الغرفة.",
"Someone": "شخص ما",
"(not supported by this browser)": "(غير مدعوم في هذا المتصفح)",
"%(senderName)s answered the call.": "%(senderName)s رد على المكالمة.",
"(could not connect media)": "(غير قادر على الاتصال بالوسيط)",
"(no answer)": "(لايوجد رد)",
"(unknown failure: %(reason)s)": "(فشل غير معروف:%(reason)s)",
"%(senderName)s ended the call.": "%(senderName)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 مكالمة فيديو.",
"%(senderName)s placed a video call. (not supported by this browser)": "أجرى %(senderName)s مكالمة فيديو. (غير متوافقة مع هذا المتصفح)",
"%(senderName)s revoked the invitation for %(targetDisplayName)s to join the room.": "قام %(senderName)s بسحب الدعوة الى %(targetDisplayName)s بالانضمام الى الغرفة.",
"%(senderName)s sent an invitation to %(targetDisplayName)s to join the room.": "أرسل %(senderName)s دعوة الى %(targetDisplayName)s للانضمام الى الغرفة.",
"%(senderName)s made future room history visible to all room members, from the point they are invited.": "قام %(senderName)s بتعديل رؤية المحادثات السابقة ممكنة لكل الاعضاء من تاريخ دعوتهم بالانضمام.",
"%(senderName)s made future room history visible to all room members, from the point they joined.": "قام %(senderName)s بتعديل رؤية المحادثات السابقة ممكنة لكل الاعضاء من لحظة انضمامهم.",
"%(senderName)s made future room history visible to all room members.": "قام %(senderName)s بتعديل رؤية المحادثات السابقة ممكنة لكل الاعضاء.",
"%(senderName)s made future room history visible to anyone.": "قام %(senderName)s بتعديل رؤية المحادثات السابقة ممكنة لأي شخص.",
"%(senderName)s made future room history visible to unknown (%(visibility)s).": "قام %(senderName)s بجعل المحادثات السابقة مرئية لمجهول (%(visibility)s).",
"%(userId)s from %(fromPowerLevel)s to %(toPowerLevel)s": "%(userId)s من %(fromPowerLevel)s الى %(toPowerLevel)s",
"%(senderName)s changed the power level of %(powerLevelDiffText)s.": "غير %(senderName)s مستوى الطاقة الخاصة ب %(powerLevelDiffText)s.",
"%(senderName)s changed the pinned messages for the room.": "عدل %(senderName)s الرسائل المثبتة للغرفة.",
"%(widgetName)s widget modified by %(senderName)s": "الودجت %(widgetName)s تعدلت بواسطة %(senderName)s",
"%(widgetName)s widget added by %(senderName)s": "الودجت %(widgetName)s اضيفت بواسطة %(senderName)s",
"%(widgetName)s widget removed by %(senderName)s": "الودجت %(widgetName)s حذفت بواسطة %(senderName)s",
"Whether or not you're logged in (we don't record your username)": "سواءً كنت مسجلا دخولك أم لا (لا نحتفظ باسم المستخدم)",
"Every page you use in the app": "كل صفحة تستخدمها في التطبيق",
"e.g. <CurrentPageURL>": "مثلا <رابط الصفحة الحالية>",
"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.": "على الرغم من كون هذه الصفحة تحوي معلومات تمكن تحديد الهوية، مثل معرف الغرفة والمستخدم والمجموعة، فهذه البيانات يتم حذفها قبل أن ترسل للسيرفر.",
"The remote side failed to pick up": "الطرف الآخر لم يتمكن من الرد",
"Existing Call": "مكالمة موجودة",
"You cannot place a call with yourself.": "لا يمكنك الاتصال بنفسك.",
"Call in Progress": "المكالمة قيد التحضير",
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "يرجى تثبيت <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.",
"%(senderName)s removed the rule banning users matching %(glob)s": "%(اسم المرسل)S إزالة القاعدة التي تحظر المستخدمين المتطابقين %(عام)s",
"%(senderName)s removed the rule banning rooms matching %(glob)s": "%(اسم المرسل)s إزالة القاعدة التي تحظر الغرف المتطابقة %(عام)s",
"%(senderName)s removed the rule banning servers matching %(glob)s": "%(اسم المرسل)s إزالة القاعدة التي تحظر الغرف المتطابقة %(عام)s",
"%(senderName)s removed a ban rule matching %(glob)s": "%(اسم المرسل)s إزالة قاعدة الحظر المتطابقة %(عام)s",
"%(senderName)s updated an invalid ban rule": "%(اسم المرسل)s قاعدة حظر محدثة غير صالحة",
"%(senderName)s updated the rule banning users matching %(glob)s for %(reason)s": "%(senderName)s قاعدة حظر المستخدمين المتطابقين محدثة %(glob)s من أجل %(reason)s",
"%(senderName)s updated a ban rule matching %(glob)s for %(reason)s": "%(senderName)s قاعدة حظر مطابقة محدثة %(glob)s من أجل %(reason)s",
"%(senderName)s created a rule banning rooms matching %(glob)s for %(reason)s": "%(senderName)s قاعدة حظر غرف مطابقة منشأة %(glob)s من أجل %(reason)s",
"%(senderName)s created a rule banning servers matching %(glob)s for %(reason)s": "%(senderName)s قاعدة حظر سيرفرات مظابقة منشأة %(glob)s من أجل %(reason)s",
"%(senderName)s created a ban rule matching %(glob)s for %(reason)s": "%(senderName)s قاعدة حظر مطابق منشأة %(glob)s من أجل %(reason)s",
"%(senderName)s changed a rule that was banning users 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 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",
"Light": "ضوء",
"Dark": "مظلم",
"You signed in to a new session without verifying it:": "قمت بتسجيل الدخول لجلسة جديدة من غير التحقق منها",
"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 تم تسجيل الدخول لجلسة جديدة من غير التحقق منها",
"Ask this user to verify their session, or manually verify it below.": "اطلب من هذا المستخدم التحقق من جلسته أو تحقق منها بشكل يدوي في الأسفل",
"Not Trusted": "غير موثوقة",
"Manually Verify by Text": "التحقق بشكل يدوي عبر نص",
"Interactively verify by Emoji": "التحقق بشكل تفاعلي عبر صور إيموجي",
"Done": "تم",
"%(displayName)s is typing …": "%(displayName)s يكتب",
"%(names)s and %(count)s others are typing …|other": "%(names)s و %(count)s آخرين يكتبون",
"%(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": "لا يمكن الوصول إلى السيرفر",
"Ensure you have a stable internet connection, or get in touch with the server admin": "تأكد من أنك تملك اتصال بالانترنت مستقر أو تواصل مع مدير السيرفر",
"Your %(brand)s is misconfigured": "%(brand)s لديك غير مهيأ",
"Ask your %(brand)s admin to check <a>your config</a> for incorrect or duplicate entries.": "اطلب من %(brand)s مديرك لفحص <a> إعدادك </a> من أجل مدخلات مكررة أو خاطئة",
"Cannot reach identity server": "لا يمكن الوصول لهوية السيرفر",
"You can register, but some features will be unavailable until the identity server is back online. If you keep seeing this warning, check your configuration or contact a server admin.": "يمكنك التسجيل , لكن بعض الميزات ستكون غير متوفرة حتى يتم التعرف على هوية السيرفر بشكل متصل . إن كنت ما تزال ترى هذا التحذير , تأكد من إعداداتك أو تواصل مع مدير السيرفر",
"You can reset your password, but some features will be unavailable until the identity server is back online. If you keep seeing this warning, check your configuration or contact a server admin.": "يمكنك إعادة ضبط كلمة السر لكن بعض الميزات ستكون غير متوفرة حتى عودة السيرفر للإنترنت . إذا كنت لا تزال ترى هذا التحذير تأكد من إعداداتك أو تواصل مع مدير السيرفر",
"I understand the risks and wish to continue": "ادرك المخاطر وارغب في الاستمرار"
}

View file

@ -2267,5 +2267,43 @@
"Leave Room": "Напусни стаята",
"Room options": "Настройки на стаята",
"Use Recovery Key or Passphrase": "Използвай ключ за възстановяване или парола",
"Use Recovery Key": "Използвай ключ за възстановяване"
"Use Recovery Key": "Използвай ключ за възстановяване",
"Use your account to sign in to the latest version": "Използвайте профила си за да влезете в последната версия",
"Were excited to announce Riot is now Element": "Развълнувани сме да обявим, че Riot вече е Element",
"Riot is now Element!": "Riot вече е Element!",
"Learn More": "Научи повече",
"You joined the call": "Присъединихте се към разговор",
"%(senderName)s joined the call": "%(senderName)s се присъедини към разговор",
"Call in progress": "Тече разговор",
"You left the call": "Напуснахте разговора",
"%(senderName)s left the call": "%(senderName)s напусна разговора",
"Call ended": "Разговора приключи",
"You started a call": "Започнахте разговор",
"%(senderName)s started a call": "%(senderName)s започна разговор",
"Waiting for answer": "Изчакване на отговор",
"%(senderName)s is calling": "%(senderName)s се обажда",
"You created the room": "Създадохте стаята",
"%(senderName)s created the room": "%(senderName)s създаде стаята",
"You made the chat encrypted": "Направихте чата шифрован",
"%(senderName)s made the chat encrypted": "%(senderName)s направи чата шифрован",
"You made history visible to new members": "Направихте историята видима за нови членове",
"%(senderName)s made history visible to new members": "%(senderName)s направи историята видима за нови членове",
"You made history visible to anyone": "Направихте историята видима за всички",
"%(senderName)s made history visible to anyone": "%(senderName)s направи историята видима за всички",
"You made history visible to future members": "Направихте историята видима за бъдещи членове",
"%(senderName)s made history visible to future members": "%(senderName)s направи историята видима за бъдещи членове",
"You were invited": "Бяхте поканени",
"%(targetName)s was invited": "%(targetName)s беше поканен",
"You left": "Напуснахте",
"%(targetName)s left": "%(targetName)s напусна",
"You were kicked (%(reason)s)": "Бяхте изгонени (%(reason)s)",
"%(targetName)s was kicked (%(reason)s)": "%(targetName)s беше изгонен(а) (%(reason)s)",
"You were kicked": "Бяхте изгонени",
"%(targetName)s was kicked": "%(targetName)s беше изгонен(а)",
"You rejected the invite": "Отхвърлихте поканата",
"%(targetName)s rejected the invite": "%(targetName)s отхвърли поканата",
"You were uninvited": "Поканата към вас беше премахната",
"%(targetName)s was uninvited": "Поканата към %(targetName)s беше премахната",
"You were banned (%(reason)s)": "Бяхте блокирани (%(reason)s)",
"%(targetName)s was banned (%(reason)s)": "%(targetName)s беше блокиран(а) (%(reason)s)"
}

View file

@ -544,7 +544,7 @@
"Public Chat": "Veřejná konverzace",
"You must <a>register</a> to use this functionality": "Pro využívání této funkce se <a>zaregistrujte</a>",
"You must join the room to see its files": "Pro zobrazení souborů musíte do místnosti vstoupit",
"<h1>HTML for your community's page</h1>\n<p>\n Use the long description to introduce new members to the community, or distribute\n some important <a href=\"foo\">links</a>\n</p>\n<p>\n You can even use 'img' tags\n</p>\n": "<h1>HTML kód stránky vaší skupiny</h1>\n<p>\n Pomocí dlouhého popisu nejprve představte skupinu novým členům nebo uvěďte \n nějaké důležité <a href=\"foo\">odkazy</a>\n</p>\n<p>\n Pro vložení obrázků můžete používat i HTML značky 'img'\n</p>\n",
"<h1>HTML for your community's page</h1>\n<p>\n Use the long description to introduce new members to the community, or distribute\n some important <a href=\"foo\">links</a>\n</p>\n<p>\n You can even use 'img' tags\n</p>\n": "<h1>HTML kód stránky vaší skupiny</h1>\n<p>\n Pomocí dlouhého popisu nejprve představte skupinu novým členům nebo uvěďte \n nějaké důležité <a href=\"foo\">odkazy</a>\n</p>\n<p>\n Pro vložení obrázků můžete používat i HTML značky „img“\n</p>\n",
"Add rooms to the community summary": "Přidat místnosti do přehledu skupiny",
"Which rooms would you like to add to this summary?": "Které místnosti se přejete přidat do tohoto přehledu?",
"Add to summary": "Přidat do přehledu",
@ -614,7 +614,7 @@
"Old cryptography data detected": "Nalezeny starší šifrované datové zprávy",
"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",
"I understand the risks and wish to continue": "Rozumím a přesto chci pokračovat",
"Send Account Data": "Poslat data o účtu",
"Advanced notification settings": "Rozšířená nastavení oznámení",
"Uploading report": "Nahrávání hlášení",
@ -828,7 +828,7 @@
"Who can join this community?": "Kdo může vstoupit do této skupiny?",
"Everyone": "Všichni",
"This room is not public. You will not be able to rejoin without an invite.": "Tato místnost není veřejná. Bez pozvánky nebudete moci znovu vstoupit.",
"Can't leave Server Notices room": "Místnost \"Server Notices\" nelze opustit",
"Can't leave Server Notices room": "Místnost „Server Notices“ nelze opustit",
"This room is used for important messages from the Homeserver, so you cannot leave it.": "Tato místnost je určena pro důležité zprávy od domovského serveru, a proto ji nelze opustit.",
"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.",
@ -975,8 +975,8 @@
"Reversed words aren't much harder to guess": "Otočená slova nejsou moc těžká na uhodnutí",
"Predictable substitutions like '@' instead of 'a' don't help very much": "Časté substituce jako 'a' za '@' a 'S' za '$' moc nepomůžou",
"Add another word or two. Uncommon words are better.": "Přidejte další slovo nebo dvě. Čím výjimečnější tím lepší.",
"Repeats like \"aaa\" are easy to guess": "Opakování jako \"aaa\" jsou jednoduché uhodnout",
"Repeats like \"abcabcabc\" are only slightly harder to guess than \"abc\"": "Opakování typu \"abcabcabc\" jsou jen o málo složitější uhodnout než \"abc\"",
"Repeats like \"aaa\" are easy to guess": "Opakování jako „aaa“ lze snadno uhodnout",
"Repeats like \"abcabcabc\" are only slightly harder to guess than \"abc\"": "Opakování typu „abcabcabc“ jsou jen o málo složitější k uhádnutí než „abc“",
"Sequences like abc or 6543 are easy to guess": "Posloupnosti jako abc nebo 6543 je lehké uhodnout",
"Recent years are easy to guess": "Nedávné roky je lehké uhodnout",
"Dates are often easy to guess": "Data je většinou lehké uhodnout",
@ -1217,7 +1217,7 @@
"Create your Matrix account on %(serverName)s": "Vytvořte si účet Matrix na %(serverName)s",
"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í)",
"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í)",
"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.",
@ -1721,7 +1721,7 @@
"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!",
"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.",
"a few seconds ago": "před pár vteřinami",
"about a minute ago": "před minutou",
@ -1903,7 +1903,7 @@
"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.",
"Show typing notifications": "Zobrazovat oznámení \"... právě píše...\"",
"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.",
@ -2103,5 +2103,66 @@
"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 %(brand)s": "Aktualizovat %(brand)s",
"A new version of %(brand)s is available!": "Je dostupná nová verze %(brand)su!"
"A new version of %(brand)s is available!": "Je dostupná nová verze %(brand)su!",
"Are you sure you want to cancel entering passphrase?": "Chcete určitě zrušit zadávání hesla?",
"Use your account to sign in to the latest version": "Přihlašte se za pomoci svého účtu do nejnovější verze",
"Riot is now Element!": "Riot je nyní Element!",
"Learn More": "Zjistit více",
"Light": "Světlý",
"Dark": "Tmavý",
"You joined the call": "Připojili jste se k hovoru",
"%(senderName)s joined the call": "%(senderName)s se připojil k hovoru",
"Call in progress": "Probíhá hovor",
"Show rooms with unread messages first": "Zobrazovat místnosti s nepřečtenými zprávami jako první",
"Show previews of messages": "Zobrazovat náhledy zpráv",
"Sort by": "Řadit dle",
"Activity": "Aktivity",
"A-Z": "AZ",
"List options": "Možnosti seznamu",
"Show %(count)s more|other": "Zobrazit %(count)s dalších",
"Show %(count)s more|one": "Zobrazit %(count)s další",
"Use default": "Použít výchozí",
"Mentions & Keywords": "Zmínky a klíčová slova",
"Notification options": "Možnosti oznámení",
"Favourited": "Oblíbená",
"Leave Room": "Opustit místnost",
"Forget Room": "Zapomenout místnost",
"Room options": "Možnosti místnosti",
"This room is public": "Tato místnost je veřejná",
"Away": "Pryč",
"Error creating address": "Chyba při tvorbě adresy",
"There was an error creating that address. It may not be allowed by the server or a temporary failure occurred.": "Při vytváření adresy došlo k chybě. Mohl to zakázat server, nebo mohlo dojít k dočasnému selhání.",
"You don't have permission to delete the address.": "Nemáte oprávnění adresu smazat.",
"There was an error removing that address. It may no longer exist or a temporary error occurred.": "Při odstraňování adresy došlo k chybě. Adresa již nemusí ekzistovat, nebo mohlo dojít k dočasné chybě.",
"Error removing address": "Chyba při odstraňování adresy",
"Message deleted on %(date)s": "Zpráva byla odstraněna %(date)s",
"Edited at %(date)s": "Upraveno %(date)s",
"Click to view edits": "Klikněte pro zobrazení úprav",
"Categories": "Kategorie",
"QR Code": "QR kód",
"Room address": "Adresa místnosti",
"Please provide a room address": "Zadejte prosím adresu místnosti",
"This address is available to use": "Tato adresa je dostupná",
"This address is already in use": "Tato adresa je již používána",
"Reminder: Your browser is unsupported, so your experience may be unpredictable.": "Připomínka: váš prohlížeč není podporován, takže vaše zkušenost může být nepředvídatelná.",
"Set a room address to easily share your room with other people.": "Nastavte adresu místnosti, abyste ji mohli snadno sdílet s lidmi.",
"To continue, use Single Sign On to prove your identity.": "Pro pokračování prokažte svou identitu pomocí Jednotného přihlášení.",
"Confirm to continue": "Pro pokračování potvrďte",
"Click the button below to confirm your identity.": "Klikněte na tlačítko níže pro potvrzení vaší identity.",
"Invite someone using their name, username (like <userId/>), email address or <a>share this room</a>.": "Pozvěte někoho za použití jeho jména, uživatelského jména (např. <userId/>), e-mailové adresy, a nebo <a>sdílejte tuto místnost</a>.",
"a new master key signature": "nový podpis hlavního klíče",
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Pro nejlepší zážitek si prosím nainstalujte prohlížeč <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, nebo <safariLink>Safari</safariLink>.",
"Were excited to announce Riot is now Element": "S nadšením oznamujeme, že Riot je nyní Element",
"Enable experimental, compact IRC style layout": "Povolit experimentální, kompaktní zobrazení zpráv ve stylu IRC",
"New version available. <a>Update now.</a>": "Je dostupná nová verze. <a>Aktualizovat nyní.</a>",
"Message layout": "Zobrazení zpráv",
"Compact": "Kompaktní",
"Modern": "Moderní",
"Set the name of a font installed on your system & %(brand)s will attempt to use it.": "Zadejte jméno písma, které máte naistalované v systému, a %(brand)s se jej pokusí použít.",
"Customise your appearance": "Přizpůsobte si vzhled aplikace",
"Appearance Settings only affect this %(brand)s session.": "Nastavení vzhledu působí jen v této relaci programu %(brand)s.",
"Add users and servers you want to ignore here. Use asterisks to have %(brand)s match any characters. For example, <code>@bot:*</code> would ignore all users that have the name 'bot' on any server.": "Sem přídejte servery a uživatele, které chcete ignorovat. Hvězdička pro %(brand)s zastupuje libovolný počet kterýchkoliv znaků. Např. <code>@bot:*</code> bude ignorovat všechny uživatele se jménem „bot“ na kterémkoliv serveru.",
"Signature upload success": "Podpis úspěšně nahrán",
"Signature upload failed": "Podpis se nepodařilo nahrá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.": "Je-li jiná verze programu %(brand)s stále otevřená na jiné kartě, tak ji prosím zavřete, neboť užívání programu %(brand)s stejným hostitelem se zpožděným nahráváním současně povoleným i zakázaným bude působit problémy."
}

View file

@ -1146,7 +1146,7 @@
"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 <existingIssuesLink>view existing issues</existingIssuesLink> first (and add a +1) or <newIssueLink>create a new issue</newIssueLink> if you can't find it.": "Um doppelte Issues zu vermeiden, <existingIssuesLink>schauen Sie bitte zuerst die existierenden Issues an</existingIssuesLink> (und fügen Sie ein \"+1\" hinzu), oder <newIssueLink>erstellen Sie ein neues Issue</newIssueLink>, wenn Sie keines finden können.",
"Report bugs & give feedback": "Melde Fehler & gebe Rückmeldungen",
"Report bugs & give feedback": "Melde Fehler & gib Rückmeldungen",
"Update status": "Aktualisiere Status",
"Set status": "Setze Status",
"Hide": "Verberge",
@ -2326,5 +2326,40 @@
"Message deleted on %(date)s": "Nachricht am %(date)s gelöscht",
"Wrong file type": "Falscher Dateityp",
"Wrong Recovery Key": "Falscher Wiederherstellungsschlüssel",
"Invalid Recovery Key": "Ungültiger Wiederherstellungsschlüssel"
"Invalid Recovery Key": "Ungültiger Wiederherstellungsschlüssel",
"Riot is now Element!": "Riot ist jetzt Element!",
"Learn More": "Mehr erfahren",
"Unknown caller": "Unbekannter Anrufer",
"Incoming voice call": "Eingehender Sprachanruf",
"Incoming video call": "Eingehender Videoanruf",
"Incoming call": "Eingehender Anruf",
"There are advanced notifications which are not shown here.": "Es sind erweiterte Benachrichtigungen vorhanden, die hier nicht angezeigt werden.",
"Are you sure you want to cancel entering passphrase?": "Bist du sicher dass du die Eingabe der Passphrase abbrechen möchtest?",
"Use your account to sign in to the latest version": "Verwende dein Konto um dich bei der neusten Version anzumelden",
"* %(senderName)s %(emote)s": "* %(senderName)s %(emote)s",
"Enable advanced debugging for the room list": "Erweiterte Fehlersuche für die Raumliste aktivieren",
"Enable experimental, compact IRC style layout": "Kompaktes, experimentelles Layout im IRC-Stil aktivieren",
"User menu": "Benutzermenü",
"%(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 für Android",
"Were excited to announce Riot is now Element": "Wir freuen uns bekanntzugeben: Riot ist jetzt Element",
"%(brand)s can't securely cache encrypted messages locally while running in a web browser. Use <desktopLink>%(brand)s Desktop</desktopLink> for encrypted messages to appear in search results.": "%(brand)s kann verschlüsselte Nachrichten nicht sicher zwischenspeichern während es in einem Browser läuft. Verwende <desktopLink>%(brand)s Desktop</desktopLink> damit verschlüsselte Nachrichten durchsuchbar werden.",
"Show rooms with unread messages first": "Zeige Räume mit ungelesenen Nachrichten zuerst",
"Show previews of messages": "Zeige Vorschau von Nachrichten",
"Use default": "Verwende den Standard",
"Mentions & Keywords": "Erwähnungen & Schlüsselwörter",
"Notification options": "Benachrichtigungsoptionen",
"Forget Room": "Vergesse Raum",
"Favourited": "Favorisiert",
"This room is public": "Dieser Raum ist öffentlich",
"Away": "Abwesend",
"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 eine Emoji Verifikation, welche von %(brand)s unterstützt werden. Versuche es mit einem anderen Client.",
"Edited at %(date)s": "Geändert am %(date)s",
"Click to view edits": "Klicke um Änderungen anzuzeigen",
"%(brand)s encountered an error during upload of:": "%(brand)s hat einen Fehler festgestellt beim hochladen von:",
"Use your account to sign in to the latest version of the app at <a />": "Verwende dein Konto um dich an der neusten Version der App anzumelden<a />",
"Were excited to announce Riot is now Element!": "Wir freuen uns bekanntzugeben: Riot ist jetzt Element!",
"Learn more at <a>element.io/previously-riot</a>": "Erfahre mehr unter <a>element.io/previously-riot</a>"
}

View file

@ -426,6 +426,8 @@
"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.",
"Please contact your homeserver administrator.": "Please contact your homeserver administrator.",
"The person who invited you already left the room.": "The person who invited you already left the room.",
"The person who invited you already left the room, or their server is offline.": "The person who invited you already left the room, or their server is offline.",
"Failed to join room": "Failed to join room",
"You joined the call": "You joined the call",
"%(senderName)s joined the call": "%(senderName)s joined the call",
@ -441,6 +443,7 @@
"%(senderName)s: %(message)s": "%(senderName)s: %(message)s",
"%(senderName)s: %(reaction)s": "%(senderName)s: %(reaction)s",
"%(senderName)s: %(stickerName)s": "%(senderName)s: %(stickerName)s",
"Change notification settings": "Change notification settings",
"New spinner design": "New spinner design",
"Message Pinning": "Message Pinning",
"Custom user status messages": "Custom user status messages",
@ -611,6 +614,7 @@
"Headphones": "Headphones",
"Folder": "Folder",
"Pin": "Pin",
"Your server isn't responding to some <a>requests</a>.": "Your server isn't responding to some <a>requests</a>.",
"From %(deviceName)s (%(deviceId)s)": "From %(deviceName)s (%(deviceId)s)",
"Decline (%(counter)s)": "Decline (%(counter)s)",
"Accept <policyLink /> to continue:": "Accept <policyLink /> to continue:",
@ -1743,6 +1747,19 @@
"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 %(brand)s, please <a>report a bug</a>.": "This usually only affects how the room is processed on the server. If you're having problems with your %(brand)s, please <a>report a bug</a>.",
"You'll upgrade this room from <oldVersion /> to <newVersion />.": "You'll upgrade this room from <oldVersion /> to <newVersion />.",
"Resend": "Resend",
"You're all caught up.": "You're all caught up.",
"Server isn't responding": "Server isn't responding",
"Your server isn't responding to some of your requests. Below are some of the most likely reasons.": "Your server isn't responding to some of your requests. Below are some of the most likely reasons.",
"The server (%(serverName)s) took too long to respond.": "The server (%(serverName)s) took too long to respond.",
"Your firewall or anti-virus is blocking the request.": "Your firewall or anti-virus is blocking the request.",
"A browser extension is preventing the request.": "A browser extension is preventing the request.",
"The server is offline.": "The server is offline.",
"The server has denied your request.": "The server has denied your request.",
"Your area is experiencing difficulties connecting to the internet.": "Your area is experiencing difficulties connecting to the internet.",
"A connection error occurred while trying to contact the server.": "A connection error occurred while trying to contact the server.",
"The server is not configured to indicate what the problem is (CORS).": "The server is not configured to indicate what the problem is (CORS).",
"Recent changes that have not yet been received": "Recent changes that have not yet been received",
"Sign out and remove encryption keys?": "Sign out and remove encryption keys?",
"Clear Storage and Sign Out": "Clear Storage and Sign Out",
"Send Logs": "Send Logs",
@ -1850,7 +1867,6 @@
"Reject invitation": "Reject invitation",
"Are you sure you want to reject the invitation?": "Are you sure you want to reject the invitation?",
"Unable to reject invite": "Unable to reject invite",
"Resend": "Resend",
"Resend edit": "Resend edit",
"Resend %(unsentCount)s reaction(s)": "Resend %(unsentCount)s reaction(s)",
"Resend removal": "Resend removal",
@ -1958,7 +1974,8 @@
"Couldn't load page": "Couldn't load page",
"You must <a>register</a> to use this functionality": "You must <a>register</a> to use this functionality",
"You must join the room to see its files": "You must join the room to see its files",
"There are no visible files in this room": "There are no visible files in this room",
"No files visible in this room": "No files visible in this room",
"Attach files from chat or just drag and drop them anywhere in a room.": "Attach files from chat or just drag and drop them anywhere in a room.",
"<h1>HTML for your community's page</h1>\n<p>\n Use the long description to introduce new members to the community, or distribute\n some important <a href=\"foo\">links</a>\n</p>\n<p>\n You can even use 'img' tags\n</p>\n": "<h1>HTML for your community's page</h1>\n<p>\n Use the long description to introduce new members to the community, or distribute\n some important <a href=\"foo\">links</a>\n</p>\n<p>\n You can even use 'img' tags\n</p>\n",
"Add rooms to the community summary": "Add rooms to the community summary",
"Which rooms would you like to add to this summary?": "Which rooms would you like to add to this summary?",
@ -2031,7 +2048,8 @@
"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",
"Youre all caught up": "Youre all caught up",
"You have no visible notifications in this room.": "You have no visible notifications in this room.",
"%(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.",

View file

@ -56,7 +56,7 @@
"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.",
"Default": "Norma",
"Default": "Ordinara",
"Restricted": "Limigita",
"Moderator": "Ĉambrestro",
"Admin": "Administranto",
@ -131,7 +131,7 @@
"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",
"Message Pinning": "Fiksado de mesaĝoj",
"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",
@ -800,7 +800,7 @@
"There was an error joining the room": "Aliĝo al la ĉambro eraris",
"Sorry, your homeserver is too old to participate in this room.": "Pardonon, via hejmservilo estas tro malnova por partoprenado en la ĉambro.",
"Please contact your homeserver administrator.": "Bonvolu kontakti la administranton de via hejmservilo.",
"Show a reminder to enable Secure Message Recovery in encrypted rooms": "Montri memorigilon por ŝalti Sekuran Ricevon de Mesaĝoj en ĉifrataj ĉambroj",
"Show a reminder to enable Secure Message Recovery in encrypted rooms": "Montri memorigilon por ŝalti Sekuran ricevon de mesaĝoj en ĉifrataj ĉambroj",
"Show developer tools": "Montri verkistajn ilojn",
"Messages containing @room": "Mesaĝoj enhavantaj @room",
"Encrypted messages in one-to-one chats": "Ĉifritaj mesaĝoj en duopaj babiloj",
@ -915,7 +915,7 @@
"Change permissions": "Ŝanĝi permesojn",
"Change topic": "Ŝanĝi temon",
"Modify widgets": "Aliigi fenestraĵojn",
"Default role": "Norma rolo",
"Default role": "Ordinara rolo",
"Send messages": "Sendi mesaĝojn",
"Invite users": "Inviti uzantojn",
"Change settings": "Ŝanĝi agordojn",
@ -1222,9 +1222,9 @@
"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.",
"Forces the current outbound group session in an encrypted room to be discarded": "Devigas la aktualan eliran grupan salutaĵon en ĉifrita ĉambro forĵetiĝi",
"%(senderDisplayName)s enabled flair for %(groups)s in this room.": "%(senderDisplayName)s ŝaltis etikedojn por %(groups)s en ĉi tiu ĉambro.",
"%(senderDisplayName)s disabled flair for %(groups)s in this room.": "%(senderDisplayName)s malŝaltis etikedojn por %(groups)s en ĉi tiu ĉambro.",
"%(senderDisplayName)s enabled flair for %(newGroups)s and disabled flair for %(oldGroups)s in this room.": "%(senderDisplayName)s ŝaltis etikedojn por %(newGroups)s kaj malŝaltis etikedojn por %(oldGroups)s en ĉi tiu ĉambro.",
"%(senderDisplayName)s enabled flair for %(groups)s in this room.": "%(senderDisplayName)s ŝaltis insignojn por %(groups)s en ĉi tiu ĉambro.",
"%(senderDisplayName)s disabled flair for %(groups)s in this room.": "%(senderDisplayName)s malŝaltis insignojn por %(groups)s en ĉi tiu ĉambro.",
"%(senderDisplayName)s enabled flair for %(newGroups)s and disabled flair for %(oldGroups)s in this room.": "%(senderDisplayName)s ŝaltis insignojn por %(newGroups)s kaj malŝaltis insignojn por %(oldGroups)s en ĉi tiu ĉambro.",
"%(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",
@ -1273,7 +1273,7 @@
"No backup found!": "Neniu savkopio troviĝis!",
"Resend edit": "Resendi redakton",
"Go to Settings": "Iri al agordoj",
"Flair": "Etikedo",
"Flair": "Insigno",
"No Audio Outputs detected": "Neniu soneligo troviĝis",
"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",
@ -1282,15 +1282,15 @@
"Encryption": "Ĉifrado",
"Once enabled, encryption cannot be disabled.": "Post ŝalto, ne plu eblas malŝalti ĉifradon.",
"Encrypted": "Ĉifrata",
"The conversation continues here.": "La interparolo pluas ĉi tie.",
"The conversation continues here.": "La interparolo daŭras ĉi tie.",
"This room has been replaced and is no longer active.": "Ĉi tiu ĉambro estas anstataŭita, kaj ne plu aktivas.",
"Loading room preview": "Preparas antaŭrigardon al la ĉambro",
"Only room administrators will see this warning": "Nur administrantoj de ĉambro vidos ĉi tiun averton",
"Error updating flair": "Eraris ĝisdatigo de etikedo",
"There was an error updating the flair for this room. The server may not allow it or a temporary error occurred.": "Eraris ĝisdatigo de etikedo por ĉi tiu ĉambro. Aŭ la servilo ne permesas ĝin, aŭ dumtempa eraro okazis.",
"Showing flair for these communities:": "Montras etikedojn de la jenaj komunumoj:",
"This room is not showing flair for any communities": "Ĉi tiu ĉambro montras etikedojn de neniuj komunumoj",
"Display your community flair in rooms configured to show it.": "Montri etikedon de via komunumo en ĉambroj agorditaj por montri ĝin.",
"Error updating flair": "Eraris ĝisdatigo de insigno",
"There was an error updating the flair for this room. The server may not allow it or a temporary error occurred.": "Eraris ĝisdatigo de insigno por ĉi tiu ĉambro. Aŭ la servilo ne permesas ĝin, aŭ dumtempa eraro okazis.",
"Showing flair for these communities:": "Montras insignojn de la jenaj komunumoj:",
"This room is not showing flair for any communities": "Ĉi tiu ĉambro montras insignojn de neniuj komunumoj",
"Display your community flair in rooms configured to show it.": "Montri insignon de via komunumo en ĉambroj agorditaj por montri ĝin.",
"%(severalUsers)smade no changes %(count)s times|other": "%(severalUsers)snenion ŝanĝis je %(count)s fojoj",
"%(severalUsers)smade no changes %(count)s times|one": "%(severalUsers)snenion ŝanĝis",
"%(oneUser)smade no changes %(count)s times|other": "%(oneUser)snenion ŝanĝis je %(count)s fojoj",
@ -1357,9 +1357,9 @@
"If you don't want to set this up now, you can later in Settings.": "Se vi ne volas agordi tion nun, vi povas fari ĝin poste per agordoj.",
"Don't ask again": "Ne demandi ree",
"New Recovery Method": "Nova rehava metodo",
"A new recovery passphrase and key for Secure Messages have been detected.": "Novaj rehava pasfrazo kaj ŝlosilo por sekuraj mesaĝoj troviĝis.",
"A new recovery passphrase and key for Secure Messages have been detected.": "Novaj rehava pasfrazo kaj ŝlosilo por Sekuraj mesaĝoj troviĝis.",
"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 vi ne agordis la novan rehavan metodon, eble atakanto provas aliri vian konton. Vi tuj ŝanĝu la pasvorton de via konto, kaj agordu novan rehavan metodon en la agordoj.",
"Set up Secure Messages": "Agordi sekurajn mesaĝojn",
"Set up Secure Messages": "Agordi Sekurajn mesaĝojn",
"Recovery Method Removed": "Rehava metodo foriĝis",
"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.": "Se vi ne forigis la rehavan metodon, eble atakanto provas aliri vian konton. Vi tuj ŝanĝu la pasvorton de via konto, kaj agordu novan rehavan metodon en la agordoj.",
"Use a longer keyboard pattern with more turns": "Uzu pli longan tekston kun plia varieco",
@ -1386,7 +1386,7 @@
"<b>Save it</b> on a USB key or backup drive": "<b>Konservu ĝin</b> en poŝmemorilo aŭ savkopia disko",
"<b>Copy it</b> to your personal cloud storage": "<b>Kopiu ĝin</b> 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",
"Set up Secure Message Recovery": "Agordi Sekuran rehavon de mesaĝoj",
"Starting backup...": "Komencante savkopion…",
"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.",
@ -1721,8 +1721,8 @@
"To be secure, do this in person or use a trusted way to communicate.": "Por plia sekureco, faru tion persone, aŭ uzu alian fidatan komunikilon.",
"Verify yourself & others to keep your chats safe": "Kontrolu vin mem kaj aliajn por sekurigi viajn babilojn",
"Channel: %(channelName)s": "Kanalo: %(channelName)s",
"Show less": "Montri pli",
"Show more": "Montri malpli",
"Show less": "Montri malpli",
"Show more": "Montri pli",
"Help": "Helpo",
"Session verified": "Salutaĵo kontroliĝis",
"Copy": "Kopii",
@ -1762,16 +1762,16 @@
"This bridge is managed by <user />.": "Ĉi tiu ponto estas administrata de <user />.",
"Workspace: %(networkName)s": "Labortablo: %(networkName)s",
"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.": "Ŝanĝo de pasvorto nuntempe restarigos ĉiujn tutvoje ĉifrajn ŝlosilojn en ĉiuj salutaĵoj, malebligante legadon de ĉifrita historio, malse vi unue elportus la ŝlosilojn de viaj ĉambroj kaj reenportus ilin poste. Ĉi tion ni plibonigos ose.",
"Your homeserver does not support cross-signing.": "Via hejmservilo ne subtenas transirajn subskribojn.",
"Cross-signing and secret storage are enabled.": "Transiraj subskriboj kaj sekreta deponejo estas ŝaltitaj.",
"Your account has a cross-signing identity in secret storage, but it is not yet trusted by this session.": "Via konto havas identecon de transiraj subskriboj en sekreta deponejo, sed ĉi tiu salutaĵo ankoraŭ ne fidas ĝin.",
"Cross-signing and secret storage are not yet set up.": "Transiraj subskriboj kaj sekreta deponejo ankoraŭ ne agordiĝis.",
"Reset cross-signing and secret storage": "Remeti transirajn subskribojn kaj sekretan deponejon",
"Bootstrap cross-signing and secret storage": "Praŝargi transirajn subskribojn kaj sekretan deponejon",
"Cross-signing public keys:": "Transiraj publikaj ŝlosiloj:",
"Your homeserver does not support cross-signing.": "Via hejmservilo ne subtenas delegajn subskribojn.",
"Cross-signing and secret storage are enabled.": "Delegaj subskriboj kaj sekreta deponejo estas ŝaltitaj.",
"Your account has a cross-signing identity in secret storage, but it is not yet trusted by this session.": "Via konto havas identecon por delegaj subskriboj en sekreta deponejo, sed ĉi tiu salutaĵo ankoraŭ ne fidas ĝin.",
"Cross-signing and secret storage are not yet set up.": "Delegaj subskriboj kaj sekreta deponejo ankoraŭ ne agordiĝis.",
"Reset cross-signing and secret storage": "Remeti delegajn subskribojn kaj sekretan deponejon",
"Bootstrap cross-signing and secret storage": "Pretigi delegajn subskribojn kaj sekretan deponejon",
"Cross-signing public keys:": "Delegaj publikaj ŝlosiloj:",
"in memory": "en memoro",
"not found": "ne trovita",
"Cross-signing private keys:": "Transiraj privataj ŝlosiloj:",
"Cross-signing private keys:": "Delegaj privataj ŝlosiloj:",
"in secret storage": "en sekreta deponejo",
"Secret storage public key:": "Publika ŝlosilo de sekreta deponejo:",
"in account data": "en datumoj de konto",
@ -1837,7 +1837,7 @@
"Session ID:": "Identigilo de salutaĵo:",
"Session key:": "Ŝlosilo de salutaĵo:",
"Message search": "Serĉado de mesaĝoj",
"Cross-signing": "Transiraj subskriboj",
"Cross-signing": "Delegaj subskriboj",
"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. <a>Learn more.</a>": "Ĉi tiu ĉambro transpontigas mesaĝojn al la jenaj platformoj. <a>Eksciu plion.</a>",
"This room isnt bridging messages to any platforms. <a>Learn more.</a>": "Ĉi tiu ĉambro transpontigas mesaĝojn al neniu platformo. <a>Eksciu plion.</a>",
@ -1898,9 +1898,9 @@
"Using this widget may share data <helpIcon /> with %(widgetDomain)s & your Integration Manager.": "Uzo de tiu ĉi fenestraĵo eble havigos datumojn <helpIcon /> kun %(widgetDomain)s kaj via kunigilo.",
"Using this widget may share data <helpIcon /> with %(widgetDomain)s.": "Uzo de tiu ĉi fenestraĵo eble havigos datumojn <helpIcon /> kun %(widgetDomain)s.",
"Language Dropdown": "Lingva falmenuo",
"Destroy cross-signing keys?": "Ĉu detrui transire ĉifrajn ŝlosilojn?",
"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.": "Forigo de transire ĉifraj ŝlosiloj estas porĉiama. Ĉiu, kun kiu vi interkontrolis, vidos avertojn pri sekureco. Vi preskaŭ certe ne volas ĉi tion fari, malse vi perdis ĉiun aparaton, el kiu vi povus transire subskribadi.",
"Clear cross-signing keys": "Vakigi transire ĉifrajn ŝlosilojn",
"Destroy cross-signing keys?": "Ĉu detrui delege ĉifrajn ŝlosilojn?",
"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.": "Forigo de delege ĉifraj ŝlosiloj estas porĉiama. Ĉiu, kun kiu vi interkontrolis, vidos avertojn pri sekureco. Vi preskaŭ certe ne volas ĉi tion fari, malse vi perdis ĉiun aparaton, el kiu vi povus delege subskribadi.",
"Clear cross-signing keys": "Vakigi delege ĉifrajn ŝlosilojn",
"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",
@ -2014,8 +2014,8 @@
"Keyboard Shortcuts": "Klavkombinoj",
"Start a conversation with someone using their name, username (like <userId/>) or email address.": "Komencu interparolon kun iu per ĝia nomo, uzantonomo (kiel <userId/>), aŭ retpoŝtadreso.",
"a new master key signature": "nova ĉefŝlosila subskribo",
"a new cross-signing key signature": "nova transire subskriba ŝlosila subskribo",
"a device cross-signing signature": "aparata transire subskriba ŝlosila subskribo",
"a new cross-signing key signature": "nova subskribo de delega ŝlosilo",
"a device cross-signing signature": "delega subskribo de aparato",
"a key signature": "ŝlosila subskribo",
"%(brand)s encountered an error during upload of:": "%(brand)s eraris dum alŝuto de:",
"Upload completed": "Alŝuto finiĝis",
@ -2068,7 +2068,7 @@
"Whether you're using %(brand)s as an installed Progressive Web App": "Ĉu vi uzas %(brand)son kiel Progresan retan aplikaĵon",
"Manually verify all remote sessions": "Permane kontroli ĉiujn forajn salutaĵojn",
"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.",
"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 delege subskribitajn aparatojn.",
"Invalid theme schema.": "Nevalida skemo de haŭto.",
"Mod": "Reguligisto",
"In encrypted rooms, your messages are secured and only you and the recipient have the unique keys to unlock them.": "En ĉifritaj ĉambroj, viaj mesaĝoj estas sekurigitaj, kaj nur vi kaj la ricevanto havas la unikajn malĉifrajn ŝlosilojn.",
@ -2158,7 +2158,7 @@
"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 %(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",
"or another cross-signing capable Matrix client": "aŭ alian Matrix-klienton kapablan je delegaj subskriboj",
"Great! This recovery passphrase looks strong enough.": "Bonege! Ĉi tiu rehava pasfrazo ŝajnas sufiĉe forta.",
"Enter a recovery passphrase": "Enigu rehavan pasfrazon",
"Enter your recovery passphrase a second time to confirm it.": "Enigu vian rehavan pasfrazon duafoje por konfirmi ĝin.",
@ -2230,5 +2230,162 @@
"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. <a>Update now.</a>": "Nova versio estas disponebla. <a>Ĝisdatigu nun.</a>",
"Emoji picker": "Elektilo de bildsignoj"
"Emoji picker": "Elektilo de bildsignoj",
"Use your account to sign in to the latest version": "Uzu vian konton por saluti la plej freŝan version",
"Were excited to announce Riot is now Element": "Ni ekscite anoncas, ke Riot nun estas Elemento",
"Riot is now Element!": "Riot nun estas Elemento!",
"Learn More": "Eksciu plion",
"Light": "Hela",
"Dark": "Malhela",
"You joined the call": "Vi aliĝis al la voko",
"%(senderName)s joined the call": "%(senderName)s aliĝis al la voko",
"Call in progress": "Voko okazas",
"You left the call": "Vi foriris de la voko",
"%(senderName)s left the call": "%(senderName)s foriris de la voko",
"Call ended": "Voko finiĝis",
"You started a call": "Vi komencis vokon",
"%(senderName)s started a call": "%(senderName)s komencis vokon",
"Waiting for answer": "Atendante respondon",
"%(senderName)s is calling": "%(senderName)s vokas",
"You created the room": "Vi kreis la ĉambron",
"%(senderName)s created the room": "%(senderName)s kreis la ĉambron",
"You made the chat encrypted": "Vi ekĉifris la babilon",
"%(senderName)s made the chat encrypted": "%(senderName)s ekĉifris la babilon",
"You made history visible to new members": "Vi videbligis la historion al novaj anoj",
"%(senderName)s made history visible to new members": "%(senderName)s videbligis la historion al novaj anoj",
"You made history visible to anyone": "Vi videbligis la historion al ĉiu ajn",
"%(senderName)s made history visible to anyone": "%(senderName)s videbligis la historion al ĉiu ajn",
"You made history visible to future members": "Vi videbligis la historion al osaj anoj",
"%(senderName)s made history visible to future members": "%(senderName)s videbligis la historion al osaj anoj",
"You were invited": "Vi estis invitita",
"%(targetName)s was invited": "%(senderName)s estis invitita",
"You left": "Vi foriris",
"%(targetName)s left": "%(senderName)s foriris",
"You were kicked (%(reason)s)": "Vi estis forpelita (%(reason)s)",
"%(targetName)s was kicked (%(reason)s)": "%(targetName)s estis forpelita (%(reason)s)",
"You were kicked": "Vi estis forpelita",
"%(targetName)s was kicked": "%(targetName)s estis forpelita",
"You rejected the invite": "Vi rifuzis la inviton",
"%(targetName)s rejected the invite": "%(targetName)s rifuzis la inviton",
"You were uninvited": "Vi estis malinvitita",
"%(targetName)s was uninvited": "%(targetName)s estis malinvitita",
"You were banned (%(reason)s)": "Vi estis forbarita (%(reason)s)",
"%(targetName)s was banned (%(reason)s)": "%(targetName)s estis forbarita (%(reason)s)",
"You were banned": "Vi estis forbarita",
"%(targetName)s was banned": "%(targetName)s estis forbarita",
"You joined": "Vi aliĝis",
"%(targetName)s joined": "%(targetName)s aliĝis",
"You changed your name": "Vi ŝanĝis vian nomon",
"%(targetName)s changed their name": "%(targetName)s ŝanĝis sian nomon",
"You changed your avatar": "Vi ŝanĝis vian profilbildon",
"%(targetName)s changed their avatar": "%(targetName)s ŝanĝis sian profilbildon",
"%(senderName)s %(emote)s": "%(senderName)s %(emote)s",
"%(senderName)s: %(message)s": "%(senderName)s: %(message)s",
"You changed the room name": "Vi ŝanĝis la nomon de la ĉambro",
"%(senderName)s changed the room name": "%(senderName)s ŝanĝis la nomon de la ĉambro",
"%(senderName)s: %(reaction)s": "%(senderName)s: %(reaction)s",
"%(senderName)s: %(stickerName)s": "%(senderName)s: %(stickerName)s",
"You uninvited %(targetName)s": "Vi malinvitis uzanton %(targetName)s",
"%(senderName)s uninvited %(targetName)s": "%(senderName)s malinvitis uzanton %(targetName)s",
"You invited %(targetName)s": "Vi invitis uzanton %(targetName)s",
"%(senderName)s invited %(targetName)s": "%(senderName)s invitis uzanton %(targetName)s",
"You changed the room topic": "Vi ŝanĝis la temon de la ĉambro",
"%(senderName)s changed the room topic": "%(senderName)s ŝanĝis la temon de la ĉambro",
"Use the improved room list (will refresh to apply changes)": "Uzi la plibonigitan ĉambrobreton (aktualigos la paĝon por apliki la ŝanĝojn)",
"Use custom size": "Uzi propran grandon",
"Use a more compact Modern layout": "Uzi pli densan »Modernan« aranĝon",
"Use a system font": "Uzi sisteman tiparon",
"System font name": "Nomo de sistema tiparo",
"Enable experimental, compact IRC style layout": "Ŝalti eksperimentan, densan IRC-ecan aranĝon",
"Unknown caller": "Nekonata vokanto",
"Incoming voice call": "Envena voĉvoko",
"Incoming video call": "Envena vidvoko",
"Incoming call": "Envena voko",
"%(brand)s can't securely cache encrypted messages locally while running in a web browser. Use <desktopLink>%(brand)s Desktop</desktopLink> for encrypted messages to appear in search results.": "%(brand)s ne povas sekure kaŝkopii ĉifritajn mesaĝojn loke, funkciante per foliumilo. Uzu <desktopLink>%(brand)s Desktop</desktopLink> por aperigi ĉifritajn mesaĝojn en serĉrezultoj.",
"There are advanced notifications which are not shown here.": "Ekzistas specialaj sciigoj, kiuj ne estas montrataj ĉi tie.",
"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 kliento alia ol %(brand)s. Vi ne povas agordi ilin en %(brand)s, sed ili tamen estas aplikataj.",
"Hey you. You're the best!": "He, vi. Vi bonegas!",
"Message layout": "Aranĝo de mesaĝoj",
"Compact": "Densa",
"Modern": "Moderna",
"Set the name of a font installed on your system & %(brand)s will attempt to use it.": "Agordu la nomon de tiparo instalita en via sistemo kaj %(brand)s provos ĝin uzi.",
"Customise your appearance": "Adaptu vian aspekton",
"Appearance Settings only affect this %(brand)s session.": "Agordoj de aspekto nur efikos sur ĉi tiun salutaĵon de %(brand)s.",
"Add users and servers you want to ignore here. Use asterisks to have %(brand)s match any characters. For example, <code>@bot:*</code> would ignore all users that have the name 'bot' on any server.": "Aldonu uzantojn kaj servilojn, kiujn vi volas malatenti, ĉi tien. Uzu steletojn por ke %(brand)s atendu iujn ajn signojn. Ekzemple, <code>@bot:*</code> malatentigus ĉiujn uzantojn, kiuj havas la nomon «bot» sur ĉiu ajn servilo.",
"Your server admin has disabled end-to-end encryption by default in private rooms & Direct Messages.": "La administranto de via servilo malŝaltis implicitan tutvojan ĉifradon en privataj kaj rektaj ĉambroj.",
"Make this room low priority": "Doni al la ĉambro malaltan prioritaton",
"Low priority rooms show up at the bottom of your room list in a dedicated section at the bottom of your room list": "Ĉambroj kun malalta prioritato montriĝas en aparta sekcio, en la suba parto de via ĉambrobreto,",
"The authenticity of this encrypted message can't be guaranteed on this device.": "La aŭtentikeco de ĉi tiu ĉifrita mesaĝo ne povas esti garantiita sur ĉi tiu aparato.",
"No recently visited rooms": "Neniuj freŝdate vizititaj ĉambroj",
"People": "Homoj",
"Unread rooms": "Nelegitaj ĉambroj",
"Always show first": "Ĉiam montri unuaj",
"Show": "Montri",
"Message preview": "Antaŭrigardo al mesaĝo",
"Sort by": "Ordigi laŭ",
"Activity": "Aktiveco",
"A-Z": "AZ",
"List options": "Elektebloj pri listo",
"Show %(count)s more|other": "Montri %(count)s pliajn",
"Show %(count)s more|one": "Montri %(count)s plian",
"Use default": "Uzi implicitan",
"Mentions & Keywords": "Mencioj kaj ŝlosilvortoj",
"Notification options": "Elektebloj pri sciigoj",
"Favourited": "Elstarigita",
"Leave Room": "Foriri de ĉambro",
"Forget Room": "Forgesi ĉambron",
"Room options": "Elektebloj pri ĉambro",
"Message deleted on %(date)s": "Mesaĝo forigita je %(date)s",
"Use your account to sign in to the latest version of the app at <a />": "Uzu vian konton por saluti la plej freŝan version de la aplikaĵo je <a />",
"Youre already signed in and good to go here, but you can also grab the latest versions of the app on all platforms at <a>element.io/get-started</a>.": "Vi jam estas salutinta kaj preta ĉi tie, sed vi povas ankaŭ ekhavi la plej freŝajn versiojn de la aplikaĵoj sur ĉiuj platformoj je <a>element.io/get-started</a>.",
"Go to Element": "Iri al Elemento",
"Were excited to announce Riot is now Element!": "Ni estas ekscititaj anonci, ke Riot nun estas Elemento!",
"Learn more at <a>element.io/previously-riot</a>": "Eksciu plion je <a>element.io/previously-riot</a>",
"Wrong file type": "Neĝusta dosiertipo",
"Looks good!": "Ŝajnas bona!",
"Wrong Recovery Key": "Neĝusta rehava ŝlosilo",
"Invalid Recovery Key": "Nevalida rehava ŝlosilo",
"Security Phrase": "Sekureca frazo",
"Enter your Security Phrase or <button>Use your Security Key</button> to continue.": "Enigu vian sekurecan frazon aŭ <button>uzu vian sekurecan ŝlosilon</button> por daŭrigi.",
"Security Key": "Sekureca ŝlosilo",
"Use your Security Key to continue.": "Uzu vian sekurecan ŝlosilon por daŭrigi.",
"You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use %(brand)s with an existing Matrix account on a different homeserver.": "Vi povas uzi proprajn elekteblojn pri servilo por saluti aliajn servilojn de Matrix, per specifo de alia URL de hejmservilo. Tio ebligas al vi uzi la programon %(brand)s kun jama konto de Matrix je alia hejmservilo.",
"Search rooms": "Serĉi ĉambrojn",
"Switch to light mode": "Ŝalti helan reĝimon",
"Switch to dark mode": "Ŝalti malhelan reĝimon",
"Switch theme": "Ŝalti haŭton",
"Security & privacy": "Sekureco kaj privateco",
"All settings": "Ĉiuj agordoj",
"User menu": "Menuo de uzanto",
"Use Recovery Key or Passphrase": "Uzi rehavan ŝlosilon aŭ pasfrazon",
"Use Recovery Key": "Uzi rehavan ŝlosilon",
"%(brand)s Web": "%(brand)s por Reto",
"%(brand)s Desktop": "%(brand)s por Labortablo",
"%(brand)s iOS": "%(brand)s por iOS",
"%(brand)s X for Android": "%(brand)s X por Android",
"Safeguard against losing access to encrypted messages & data by backing up encryption keys on your server.": "Malhelpu perdon de aliro al ĉifritaj mesaĝoj kaj datumoj per savkopiado de ĉifraj ŝlosiloj al via servilo.",
"Generate a Security Key": "Generi sekurecan ŝlosilon",
"Well generate a Security Key for you to store somewhere safe, like a password manager or a safe.": "Ni estigos sekurecan ŝlosilon, kiun vi devus konservi en sekura loko, ekzemple administrilo de pasvortoj, aŭ sekurŝranko.",
"Enter a Security Phrase": "Enigiu sekurecan frazon",
"Use a secret phrase only you know, and optionally save a Security Key to use for backup.": "Uzu sekretan frazon kiun konas nur vi, kaj laŭplaĉe konservu sekurecan ŝlosilon, uzotan por savkopiado.",
"Enter a security phrase only you know, as its used to safeguard your data. To be secure, you shouldnt re-use your account password.": "Enigu sekurecan pasfrazon kiun konas nur vi, ĉar ĝi protektos viajn datumojn. Por esti certa, vi ne reuzu la pasvorton de via konto.",
"Store your Security Key somewhere safe, like a password manager or a safe, as its used to safeguard your encrypted data.": "Deponu vian sekurecan ŝlosilon en sekura loko, ekzemple administrilo de pasvortoj aŭ sekurŝranko, ĉar ĝi protektos viajn ĉifritajn datumojn.",
"If you cancel now, you may lose encrypted messages & data if you lose access to your logins.": "Se vi nuligos nun, vi eble perdos ĉifritajn mesaĝojn kaj datumojn se vi perdos aliron al viaj salutoj.",
"You can also set up Secure Backup & manage your keys in Settings.": "Vi ankaŭ povas agordi Sekuran savkopiadon kaj administri viajn ŝlosilojn per Agordoj.",
"Set up Secure backup": "Agordi Sekuran savkopiadon",
"Set a Security Phrase": "Agordi Sekurecan frazon",
"Confirm Security Phrase": "Konfirmi Sekurecan frazon",
"Save your Security Key": "Konservi vian Sekurecan ŝlosilon",
"New spinner design": "Nova fasono de la turniĝilo",
"Show rooms with unread messages first": "Montri ĉambrojn kun nelegitaj mesaĝoj kiel unuajn",
"Show previews of messages": "Montri antaŭrigardojn al mesaĝoj",
"This room is public": "Ĉi tiu ĉambro estas publika",
"Away": "For",
"Edited at %(date)s": "Redaktita je %(date)s",
"Click to view edits": "Klaku por vidi redaktojn",
"Are you sure you want to cancel entering passphrase?": "Ĉu vi certe volas nuligi enigon de pasfrazo?",
"Enable advanced debugging for the room list": "Ŝalti altnivelan erarserĉadon por la ĉambrobreto",
"* %(senderName)s %(emote)s": "* %(senderName)s %(emote)s",
"Custom Tag": "Propra etikedo",
"Feedback": "Prikomenti"
}

View file

@ -141,7 +141,7 @@
"Remove recent messages by %(user)s": "Eemalda %(user)s hiljutised sõnumid",
"Replying With Files": "Vasta faili(de)ga",
"Invite new community members": "Kutsu uusi liikmeid kogukonda",
"rooms.": "jututoad.",
"rooms.": "jututubadest.",
"Notify for all other messages/rooms": "Teavita kõikidest teistest sõnumitest/jututubadest",
"Members only (since the point in time of selecting this option)": "Ainult liikmetele (alates selle seadistuse kasutuselevõtmisest)",
"Members only (since they were invited)": "Ainult liikmetele (alates nende kutsumise ajast)",
@ -280,8 +280,8 @@
"Some session data, including encrypted message keys, is missing. Sign out and sign in to fix this, restoring keys from backup.": "Osa sessiooniandmetest, sealhulgas sõnumi krüptovõtmed, on puudu. Vea parandamiseks logi välja ja sisse, vajadusel taasta võtmed varundusest.",
"Your browser likely removed this data when running low on disk space.": "On võimalik et sinu brauser kustutas need andmed, sest kõvakettaruumist jäi puudu.",
"Integration Manager": "Lõiminguhaldur",
"Find others by phone or email": "Leia teisi kasutajaid telefoninumbri või e-posti aadressi alsusel",
"Be found by phone or email": "Ole leitav telefoninumbri või e-posti aadressi alsusel",
"Find others by phone or email": "Leia teisi kasutajaid telefoninumbri või e-posti aadressi alusel",
"Be found by phone or email": "Ole leitav telefoninumbri või e-posti aadressi alusel",
"Terms of Service": "Kasutustingimused",
"To continue you need to accept the terms of this service.": "Jätkamaks pead nõustuma kasutustingimustega.",
"Service": "Teenus",
@ -879,7 +879,7 @@
"Set up": "Võta kasutusele",
"Upgrade": "Uuenda",
"Verify": "Verifitseeri",
"Verify the new login accessing your account: %(name)s": "Verifitseeri uus kasutajasessioon, kes pruugib sinu kontot: %(name)s",
"Verify the new login accessing your account: %(name)s": "Verifitseeri uus kasutajasessioon, mis pruugib sinu kontot: %(name)s",
"From %(deviceName)s (%(deviceId)s)": "Seadmest %(deviceName)s (%(deviceId)s)",
"Decline (%(counter)s)": "Lükka tagasi (%(counter)s)",
"Accept <policyLink /> to continue:": "Jätkamiseks nõustu <policyLink />'ga:",
@ -1021,7 +1021,7 @@
"Send a Direct Message": "Saada otsesõnum",
"Are you sure you want to leave the room '%(roomName)s'?": "Kas oled kindel, et soovid lahkuda jututoast '%(roomName)s'?",
"Unknown error": "Teadmata viga",
"To continue using the %(homeserverDomain)s homeserver you must review and agree to our terms and conditions.": "Selleka et jätkata koduserveri %(homeserverDomain)s kasutamist sa pead üle vaatama ja nõustuma meie kasutamistingimustega.",
"To continue using the %(homeserverDomain)s homeserver you must review and agree to our terms and conditions.": "Selleks et jätkata koduserveri %(homeserverDomain)s kasutamist sa pead üle vaatama ja nõustuma meie kasutustingimustega.",
"Permissions": "Õigused",
"Select the roles required to change various parts of the room": "Vali rollid, mis on vajalikud jututoa eri osade muutmiseks",
"Enable encryption?": "Kas võtame krüptimise kasutusele?",
@ -1084,7 +1084,7 @@
"Try again later, or ask a room admin to check if you have access.": "Proovi hiljem uuesti või küsi jututoa haldurilt, kas sul on ligipääs olemas.",
"%(errcode)s was returned while trying to access the room. If you think you're seeing this message in error, please <issueLink>submit a bug report</issueLink>.": "Astumisel jututuppa tekkis viga %(errcode)s. Kui sa arvad, et sellise põhjusega viga ei tohiks tekkida, siis palun <issueLink>koosta veateade</issueLink>.",
"Never lose encrypted messages": "Ära kunagi kaota krüptitud sõnumeid",
"Messages in this room are secured with end-to-end encryption. Only you and the recipient(s) have the keys to read these messages.": "Sõnumid siis jututoas kasutavad läbivat krüptimist. Ainult sinul ja saaja(te)l on võtmed selliste sõnumite lugemiseks.",
"Messages in this room are secured with end-to-end encryption. Only you and the recipient(s) have the keys to read these messages.": "Sõnumid siin jututoas kasutavad läbivat krüptimist. Ainult sinul ja saaja(te)l on võtmed selliste sõnumite lugemiseks.",
"Securely back up your keys to avoid losing them. <a>Learn more.</a>": "Vältimaks nende kaotamist, varunda turvaliselt oma võtmed. <a>Loe lisateavet.</a>",
"Not now": "Mitte praegu",
"Don't ask me again": "Ära küsi minult uuesti",
@ -1107,7 +1107,7 @@
"Unable to revoke sharing for email address": "Ei õnnestu tagasi võtta otsust e-posti aadressi jagamise kohta",
"Unable to share email address": "Ei õnnestu jagada e-posti aadressi",
"Your email address hasn't been verified yet": "Sinu e-posti aadress pole veel verifitseeritud",
"Click the link in the email you received to verify and then click continue again.": "Klõpsi saabunud e-kirjas olevat verifitseerimisviidet ning seejärel klõpsi siin uuesti nuppu \"Jätka\".",
"Click the link in the email you received to verify and then click continue again.": "Klõpsi saabunud e-kirjas olevat verifitseerimisviidet ning seejärel klõpsi siin uuesti nuppu „Jätka“.",
"Unable to verify email address.": "E-posti aadressi verifitseerimine ei õnnestunud.",
"Verify the link in your inbox": "Verifitseeri klõpsides viidet saabunud e-kirjas",
"Complete": "Valmis",
@ -1115,7 +1115,7 @@
"Share": "Jaga",
"Session already verified!": "Sessioon on juba verifitseeritud!",
"WARNING: Session already verified, but keys do NOT MATCH!": "HOIATUS: Sessioon on juba verifitseeritud, aga võtmed ei klapi!",
"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!": "HOIATUS: VÕTMETE VERIFITSEERIMINE EI ÕNNESTUNUD! Kasutaja %(userId)s ja sessiooni %(deviceId)s allkirjastamise võti on \"%(fprint)s\", aga see ei vasta antud sõrmejäljele \"%(fingerprint)s\". See võib tähendada, et sinu kasutatavad ühendused võivad olla kolmanda osapoole poolt vahelt lõigatud!",
"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!": "HOIATUS: VÕTMETE VERIFITSEERIMINE EI ÕNNESTUNUD! Kasutaja %(userId)s ja sessiooni %(deviceId)s allkirjastamise võti on „%(fprint)s“, aga see ei vasta antud sõrmejäljele „%(fingerprint)s“. See võib tähendada, et sinu kasutatavad ühendused võivad olla kolmanda osapoole poolt vahelt lõigatud!",
"Verified key": "Verifitseeritud võti",
"The signing key you provided matches the signing key you received from %(userId)s's session %(deviceId)s. Session marked as verified.": "Sinu antud allkirjavõti vastab allkirjavõtmele, mille sa said kasutaja %(userId)s sessioonist %(deviceId)s. Sessioon on märgitud verifitseerituks.",
"Sends the given message coloured as a rainbow": "Saadab selle sõnumi vikerkaarevärvilisena",
@ -1178,7 +1178,7 @@
"Invite someone using their name, username (like <userId/>), email address or <a>share this room</a>.": "Kutsu kedagi tema nime, kasutajanime (nagu <userId/>), e-posti aadressi alusel või <a>jaga seda jututuba</a>.",
"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",
"Updating %(brand)s": "Uuendan rakendust %(brand)s",
"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",
@ -1193,7 +1193,7 @@
"Remember my selection for this widget": "Jäta meelde minu valik selle vidina kohta",
"Allow": "Luba",
"Deny": "Keela",
"Unable to restore backup": "Varukoopiast taastamine ei õnenstu",
"Unable to restore backup": "Varukoopiast taastamine ei õnnestu",
"No backup found!": "Varukoopiat ei leidunud!",
"Keys restored": "Krüptimise võtmed on taastatud",
"Failed to decrypt %(failedCount)s sessions!": "%(failedCount)s sessiooni dekrüptimine ei õnnestunud!",
@ -1310,7 +1310,7 @@
"%(oneUser)schanged their avatar %(count)s times|other": "Kasutaja %(oneUser)s muutis oma tunnuspilti %(count)s korda",
"%(oneUser)schanged their avatar %(count)s times|one": "Kasutaja %(oneUser)s muutis oma tunnuspilti",
"Please ask the administrator of your homeserver (<code>%(homeserverDomain)s</code>) to configure a TURN server in order for calls to work reliably.": "Palu oma koduserveri haldajat (<code>%(homeserverDomain)s</code>), et ta seadistaks kõnede kindlamaks toimimiseks TURN serveri.",
"Alternatively, you can try to use the public server at <code>turn.matrix.org</code>, but this will not be as reliable, and it will share your IP address with that server. You can also manage this in Settings.": "Alternatiivina võid sa kasutada avalikku serverit <code>turn.matrix.org</code>, kuid see ei pruugi olla piisavalt töökindel ning sa jagaad ka oma IP-aadressi selle serveriga. Täpsemalt saad seda määrata seadistustes.",
"Alternatively, you can try to use the public server at <code>turn.matrix.org</code>, but this will not be as reliable, and it will share your IP address with that server. You can also manage this in Settings.": "Alternatiivina võid sa kasutada avalikku serverit <code>turn.matrix.org</code>, kuid see ei pruugi olla piisavalt töökindel ning sa jagad ka oma IP-aadressi selle serveriga. Täpsemalt saad seda määrata seadistustes.",
"Try using turn.matrix.org": "Proovi kasutada turn.matrix.org serverit",
"OK": "Sobib",
"Unable to capture screen": "Ekraanipildi hõive ei õnnestunud",
@ -1352,7 +1352,7 @@
"Before submitting logs, you must <a>create a GitHub issue</a> to describe your problem.": "Enne logide saatmist sa peaksid <a>GitHub'is looma veateate</a> ja kirjeldama seal tekkinud probleemi.",
"GitHub issue": "Veateade GitHub'is",
"Notes": "Märkused",
"%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s muutis uueks teemaks \"%(topic)s\".",
"%(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.",
"Light": "Hele",
@ -1425,9 +1425,9 @@
"Reversed words aren't much harder to guess": "Tagurpidi kirjutatud sõnu pole eriti keeruline ära arvata",
"Predictable substitutions like '@' instead of 'a' don't help very much": "Ennustatavatest asendustest nagu '@' 'a' asemel pole eriti kasu",
"Add another word or two. Uncommon words are better.": "Lisa veel mõni sõna. Ebatavaliste sõnade kasutamine on hea mõte.",
"Repeats like \"aaa\" are easy to guess": "Kordusi, nagu \"aaa\" on lihtne ära arvata",
"Repeats like \"abcabcabc\" are only slightly harder to guess than \"abc\"": "Kordusi, nagu \"abcabcabc\" on vaid natuke raskem ära arvata kui \"abc\"",
"Sequences like abc or 6543 are easy to guess": "Jadasid nagu \"abc\" või \"6543\" on lihtne ära arvata",
"Repeats like \"aaa\" are easy to guess": "Kordusi, nagu „aaa“ on lihtne ära arvata",
"Repeats like \"abcabcabc\" are only slightly harder to guess than \"abc\"": "Kordusi, nagu „abcabcabc“ on vaid natuke raskem ära arvata kui „abc“",
"Sequences like abc or 6543 are easy to guess": "Jadasid nagu „abc“ või „6543“ on lihtne ära arvata",
"Recent years are easy to guess": "Hiljutisi aastaid on lihtne ära arvata",
"Dates are often easy to guess": "Kuupäevi on sageli lihtne ära arvata",
"A word by itself is easy to guess": "Üksikut sõna on lihtne ära arvata",
@ -1524,7 +1524,7 @@
"Waiting for partner to confirm...": "Ootan teise osapoole kinnitust...",
"Incoming Verification Request": "Saabuv verifitseerimispalve",
"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.",
"Enable 'Manage Integrations' in Settings to do this.": "Selle tegevuse kasutuselevõetuks lülita seadetes sisse „Halda lõiminguid“ valik.",
"Integrations not allowed": "Lõimingute kasutamine ei ole lubatud",
"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",
@ -1683,7 +1683,7 @@
"%(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)",
"Use custom size": "Kasuta kohandatud suurust",
"Use a more compact Modern layout": "Kasuta veel kompaktsemat \"moodsat\" paigutust",
"Use a more compact Modern layout": "Kasuta veel kompaktsemat „moodsat“ paigutust",
"Cross-signing public keys:": "Avalikud võtmed risttunnustamise jaoks:",
"in memory": "on mälus",
"not found": "pole leitavad",
@ -1714,10 +1714,10 @@
"<strong>%(role)s</strong> in %(roomName)s": "<strong>%(role)s</strong> jututoas %(roomName)s",
"Failed to change power level": "Õiguste muutmine ei õnnestunud",
"You will not be able to undo this change as you are promoting the user to have the same power level as yourself.": "Sa ei saa seda muudatust hiljem tagasi pöörata, sest annad teisele kasutajale samad õigused, mis sinul on.",
"Deactivate user?": "Kas blokeerime kasutaja?",
"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?": "Kasutaja blokeerimisel logitakse ta automaatselt välja ning ei lubata enam sisse logida. Lisaks lahkub ta kõikidest jututubadest, mille liige ta parasjagu on. Seda tegevust ei saa tagasi pöörata. Kas sa oled ikka kindel, et soovid selle kasutaja blokeerida?",
"Deactivate user": "Blokeeri kasutaja",
"Failed to deactivate user": "Kasutaja blokeerimine ei õnnestunud",
"Deactivate user?": "Kas deaktiveerime kasutajakonto?",
"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?": "Kasutaja deaktiveerimisel logitakse ta automaatselt välja ning ei lubata enam sisse logida. Lisaks lahkub ta kõikidest jututubadest, mille liige ta parasjagu on. Seda tegevust ei saa tagasi pöörata. Kas sa oled ikka kindel, et soovid selle kasutaja kõijkalt eemaldada?",
"Deactivate user": "Deaktiveeri kasutaja",
"Failed to deactivate user": "Kasutaja deaktiveerimine ei õnnestunud",
"This client does not support end-to-end encryption.": "See klient ei toeta läbivat krüptimist.",
"Security": "Turvalisus",
"Using this widget may share data <helpIcon /> with %(widgetDomain)s & your Integration Manager.": "Selle vidina kasutamisel võidakse jagada andmeid <helpIcon /> saitidega %(widgetDomain)s ning sinu vidinahalduriga.",
@ -1750,5 +1750,640 @@
"%(severalUsers)sleft and rejoined %(count)s times|other": "%(severalUsers)s lahkusid ja liitusid uuesti %(count)s korda",
"%(severalUsers)sleft and rejoined %(count)s times|one": "%(severalUsers)s lahkusid ja liitusid uuesti",
"%(oneUser)sleft and rejoined %(count)s times|other": "%(oneUser)s lahkus ja liitus uuesti %(count)s korda",
"%(oneUser)sleft and rejoined %(count)s times|one": "%(oneUser)s lahkus ja liitus uuesti"
"%(oneUser)sleft and rejoined %(count)s times|one": "%(oneUser)s lahkus ja liitus uuesti",
"To use it, just wait for autocomplete results to load and tab through them.": "Selle kasutamiseks oota, kuni automaatne sõnalõpetus laeb kõik valikud ja sa saad nad läbi lapata.",
"Bans user with given id": "Keela ligipääs antud tunnusega kasutajale",
"Unbans user with given ID": "Taasta ligipääs antud tunnusega kasutajale",
"Ignores a user, hiding their messages from you": "Eirab kasutajat peites kõik tema sõnumid sinu eest",
"Ignored user": "Eiratud kasutaja",
"You are now ignoring %(userId)s": "Sa praegu eirad kasutajat %(userId)s",
"%(senderName)s banned %(targetName)s.": "%(senderName)s keelas ligipääsu kasutajale %(targetName)s.",
"%(senderName)s unbanned %(targetName)s.": "%(senderName)s taastas ligipääsu kasutajale %(targetName)s.",
"%(senderName)s withdrew %(targetName)s's invitation.": "%(senderName)s võttis tagasi %(targetName)s kutse.",
"%(senderName)s kicked %(targetName)s.": "%(senderName)s müksas kasutajat %(targetName)s.",
"%(senderName)s changed the pinned messages for the room.": "%(senderName)s muutis selle jututoa klammerdatud sõnumeid.",
"%(senderName)s removed the rule banning users matching %(glob)s": "%(senderName)s eemaldas kasutajate ligipääsukeelu reegli, mis vastas tingimusele %(glob)s",
"%(senderName)s removed the rule banning rooms matching %(glob)s": "%(senderName)s eemaldas jututubade ligipääsukeelu reegli, mis vastas tingimusele %(glob)s",
"%(senderName)s removed the rule banning servers matching %(glob)s": "%(senderName)s eemaldas serverite ligipääsukeelu reegli, mis vastas tingimusele %(glob)s",
"%(senderName)s removed a ban rule matching %(glob)s": "%(senderName)s eemaldas ligipääsukeelu reegli, mis vastas tingimusele %(glob)s",
"%(senderName)s updated an invalid ban rule": "%(senderName)s uuendas vigast ligipääsukeelu reeglit",
"%(senderName)s updated the rule banning users matching %(glob)s for %(reason)s": "%(senderName)s uuendas %(reason)s põhjusel kasutajate ligipääsukeelu reeglit, mis vastas tingimusele %(glob)s",
"%(senderName)s updated the rule banning rooms matching %(glob)s for %(reason)s": "%(senderName)s uuendas %(reason)s põhjusel jututubade ligipääsukeelu reeglit, mis vastas tingimusele %(glob)s",
"%(senderName)s updated the rule banning servers matching %(glob)s for %(reason)s": "%(senderName)s uuendas %(reason)s põhjusel serverite ligipääsukeelu reeglit, mis vastas tingimusele %(glob)s",
"%(senderName)s updated a ban rule matching %(glob)s for %(reason)s": "%(senderName)s uuendas %(reason)s põhjusel ligipääsukeelu reeglit, mis vastas tingimusele %(glob)s",
"%(senderName)s created a rule banning users matching %(glob)s for %(reason)s": "%(senderName)s määras %(reason)s tõttu kasutajate ligipääsukeelu reegli, mis vastas tingimusele %(glob)s",
"%(senderName)s created a rule banning rooms matching %(glob)s for %(reason)s": "%(senderName)s määras %(reason)s tõttu jututubade ligipääsukeelu reegli, mis vastas tingimusele %(glob)s",
"%(senderName)s created a rule banning servers matching %(glob)s for %(reason)s": "%(senderName)s määras %(reason)s tõttu serverite ligipääsukeelu reegli, mis vastas tingimusele %(glob)s",
"%(senderName)s created a ban rule matching %(glob)s for %(reason)s": "%(senderName)s määras %(reason)s tõttu ligipääsukeelu reegli, mis vastas tingimusele %(glob)s",
"%(senderName)s changed a rule that was banning users matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s muutis %(reason)s tõttu kasutajate ligipääsukeelu reegli algset tingimust %(oldGlob)s uueks tingimuseks %(newGlob)s",
"%(senderName)s changed a rule that was banning rooms matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s muutis %(reason)s tõttu jututubade ligipääsukeelu reegli algset tingimust %(oldGlob)s uueks tingimuseks %(newGlob)s",
"%(senderName)s changed a rule that was banning servers matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s muutis %(reason)s tõttu serverite ligipääsukeelu reegli algset tingimust %(oldGlob)s uueks tingimuseks %(newGlob)s",
"%(senderName)s updated a ban rule that was matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s muutis %(reason)s tõttu ligipääsukeelu reegli algset tingimust %(oldGlob)s uueks tingimuseks %(newGlob)s",
"The user must be unbanned before they can be invited.": "Enne kutse saatmist peab kasutajalt olema eemaldatud ligipääsukeeld.",
"Your homeserver has exceeded its user limit.": "Sinu koduserver on ületanud kasutajate arvu ülempiiri.",
"Your homeserver has exceeded one of its resource limits.": "Sinu koduserver on ületanud ühe oma ressursipiirangutest.",
"Contact your <a>server admin</a>.": "Võta ühendust <a>oma serveri haldajaga</a>.",
"Warning": "Hoiatus",
"Ok": "Sobib",
"Set password": "Määra salasõna",
"To return to your account in future you need to set a password": "Selleks, et sa saaksid tulevikus oma konto juurde tagasi pöörduda, peaksid määrama salasõna",
"You were banned (%(reason)s)": "Sinule on seatud ligipääsukeeld %(reason)s",
"%(targetName)s was banned (%(reason)s)": "%(targetName)s seati ligipääsukeeld %(reason)s",
"You were banned": "Sinule seati ligipääsukeeld",
"%(targetName)s was banned": "%(targetName)s'le seati ligipääsukeeld",
"New spinner design": "Uus vurri-moodi paigutus",
"Message Pinning": "Sõnumite klammerdamine",
"IRC display name width": "IRC kuvatava nime laius",
"Enable experimental, compact IRC style layout": "Võta kasutusele katseline, IRC-stiilis kompaktne sõnumite paigutus",
"My Ban List": "Minu poolt seatud ligipääsukeeldude loend",
"Active call (%(roomName)s)": "Käsilolev kõne (%(roomName)s)",
"Unknown caller": "Tundmatu helistaja",
"Incoming voice call": "Saabuv häälkõne",
"Incoming video call": "Saabuv videokõne",
"Incoming call": "Saabuv kõne",
"Waiting for your other session to verify…": "Ootan, et sinu teine sessioon alustaks verifitseerimist…",
"This bridge was provisioned by <user />.": "Selle võrgusilla võttis kasutusele <user />.",
"This bridge is managed by <user />.": "Seda võrgusilda haldab <user />.",
"Workspace: %(networkName)s": "Tööruum: %(networkName)s",
"Channel: %(channelName)s": "Kanal: %(channelName)s",
"Upload new:": "Lae üles uus:",
"Export E2E room keys": "Ekspordi jututubade läbiva krüptimise võtmed",
"Your homeserver does not support cross-signing.": "Sinu koduserver ei toeta risttunnustamist.",
"Cross-signing and secret storage are enabled.": "Risttunnustamine ja turvahoidla on kasutusel.",
"Connecting to integration manager...": "Ühendan lõiminguhalduriga...",
"Cannot connect to integration manager": "Ei saa ühendust lõiminguhalduriga",
"The integration manager is offline or it cannot reach your homeserver.": "Lõiminguhaldur kas ei tööta või ei õnnestu tal teha päringuid sinu koduserveri suunas.",
"Delete Backup": "Kustuta varukoopia",
"Are you sure? You will lose your encrypted messages if your keys are not backed up properly.": "Kas sa oled kindel? Kui sul muud varundust pole, siis kaotad ligipääsu oma krüptitud sõnumitele.",
"Your keys are <b>not being backed up from this session</b>.": "Sinu selle sessiooni krüptovõtmeid <b>ei varundata</b>.",
"Back up your keys before signing out to avoid losing them.": "Vältimaks nende kaotamist, varunda krüptovõtmed enne väljalogimist.",
"Advanced notification settings": "Teavituste lisaseadistused",
"Enable desktop notifications for this session": "Võta selleks sessiooniks kasutusele töölauakeskkonnale omased teavitused",
"Show message in desktop notification": "Näita sõnumit töölauakeskkonnale omases teavituses",
"Enable audible notifications for this session": "Võta selleks sessiooniks kasutusele kuuldavad teavitused",
"Off": "Välja lülitatud",
"On": "Kasutusel",
"Noisy": "Jutukas",
"<a>Upgrade</a> to your own domain": "<a>Võta kasutusele</a> oma domeen",
"Error encountered (%(errorDetail)s).": "Tekkis viga (%(errorDetail)s).",
"Checking for an update...": "Kontrollin uuenduste olemasolu...",
"No update available.": "Uuendusi pole saadaval.",
"New version available. <a>Update now.</a>": "Saadaval on uus versioon. <a>Uuenda nüüd.</a>",
"Check for update": "Kontrolli uuendusi",
"Hey you. You're the best!": "Hei sina. Sa oled parim!",
"Size must be a number": "Suurus peab olema number",
"Custom font size can only be between %(min)s pt and %(max)s pt": "Kohandatud fondisuurus peab olema vahemikus %(min)s pt ja %(max)s pt",
"Use between %(min)s pt and %(max)s pt": "Kasuta suurust vahemikus %(min)s pt ja %(max)s pt",
"Message layout": "Sõnumite paigutus",
"Compact": "Kompaktne",
"Modern": "Moodne",
"Set the name of a font installed on your system & %(brand)s will attempt to use it.": "Vali sinu seadmes leiduv fondi nimi ning %(brand)s proovib seda kasutada.",
"Customise your appearance": "Kohenda välimust",
"Appearance Settings only affect this %(brand)s session.": "Välimuse kohendused kehtivad vaid selles %(brand)s'i sessioonis.",
"Legal": "Juriidiline teave",
"Credits": "Tänuavaldused",
"Bug reporting": "Vigadest teatamine",
"Clear cache and reload": "Tühjenda puhver ja lae uuesti",
"FAQ": "Korduma kippuvad küsimused",
"Versions": "Versioonid",
"%(brand)s version:": "%(brand)s'i versioon:",
"olm version:": "olm'i versioon:",
"Homeserver is": "Koduserver on",
"Identity Server is": "Isikutuvastusserver on",
"Access Token:": "Pääsuluba:",
"click to reveal": "kuvamiseks klõpsi siin",
"Labs": "Katsed",
"Customise your experience with experimental labs features. <a>Learn more</a>.": "Sa võid täiendada oma kasutuskogemust katseliste funktsionaalsusetega. <a>Vaata lisateavet</a>.",
"Ignored/Blocked": "Eiratud või ligipääs blokeeritud",
"Error adding ignored user/server": "Viga eiratud kasutaja või serveri lisamisel",
"Something went wrong. Please try again or view your console for hints.": "Midagi läks valesti. Proovi uuesti või otsi lisavihjeid konsoolilt.",
"Error subscribing to list": "Viga loendiga liitumisel",
"Please verify the room ID or address and try again.": "Palun kontrolli, kas jututoa tunnus või aadress on õiged ja proovi uuesti.",
"Error removing ignored user/server": "Viga eiratud kasutaja või serveri eemaldamisel",
"Error unsubscribing from list": "Viga loendist lahkumisel",
"Please try again or view your console for hints.": "Palun proovi uuesti või otsi lisavihjeid konsoolilt.",
"None": "Ei ühelgi juhul",
"Ban list rules - %(roomName)s": "Ligipääsukeelu reeglid - %(roomName)s",
"Server rules": "Serveri kasutustingimused",
"User rules": "Kasutajaga seotud tingimused",
"You have not ignored anyone.": "Sa ei ole veel kedagi eiranud.",
"You are currently ignoring:": "Hetkel eiratavate kasutajate loend:",
"You are not subscribed to any lists": "Sa ei ole liitunud ühegi loendiga",
"Unsubscribe": "Lõpeta liitumine",
"View rules": "Näita reegleid",
"You are currently subscribed to:": "Sa oled hetkel liitunud:",
"Ignored users": "Eiratud kasutajad",
"⚠ These settings are meant for advanced users.": "⚠ Need seadistused on mõeldud kogenud kasutajatele.",
"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.": "Kasutajate eiramine toimub ligipääsukeelu reeglite loendite alusel ning seal on kirjas blokeeritavad kasutajad, jututoad või serverid. Sellise loendi kasutusele võtmine tähendab et blokeeritud kasutajad või serverid ei ole sulle nähtavad.",
"Personal ban list": "Minu isiklik ligipääsukeelu reeglite loend",
"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.": "Sinu isiklikus ligipääsukeelu reeglite loendis on kasutajad ja serverid, kellelt sa ei soovi sõnumeid saada. Peale esimese kasutaja või serveri blokeerimist tekib sinu jututubade loendisse uus jututuba „Minu isiklik ligipääsukeelu reeglite loend“ ning selle jõustamiseks ära logi nimetatud jututoast välja.",
"Subscribing to a ban list will cause you to join it!": "Ligipääsukeelu reeglite loendi tellimine tähendab sellega liitumist!",
"Room ID or address of ban list": "Ligipääsukeelu reeglite loendi jututoa tunnus või aadress",
"Show tray icon and minimize window to it on close": "Näita süsteemisalve ikooni ja Element'i akna sulgemisel minimeeri ta salve",
"Read Marker off-screen lifetime (ms)": "Lugemise markeri iga, kui Element pole fookuses (ms)",
"Make this room low priority": "Muuda see jututuba vähetähtsaks",
"Low priority rooms show up at the bottom of your room list in a dedicated section at the bottom of your room list": "Vähetähtsad jututoad kuvatakse jututubade loendi lõpus omaette grupina",
"Failed to unban": "Ligipääsu taastamine ei õnnestunud",
"Unban": "Taasta ligipääs",
"Banned by %(displayName)s": "Ligipääs on keelatud %(displayName)s poolt",
"Error changing power level requirement": "Viga õiguste taseme nõuete muutmisel",
"An error occurred changing the room's power level requirements. Ensure you have sufficient permissions and try again.": "Jututoa õiguste taseme nõuete muutmisel tekkis viga. Kontrolli, et sul on selleks piisavalt õigusi ja proovi uuesti.",
"Error changing power level": "Viga õiguste muutmisel",
"An error occurred changing the user's power level. Ensure you have sufficient permissions and try again.": "Kasutaja õiguste muutmisel tekkis viga. Kontrolli, et sul on selleks piisavalt õigusi ja proovi uuesti.",
"To link to this room, please add an address.": "Sellele jututoale viitamiseks palun lisa talle aadress.",
"Discovery options will appear once you have added an email above.": "Otsinguvõimaluste loend kuvatakse, kui oled ülale sisestanud e-posti aadressi.",
"Discovery options will appear once you have added a phone number above.": "Otsinguvõimaluste loend kuvatakse, kui oled ülale sisestanud telefoninumbri.",
"Mod": "Moderaator",
"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.": "Võtmete jagamise päringud saadetakse sinu teistele sessioonidele automaatselt. Kui sa oled mõnes muus sessioonis võtmete jagamise päringud tagasi lükanud või tühistanud, siis klõpsi siia võtmete uuesti pärimiseks selle sessiooni jaoks.",
"If your other sessions do not have the key for this message you will not be able to decrypt them.": "Kui sinu muudel sesioonidel pole selle sõnumi jaoks võtmeid, siis nad ei suuda ka sõnumit dekrüptida.",
"Key request sent.": "Võtmete jagamise päring on saadetud.",
"<requestLink>Re-request encryption keys</requestLink> from your other sessions.": "Küsi oma muudest sessioonidest <requestLink>krüptimisvõtmed uuesti</requestLink>.",
"The authenticity of this encrypted message can't be guaranteed on this device.": "Selle krüptitud sõnumi autentsus pole selles seadmes tagatud.",
"and %(count)s others...|other": "ja %(count)s muud...",
"and %(count)s others...|one": "ja üks muu...",
"Invited": "Kutsutud",
"%(userName)s (power %(powerLevelNumber)s)": "%(userName)s (õigused %(powerLevelNumber)s)",
"Emoji picker": "Emoji'de valija",
"No pinned messages.": "Klammerdatud sõnumeid ei ole.",
"Loading...": "Laen...",
"Pinned Messages": "Klammerdatud sõnumid",
"Unpin Message": "Eemalda sõnumi klammerdus",
"No recently visited rooms": "Hiljuti külastatud jututubasid ei leidu",
"Create room": "Loo jututuba",
"People": "Inimesed",
"Unread rooms": "Lugemata jututoad",
"Always show first": "Näita alati esimisena",
"Error creating address": "Viga aadressi loomisel",
"There was an error creating that address. It may not be allowed by the server or a temporary failure occurred.": "Aadressi loomisel tekkis viga. See kas on serveri poolt keelatud või tekkis ajutine tõrge.",
"You don't have permission to delete the address.": "Sinul pole õigusi selle aadressi kustutamiseks.",
"There was an error removing that address. It may no longer exist or a temporary error occurred.": "Selle aadressi kustutamisel tekkis viga. See kas juba on kustutatud või tekkis ajutine tõrge.",
"Error removing address": "Viga aadresi kustutamisel",
"This room has no local addresses": "Sellel jututoal puudub kohalik aadress",
"Local address": "Kohalik aadress",
"Published Addresses": "Avaldatud aadressid",
"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.": "Avaldatud aadresse saab mis iganes serveri kasutaja pruukida sinu jututoaga liitumiseks. Aadressi avaldamiseks peab ta alustuseks olema määratud kohaliku aadressina.",
"Other published addresses:": "Muud avaldatud aadressid:",
"No other published addresses yet, add one below": "Ühtegi muud aadressi pole veel avaldatud, lisa üks alljärgnevalt",
"Local Addresses": "Kohalikud aadressid",
"Set addresses for this room so users can find this room through your homeserver (%(localDomain)s)": "Et muud kasutajad saaks seda jututuba leida sinu koduserveri (%(localDomain)s) kaudu, lisa sellele jututoale aadresse",
"Invalid community ID": "Vigane kogukonna tunnus",
"'%(groupId)s' is not a valid community ID": "'%(groupId)s' ei ole korrektne kogukonna tunnus",
"Direct message": "Otsevestlus",
"Demote yourself?": "Kas vähendad enda õigusi?",
"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.": "Kuna sa vähendad enda õigusi, siis sul ei pruugi enam olla võimalik seda muutust tagasi pöörata. Kui sa juhtumisi oled viimane haldusõigustega kasutaja jututoas, siis hiljem on võimatu samu õigusi tagasi saada.",
"Demote": "Vähenda enda õigusi",
"Ban": "Keela ligipääs",
"Unban this user?": "Kas taastame selle kasutaja ligipääsu?",
"Ban this user?": "Kas keelame selle kasutaja ligipääsu?",
"Failed to ban user": "Kasutaja ligipääsu keelamine ei õnnestunud",
"Almost there! Is your other session showing the same shield?": "Peaaegu valmis! Kas sinu teises sessioonis kuvatakse sama kilpi?",
"Almost there! Is %(displayName)s showing the same shield?": "Peaaegu valmis! Kas %(displayName)s kuvab sama kilpi?",
"Yes": "Jah",
"Verify all users in a room to ensure it's secure.": "Tagamaks, et jututuba on turvaline, verifitseeri kõik selle kasutajad.",
"You've successfully verified your device!": "Sinu seadme verifitseerimine oli edukas!",
"You've successfully verified %(deviceName)s (%(deviceId)s)!": "Sa oled edukalt verifitseerinud seadme %(deviceName)s (%(deviceId)s)!",
"You've successfully verified %(displayName)s!": "Sa oled edukalt verifitseerinud kasutaja %(displayName)s!",
"Verified": "Verifitseeritud",
"Got it": "Selge lugu",
"Start verification again from the notification.": "Alusta verifitseerimist uuesti teavitusest.",
"Message deleted": "Sõnum on kustutatud",
"Message deleted by %(name)s": "%(name)s kustutas sõnumi",
"Message deleted on %(date)s": "Sõnum on kustutatud %(date)s",
"Add an Integration": "Lisa lõiming",
"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?": "Sind juhatatakse kolmanda osapoole veebisaiti, kus sa saad autentida oma kontoga %(integrationsUrl)s kasutamiseks. Kas sa soovid jätkata?",
"Categories": "Kategooriad",
"%(severalUsers)srejected their invitations %(count)s times|other": "%(severalUsers)s lükkasid tagasi oma kutse %(count)s korda",
"%(severalUsers)srejected their invitations %(count)s times|one": "%(severalUsers)s lükkasid tagasi oma kutse",
"%(oneUser)srejected their invitation %(count)s times|other": "%(oneUser)s lükkas tagasi oma kutse %(count)s korda",
"%(oneUser)srejected their invitation %(count)s times|one": "%(oneUser)s lükkas taagasi oma kutse",
"%(severalUsers)shad their invitations withdrawn %(count)s times|other": "%(severalUsers)s kutse võeti tagasi %(count)s korda",
"%(severalUsers)shad their invitations withdrawn %(count)s times|one": "Kasutajate %(severalUsers)s kutse võeti tagasi",
"%(oneUser)shad their invitation withdrawn %(count)s times|other": "%(oneUser)s kutse võeti tagasi %(count)s korda",
"%(oneUser)shad their invitation withdrawn %(count)s times|one": "Kasutaja %(oneUser)s kutse võeti tagasi",
"were banned %(count)s times|other": "said ligipääsukeelu %(count)s korda",
"were banned %(count)s times|one": "said ligipääsukeelu",
"was banned %(count)s times|other": "sai ligipääsukeelu %(count)s korda",
"was banned %(count)s times|one": "sai ligipääsukeelu",
"were unbanned %(count)s times|other": "taastati ligipääs %(count)s korda",
"were unbanned %(count)s times|one": "taastati ligipääs",
"was unbanned %(count)s times|other": "taastati ligipääs %(count)s korda",
"was unbanned %(count)s times|one": "taastati ligipääs",
"were kicked %(count)s times|other": "müksati välja %(count)s korda",
"were kicked %(count)s times|one": "müksati välja",
"was kicked %(count)s times|other": "müksati välja %(count)s korda",
"was kicked %(count)s times|one": "müksati välja",
"%(severalUsers)smade no changes %(count)s times|other": "%(severalUsers)s ei teinud muudatusi %(count)s korda",
"%(severalUsers)smade no changes %(count)s times|one": "%(severalUsers)s ei teinud muudatusi",
"%(oneUser)smade no changes %(count)s times|other": "%(oneUser)s ei teinud muutusi %(count)s korda",
"%(oneUser)smade no changes %(count)s times|one": "%(oneUser)s ei teinud muudatusi",
"Power level": "Õiguste tase",
"Custom level": "Kohandatud õigused",
"QR Code": "QR kood",
"Unable to load event that was replied to, it either does not exist or you do not have permission to view it.": "Ei ole võimalik laadida seda sündmust, millele vastus on tehtud - teda kas pole olemas või sul pole õigusi seda näha.",
"Room address": "Jututoa aadress",
"Some characters not allowed": "Mõned tähemärgid ei ole siin lubatud",
"Please provide a room address": "Palun kirjuta jututoa aadress",
"This address is available to use": "See aadress on kasutatav",
"This address is already in use": "See aadress on juba kasutusel",
"Room directory": "Jututubade loend",
"Sign in with single sign-on": "Logi sisse ühekordse sisselogimise abil",
"And %(count)s more...|other": "Ja %(count)s muud...",
"ex. @bob:example.com": "näiteks @kati:mingidomeen.com",
"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.": "Kui sul leidub lisateavet, mis võis selle vea analüüsimisel abiks olla, siis palun lisa need ka siia - näiteks mida sa vea tekkimise hetkel tegid, jututoa tunnus, kasutajate tunnused, jne.",
"Send logs": "Saada logikirjed",
"Unable to load commit detail: %(msg)s": "Ei õnnestu laadida sõnumi lisateavet: %(msg)s",
"Unavailable": "Ei ole saadaval",
"Changelog": "Versioonimuudatuste loend",
"You cannot delete this message. (%(code)s)": "Sa ei saa seda sõnumit kustutada. (%(code)s)",
"Navigate recent messages to edit": "Muutmiseks liigu viimaste sõnumite juurde",
"Move autocomplete selection up/down": "Liiguta automaatse sõnalõpetuse valikut üles või alla",
"Cancel autocomplete": "Lülita automaatne sõnalõpetus välja",
"Removing…": "Eemaldan…",
"Destroy cross-signing keys?": "Kas hävitame risttunnustamise võtmed?",
"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.": "Risttunnustamise võtmete kustutamine on tegevus, mida ei saa tagasi pöörata. Kõik sinu verifitseeritud vestluskaaslased näevad seejärel turvateateid. Kui sa just pole kaotanud ligipääsu kõikidele oma seadmetele, kust sa risttunnustamist oled teinud, siis sa ilmselgelt ei peaks kustutamist ette võtma.",
"Clear cross-signing keys": "Eemalda risttunnustamise võtmed",
"Confirm Removal": "Kinnita eemaldamine",
"Clear all data in this session?": "Kas eemaldame kõik selle sessiooni andmed?",
"Clearing all data from this session is permanent. Encrypted messages will be lost unless their keys have been backed up.": "Sessiooni kõikide andmete kustutamine on tegevus, mida ei saa tagasi pöörata. Kui sa pole varundanud krüptovõtmeid, siis sa kaotad ligipääsu krüptitud sõnumitele.",
"Clear all data": "Eemalda kõik andmed",
"Community IDs cannot be empty.": "Kogukonna tunnus ei või olla puudu.",
"Community IDs may only contain characters a-z, 0-9, or '=_-./'": "Kogukonna tunnuses võivad olla vaid järgnevad tähemärgid: a-z, 0-9, or '=_-./'",
"Something went wrong whilst creating your community": "Kogukonna loomisel läks midagi viltu",
"Create Community": "Loo kogukond",
"Community Name": "Kogukonna nimi",
"Example": "Näiteks",
"Community ID": "Kogukonna tunnus",
"example": "näiteks",
"Create": "Loo",
"Please enter a name for the room": "Palun sisesta jututoa nimi",
"Set a room address to easily share your room with other people.": "Jagamaks jututuba teiste kasutajatega, sisesta jututoa aadress.",
"You cant disable this later. Bridges & most bots wont work yet.": "Seda funktsionaalsust sa ei saa hiljem kinni keerata. Sõnumisillad ja enamus roboteid veel ei oska seda kasutada.",
"Enable end-to-end encryption": "Võta läbiv krüptimine kasutusele",
"Confirm your account deactivation by using Single Sign On to prove your identity.": "Kinnitamaks seda, et soovid oma konto kasutusest eemaldada, kasuta oma isiku tuvastamiseks ühekordset sisselogimist.",
"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. <b>This action is irreversible.</b>": "See muudab sinu konto jäädavalt mittekasutatavaks. Sina ei saa enam sisse logida ja keegi teine ei saa seda kasutajatunnust uuesti pruukida. Samuti logitakse sind välja kõikidest jututubadest, kus sa osaled ning eemaldatakse kõik sinu andmed sinu isikutuvastusserverist. <b>Seda tegevust ei saa tagasi pöörata.</b>",
"Deactivating your account <b>does not by default cause us to forget messages you have sent.</b> If you would like us to forget your messages, please tick the box below.": "Sinu konto kustutamine <b>vaikimisi ei tähenda, et unustatakse ka sinu saadetud sõnumid.</b> Kui sa siiski soovid seda, siis palun tee märge alljärgnevasse kasti.",
"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'i sõnumite nähtavus on sarnane e-posti kirjadega. Sõnumite unustamine tegelikult tähendab seda, et sinu varemsaadetud sõnumeid ei jagata uute või veel registreerumata kasutajatega, kuid registeerunud kasutajad, kes juba on need sõnumid saanud, võivad neid ka jätkuvalt lugeda.",
"Please forget all messages I have sent when my account is deactivated (<b>Warning:</b> this will cause future users to see an incomplete view of conversations)": "Minu konto kustutamisel palun unusta minu saadetud sõnumid (<b>Hoiatus:</b> seetõttu näevad tulevased kasutajad poolikuid vestlusi)",
"To continue, use Single Sign On to prove your identity.": "Jätkamaks tuvasta oma isik kasutades ühekordset sisselogimist.",
"Confirm to continue": "Soovin jätkata",
"Click the button below to confirm your identity.": "Oma isiku tuvastamiseks klõpsi alljärgnevat nuppu.",
"Incompatible local cache": "Kohalikud andmepuhvrid ei ühildu",
"Clear cache and resync": "Tühjenda puhver ja sünkroniseeri andmed uuesti",
"Confirm by comparing the following with the User Settings in your other session:": "Kinnita seda võrreldes järgnevaid andmeid oma teise sessiooni kasutajaseadetes:",
"Confirm this user's session by comparing the following with their User Settings:": "Kinnita selle kasutaja sessioon võrreldes järgnevaid andmeid tema kasutajaseadetes:",
"Session name": "Sessiooni nimi",
"Session ID": "Sessiooni tunnus",
"Session key": "Sessiooni võti",
"If they don't match, the security of your communication may be compromised.": "Kui nad omavahel ei klapi, siis teie suhtluse turvalisus võib olla ohus.",
"Your homeserver doesn't seem to support this feature.": "Tundub, et sinu koduserver ei toeta sellist funktsionaalsust.",
"Message edits": "Sõnumite muutmised",
"Your account is not secure": "Sinu kasutajakonto ei ole turvaline",
"This session, or the other session": "See või teine sessioon",
"The internet connection either session is using": "Internetiühendus, mida emb-kumb sessioon kasutab",
"New session": "Uus sessioon",
"Use this session to verify your new one, granting it access to encrypted messages:": "Kasuta seda sessiooni uute sessioonide verifitseerimiseks, andes sellega ligipääsu krüptitud sõnumitele:",
"If you didnt sign in to this session, your account may be compromised.": "Kui sa pole sellesse sessiooni sisse loginud, siis sinu kasutajakonto andmed võivad olla sattunud valedesse kätesse.",
"This wasn't me": "See ei olnud mina",
"If you run into any bugs or have feedback you'd like to share, please let us know on GitHub.": "Kui sa leiad vigu või soovid jagada muud tagasisidet, siis teata sellest GitHub'i vahendusel.",
"To help avoid duplicate issues, please <existingIssuesLink>view existing issues</existingIssuesLink> first (and add a +1) or <newIssueLink>create a new issue</newIssueLink> if you can't find it.": "Topelt veateadete vältimiseks palun <existingIssuesLink>vaata esmalt olemasolevaid</existingIssuesLink> (ning lisa a + 1), aga kui sa samal teemal viga ei leia, siis <newIssueLink>koosta uus veateade</newIssueLink>.",
"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.": "Sellest sõnumist teatamine saadab tema unikaalse sõnumi tunnuse sinu koduserveri haldurile. Kui selle jututoa sõnumid on krüptitud, siis sinu koduserveri haldur ei saa lugeda selle sõnumi teksti ega vaadata seal leiduvaid faile ja pilte.",
"Failed to upgrade room": "Jututoa versiooni uuendamine ei õnnestunud",
"The room upgrade could not be completed": "Jututoa uuendust ei õnnestunud teha",
"Please check your email and click on the link it contains. Once this is done, click continue.": "Palun vaata oma e-kirju ning klõpsi meie saadetud kirjas leiduvat linki. Kui see on tehtud, siis vajuta Jätka-nuppu.",
"Email address": "E-posti aadress",
"This will allow you to reset your password and receive notifications.": "See võimaldab sul luua uue salasõna ning saada teavitusi.",
"Wrong file type": "Vale failitüüp",
"Wrong Recovery Key": "Vale taastevõti",
"Invalid Recovery Key": "Vigane taastevõti",
"Security Phrase": "Turvafraas",
"Unable to access secret storage. Please verify that you entered the correct recovery passphrase.": "Ei õnnestu saada ligipääsu turvahoidlale. Palun kontrolli, et sa oleksid sisestanud õige taastamiseks mõeldud paroolifraasi.",
"Enter your Security Phrase or <button>Use your Security Key</button> to continue.": "Jätkamiseks sisesta oma turvafraas või kasuta <button>turvavõtit</button>.",
"Security Key": "Turvavõti",
"Use your Security Key to continue.": "Jätkamiseks kasuta turvavõtit.",
"Restoring keys from backup": "Taastan võtmed varundusest",
"Fetching keys from server...": "Laen võtmed serverist...",
"%(completed)s of %(total)s keys restored": "%(completed)s / %(total)s võtit taastatud",
"Unable to load backup status": "Varunduse oleku laadimine ei õnnestunud",
"Recovery key mismatch": "Taastevõtmed ei klapi",
"Backup could not be decrypted with this recovery key: please verify that you entered the correct recovery key.": "Selle taastevõtmega ei õnnestunud varundust dekrüptida: palun kontrolli, kas sa kasutad õiget taastevõtit.",
"Incorrect recovery passphrase": "Vigane taastamiseks mõeldud paroolifraas",
"Backup could not be decrypted with this recovery passphrase: please verify that you entered the correct recovery passphrase.": "Selle paroolifraasiga ei õnnestunud varundust dekrüptida: palun kontrolli, kas sa kasutad õiget taastamiseks mõeldud paroolifraasi.",
"Access your secure message history and set up secure messaging by entering your recovery passphrase.": "Sisestades taastamiseks mõeldud paroolifraasi, saad ligipääsu oma turvatud sõnumitele ning sätid üles krüptitud sõnumivahetuse.",
"If you've forgotten your recovery passphrase you can <button1>use your recovery key</button1> or <button2>set up new recovery options</button2>": "Kui sa oled unudtanud taastamiseks mõeldud paroolifraasi, siis sa saad <button1>kasutada oma taastevõtit</button1> või <button2>seadistada uued taastamise võimalused</button2>",
"<b>Warning</b>: You should only set up key backup from a trusted computer.": "<b>Hoiatus</b>: Sa peaksid võtmete varundust seadistama vaid arvutist, mida sa usaldad.",
"Were excited to announce Riot is now Element": "Meil on hea meel teatada, et Riot'i uus nimi on nüüd Element",
"Riot is now Element!": "Riot'i uus nimi on Element!",
"Secret storage public key:": "Turvahoidla avalik võti:",
"Verify User": "Verifitseeri kasutaja",
"For extra security, verify this user by checking a one-time code on both of your devices.": "Lisaturvalisus mõttes verifitseeri see kasutaja võrreldes selleks üheks korraks loodud koodi mõlemas seadmes.",
"Your messages are not secure": "Sinu sõnumid ei ole turvatud",
"Use your account to sign in to the latest version of the app at <a />": "Kasuta oma kontot logimaks sisse rakenduse viimasesse versiooni <a /> serveris",
"Youre already signed in and good to go here, but you can also grab the latest versions of the app on all platforms at <a>element.io/get-started</a>.": "Sa oled juba sisse loginud ja võid rahumeeli jätkata, kuid alati on hea mõte, kui kasutad viimast rakenduse versiooni, mille erinevate süsteemide jaoks leiad <a>element.io/get-started</a> lehelt.",
"Go to Element": "Võta Element kasutusele",
"Were excited to announce Riot is now Element!": "Meil on hea meel teatada, et Riot'i uus nimi on nüüd Element!",
"Learn more at <a>element.io/previously-riot</a>": "Lisateavet leiad <a>element.io/previously-riot</a> lehelt",
"Access your secure message history and set up secure messaging by entering your recovery key.": "Pääse ligi oma turvatud sõnumitele ning säti üles krüptitud sõnumivahetus.",
"If you've forgotten your recovery key you can <button>set up new recovery options</button>": "Kui sa oled unustanud oma taastevõtme, siis sa võid <button>seada üles uued taastamise võimalused</button>",
"Custom": "Kohandatud",
"Enter the location of your Element Matrix Services homeserver. It may use your own domain name or be a subdomain of <a>element.io</a>.": "Sisesta Element Matrix Services kodiserveri aadress. See võib kasutada nii sinu oma domeeni, kui olla <a>element.io</a> alamdomeen.",
"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.": "Tõhusamaks kasutuseks seadista filter sikutades kogukonna tunnuspilti filtriribale ekraani vasakus ääres. Sa saad sobival ajal klõpsata filtriribal asuvat tunnuspilti ning näha vaid kasutajaid ja jututubasid, kes on seotud selle kogukonnaga.",
"Delete the room address %(alias)s and remove %(name)s from the directory?": "Kas kustutame jututoa aadressi %(alias)s ja eemaldame %(name)s kataloogist?",
"delete the address.": "kustuta aadress.",
"The server may be unavailable or overloaded": "Server kas pole kättesaadav või on ülekoormatud",
"Unable to join network": "Võrguga liitumine ei õnnestu",
"Search rooms": "Otsi jututube",
"User menu": "Kasutajamenüü",
"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.": "Sa oled kõikidest sessioonidest välja logitud ning enam ei saa tõuketeavitusi. Nende taaskuvamiseks logi sisse kõikides oma seadmetes.",
"Return to login screen": "Mine tagasi sisselogimisvaatele",
"Set a new password": "Seadista uus salasõna",
"Invalid homeserver discovery response": "Vigane vastus koduserveri tuvastamise päringule",
"Failed to get autodiscovery configuration from server": "Serveri automaattuvastuse seadistuste laadimine ei õnnestunud",
"Invalid base_url for m.homeserver": "m.homeserver'i kehtetu base_url",
"Homeserver URL does not appear to be a valid Matrix homeserver": "Koduserveri URL ei tundu viitama korrektsele Matrix'i koduserverile",
"Invalid identity server discovery response": "Vigane vastus isikutuvastusserveri tuvastamise päringule",
"Invalid base_url for m.identity_server": "m.identity_server'i kehtetu base_url",
"Passphrases must match": "Paroolifraasid ei klapi omavahel",
"Passphrase must not be empty": "Paroolifraas ei tohi olla tühi",
"Export room keys": "Ekspordi jututoa võtmed",
"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.": "Selle toiminguga on sul võimalik saabunud krüptitud sõnumite võtmed eksportida sinu kontrollitavasse kohalikku faili. Seetõttu on sul tulevikus võimalik importida need võtmed mõnda teise Matrix'i klienti ning seeläbi muuta saabunud krüptitud sõnumid ka seal loetavaks.",
"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.": "Kes iganes saab kätte selle ekspordifaili, saab ka lugeda sinu krüptitud sõnumeid, seega ole hoolikas selle faili talletamisel. Andmaks lisakihi turvalisust, peaksid sa alljärgnevalt sisestama paroolifraasi, millega krüptitakse eksporditavad andmed. Faili hilisem importimine õnnestub vaid sama paroolifraasi sisestamisel.",
"Confirm passphrase": "Sisesta paroolifraas veel üks kord",
"Export": "Ekspordi",
"Import room keys": "Impordi jututoa võtmed",
"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.": "Selle toiminguga saad importida krüptimisvõtmed, mis sa viimati olid teisest Matrix'i kliendist eksportinud. Seejärel on võimalik dekrüptida ka siin kõik need samad sõnumid, mida see teine klient suutis dekrüptida.",
"The export file will be protected with a passphrase. You should enter the passphrase here, to decrypt the file.": "Ekspordifail on turvatud paroolifraasiga ning alljärgnevalt peaksid dekrüptimiseks sisestama selle paroolifraasi.",
"File to import": "Imporditav fail",
"Import": "Impordi",
"Confirm encryption setup": "Krüptimise seadistuse kinnitamine",
"Click the button below to confirm setting up encryption.": "Kinnitamaks, et soovid krüptimist seadistada, klõpsi järgnevat nuppu.",
"Safeguard against losing access to encrypted messages & data by backing up encryption keys on your server.": "Tagamaks, et sa ei kaota ligipääsu krüptitud sõnumitele ja andmetele, varunda krüptimisvõtmed oma serveris.",
"Generate a Security Key": "Loo turvavõti",
"Well generate a Security Key for you to store somewhere safe, like a password manager or a safe.": "Me loome turvavõtme, mida sa peaksid hoidma turvalises kohas, nagu näiteks arvutis salasõnade halduris või vana kooli seifis.",
"Enter a Security Phrase": "Sisesta turvafraas",
"Use a secret phrase only you know, and optionally save a Security Key to use for backup.": "Sisesta turvafraas, mida vaid sina tead ning lisaks võid salvestada varunduse turvavõtme.",
"Enter your account password to confirm the upgrade:": "Kinnitamaks seda muudatust, sisesta oma konto salasõna:",
"Restore your key backup to upgrade your encryption": "Krüptimine uuendamiseks taasta oma varundatud võtmed",
"Restore": "Taasta",
"You'll need to authenticate with the server to confirm the upgrade.": "Uuenduse kinnitamiseks pead end autentima serveris.",
"Upgrade this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "Teiste sessioonide verifitseerimiseks pead uuendama seda sessiooni. Muud verifitseeritud sessioonid saavad sellega ligipääsu krüptitud sõnumitele ning nad märgitakse usaldusväärseteks ka teiste kasutajate jaoks.",
"Enter a security phrase only you know, as its used to safeguard your data. To be secure, you shouldnt re-use your account password.": "Andmete kaitsmiseks sisesta turvafraas, mida vaid sina tead. On mõistlik ja palun ära kasuta selleks oma tavalist konto salasõna.",
"Enter a recovery passphrase": "Sisesta taastamiseks mõeldud paroolifraas",
"Great! This recovery passphrase looks strong enough.": "Suurepärane! Taastamiseks mõeldud paroolifraas on piisavalt kange.",
"That matches!": "Klapib!",
"Use a different passphrase?": "Kas kasutame muud paroolifraasi?",
"That doesn't match.": "Ei klapi mitte.",
"Go back to set it again.": "Mine tagasi ja sisesta nad uuesti.",
"Enter your recovery passphrase a second time to confirm it.": "Kinnitamaks sisesta taastamiseks mõeldud paroolifraas teist korda.",
"Confirm your recovery passphrase": "Kinnita oma taastamiseks mõeldud paroolifraas",
"Store your Security Key somewhere safe, like a password manager or a safe, as its used to safeguard your encrypted data.": "Kuna seda kasutatakse sinu krüptitud andmete kaitsmiseks, siis hoia oma turvavõtit kaitstud ja turvalises kohas, nagu näiteks arvutis salasõnade halduris või vana kooli seifis.",
"Unable to query secret storage status": "Ei õnnestu tuvastada turvahoidla olekut",
"If you cancel now, you may lose encrypted messages & data if you lose access to your logins.": "Kui sa tühistad nüüd, siis sa võid peale viimasest seadmest välja logimist kaotada ligipääsu oma krüptitud sõnumitele ja andmetele.",
"You can also set up Secure Backup & manage your keys in Settings.": "Samuti võid sa seadetes võtta kasutusse turvalise varunduse ning hallata oma krüptovõtmeid.",
"Set up Secure backup": "Võta kasutusele turvaline varundus",
"Set a Security Phrase": "Sisesta turvafraas",
"Confirm Security Phrase": "Kinnita turvafraas",
"Save your Security Key": "Salvesta turvavõti",
"Unable to set up secret storage": "Turvahoidla kasutuselevõtmine ei õnnestu",
"We'll store an encrypted copy of your keys on our server. Secure your backup with a recovery passphrase.": "Me salvestame krüptitud koopia sinu krüptovõtmetest oma serveris. Seades taastamiseks mõeldud paroolifraasi, saad turvata oma varundust.",
"For maximum security, this should be different from your account password.": "Parima turvalisuse jaoks peaks paroolifraas olema erinev sinu konto salasõnast.",
"Set up with a recovery key": "Võta kasutusele taastevõti",
"Please enter your recovery passphrase a second time to confirm.": "Kinnitamiseks palun sisesta taastamiseks mõeldud paroolifraas teist korda.",
"Repeat your recovery passphrase...": "Korda oma taastamiseks mõeldud paroolifraasi...",
"Your recovery key is a safety net - you can use it to restore access to your encrypted messages if you forget your recovery passphrase.": "Sinu taastevõti toimib turvavõrguna - juhul, kui sa unustad taastamiseks mõeldud paroolifraasi, siis sa saad seda kasutada taastamaks ligipääsu krüptitud sõnumitele.",
"Keep a copy of it somewhere secure, like a password manager or even a safe.": "Hoia seda turvalises kohas, nagu näiteks salasõnahalduris või vana kooli seifis.",
"Your keys are being backed up (the first backup could take a few minutes).": "Sinu krüptovõtmeid varundatakse (esimese varukoopia tegemine võib võtta paar minutit).",
"Autocomplete": "Automaatne sõnalõpetus",
"Favourited": "Märgitud lemmikuks",
"Leave Room": "Lahku jututoast",
"Forget Room": "Unusta jututuba ära",
"Which officially provided instance you are using, if any": "Mis iganes ametlikku klienti sa kasutad, kui üldse kasutad",
"Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Kui kasutad %(brand)s seadmes, kus puuteekraan on põhiline sisestusviis",
"Use your account to sign in to the latest version": "Kasuta oma kontot selleks, et sisse logida rakenduse viimasesse versiooni",
"Learn More": "Lisateave",
"Upgrades a room to a new version": "Uuendab jututoa uue versioonini",
"You do not have the required permissions to use this command.": "Sul ei ole piisavalt õigusi selle käsu käivitamiseks.",
"Error upgrading room": "Viga jututoa uuendamisel",
"Double check that your server supports the room version chosen and try again.": "Kontrolli veel kord, kas sinu koduserver toetab seda jututoa versiooni ning proovi uuesti.",
"Changes your display nickname": "Muudab sinu kuvatavat nime",
"Changes your display nickname in the current room only": "Muudab sinu kuvatavat nime vaid selles jututoas",
"Changes the avatar of the current room": "Muudab selle jututoa tunnuspilti",
"Changes your avatar in this current room only": "Muudab sinu tunnuspilti vaid selles jututoas",
"Failed to set topic": "Teema määramine ei õnnestunud",
"This room has no topic.": "Sellel jututoal puudub teema.",
"Invites user with given id to current room": "Kutsub nimetatud kasutajatunnusega kasutaja sellesse jututuppa",
"Use an identity server": "Kasuta isikutuvastusserverit",
"%(targetName)s accepted the invitation for %(displayName)s.": "%(targetName)s võttis vastu kutse %(displayName)s nimel.",
"%(targetName)s accepted an invitation.": "%(targetName)s võttis kutse vastu.",
"%(senderName)s requested a VoIP conference.": "%(senderName)s soovib alustada VoIP rühmakõnet.",
"%(senderName)s made no change.": "%(senderName)s ei teinud muutusi.",
"VoIP conference started.": "VoIP rühmakõne algas.",
"VoIP conference finished.": "VoIP rühmakõne lõppes.",
"%(targetName)s rejected the invitation.": "%(targetName)s lükkas kutse tagasi.",
"%(targetName)s left the room.": "%(targetName)s lahkus jututoast.",
"%(userId)s from %(fromPowerLevel)s to %(toPowerLevel)s": "%(userId)s õigused muutusid: %(fromPowerLevel)s -> %(toPowerLevel)s",
"%(senderName)s changed the power level of %(powerLevelDiffText)s.": "%(senderName)s muutis %(powerLevelDiffText)s õigusi.",
"Render simple counters in room header": "Näita jututoa päises lihtsaid loendure",
"Multiple integration managers": "Mitmed lõiminguhaldurid",
"Enable advanced debugging for the room list": "Lülita jututubade loendi jaoks sisse detailne silumine",
"Show a reminder to enable Secure Message Recovery in encrypted rooms": "Näita krüptitud jututubades meeldetuletust krüptitud sõnumite taastamisvõimaluste kohta",
"Use a system font": "Kasuta süsteemset fonti",
"System font name": "Süsteemse fondi nimi",
"Allow fallback call assist server turn.matrix.org when your homeserver does not offer one (your IP address would be shared during a call)": "Kui sinu koduserveris on seadistamata kõnehõlbustusserver, siis luba alternatiivina kasutada avalikku serverit turn.matrix.org (kõne ajal jagatakse nii sinu avalikku, kui privaatvõrgu IP-aadressi)",
"Send read receipts for messages (requires compatible homeserver to disable)": "Saada sõnumite lugemiskinnitusi (selle võimaluse keelamine eeldab, et koduserver sellist funktsionaalsust toetab)",
"This is your list of users/servers you have blocked - don't leave the room!": "See on sinu serverite ja kasutajate ligipääsukeeldude loend. Palun ära lahku sellest jututoast!",
"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.": "Kui sa just enne ekspordi selle jututoa võtmed ja impordi need hiljem, siis salasõna muutmine tühistab kõik läbiva krüptimise võtmed sinu kõikides sessioonides ning seega muutub kogu sinu krüptitud vestluste ajalugu loetamatuks. Tulevaste arenduste käigus tehakse see funktsionaalsus paremaks.",
"Your account has a cross-signing identity in secret storage, but it is not yet trusted by this session.": "Sinu kontol on turvahoidlas olemas risttunnustamise identiteet, kuid seda veel ei loeta antud sessioonis usaldusväärseks.",
"Cross-signing and secret storage are not yet set up.": "Risttunnustamine ja turvahoidla pole veel seadistatud.",
"Reset cross-signing and secret storage": "Tühista risttunnustamise tulemused ja turvahoidla sisu",
"Bootstrap cross-signing and secret storage": "Võta risttunnustamine ja turvahoidla kasutusele",
"well formed": "korrektses vormingus",
"unexpected type": "tundmatut tüüpi",
"in secret storage": "turvahoidlas",
"Self signing private key:": "Sinu privaatvõtmed:",
"cached locally": "on puhverdatud kohalikus seadmes",
"not found locally": "ei leidu kohalikus seadmes",
"User signing private key:": "Kasutaja privaatvõti:",
"Session backup key:": "Sessiooni varundusvõti:",
"in account data": "kasutajakonto andmete hulgas",
"Homeserver feature support:": "Koduserver on tugi sellele funktsionaalusele:",
"exists": "olemas",
"Confirm deleting these sessions by using Single Sign On to prove your identity.|other": "Kinnitamaks seda, et soovid neid sessioone kustutada, kasuta oma isiku tuvastamiseks ühekordset sisselogimist.",
"Confirm deleting these sessions by using Single Sign On to prove your identity.|one": "Kinnitamaks seda, et soovid seda sessiooni kustutada, kasuta oma isiku tuvastamiseks ühekordset sisselogimist.",
"Confirm deleting these sessions": "Kinnita nende sessioonide kustutamine",
"Click the button below to confirm deleting these sessions.|other": "Nende sessioonide kustutamiseks klõpsi järgnevat nuppu.",
"Click the button below to confirm deleting these sessions.|one": "Selle sessiooni kustutamiseks klõpsi järgnevat nuppu.",
"Delete sessions|other": "Kustuta sessioonid",
"Delete sessions|one": "Kustuta sessioon",
"Authentication": "Autentimine",
"%(brand)s can't securely cache encrypted messages locally while running in a web browser. Use <desktopLink>%(brand)s Desktop</desktopLink> for encrypted messages to appear in search results.": "%(brand)s ei võimalda veebibrauseris töötades krüptitud sõnumeid turvaliselt puhverdada. Selleks, et krüptitud sõnumeid saaks otsida, kasuta <desktopLink>%(brand)s Desktop</desktopLink> rakendust Matrix'i kliendina.",
"Encrypted messages are secured with end-to-end encryption. Only you and the recipient(s) have the keys to read these messages.": "Krüptitud sõnumid kasutavad läbivat krüptimist. Ainult sinul ja saaja(te)l on võtmed selliste sõnumite lugemiseks.",
"Unable to load key backup status": "Võtmete varunduse oleku laadimine ei õnnestunud",
"Restore from Backup": "Taasta varundusest",
"This session is backing up your keys. ": "See sessioon varundab sinu krüptovõtmeid. ",
"This session is <b>not backing up your keys</b>, but you do have an existing backup you can restore from and add to going forward.": "See sessioon <b>ei varunda sinu krüptovõtmeid</b>, aga sul on olemas varundus, millest saad taastada ning millele saad võtmeid lisada.",
"Success": "Õnnestus",
"Your password was successfully changed. You will not receive push notifications on other sessions until you log back in to them": "Sinu salasõna sai edukalt muudetud. Sa ei saa oma teistes sessioonides tõuketeateid seni, kuni sa pole neist välja ja tagasi loginud",
"Agree to the identity server (%(serverName)s) Terms of Service to allow yourself to be discoverable by email address or phone number.": "Selleks, et sind võiks leida e-posti aadressi või telefoninumbri alusel, nõustu isikutuvastusserveri (%(serverName)s) kasutustingimustega.",
"Account management": "Kontohaldus",
"Deactivating your account is a permanent action - be careful!": "Kuna kasutajakonto dektiveerimist ei saa tagasi pöörata, siis palun ole ettevaatlik!",
"Deactivate Account": "Deaktiveeri konto",
"Discovery": "Leia kasutajaid",
"Deactivate account": "Deaktiveeri kasutajakonto",
"For help with using %(brand)s, click <a>here</a>.": "Kui otsid lisateavet %(brand)s kasutamise kohta, palun vaata <a>siia</a>.",
"Add users and servers you want to ignore here. Use asterisks to have %(brand)s match any characters. For example, <code>@bot:*</code> would ignore all users that have the name 'bot' on any server.": "Lisa siia kasutajad ja serverid, mida sa soovid eirata. Kui soovid, et %(brand)s kasutaks üldist asendamist, siis kasuta tärni. Näiteks <code>@bot:*</code> eirab kõikide serverite kasutajat 'bot'.",
"Use default": "Kasuta vaikimisi väärtusi",
"Mentions & Keywords": "Mainimised ja võtmesõnad",
"Notification options": "Teavituste eelistused",
"Room options": "Jututoa eelistused",
"This room is public": "See jututuba on avalik",
"Away": "Eemal",
"Room avatar": "Jututoa tunnuspilt ehk avatar",
"Publish this room to the public in %(domain)s's room directory?": "Kas avaldame selle jututoa %(domain)s jututubade loendis?",
"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.": "Kui keegi lisab oma sõnumisse URL'i, siis võidakse näidata selle URL'i eelvaadet, mis annab lisateavet tema kohta, nagu näiteks pealkiri, kirjeldus ja kuidas ta välja näeb.",
"Waiting for you to accept on your other session…": "Ootan, et sa nõustuksid teises sessioonis…",
"Waiting for %(displayName)s to accept…": "Ootan, et %(displayName)s nõustuks…",
"Accepting…": "Nõustun …",
"Start Verification": "Alusta verifitseerimist",
"Messages in this room are end-to-end encrypted.": "See jututuba on läbivalt krüptitud.",
"Your messages are secured and only you and the recipient have the unique keys to unlock them.": "Sinu sõnumid on turvatud ning ainult sinul ja saaja(te)l on unikaalsed võtmed selliste sõnumite lugemiseks.",
"Messages in this room are not end-to-end encrypted.": "See jututuba ei ole läbivalt krüptitud.",
"One of the following may be compromised:": "Üks järgnevatest võib olla sattunud valedesse kätesse:",
"Your homeserver": "Sinu koduserver",
"The homeserver the user youre verifying is connected to": "Sinu poolt verifitseeritava kasutaja koduserver",
"Yours, or the other users internet connection": "Sinu või teise kasutaja internetiühendus",
"Yours, or the other users session": "Sinu või teise kasutaja sessioon",
"Trusted": "Usaldusväärsed",
"Not trusted": "Ei ole usaldusväärsed",
"%(count)s verified sessions|other": "%(count)s verifitseeritud sessiooni",
"%(count)s verified sessions|one": "1 verifitseeritud sessioon",
"Hide verified sessions": "Peida verifitseeritud sessioonid",
"%(count)s sessions|other": "%(count)s sessiooni",
"%(count)s sessions|one": "%(count)s sessioon",
"Hide sessions": "Peida sessioonid",
"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.": "See sessioon, mida sa tahad verifitseerida ei toeta QR koodi ega emoji-põhist verifitseerimist, aga just neid %(brand)s oskab kasutada. Proovi mõne muu Matrix'i kliendiga.",
"Verify by scanning": "Verifitseeri skaneerides",
"Ask %(displayName)s to scan your code:": "Palu, et %(displayName)s skaneeriks sinu koodi:",
"If you can't scan the code above, verify by comparing unique emoji.": "Kui sa ei saa skaneerida eespool kuvatud koodi, siis verifitseeri unikaalsete emoji'de võrdlemise teel.",
"Verify by comparing unique emoji.": "Verifitseeri unikaalsete emoji'de võrdlemise teel.",
"Verify by emoji": "Verifitseeri emoji'de abil",
"Edited at %(date)s": "Muutmise kuupäev %(date)s",
"Click to view edits": "Muudatuste nägemiseks klõpsi",
"<a>In reply to</a> <pill>": "<a>Vastuseks kasutajale</a> <pill>",
"There are advanced notifications which are not shown here.": "On olemad detailseid teavitusi, mida siin ei kuvata.",
"You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply.": "Sa võib-olla oled seadistanud nad %(brand)s'ist erinevas kliendis. Sa küll ei saa neid %(brand)s'is muuta, kuid nad kehtivad siiski.",
"You are currently using <server></server> to discover and be discoverable by existing contacts you know. You can change your identity server below.": "Sa hetkel kasutad <server></server> serverit, et olla leitav ja ise leida sinule teadaolevaid inimesi. Alljärgnevalt saad sa muuta oma isikutuvastusserverit.",
"If you don't want to use <server /> to discover and be discoverable by existing contacts you know, enter another identity server below.": "Kui sa ei soovi kasutada <server /> serverit, et olla leitav ja ise leida sinule teadaolevaid inimesi, siis sisesta alljärgnevalt mõni teine isikutuvastusserver.",
"Identity Server": "Isikutuvastusserver",
"Do not use an identity server": "Ära kasuta isikutuvastusserverit",
"Enter a new identity server": "Sisesta uue isikutuvastusserveri nimi",
"Change": "Muuda",
"Use an Integration Manager <b>(%(serverName)s)</b> to manage bots, widgets, and sticker packs.": "Robotite, vidinate ja kleepsupakkide jaoks kasuta lõiminguhaldurit <b>(%(serverName)s)</b>.",
"Use an Integration Manager to manage bots, widgets, and sticker packs.": "Robotite, vidinate ja kleepsupakkide seadistamiseks kasuta lõiminguhaldurit.",
"Manage integrations": "Halda lõiminguid",
"Integration Managers receive configuration data, and can modify widgets, send room invites, and set power levels on your behalf.": "Lõiminguhalduritel on laiad volitused - nad võivad sinu nimel lugeda seadistusi, kohandada vidinaid, saata jututubade kutseid ning määrata õigusi.",
"Define the power level of a user": "Määra kasutaja õigused",
"Command failed": "Käsk ei toiminud",
"Opens the Developer Tools dialog": "Avab arendusvahendite akna",
"Adds a custom widget by URL to the room": "Lisab jututuppa URL-ist valitud kohandatud vidina",
"Backing up %(sessionsRemaining)s keys...": "Varundan %(sessionsRemaining)s krüptovõtmeid...",
"All keys backed up": "Kõik krüptovõtmed on varundatud",
"Backup has a <validity>valid</validity> signature from this user": "Varukoopial on selle kasutaja <validity>kehtiv</validity> allkiri",
"Backup has a <validity>invalid</validity> signature from this user": "Varukoopial on selle kasutaja <validity>vigane</validity> allkiri",
"Backup has a signature from <verify>unknown</verify> user with ID %(deviceId)s": "Varukoopial <verify>tundmatu</verify> kasutaja allkiri seadme tunnusega %(deviceId)s",
"Backup has a signature from <verify>unknown</verify> session with ID %(deviceId)s": "Varukoopial <verify>tundmatu</verify> sessiooni allkiri seadme tunnusega %(deviceId)s",
"Backup has a <validity>valid</validity> signature from this session": "Varukoopial on selle sessiooni <validity>kehtiv</validity> allkiri",
"Backup has an <validity>invalid</validity> signature from this session": "Varukoopial on selle sessiooni <validity>vigane</validity> allkiri",
"Backup is not signed by any of your sessions": "Varunduse andmetel pole mitte ühegi sinu sessiooni allkirja",
"This backup is trusted because it has been restored on this session": "See varukoopia on usaldusväärne, sest ta on taastatud sellest sessioonist",
"Backup version: ": "Varukoopia versioon: ",
"Algorithm: ": "Algoritm: ",
"Backup key stored: ": "Varukoopia võti on salvestatud: ",
"Start using Key Backup": "Võta kasutusele krüptovõtmete varundamine",
"You are not currently using an identity server. To discover and be discoverable by existing contacts you know, add one below.": "Sa hetkel ei kasuta isikutuvastusserverit. Et olla leitav ja ise leida sinule teadaolevaid inimesi seadista ta alljärgnevalt.",
"Show rooms with unread messages first": "Näita lugemata sõnumitega jututubasid esimesena",
"Show previews of messages": "Näita sõnumite eelvaateid",
"Sort by": "Järjestamisviis",
"Activity": "Aktiivsuse alusel",
"A-Z": "Tähestiku järjekorras",
"Jump to first unread room.": "Siirdu esimesse lugemata jututuppa.",
"Jump to first invite.": "Siirdu esimese kutse juurde.",
"Recovery Method Removed": "Taastemeetod on eemaldatud",
"This session has detected that your recovery passphrase and key for Secure Messages have been removed.": "Oleme tuvastanud, et selles sessioonis ei leidu taastamiseks mõeldud paroolifraas ega krüptitud sõnumite taastevõtit.",
"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.": "Kui sa tegid seda juhuslikult, siis sa võid selles sessioonis uuesti seadistada sõnumite krüptimise, mille tulemusel krüptime uuesti kõik sõnumid ja loome uue taastamise meetodi.",
"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.": "Kui sa ei ole ise taastamise meetodeid eemaldanud, siis võib olla tegemist ründega sinu konto vastu. Palun vaheta koheselt oma kasutajakonto salasõna ning määra seadistustes uus taastemeetod.",
"Are you sure you want to cancel entering passphrase?": "Kas oled kindel et sa soovid katkestada paroolifraasi sisestamise?",
"Use an identity server to invite by email. Click continue to use the default identity server (%(defaultIdentityServerName)s) or manage in Settings.": "E-posti teel kutse saatmiseks kasuta isikutuvastusserverit. Võid kasutada vaikimisi serverit (%(defaultIdentityServerName)s) või määrata muu serveri seadistustes.",
"Use an identity server to invite by email. Manage in Settings.": "Kasutajatele e-posti teel kutse saatmiseks pruugi isikutuvastusserverit. Täpsemalt saad seda hallata seadistustes.",
"Joins room with given address": "Liitu antud aadressiga jututoaga",
"Leave room": "Lahku jututoast",
"Unrecognised room address:": "Tundmatu jututoa aadress:",
"Kicks user with given id": "Müksa selle tunnusega kasutaja jututoast välja",
"Stops ignoring a user, showing their messages going forward": "Lõpeta kasutaja eiramine ja näita edaspidi tema sõnumeid",
"Unignored user": "Kasutaja, kelle eiramine on lõppenud",
"You are no longer ignoring %(userId)s": "Sa edaspidi ei eira kasutajat %(userId)s",
"Deops user with given id": "Eemalda antud tunnusega kasutajalt haldusõigused selles jututoas",
"Please supply a widget URL or embed code": "Palun lisa antud vidina aadress või lisatav kood",
"Please supply a https:// or http:// widget URL": "Vidina aadressi alguses peab olema kas https:// või http://",
"You cannot modify widgets in this room.": "Sul pole õigusi vidinate muutmiseks selles jututoas.",
"Verifies a user, session, and pubkey tuple": "Verifitseerib kasutaja, sessiooni ja avalikud võtmed",
"Unknown (user, session) pair:": "Tundmatu kasutaja-sessioon paar:",
"Displays action": "Näitab tegevusi",
"Reason": "Põhjus",
"Individually verify each session used by a user to mark it as trusted, not trusting cross-signed devices.": "Ära usalda risttunnustamist ning verifitseeri kasutaja iga sessioon eraldi.",
"Connect this session to Key Backup": "Seo see sessioon krüptovõtmete varundusega",
"not stored": "ei ole salvestatud",
"Backup has a <validity>valid</validity> signature from <verify>verified</verify> session <device></device>": "Varukoopial on <validity>kehtiv</validity> allkiri <verify>verifitseeritud</verify> sessioonist <device></device>",
"Backup has a <validity>valid</validity> signature from <verify>unverified</verify> session <device></device>": "Varukoopial on <validity>kehtiv</validity> allkiri <verify>verifitseerimata</verify> sessioonist <device></device>",
"Backup has an <validity>invalid</validity> signature from <verify>verified</verify> session <device></device>": "Varukoopial on <validity>vigane</validity> allkiri <verify>verifitseeritud</verify> sessioonist <device></device>",
"Backup has an <validity>invalid</validity> signature from <verify>unverified</verify> session <device></device>": "Varukoopial on <validity>vigane</validity> allkiri <verify>verifitseerimata</verify> sessioonist <device></device>",
"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.": "Isikutuvastusserveri kasutamine ei ole kohustuslik. Kui sa seda ei tee, siis sa ei ole leitav teiste kasutajate poolt ega sulle ei saa telefoninumbri või e-posti aadressi alusel kutset saata. Küll aga saab kutset saata Matrix'i kasutajatunnuse alusel.",
"Help & About": "Abiteave ning info meie kohta",
"Submit debug logs": "Saada silumise logid",
"Custom Tag": "Kohandatud silt",
"%(brand)s does not know how to join a room on this network": "%(brand)s ei tea kuidas selles võrgus jututoaga liituda",
"%(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 Androidi jaoks",
"Starting backup...": "Alusta varundamist...",
"Success!": "Õnnestus!",
"Create key backup": "Tee võtmetest varukoopia",
"Unable to create key backup": "Ei õnnestu teha võtmetest varukoopiat",
"Don't ask again": "Ära küsi uuesti",
"New Recovery Method": "Uus taastamise meetod",
"A new recovery passphrase and key for Secure Messages have been detected.": "Tuvastasin krüptitud sõnumite taastamiseks mõeldud uue paroolifraasi ja võtmed.",
"This session is encrypting history using the new recovery method.": "See sessioon krüptib ajalugu kasutades uut taastamise meetodit.",
"Whether or not you're using the Richtext mode of the Rich Text Editor": "Kas sa kasutad või mitte tekstitoimetis kujundatud teksti režiimi",
"Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "Kas sa kasutad või mitte leivapuru-funktsionaalsust (tunnuspildid jututubade loendi kohal)",
"Whether you're using %(brand)s as an installed Progressive Web App": "Kas sa kasutad %(brand)s'i PWA-na (Progressive Web App)",
"Every page you use in the app": "Iga lehekülg, mida sa rakenduses kasutad",
"Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Kui antud lehel leidub isikustatavaid andmeid, nagu jututoa, kasutaja või kogukonna tunnus, siis need andmed eemaldatakse enne serveri poole saatmist.",
"* %(senderName)s %(emote)s": "* %(senderName)s %(emote)s",
" to store messages from ": " salvestamaks sõnumeid ",
"Unable to fetch notification target list": "Ei õnnestu laadida teavituste eesmärkide loendit",
"Notification targets": "Teavituste eesmärgid",
"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.": "Isikutuvastusserveri kasutamise lõpetamine tähendab, et sa ei ole leitav teiste kasutajate poolt ega sulle ei saa telefoninumbri või e-posti aadressi alusel kutset saata. Küll aga saab kutset saata Matrix'i kasutajatunnuse alusel.",
"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.": "Kui sa oled teatanud meile GitHub'i vahendusel veast, siis silumislogid aitavad meil seda viga kergemini parandada. Vigadega seotud logid sisaldavad rakenduse teavet, sealhulgas sinu kasutajanime, külastatud jututubade kasutajatunnuseid või aliasi ning teiste kasutajate kasutajanimesid. Logides ei ole saadetud sõnumite sisu.",
"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": "Selleks, et sa ei kaotaks oma vestluste ajalugu, pead sa eksportima jututoa krüptovõtmed enne välja logimist. Küll, aga pead sa selleks kasutama %(brand)s uuemat versiooni",
"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.": "Sa oled selle sessiooni jaoks varem kasutanud %(brand)s'i uuemat versiooni. Selle versiooni kasutamiseks läbiva krüptimisega, pead sa esmalt logima välja ja siis uuesti logima tagasi sisse.",
"Without setting up Secure Message Recovery, you'll lose your secure message history when you log out.": "Kui sa pole seadistanud krüptitud sõnumite taastamise meetodeid, siis väljalogimisel sa kaotad võimaluse neid krüptitud sõnumeid lugeda.",
"If you don't want to set this up now, you can later in Settings.": "Kui sa ei soovi seda teha kohe, siis vastava võimaluse leiad hiljem rakenduse seadistustest.",
"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.": "Kui sa ei ole ise uusi taastamise meetodeid lisanud, siis võib olla tegemist ründega sinu konto vastu. Palun vaheta koheselt oma kasutajakonto salasõna ning määra seadistustes uus taastemeetod.",
"%(senderDisplayName)s enabled flair for %(groups)s in this room.": "%(senderDisplayName)s võttis selles jututoas kasutusele %(groups)s kogukonna rinnamärgi.",
"%(senderDisplayName)s disabled flair for %(groups)s in this room.": "%(senderDisplayName)s eemaldas selles jututoas kasutuselt %(groups)s kogukonna rinnamärgi.",
"%(senderDisplayName)s enabled flair for %(newGroups)s and disabled flair for %(oldGroups)s in this room.": "%(senderDisplayName)s võttis selles jututoas kasutusele %(newGroups)s kogukonna rinnamärgi ning eemaldas rinnamärgi %(oldGroups)s kogukonnalt.",
"Connect this session to key backup before signing out to avoid losing any keys that may only be on this session.": "Enne väljalogimist seo see sessioon krüptovõtmete varundusega. Kui sa seda ei tee, siis võid kaotada võtmed, mida kasutatakse vaid siin sessioonis.",
"Flair": "Kogukonna rinnasilt",
"Error updating flair": "Viga kogukonna rinnasildi uuendamisel",
"There was an error updating the flair for this room. The server may not allow it or a temporary error occurred.": "Kogukonna rinnasildi uuendamisel tekkis viga. See kas on serveri poolt keelatud või tekkis mingi ajutine viga.",
"Showing flair for these communities:": "Näidatakse nende kogukondade rinnasilte:",
"This room is not showing flair for any communities": "Sellele jututoale ei ole jagatud ühtegi kogukonna rinnasilti",
"Display your community flair in rooms configured to show it.": "Näita oma kogukonna rinnasilti nendes jututubades, kus selle kuvamine on seadistatud.",
"You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use %(brand)s with an existing Matrix account on a different homeserver.": "Kohandatud serveriseadistusi saad kasutada selleks, et logida sisse sinu valitud koduserverisse. See võimaldab sinul kasutada %(brand)s'i mõnes teises koduserveri hallatava kasutajakontoga.",
"Did you know: you can use communities to filter your %(brand)s experience!": "Kas sa teadsid, et sa võid %(brand)s'i parema kasutuskogemuse nimel pruukida kogukondi!",
"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.": "Kui sa pole seadistanud krüptitud sõnumite taastamise meetodeid, siis väljalogimisel või muu sessiooni kasutamisel sa kaotad võimaluse oma krüptitud sõnumeid lugeda.",
"Set up Secure Message Recovery": "Võta kasutusele turvaline sõnumivõtmete varundus",
"Secure your backup with a recovery passphrase": "Krüpti oma varukoopia taastamiseks mõeldud paroolifraasiga",
"The person who invited you already left the room.": "See, kes sind jututoa liikmeks kutsus, on juba jututoast lahkunud.",
"The person who invited you already left the room, or their server is offline.": "See, kes sind jututoa liikmeks kutsus, kas juba on jututoast lahkunud või tema koduserver on võrgust väljas."
}

View file

@ -20,7 +20,7 @@
"Start chat": "Hasi txata",
"Custom Server Options": "Zerbitzari pertsonalizatuaren aukerak",
"Dismiss": "Baztertu",
"powered by Matrix": "Matrix mamian",
"powered by Matrix": "Matrix-ekin egina",
"Room": "Gela",
"Historical": "Historiala",
"Save": "Gorde",
@ -326,7 +326,7 @@
"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",
"There are no visible files in this room": "Ez dago fitxategi ikusgairik gela honetan",
"There are no visible files in this room": "Ez dago fitxategirik ikusgai 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)",
"(~%(count)s results)|other": "(~%(count)s emaitza)",
@ -734,7 +734,7 @@
"All Rooms": "Gela guztiak",
"Wednesday": "Asteazkena",
"You cannot delete this message. (%(code)s)": "Ezin duzu mezu hau ezabatu. (%(code)s)",
"Quote": "Aipua",
"Quote": "Aipatu",
"Send logs": "Bidali egunkariak",
"All messages": "Mezu guztiak",
"Call invitation": "Dei gonbidapena",
@ -1539,7 +1539,7 @@
"View": "Ikusi",
"Find a room…": "Bilatu gela bat…",
"Find a room… (e.g. %(exampleRoom)s)": "Bilatu gela bat… (adib. %(exampleRoom)s)",
"If you can't find the room you're looking for, ask for an invite or <a>Create a new room</a>.": "Ezin baduzu bila ari zaren gela aurkitu, eskatu gonbidapen bat edo <a>Sortu gela berri bat</a>.",
"If you can't find the room you're looking for, ask for an invite or <a>Create a new room</a>.": "Ez baduzu bilatzen duzuna aurkitzen, eskatu gonbidapen bat edo <a>Sortu gela berri bat</a>.",
"Explore rooms": "Arakatu gelak",
"Community Autocomplete": "Komunitate osatze automatikoa",
"Emoji Autocomplete": "Emoji osatze automatikoa",
@ -1641,7 +1641,7 @@
"Not trusted": "Ez konfiantzazkoa",
"Direct message": "Mezu zuzena",
"<strong>%(role)s</strong> in %(roomName)s": "<strong>%(role)s</strong> %(roomName)s gelan",
"Messages in this room are end-to-end encrypted.": "Gela honetako mezuak ez daude muturretik muturrera zifratuta.",
"Messages in this room are end-to-end encrypted.": "Gela honetako mezuak muturretik muturrera zifratuta daude.",
"Security": "Segurtasuna",
"Verify": "Egiaztatu",
"You have ignored this user, so their message is hidden. <a>Show anyways.</a>": "Erabiltzaile hau ezikusi duzu, beraz bere mezua ezkutatuta dago. <a>Erakutsi hala ere.</a>",
@ -1897,7 +1897,7 @@
"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.",
"<requestLink>Re-request encryption keys</requestLink> from your other sessions.": "<requestLink>Eskatu berriro zifratze gakoak</requestLink> zure beste saioei.",
"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.",
"Your messages are secured and only you and the recipient have the unique keys to unlock them.": "Zuen mezuak babestuta daude eta soilik zuk eta hartzaileak dituzue hauek desblokeatzeko gakoak.",
"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.",
@ -2248,5 +2248,23 @@
"Security & privacy": "Segurtasuna eta pribatutasuna",
"All settings": "Ezarpen guztiak",
"Feedback": "Iruzkinak",
"Use a different passphrase?": "Erabili pasa-esaldi desberdin bat?"
"Use a different passphrase?": "Erabili pasa-esaldi desberdin bat?",
"Were excited to announce Riot is now Element": "Pozik jakinarazten dizugu: Riot orain Element deitzen da",
"Riot is now Element!": "Riot orain Element da!",
"Learn More": "Ikasi gehiago",
"Light": "Argia",
"The person who invited you already left the room.": "Gonbidatu zaituen pertsonak dagoeneko gela utzi du.",
"The person who invited you already left the room, or their server is offline.": "Gonbidatu zaituen pertsonak dagoeneko gela utzi du edo bere zerbitzaria lineaz kanpo dago.",
"You joined the call": "Deira batu zara",
"%(senderName)s joined the call": "%(senderName)s deira batu da",
"You left the call": "Deitik atera zara",
"%(senderName)s left the call": "%(senderName)s(e) deitik atera da",
"Call ended": "Deia amaitu da",
"You started a call": "Dei bat hasi duzu",
"%(senderName)s started a call": "%(senderName)s(e)k dei bat hasi du",
"%(senderName)s is calling": "%(senderName)s deitzen ari da",
"%(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"
}

View file

@ -10,11 +10,11 @@
"Failed to set direct chat tag": "تنظیم تگ برای چت مستقیم موفقیت‌آمیز نبود",
"Today": "امروز",
"Files": "فایل‌ها",
"You are not receiving desktop notifications": "شما آگاه‌سازی‌های دسکتاپ را دریافت نمی‌کنید",
"You are not receiving desktop notifications": "آگاهی‌های میزکار را دریافت نمی‌کنید",
"Friday": "آدینه",
"Update": "به‌روزرسانی",
"Notifications": "آگاه‌سازی‌ها",
"What's New": "تازه‌ها",
"Update": "به‌روز رسانی",
"Notifications": "آگاهی‌ها",
"What's New": "چه خبر",
"On": "روشن",
"Changelog": "تغییراتِ به‌وجودآمده",
"Waiting for response from server": "در انتظار پاسخی از سمت سرور",
@ -67,7 +67,7 @@
"Failed to set Direct Message status of room": "تنظیم حالت پیام مستقیم برای گپ موفقیت‌آمیز نبود",
"Monday": "دوشنبه",
"All messages (noisy)": "همه‌ی پیام‌ها(بلند)",
"Enable them now": "همین حالا فعالشان کن",
"Enable them now": "اکنون به کار بیفتند",
"Collecting logs": "درحال جمع‌آوری گزارش‌ها",
"Search": "جستجو",
"(HTTP status %(httpStatus)s)": "(HTTP وضعیت %(httpStatus)s)",
@ -82,7 +82,7 @@
"Call invitation": "دعوت به تماس",
"Messages containing my display name": "پیام‌های حاوی نمای‌نامِ من",
"You have successfully set a password and an email address!": "تخصیص ایمیل و پسوردتان با موفقیت انجام شد!",
"What's new?": "تازه‌ها",
"What's new?": "چه خبر؟",
"Notify me for anything else": "مرا برای هرچیز دیگری باخبر کن",
"When I'm invited to a room": "وقتی من به گپی دعوت میشوم",
"Close": "بستن",
@ -102,7 +102,7 @@
"Keywords": "کلیدواژه‌ها",
"Low Priority": "کم اهمیت",
"Unable to fetch notification target list": "ناتوانی در تطبیق لیست آگاه‌سازی‌های هدف",
"Set Password": "پسوردتان را انتخاب کنید",
"Set Password": "تنظیم گذرواژه",
"An error occurred whilst saving your email notification preferences.": "خطایی در حین ذخیره‌ی ترجیجات شما درباره‌ی رایانامه رخ داد.",
"Off": "خاموش",
"Mentions only": "فقط نام‌بردن‌ها",
@ -120,5 +120,34 @@
"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...": "درحال بررسی به‌روزرسانی‌ها...",
"This email address is already in use": "این آدرس ایمیل در حال حاضر در حال استفاده است",
"This phone number is already in use": "این شماره تلفن در حال استفاده است"
"This phone number is already in use": "این شماره تلفن در حال استفاده است",
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "لطفا برای تجربه بهتر <chromeLink>کروم</chromeLink>، <firefoxLink>فایرفاکس</firefoxLink>، یا <safariLink>سافاری</safariLink> را نصب کنید.",
"Use Single Sign On to continue": "برای ادامه، از ورود یکپارچه استفاده کنید",
"Single Sign On": "ورود یکپارچه",
"Confirm adding email": "تأیید افزودن رایانامه",
"Confirm": "تأیید",
"Add Email Address": "افزودن نشانی رایانامه",
"Confirm adding phone number": "تأیید افزودن شماره تلفن",
"Add Phone Number": "افزودن شماره تلفن",
"The platform you're on": "بن‌سازه‌ای که رویش هستید",
"The version of %(brand)s": "نگارش %(brand)s",
"Your language of choice": "زبان انتخابیتان",
"I want to help": "می‌خواهم کمک کنم",
"No": "خیر",
"Review": "بازبینی",
"Later": "بعداً",
"Contact your <a>server admin</a>.": "تماس با <a>مدیر کارسازتان</a>.",
"Ok": "تأیید",
"Set password": "تنظیم گذرواژه",
"To return to your account in future you need to set a password": "برای بازگشت به حسابتان در آینده، نیاز به تنظیم یک گذرواژه دارید",
"Set up encryption": "برپایی رمزنگاری",
"Encryption upgrade available": "ارتقای رمزنگاری ممکن است",
"Verify this session": "تأیید این نشست",
"Set up": "برپایی",
"Upgrade": "ارتقا",
"Verify": "تأیید",
"Restart": "شروع دوباره",
"Upgrade your %(brand)s": "ارتقای %(brand)s تان",
"A new version of %(brand)s is available!": "نگارشی جدید از %(brand)s موجود است!",
"Guest": "مهمان"
}

View file

@ -2209,5 +2209,18 @@
"System font name": "Järjestelmän fontin nimi",
"Message layout": "Viestiasettelu",
"Compact": "Tiivis",
"Modern": "Moderni"
"Modern": "Moderni",
"Were excited to announce Riot is now Element": "Meillä on ilo ilmoittaa, että Riot on nyt Element",
"Riot is now Element!": "Riot on nyt Element!",
"Learn More": "Lue lisää",
"Use default": "Käytä oletusta",
"Mentions & Keywords": "Maininnat ja avainsanat",
"Notification options": "Ilmoitusasetukset",
"Room options": "Huoneen asetukset",
"This room is public": "Tämä huone on julkinen",
"Youre already signed in and good to go here, but you can also grab the latest versions of the app on all platforms at <a>element.io/get-started</a>.": "Olet jo kirjautuneena eikä sinun tarvitse tehdä mitään, mutta voit myös hakea sovelluksen uusimman version kaikille alustoille osoitteesta <a>element.io/get-started</a>.",
"Were excited to announce Riot is now Element!": "Meillä on ilo ilmoittaa, että Riot on nyt Element!",
"Learn more at <a>element.io/previously-riot</a>": "Lue lisää osoitteessa <a>element.io/previously-riot</a>",
"Security & privacy": "Tietoturva ja -suoja",
"User menu": "Käyttäjän valikko"
}

View file

@ -754,7 +754,7 @@
"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",
"Sorry, your browser is <b>not</b> able to run %(brand)s.": "Désolé, %(brand)s <b>n'</b>est <b>pas</b> supporté par votre navigateur.",
"Sorry, your browser is <b>not</b> able to run %(brand)s.": "Désolé, %(brand)s n'est <b>pas</b> 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",
@ -2347,5 +2347,35 @@
"Set up Secure backup": "Configurer la sauvegarde sécurisée",
"Set a Security Phrase": "Définir une phrase de sécurité",
"Confirm Security Phrase": "Confirmer la phrase de sécurité",
"Save your Security Key": "Sauvegarder votre clé de sécurité"
"Save your Security Key": "Sauvegarder votre clé de sécurité",
"Use your account to sign in to the latest version": "Connectez-vous à la nouvelle version",
"Were excited to announce Riot is now Element": "Nous sommes heureux de vous annoncer que Riot est désormais Element",
"Riot is now Element!": "Riot est maintenant Element !",
"Learn More": "Plus d'infos",
"Enable experimental, compact IRC style layout": "Disposition expérimentale compacte style IRC",
"Incoming voice call": "Appel vocal entrant",
"Incoming video call": "Appel vidéo entrant",
"Incoming call": "Appel entrant",
"Make this room low priority": "Définir ce salon en priorité basse",
"Low priority rooms show up at the bottom of your room list in a dedicated section at the bottom of your room list": "Les salons de priorité basse s'affichent en bas de votre liste de salons, dans une section dédiée",
"Show rooms with unread messages first": "Afficher les salons non lus en premier",
"Show previews of messages": "Afficher un aperçu des messages",
"Use default": "Utiliser la valeur par défaut",
"Mentions & Keywords": "Mentions et mots-clés",
"Notification options": "Paramètres de notifications",
"Unknown caller": "Appelant inconnu",
"Favourited": "Favori",
"Forget Room": "Oublier le salon",
"This room is public": "Ce salon est public",
"Edited at %(date)s": "Édité le %(date)s",
"Click to view edits": "Cliquez pour éditer",
"Go to Element": "Aller à Element",
"Were excited to announce Riot is now Element!": "Nous sommes heureux d'annoncer que Riot est désormais Element !",
"Learn more at <a>element.io/previously-riot</a>": "Plus d'infos sur <a>element.io/previously-riot</a>",
"Search rooms": "Chercher des salons",
"User menu": "Menu d'utilisateur",
"%(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 pour Android"
}

View file

@ -273,7 +273,7 @@
"Leave room": "Deixar a sala",
"Favourite": "Favorita",
"Guests cannot join this room even if explicitly invited.": "As convidadas non se poden unir a esta sala ainda que fosen convidadas explicitamente.",
"Click here to fix": "Pulse aquí para solución",
"Click here to fix": "Preme aquí para solucionar",
"Who can access this room?": "Quen pode acceder a esta sala?",
"Only people who have been invited": "Só persoas que foron convidadas",
"Anyone who knows the room's link, apart from guests": "Calquera que coñeza o enderezo da sala, aparte das convidadas",
@ -494,7 +494,7 @@
"%(inviter)s has invited you to join this community": "%(inviter)s convidoute a entrar nesta comunidade",
"You are an administrator of this community": "Administras esta comunidade",
"You are a member of this community": "É membro desta comunidade",
"Your community hasn't got a Long Description, a HTML page to show to community members.<br />Click here to open settings and give it one!": "A súa comunidade non ten unha descrición longa, ou unha páxina HTML que lle mostrar aos seus participantes.<br />Pulse aquí para abrir os axustes e publicar unha!",
"Your community hasn't got a Long Description, a HTML page to show to community members.<br />Click here to open settings and give it one!": "A túa comunidade non ten unha descrición longa, ou unha páxina HTML que lle mostrar ás participantes.<br />Preme aquí para abrir os axustes e publicar unha!",
"Long Description (HTML)": "Descrición longa (HTML)",
"Description": "Descrición",
"Community %(groupId)s not found": "Non se atopou a comunidade %(groupId)s",
@ -530,11 +530,11 @@
"Room": "Sala",
"Failed to reject invite": "Fallo ao rexeitar o convite",
"Fill screen": "Encher pantalla",
"Click to unmute video": "Pulse para escoitar vídeo",
"Click to mute video": "Pulse para acalar video",
"Click to unmute audio": "Pulse para escoitar audio",
"Click to mute audio": "Pulse para acalar audio",
"Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "Intentouse cargar un punto concreto do historial desta sala, pero non ten permiso para ver a mensaxe en cuestión.",
"Click to unmute video": "Preme para escoitar vídeo",
"Click to mute video": "Preme para acalar video",
"Click to unmute audio": "Preme para escoitar audio",
"Click to mute audio": "Preme para acalar audio",
"Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "Intentouse cargar un punto concreto do historial desta sala, pero non tes permiso para ver a mensaxe en cuestión.",
"Tried to load a specific point in this room's timeline, but was unable to find it.": "Intentouse cargar un punto específico do historial desta sala, pero non se puido atopar.",
"Failed to load timeline position": "Fallo ao cargar posición da liña temporal",
"Uploading %(filename)s and %(count)s others|other": "Subindo %(filename)s e %(count)s máis",
@ -567,7 +567,7 @@
"Profile": "Perfil",
"Account": "Conta",
"Access Token:": "Testemuño de acceso:",
"click to reveal": "pulse para revelar",
"click to reveal": "Preme para mostrar",
"Homeserver is": "O servidor de inicio é",
"Identity Server is": "O servidor de identidade é",
"%(brand)s version:": "versión %(brand)s:",
@ -1254,7 +1254,7 @@
"Butterfly": "Bolboreta",
"Flower": "Flor",
"Tree": "Árbore",
"Cactus": "Cactus",
"Cactus": "Cacto",
"Mushroom": "Cogomelo",
"Globe": "Globo",
"Moon": "Lúa",
@ -1507,7 +1507,7 @@
"Room version": "Versión da sala",
"Room version:": "Versión da sala:",
"Developer options": "Opcións desenvolvemento",
"Open Devtools": "Open Devtools",
"Open Devtools": "Abrir Devtools",
"This room is bridging messages to the following platforms. <a>Learn more.</a>": "Esta sala está enviando mensaxes ás seguintes plataformas. <a>Coñece máis.</a>",
"This room isnt bridging messages to any platforms. <a>Learn more.</a>": "Esta sala non está enviando mensaxes a outras plataformas. <a>Saber máis.</a>",
"Bridges": "Pontes",
@ -2232,7 +2232,7 @@
"Autocomplete": "Autocompletado",
"Alt": "Alt",
"Alt Gr": "Alt Gr",
"Shift": "Maiús.",
"Shift": "Maiús",
"Super": "Super",
"Ctrl": "Ctrl",
"Toggle Bold": "Activa Resaltar",
@ -2344,5 +2344,51 @@
"Set up Secure backup": "Configurar Copia de apoio Segura",
"Set a Security Phrase": "Establece a Frase de Seguridade",
"Confirm Security Phrase": "Confirma a Frase de Seguridade",
"Save your Security Key": "Garda a Chave de Seguridade"
"Save your Security Key": "Garda a Chave de Seguridade",
"Use your account to sign in to the latest version": "Usa a túa conta para conectarte á última versión",
"Were excited to announce Riot is now Element": "Emociónanos anunciar que Riot agora chámase Element",
"Riot is now Element!": "Riot agora é Element!",
"Learn More": "Saber máis",
"Enable experimental, compact IRC style layout": "Activar o estilo experimental IRC compacto",
"Unknown caller": "Descoñecido",
"Incoming voice call": "Chamada de voz entrante",
"Incoming video call": "Chamada de vídeo entrante",
"Incoming call": "Chamada entrante",
"%(brand)s can't securely cache encrypted messages locally while running in a web browser. Use <desktopLink>%(brand)s Desktop</desktopLink> for encrypted messages to appear in search results.": "%(brand)s non pode por na caché local de xeito as mensaxes cifradas cando usa un navegador web. Usa <desktopLink>%(brand)s Desktop</desktopLink> para que as mensaxes cifradas aparezan nos resultados.",
"There are advanced notifications which are not shown here.": "Existen notificacións avanzadas que non aparecen aquí.",
"You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply.": "Deberialas ter configurado nun cliente diferente de %(brand)s. Non podes modificalas en %(brand)s pero aplícanse igualmente.",
"Set the name of a font installed on your system & %(brand)s will attempt to use it.": "Escolle unha das tipografías instaladas no teu sistema e %(brand)s intentará utilizalas.",
"Make this room low priority": "Marcar a sala como de baixa prioridade",
"Low priority rooms show up at the bottom of your room list in a dedicated section at the bottom of your room list": "As salas de baixa prioridade aparecen abaixo na lista de salas, nunha sección dedicada no final da lista",
"Use default": "Usar por omisión",
"Mentions & Keywords": "Mencións e Palabras chave",
"Notification options": "Opcións de notificación",
"Favourited": "Con marca de Favorita",
"Forget Room": "Esquecer sala",
"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 xa que usar %(brand)s no mesmo servidor con carga preguiceira activada e desactivada ao mesmo tempo causará problemas.",
"Use your account to sign in to the latest version of the app at <a />": "Usa a túa conta para conectarte á última versión da app en <a />",
"Youre already signed in and good to go here, but you can also grab the latest versions of the app on all platforms at <a>element.io/get-started</a>.": "Xa estás conectada e podes ir alá, pero tamén podes ir á última versión da app en tódalas plataformas en <a>element.io/get-started</a>.",
"Go to Element": "Ir a Element",
"Were excited to announce Riot is now Element!": "Emociónanos comunicar que Riot agora é Element!",
"Learn more at <a>element.io/previously-riot</a>": "Coñece máis en <a>element.io/previously-riot</a>",
"You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use %(brand)s with an existing Matrix account on a different homeserver.": "Podes usar as opcións de servidor personalizado para conectar con outros servidores Matrix indicando un URL diferente para o servidor. Poderás usar %(brand)s cunha conta Matrix existente noutro servidor de inicio.",
"Enter the location of your Element Matrix Services homeserver. It may use your own domain name or be a subdomain of <a>element.io</a>.": "Escribe a localización do teu servidor Element Matrix Services. Podería ser o teu propio dominio ou un subdominio de <a>element.io</a>.",
"Search rooms": "Buscar salas",
"User menu": "Menú de usuaria",
"%(brand)s Web": "Web %(brand)s",
"%(brand)s Desktop": "%(brand)s Desktop",
"%(brand)s iOS": "%(brand)s iOS",
"%(brand)s X for Android": "%(brand)s X para Android",
"This room is public": "Esta é unha sala pública",
"Away": "Fóra",
"Enable advanced debugging for the room list": "Activar depuración avanzada para a lista da sala",
"Show rooms with unread messages first": "Mostrar primeiro as salas con mensaxes sen ler",
"Show previews of messages": "Mostrar vista previa das mensaxes",
"Edited at %(date)s": "Editado o %(date)s",
"Click to view edits": "Preme para ver as edicións",
"Are you sure you want to cancel entering passphrase?": "¿Estás seguro de que non queres escribir a frase de paso?",
"Custom Tag": "Etiqueta personal",
"* %(senderName)s %(emote)s": "* %(senderName)s %(emote)s",
"The person who invited you already left the room.": "A persoa que te convidou xa deixou a sala.",
"The person who invited you already left the room, or their server is offline.": "A persoa que te convidou xa deixou a sala, ou o seu servidor non está a funcionar."
}

View file

@ -145,7 +145,7 @@
"Invites": "Meghívók",
"Invites user with given id to current room": "A megadott azonosítójú felhasználó meghívása a jelenlegi szobába",
"Sign in with": "Belépés ezzel:",
"Join as <voiceText>voice</voiceText> or <videoText>video</videoText>.": "Csatlakozás <voiceText>hang</voiceText>gal vagy <videoText>videó</videoText>val.",
"Join as <voiceText>voice</voiceText> or <videoText>video</videoText>.": "Csatlakozás <voiceText>hanggal</voiceText> vagy <videoText>videóval</videoText>.",
"Join Room": "Belépés a szobába",
"%(targetName)s joined the room.": "%(targetName)s belépett a szobába.",
"Jump to first unread message.": "Ugrás az első olvasatlan üzenetre.",
@ -266,7 +266,7 @@
"Users": "Felhasználók",
"Verification Pending": "Ellenőrzés függőben",
"Verified key": "Ellenőrzött kulcs",
"Video call": "Videó hívás",
"Video call": "Videóhívás",
"Voice call": "Hang hívás",
"VoIP conference finished.": "VoIP konferencia befejeződött.",
"VoIP conference started.": "VoIP konferencia elkezdődött.",
@ -1021,7 +1021,7 @@
"Deactivating your account is a permanent action - be careful!": "A fiók felfüggesztése végleges - légy óvatos!",
"For help with using %(brand)s, click <a>here</a>.": "A %(brand)s használatában való segítséghez kattints <a>ide</a>.",
"For help with using %(brand)s, click <a>here</a> or start a chat with our bot using the button below.": "A %(brand)s használatában való segítségér kattints <a>ide</a> vagy kezdj beszélgetni a botunkkal az alábbi gombra kattintva.",
"Help & About": "Segítség & Névjegy",
"Help & About": "Súgó és névjegy",
"Bug reporting": "Hiba bejelentése",
"FAQ": "GYIK",
"Versions": "Verziók",
@ -1032,7 +1032,7 @@
"Autocomplete delay (ms)": "Automatikus kiegészítés késleltetése (ms)",
"Roles & Permissions": "Szerepek & Jogosultságok",
"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",
"Security & Privacy": "Biztonság és adatvédelem",
"Encryption": "Titkosítás",
"Once enabled, encryption cannot be disabled.": "Ha egyszer bekapcsolod, már nem lehet kikapcsolni.",
"Encrypted": "Titkosítva",
@ -1041,7 +1041,7 @@
"Key backup": "Kulcsok biztonsági mentése",
"Missing media permissions, click the button below to request.": "Hiányzó média jogosultságok, kattints a gombra alul a jogok megadásához.",
"Request media permissions": "Média jogosultságok megkérése",
"Voice & Video": "Hang & Videó",
"Voice & Video": "Hang és videó",
"Main address": "Fő cím",
"Room avatar": "Szoba képe",
"Room Name": "Szoba neve",
@ -1445,7 +1445,7 @@
"Remove %(email)s?": "%(email)s törlése?",
"Remove %(phone)s?": "%(phone)s törlése?",
"A text message has been sent to +%(msisdn)s. Please enter the verification code it contains.": "A szöveges üzenetet elküldtük a +%(msisdn)s számra. Kérlek add meg az ellenőrző kódot amit tartalmazott.",
"Command Help": "Parancs Segítség",
"Command Help": "Parancsok súgója",
"No identity server is configured: add one in server settings to reset your password.": "Nincs azonosítási szerver beállítva: adj meg egyet a szerver beállításoknál, hogy a jelszavadat vissza tudd állítani.",
"This account has been deactivated.": "Ez a fiók zárolva van.",
"You do not have the required permissions to use this command.": "A parancs használatához nincs meg a megfelelő jogosultságod.",
@ -1732,7 +1732,7 @@
"Language Dropdown": "Nyelvválasztó lenyíló menü",
"Country Dropdown": "Ország lenyíló menü",
"The message you are trying to send is too large.": "Túl nagy képet próbálsz elküldeni.",
"Help": "Segítség",
"Help": "Súgó",
"Show more": "Mutass többet",
"Recent Conversations": "Legújabb Beszélgetések",
"Direct Messages": "Közvetlen Beszélgetések",
@ -2045,15 +2045,15 @@
"Shift": "Shift",
"Super": "Super",
"Ctrl": "Ctrl",
"Toggle Bold": "Félkövér váltása",
"Toggle Italics": "Dőlt váltása",
"Toggle Quote": "Idézet váltása",
"Toggle Bold": "Félkövér be/ki",
"Toggle Italics": "Dőlt be/ki",
"Toggle Quote": "Idézet be/ki",
"New line": "Új sor",
"Navigate recent messages to edit": "Friss üzenetekben navigálás a szerkesztéshez",
"Jump to start/end of the composer": "Az üzenet elejére/végére ugrás a szerkesztőben",
"Navigate composer history": "A szerkesztő korábbi üzeneteiben navigálás",
"Toggle microphone mute": "Mikrofon némítás váltása",
"Toggle video on/off": "Videó ki-/bekapcsolás váltása",
"Toggle microphone mute": "Mikrofon némítás be/ki",
"Toggle video on/off": "Videó be/ki",
"Jump to room search": "A szoba keresésre ugrás",
"Navigate up/down in the room list": "A szoba listában fel/le navigál",
"Select room from the room list": "Szoba kiválasztása a szoba listából",
@ -2063,11 +2063,11 @@
"Scroll up/down in the timeline": "Az idővonalon görgetés fel/le",
"Previous/next unread room or DM": "Előző/következő olvasatlan szoba vagy közvetlen üzenet",
"Previous/next room or DM": "Előző/következő szoba vagy közvetlen üzenet",
"Toggle the top left menu": "Bal felső menü ki-/bekapcsolása",
"Toggle the top left menu": "Bal felső menü be/ki",
"Close dialog or context menu": "Párbeszédablak vagy menü bezárása",
"Activate selected button": "Kiválasztott gomb aktiválása",
"Toggle right panel": "Jobb oldali panel váltása",
"Toggle this dialog": "Ennek a párbeszédablaknak a váltása",
"Toggle right panel": "Jobb oldali panel be/ki",
"Toggle this dialog": "E párbeszédablak be/ki",
"Move autocomplete selection up/down": "Automatikus kiegészítés kijelölésének mozgatása fel/le",
"Cancel autocomplete": "Automatikus kiegészítés megszakítása",
"Page Up": "Page Up",
@ -2343,5 +2343,66 @@
"Set up Secure backup": "Biztonsági mentés beállítása",
"Set a Security Phrase": "Biztonsági Jelmondat beállítása",
"Confirm Security Phrase": "Biztonsági Jelmondat megerősítése",
"Save your Security Key": "Ments el a Biztonsági Kulcsodat"
"Save your Security Key": "Ments el a Biztonsági Kulcsodat",
"Use your account to sign in to the latest version": "A legutolsó verzióba való bejelentkezéshez használd a fiókodat",
"Were excited to announce Riot is now Element": "Izgatottan jelentjük, hogy a Riot mostantól Element",
"Riot is now Element!": "Riot mostantól Element!",
"Learn More": "Tudj meg többet",
"Enable experimental, compact IRC style layout": "Egyszerű (kísérleti) IRC stílusú kinézet engedélyezése",
"Unknown caller": "Ismeretlen hívó",
"Incoming voice call": "Bejövő hanghívás",
"Incoming video call": "Bejövő videó hívás",
"Incoming call": "Bejövő hívás",
"There are advanced notifications which are not shown here.": "Vannak haladó értesítési beállítások amik itt nem jelennek meg.",
"Appearance Settings only affect this %(brand)s session.": "A megjelenítési beállítások csak erre az %(brand)s munkamenetre lesznek érvényesek.",
"Make this room low priority": "Ez a szoba legyen alacsony prioritású",
"Use default": "Alapértelmezett használata",
"Mentions & Keywords": "Megemlítések és kulcsszavak",
"Notification options": "Értesítési beállítások",
"Favourited": "Kedvencek",
"Forget Room": "Szoba elfelejtése",
"Use your account to sign in to the latest version of the app at <a />": "Az alkalmazás legutolsó verzióba való bejelentkezéshez itt <a /> használd a fiókodat",
"Go to Element": "Irány az Element",
"Were excited to announce Riot is now Element!": "Izgatottan jelentjük, hogy a Riot mostantól Element!",
"Learn more at <a>element.io/previously-riot</a>": "Tudj meg többet: <a>element.io/previously-riot</a>",
"Search rooms": "Szobák keresése",
"User menu": "Felhasználói menü",
"%(brand)s Web": "%(brand)s Web",
"%(brand)s Desktop": "Asztali %(brand)s",
"%(brand)s iOS": "%(brand)s iOS",
"%(brand)s X for Android": "%(brand)s X Android",
"This room is public": "Ez egy nyilvános szoba",
"Away": "Távol",
"Are you sure you want to cancel entering passphrase?": "Biztos vagy benne, hogy megszakítod a jelmondat bevitelét?",
"Enable advanced debugging for the room list": "Kibővített hibakeresés bekapcsolása a szoba listához",
"%(brand)s can't securely cache encrypted messages locally while running in a web browser. Use <desktopLink>%(brand)s Desktop</desktopLink> for encrypted messages to appear in search results.": "%(brand)s nem képes a web böngészőben futva biztonságosan elmenteni a titkosított üzeneteket helyben. Használd az <desktopLink>Asztali %(brand)s</desktopLink> ahhoz, hogy az üzenetekben való keresésekkor a titkosított üzenetek is megjelenhessenek.",
"You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply.": "Valószínűleg egy %(brand)s klienstől eltérő programmal konfiguráltad. %(brand)s kliensben nem tudod módosítani de attól még érvényesek.",
"Set the name of a font installed on your system & %(brand)s will attempt to use it.": "Add meg a rendszer által használt font nevét és %(brand)s megpróbálja majd azt használni.",
"Add users and servers you want to ignore here. Use asterisks to have %(brand)s match any characters. For example, <code>@bot:*</code> would ignore all users that have the name 'bot' on any server.": "A figyelmen kívül hagyandó felhasználókat és szervereket itt add meg. %(brand)s kliensben használj csillagot hogy a helyén minden karakterre illeszkedjen a kifejezés. Például: <code>@bot:*</code> figyelmen kívül fog hagyni minden „bot” nevű felhasználót bármely szerverről.",
"Low priority rooms show up at the bottom of your room list in a dedicated section at the bottom of your room list": "Az alacsony prioritású szobák egy külön helyen a szobalista alján fognak megjelenni",
"Custom Tag": "Egyedi címke",
"Show rooms with unread messages first": "Olvasatlan üzeneteket tartalmazó szobák megjelenítése elől",
"Show previews of messages": "Üzenet előnézet megjelenítése",
"Edited at %(date)s": "Szerkesztve ekkor: %(date)s",
"Click to view edits": "A szerkesztések megtekintéséhez kattints",
"Youre already signed in and good to go here, but you can also grab the latest versions of the app on all platforms at <a>element.io/get-started</a>.": "Már be vagy jelentkezve és ez rendben van, de minden platformon az alkalmazás legfrissebb verziójának beszerzéséhez látogass el ide: <a>element.io/get-started</a>.",
"You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use %(brand)s with an existing Matrix account on a different homeserver.": "Használhatod a más szerver opciót, hogy egy másik matrix szerverre jelentkezz be amihez megadod a szerver url címét. Ezzel használhatod %(brand)s klienst egy már létező Matrix fiókkal egy másik matrix szerveren.",
"Enter the location of your Element Matrix Services homeserver. It may use your own domain name or be a subdomain of <a>element.io</a>.": "Add meg az Element Matrix Services matrix szerveredet. Használhatod a saját domain-edet vagy az <a>element.io</a> al-domain-jét.",
"* %(senderName)s %(emote)s": "* %(senderName)s %(emote)s",
"The person who invited you already left the room.": "Aki meghívott a szobába már távozott.",
"The person who invited you already left the room, or their server is offline.": "Aki meghívott a szobába már távozott, vagy a szervere elérhetetlen.",
"Change notification settings": "Értesítési beállítások megváltoztatása",
"Your server isn't responding to some <a>requests</a>.": "A szervered nem válaszol néhány <a>kérésre</a>.",
"You're all caught up.": "Mindent elolvastál.",
"Server isn't responding": "A szerver nem válaszol",
"Your server isn't responding to some of your requests. Below are some of the most likely reasons.": "A szervered néhány kérésre nem válaszol. Alább felsorolunk pár lehetséges okot.",
"The server (%(serverName)s) took too long to respond.": "A szervernek (%(serverName)s) túl hosszú időbe telt válaszolni.",
"Your firewall or anti-virus is blocking the request.": "A tűzfalad vagy víruskeresőd blokkolja a kérést.",
"A browser extension is preventing the request.": "Egy böngésző kiterjesztés megakadályozza a kérést.",
"The server is offline.": "A szerver nem működik.",
"The server has denied your request.": "A szerver elutasította a kérést.",
"Your area is experiencing difficulties connecting to the internet.": "Probléma az Internet elérésben.",
"A connection error occurred while trying to contact the server.": "Kapcsolati hiba lépett fel miközben a szervert próbáltad elérni.",
"The server is not configured to indicate what the problem is (CORS).": "A szerver nincs beállítva, hogy megmutassa mi okozhatta a hibát (CORS).",
"Recent changes that have not yet been received": "Legutóbbi változások amik még nem érkeztek meg"
}

View file

@ -298,7 +298,7 @@
"Low Priority": "Lítill forgangur",
"Direct Chat": "Beint spjall",
"View Community": "Skoða samfélag",
"I understand the risks and wish to continue": "Ég skil áhættuna og vil halda áfram",
"I understand the risks and wish to continue": "Ég skil áhættuna og óska að halda áfram",
"Name": "Nafn",
"Failed to upload image": "Gat ekki sent inn mynd",
"Add rooms to this community": "Bæta spjallrásum í þetta samfélag",
@ -456,5 +456,7 @@
"Notify the whole room": "Tilkynna öllum á spjallrásinni",
"Room Notification": "Tilkynning á spjallrás",
"Passphrases must match": "Lykilfrasar verða að stemma",
"Passphrase must not be empty": "Lykilfrasi má ekki vera auður"
"Passphrase must not be empty": "Lykilfrasi má ekki vera auður",
"Create Account": "Stofna Reikning",
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "vinsamlegast setja upp <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, eða <safariLink>Safari</safariLink> fyrir besta reynsluna."
}

View file

@ -193,8 +193,8 @@
"Room Colour": "Colore della stanza",
"Active call (%(roomName)s)": "Chiamata attiva (%(roomName)s)",
"unknown caller": "Chiamante sconosciuto",
"Incoming voice call from %(name)s": "Chiamata vocale in arrivo da %(name)s",
"Incoming video call from %(name)s": "Chiamata video in arrivo da %(name)s",
"Incoming voice call from %(name)s": "Telefonata in arrivo da %(name)s",
"Incoming video call from %(name)s": "Videochiamata in arrivo da %(name)s",
"Incoming call from %(name)s": "Chiamata in arrivo da %(name)s",
"Decline": "Rifiuta",
"Accept": "Accetta",
@ -254,8 +254,8 @@
"%(userName)s (power %(powerLevelNumber)s)": "%(userName)s (poteri %(powerLevelNumber)s)",
"Attachment": "Allegato",
"Hangup": "Riaggancia",
"Voice call": "Chiamata vocale",
"Video call": "Chiamata video",
"Voice call": "Telefonata",
"Video call": "Videochiamata",
"Upload file": "Invia file",
"Send an encrypted reply…": "Invia una risposta criptata…",
"Send an encrypted message…": "Invia un messaggio criptato…",
@ -532,7 +532,7 @@
"Failed to leave room": "Uscita dalla stanza fallita",
"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",
"Old cryptography data detected": "Rilevati dati di crittografia obsoleti",
"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à",
@ -639,7 +639,7 @@
"Confirm passphrase": "Conferma password",
"Export": "Esporta",
"Import room keys": "Importa chiavi della stanza",
"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.": "Questa procedura ti permette di importare le chiavi di cifratura precedentemente esportate da un altro client Matrix. Potrai poi decifrare tutti i messaggi che quel client poteva decifrare.",
"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.": "Questa procedura ti permette di importare le chiavi di crittografia precedentemente esportate da un altro client Matrix. Potrai poi decifrare tutti i messaggi che quel client poteva decifrare.",
"The export file will be protected with a passphrase. You should enter the passphrase here, to decrypt the file.": "Il file esportato sarà protetto da una password. Dovresti inserire la password qui, per decifrarlo.",
"File to import": "File da importare",
"Import": "Importa",
@ -783,7 +783,7 @@
"e.g. <CurrentPageURL>": "es. <CurrentPageURL>",
"Your device resolution": "La risoluzione del dispositivo",
"Missing roomId.": "ID stanza mancante.",
"Always show encryption icons": "Mostra sempre icone di cifratura",
"Always show encryption icons": "Mostra sempre icone di crittografia",
"Enable widget screenshots on supported widgets": "Attiva le schermate dei widget sui widget supportati",
"Unable to load event that was replied to, it either does not exist or you do not have permission to view it.": "Impossibile caricare l'evento a cui si è risposto, o non esiste o non hai il permesso di visualizzarlo.",
"Refresh": "Aggiorna",
@ -914,7 +914,7 @@
"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",
"Incompatible Database": "Database non compatibile",
"Continue With Encryption Disabled": "Continua con la cifratura disattivata",
"Continue With Encryption Disabled": "Continua con la crittografia 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!",
@ -1082,7 +1082,7 @@
"We've sent you an email to verify your address. Please follow the instructions there and then click the button below.": "Ti abbiamo inviato un'email per verificare il tuo indirizzo. Segui le istruzioni contenute e poi clicca il pulsante sotto.",
"Email Address": "Indirizzo email",
"Are you sure? You will lose your encrypted messages if your keys are not backed up properly.": "Sei sicuro? Perderai i tuoi messaggi cifrati se non hai salvato adeguatamente le tue chiavi.",
"Encrypted messages are secured with end-to-end encryption. Only you and the recipient(s) have the keys to read these messages.": "I messaggi criptati sono resi sicuri con una cifratura end-to-end. Solo tu e il/i destinatario/i avete le chiavi per leggere questi messaggi.",
"Encrypted messages are secured with end-to-end encryption. Only you and the recipient(s) have the keys to read these messages.": "I messaggi cifrati sono resi sicuri con una crittografia end-to-end. Solo tu e il/i destinatario/i avete le chiavi per leggere questi messaggi.",
"Restore from Backup": "Ripristina da un backup",
"Back up your keys before signing out to avoid losing them.": "Fai una copia delle tue chiavi prima di disconnetterti per evitare di perderle.",
"Backing up %(sessionsRemaining)s keys...": "Copia di %(sessionsRemaining)s chiavi...",
@ -1148,11 +1148,11 @@
"Send %(eventType)s events": "Invia eventi %(eventType)s",
"Roles & Permissions": "Ruoli e permessi",
"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. <a>Learn more about encryption.</a>": "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. <a>Maggiori informazioni sulla cifratura.</a>",
"Enable encryption?": "Attivare la crittografia?",
"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. <a>Learn more about encryption.</a>": "Una volta attivata, la crittografia 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 crittografia può impedire il corretto funzionamento di bot e bridge. <a>Maggiori informazioni sulla crittografia.</a>",
"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.",
"Encryption": "Crittografia",
"Once enabled, encryption cannot be disabled.": "Una volta attivata, la crittografia non può essere disattivata.",
"Encrypted": "Cifrato",
"Never lose encrypted messages": "Non perdere mai i messaggi cifrati",
"Messages in this room are secured with end-to-end encryption. Only you and the recipient(s) have the keys to read these messages.": "I messaggi in questa stanza sono protetti con crittografia end-to-end. Solo tu e i destinatari avete le chiavi per leggere questi messaggi.",
@ -1306,7 +1306,7 @@
"Notes": "Note",
"If there is additional context that would help in analysing the issue, such as what you were doing at the time, room IDs, user IDs, etc., please include those things here.": "Se ci sono ulteriori dettagli che possono aiutare ad analizzare il problema, ad esempio cosa stavi facendo in quel momento, ID stanze, ID utenti, ecc., puoi includerli qui.",
"View Servers in Room": "Vedi i server nella stanza",
"Sign out and remove encryption keys?": "Disconnettere e rimuovere le chiavi di cifratura?",
"Sign out and remove encryption keys?": "Disconnettere e rimuovere le chiavi di crittografia?",
"To help us prevent this in future, please <a>send us logs</a>.": "Per aiutarci a prevenire questa cosa in futuro, <a>inviaci i log</a>.",
"Missing session data": "Dati di sessione mancanti",
"Some session data, including encrypted message keys, is missing. Sign out and sign in to fix this, restoring keys from backup.": "Alcuni dati di sessione, incluse le chiavi dei messaggi cifrati, sono mancanti. Esci e riaccedi per risolvere, ripristinando le chiavi da un backup.",
@ -1457,7 +1457,7 @@
"Use an identity server to invite by email. Click continue to use the default identity server (%(defaultIdentityServerName)s) or manage in Settings.": "Usa un server di identità per invitare via email. Clicca \"Continua\" per usare quello predefinito (%(defaultIdentityServerName)s) o gestiscilo nelle impostazioni.",
"Use an identity server to invite by email. Manage in Settings.": "Usa un server di identità per invitare via email. Gestisci nelle impostazioni.",
"Upgrade the room": "Aggiorna la stanza",
"Enable room encryption": "Attiva la cifratura della stanza",
"Enable room encryption": "Attiva la crittografia della stanza",
"Deactivate user?": "Disattivare l'utente?",
"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?": "Disattivare questo utente lo disconnetterà e ne impedirà nuovi accessi. In aggiunta, abbandonerà tutte le stanze in cui è presente. Questa azione non può essere annullata. Sei sicuro di volere disattivare questo utente?",
"Deactivate user": "Disattiva utente",
@ -1554,7 +1554,7 @@
"contact the administrators of identity server <idserver />": "contattare l'amministratore del server di identità <idserver />",
"wait and try again later": "attendere e riprovare più tardi",
"Failed to deactivate user": "Disattivazione utente fallita",
"This client does not support end-to-end encryption.": "Questo client non supporta la cifratura end-to-end.",
"This client does not support end-to-end encryption.": "Questo client non supporta la crittografia end-to-end.",
"Messages in this room are not end-to-end encrypted.": "I messaggi in questa stanza non sono cifrati end-to-end.",
"React": "Reagisci",
"Frequently Used": "Usati di frequente",
@ -1649,7 +1649,7 @@
"Use an Integration Manager to manage bots, widgets, and sticker packs.": "Usa un gestore di integrazioni per gestire bot, widget e pacchetti di adesivi.",
"Integration Managers receive configuration data, and can modify widgets, send room invites, and set power levels on your behalf.": "I gestori di integrazione ricevono dati di configurazione e possono modificare widget, inviare inviti alla stanza, assegnare permessi a tuo nome.",
"Failed to connect to integration manager": "Connessione al gestore di integrazioni fallita",
"Widgets do not use message encryption.": "I widget non usano la cifratura dei messaggi.",
"Widgets do not use message encryption.": "I widget non usano la crittografia dei messaggi.",
"More options": "Altre opzioni",
"Integrations are disabled": "Le integrazioni sono disattivate",
"Enable 'Manage Integrations' in Settings to do this.": "Attiva 'Gestisci integrazioni' nelle impostazioni per continuare.",
@ -1665,10 +1665,10 @@
"Ignored/Blocked": "Ignorati/Bloccati",
"Verification Request": "Richiesta verifica",
"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)",
"%(senderName)s placed a video call.": "%(senderName)s ha effettuato una videochiamata.",
"%(senderName)s placed a video call. (not supported by this browser)": "%(senderName)s ha effettuato una videochiamata. (non supportata da questo browser)",
"%(senderName)s placed a voice call.": "%(senderName)s ha iniziato una telefonata.",
"%(senderName)s placed a voice call. (not supported by this browser)": "%(senderName)s ha iniziato una telefonata. (non supportata da questo browser)",
"%(senderName)s placed a video call.": "%(senderName)s ha iniziato una videochiamata.",
"%(senderName)s placed a video call. (not supported by this browser)": "%(senderName)s ha iniziato una videochiamata. (non supportata da questo browser)",
"Clear notifications": "Cancella le notifiche",
"Customise your experience with experimental labs features. <a>Learn more</a>.": "Personalizza la tua esperienza con funzionalità sperimentali. <a>Maggiori informazioni</a>.",
"Error upgrading room": "Errore di aggiornamento stanza",
@ -1787,10 +1787,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.",
"Upgrade your encryption": "Aggiorna la tua cifratura",
"Set up encryption": "Imposta la cifratura",
"Upgrade your encryption": "Aggiorna la tua crittografia",
"Set up encryption": "Imposta la crittografia",
"Verify this session": "Verifica questa sessione",
"Encryption upgrade available": "Aggiornamento cifratura disponibile",
"Encryption upgrade available": "Aggiornamento crittografia disponibile",
"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",
@ -1816,7 +1816,7 @@
"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.",
"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.",
"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 crittografia 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",
"Your homeserver does not support session management.": "Il tuo homeserver non supporta la gestione della sessione.",
@ -1859,7 +1859,7 @@
"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.",
"<requestLink>Re-request encryption keys</requestLink> from your other sessions.": "<requestLink>Chiedi di nuovo le chiavi di cifratura</requestLink> dalle altre sessioni.",
"<requestLink>Re-request encryption keys</requestLink> from your other sessions.": "<requestLink>Chiedi di nuovo le chiavi di crittografia</requestLink> dalle altre sessioni.",
"Encrypted by an unverified session": "Cifrato da una sessione non verificata",
"Encrypted by a deleted session": "Cifrato da una sessione eliminata",
"Waiting for %(displayName)s to accept…": "In attesa che %(displayName)s accetti…",
@ -1879,10 +1879,10 @@
"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",
"Encryption enabled": "Cifratura attivata",
"Encryption enabled": "Crittografia 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",
"The encryption used by this room isn't supported.": "La cifratura usata da questa stanza non è supportata.",
"Encryption not enabled": "Crittografia non attivata",
"The encryption used by this room isn't supported.": "La crittografia usata da questa stanza non è supportata.",
"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",
@ -1903,11 +1903,11 @@
"Confirm your identity by entering your account password below.": "Conferma la tua identità inserendo la password dell'account sotto.",
"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 wont 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.",
"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 crittografia 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 wont 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.",
"Restore your key backup to upgrade your encryption": "Ripristina il tuo backup chiavi per aggiornare la cifratura",
"Regain access to your account and recover encryption keys stored in this session. Without them, you wont be able to read all of your secure messages in any session.": "Riprendi l'accesso al tuo account e recupera le chiavi di crittografia 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 crittografia) sono ancora memorizzati in questa sessione. Cancellali se hai finito di usare questa sessione o se vuoi accedere ad un altro account.",
"Restore your key backup to upgrade your encryption": "Ripristina il tuo backup chiavi per aggiornare la crittografia",
"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.",
"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",
@ -2117,7 +2117,7 @@
"Click the button below to confirm deleting these sessions.|one": "Clicca il pulsante sottostante per confermare l'eliminazione di questa sessione.",
"Delete sessions|other": "Elimina sessioni",
"Delete sessions|one": "Elimina sessione",
"Enable end-to-end encryption": "Attiva cifratura end-to-end",
"Enable end-to-end encryption": "Attiva crittografia end-to-end",
"You cant disable this later. Bridges & most bots wont work yet.": "Non potrai più disattivarla. I bridge e molti bot non funzioneranno.",
"Confirm your account deactivation by using Single Sign On to prove your identity.": "Conferma la disattivazione del tuo account usando Single Sign On per dare prova della tua identità.",
"Are you sure you want to deactivate your account? This is irreversible.": "Sei sicuro di volere disattivare il tuo account? È irreversibile.",
@ -2185,8 +2185,8 @@
"To continue, use Single Sign On to prove your identity.": "Per continuare, usa Single Sign On per provare la tua identità.",
"Confirm to continue": "Conferma per continuare",
"Click the button below to confirm your identity.": "Clicca il pulsante sotto per confermare la tua identità.",
"Confirm encryption setup": "Conferma impostazione cifratura",
"Click the button below to confirm setting up encryption.": "Clicca il pulsante sotto per confermare l'impostazione della cifratura.",
"Confirm encryption setup": "Conferma impostazione crittografia",
"Click the button below to confirm setting up encryption.": "Clicca il pulsante sotto per confermare l'impostazione della crittografia.",
"QR Code": "Codice QR",
"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",
@ -2216,7 +2216,7 @@
"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 %(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.",
"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 crittografia 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.",
@ -2328,5 +2328,68 @@
"New spinner design": "Nuovo design dello spinner",
"Use a more compact Modern layout": "Usa un layout più compatto e moderno",
"Always show first": "Mostra sempre per prime",
"Message deleted on %(date)s": "Messaggio eliminato il %(date)s"
"Message deleted on %(date)s": "Messaggio eliminato il %(date)s",
"Use your account to sign in to the latest version": "Usa il tuo account per accedere alla versione più recente",
"Were excited to announce Riot is now Element": "Siamo entusiasti di annunciare che Riot ora si chiama Element",
"Riot is now Element!": "Riot ora si chiama Element!",
"Learn More": "Maggiori info",
"Enable experimental, compact IRC style layout": "Attiva il layout in stile IRC, sperimentale e compatto",
"Unknown caller": "Chiamante sconosciuto",
"Incoming voice call": "Telefonata in arrivo",
"Incoming video call": "Videochiamata in arrivo",
"Incoming call": "Chiamata in arrivo",
"%(brand)s can't securely cache encrypted messages locally while running in a web browser. Use <desktopLink>%(brand)s Desktop</desktopLink> for encrypted messages to appear in search results.": "%(brand)s non può tenere in cache i messaggi cifrati quando usato in un browser web. Usa <desktopLink>%(brand)s Desktop</desktopLink> affinché i messaggi cifrati appaiano nei risultati di ricerca.",
"There are advanced notifications which are not shown here.": "Ci sono notifiche avanzate che non vengono mostrate qui.",
"You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply.": "Potresti averle configurate in un client diverso da %(brand)s. Non puoi regolarle in %(brand)s ma sono comunque applicate.",
"Set the name of a font installed on your system & %(brand)s will attempt to use it.": "Imposta il nome di un font installato nel tuo sistema e %(brand)s proverà ad usarlo.",
"Make this room low priority": "Rendi questa stanza a bassa priorità",
"Low priority rooms show up at the bottom of your room list in a dedicated section at the bottom of your room list": "Le stanze a bassa priorità vengono mostrate in fondo all'elenco stanze in una sezione dedicata",
"Use default": "Usa predefinito",
"Mentions & Keywords": "Citazioni e parole chiave",
"Notification options": "Opzioni di notifica",
"Favourited": "Preferito",
"Forget Room": "Dimentica stanza",
"Use your account to sign in to the latest version of the app at <a />": "Usa il tuo account per accedere alla versione più recente dell'app in <a />",
"Youre already signed in and good to go here, but you can also grab the latest versions of the app on all platforms at <a>element.io/get-started</a>.": "Hai già fatto l'accesso e sei pronto ad iniziare, ma puoi anche ottenere le versioni più recenti dell'app su tutte le piattaforme in <a>element.io/get-started</a>.",
"Go to Element": "Vai su Element",
"Were excited to announce Riot is now Element!": "Siamo entusiasti di annunciare che Riot ora si chiama Element!",
"Learn more at <a>element.io/previously-riot</a>": "Maggiori informazioni su <a>element.io/previously-riot</a>",
"Wrong file type": "Tipo di file errato",
"Wrong Recovery Key": "Chiave di ripristino errata",
"Invalid Recovery Key": "Chiave di ripristino non valida",
"Security Phrase": "Frase di sicurezza",
"Enter your Security Phrase or <button>Use your Security Key</button> to continue.": "Inserisci una frase di sicurezza o <button>Usa la tua chiave di sicurezza</button> per continuare.",
"Security Key": "Chiave di sicurezza",
"Use your Security Key to continue.": "Usa la tua chiave di sicurezza per continuare.",
"You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use %(brand)s with an existing Matrix account on a different homeserver.": "Puoi usare le opzioni di server personalizzato per accedere ad altri server Matrix, specificando un URL diverso di homeserver. Ciò ti consente di usare %(brand)s con un account Matrix esistente su un homeserver diverso.",
"Enter the location of your Element Matrix Services homeserver. It may use your own domain name or be a subdomain of <a>element.io</a>.": "Inserisci la posizione del tuo homeserver di Element Matrix Services. Potrebbe usare il tuo nome di dominio o essere un sottodominio di <a>element.io</a>.",
"Search rooms": "Cerca stanze",
"User menu": "Menu utente",
"%(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 per Android",
"Safeguard against losing access to encrypted messages & data by backing up encryption keys on your server.": "Proteggiti contro la perdita dell'accesso ai messaggi e dati cifrati facendo un backup delle chiavi crittografiche sul tuo server.",
"Generate a Security Key": "Genera una chiave di sicurezza",
"Well generate a Security Key for you to store somewhere safe, like a password manager or a safe.": "Genereremo per te una chiave di sicurezza da conservare in un posto sicuro, come un gestore di password o una cassaforte.",
"Enter a Security Phrase": "Inserisci una frase di sicurezza",
"Use a secret phrase only you know, and optionally save a Security Key to use for backup.": "Usa una frase segreta che conosci solo tu e salva facoltativamente una chiave di sicurezza da usare come backup.",
"Enter a security phrase only you know, as its used to safeguard your data. To be secure, you shouldnt re-use your account password.": "Inserisci una frase di sicurezza che conosci solo tu, dato che è usata per proteggere i tuoi dati. Per sicurezza, non dovresti riutilizzare la password dell'account.",
"Store your Security Key somewhere safe, like a password manager or a safe, as its used to safeguard your encrypted data.": "Conserva la chiave di sicurezza in un posto sicuro, come un gestore di password o una cassaforte, dato che è usata per proteggere i tuoi dati cifrati.",
"If you cancel now, you may lose encrypted messages & data if you lose access to your logins.": "Se annulli ora, potresti perdere i messaggi e dati cifrati in caso tu perda l'accesso ai tuoi login.",
"You can also set up Secure Backup & manage your keys in Settings.": "Puoi anche impostare il Backup Sicuro e gestire le tue chiavi nelle impostazioni.",
"Set up Secure backup": "Imposta il Backup Sicuro",
"Set a Security Phrase": "Imposta una frase di sicurezza",
"Confirm Security Phrase": "Conferma frase di sicurezza",
"Save your Security Key": "Salva la tua chiave di sicurezza",
"This room is public": "Questa stanza è pubblica",
"Away": "Assente",
"Enable advanced debugging for the room list": "Attiva il debug avanzato per l'elenco di stanze",
"Show rooms with unread messages first": "Mostra prima le stanze con messaggi non letti",
"Show previews of messages": "Mostra anteprime dei messaggi",
"Edited at %(date)s": "Modificato il %(date)s",
"Click to view edits": "Clicca per vedere le modifiche",
"Are you sure you want to cancel entering passphrase?": "Sei sicuro di volere annullare l'inserimento della frase?",
"* %(senderName)s %(emote)s": "* %(senderName)s %(emote)s",
"Custom Tag": "Etichetta personalizzata"
}

View file

@ -106,7 +106,7 @@
"Download this file": "この添付ファイルをダウンロード",
"Call invitation": "通話への招待",
"Forget": "忘れる",
"Messages containing <span>keywords</span>": "<span>keywords</span>を含むメッセージ",
"Messages containing <span>keywords</span>": "<span>キーワード</span> を含むメッセージ",
"Error saving email notification preferences": "電子メール通知設定の保存エラー",
"Tuesday": "火曜日",
"Enter keywords separated by a comma:": "キーワードをコンマで区切って入力:",
@ -198,7 +198,7 @@
"Unable to capture screen": "画面をキャプチャできません",
"Existing Call": "既存の通話",
"You are already in a call.": "すでに通話中です。",
"VoIP is unsupported": "VoIPはサポートされていません",
"VoIP is unsupported": "VoIPは対応していません",
"You cannot place VoIP calls in this browser.": "このブラウザにはVoIP通話はできません。",
"You cannot place a call with yourself.": "自分自身に電話をかけることはできません。",
"Call in Progress": "発信中",
@ -712,7 +712,7 @@
"Name": "名前",
"You must <a>register</a> to use this functionality": "この機能を使用するには<a>登録</a>する必要があります",
"You must join the room to see its files": "そのファイルを見るために部屋に参加する必要があります",
"There are no visible files in this room": "この部屋には目に見えるファイルはありません",
"There are no visible files in this room": "この部屋に表示可能なファイルは存在しません",
"<h1>HTML for your community's page</h1>\n<p>\n Use the long description to introduce new members to the community, or distribute\n some important <a href=\"foo\">links</a>\n</p>\n<p>\n You can even use 'img' tags\n</p>\n": "<h1>コミュニティのページのHTML</h1>\n<p>\n 詳細な説明を使用して、新しいメンバーをコミュニティに紹介する、または配布する\n 重要な<a href=\"foo\">リンク</a>\n</p>\n<p>\n あなたは 'img'タグを使うことさえできます\n</p>\n",
"Add rooms to the community summary": "コミュニティサマリーに部屋を追加する",
"Which rooms would you like to add to this summary?": "このサマリーにどの部屋を追加したいですか?",
@ -754,8 +754,8 @@
"Failed to load %(groupId)s": "%(groupId)s をロードできませんでした",
"Failed to reject invitation": "招待を拒否できませんでした",
"This room is not public. You will not be able to rejoin without an invite.": "この部屋は公開されていません。 あなたは招待なしで再び参加することはできません。",
"Are you sure you want to leave the room '%(roomName)s'?": "本当にその部屋 '%(roomName)s' を離れますか?",
"Failed to leave room": "部屋を離れることができなかった",
"Are you sure you want to leave the room '%(roomName)s'?": "本当にこの部屋「%(roomName)s」から退出してよろしいですか",
"Failed to leave room": "部屋からの退出に失敗しました",
"Can't leave Server Notices room": "サーバー通知部屋を離れることはできません",
"This room is used for important messages from the Homeserver, so you cannot leave it.": "この部屋はホームサーバーからの重要なメッセージに使用されるため、そこを離れることはできません。",
"Signed Out": "サインアウト",
@ -772,7 +772,7 @@
"Error whilst fetching joined communities": "参加したコミュニティを取得中にエラーが発生しました",
"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": "表示される通知はありません",
"You have no visible notifications": "通知はありません",
"You can't send any messages until you review and agree to <consentLink>our terms and conditions</consentLink>.": "<consentLink>利用規約</consentLink> を確認して同意するまでは、いかなるメッセージも送信できません。",
"Your message wasn't sent because this homeserver has hit its Monthly Active User Limit. Please <a>contact your service administrator</a> to continue using the service.": "このホームサーバーが月間アクティブユーザー制限を超えたため、メッセージは送信されませんでした。 サービスを引き続き使用するには、<a>サービス管理者にお問い合わせ</a>ください。",
"Your message wasn't sent because this homeserver has exceeded a resource limit. Please <a>contact your service administrator</a> to continue using the service.": "このホームサーバーがリソース制限を超えたため、メッセージは送信されませんでした。 サービスを引き続き使用するには、<a>サービス管理者にお問い合わせ</a>ください。",
@ -906,7 +906,7 @@
"Call failed due to misconfigured server": "サーバの誤設定により呼び出し失敗",
"Try using turn.matrix.org": "turn.matrix.orgで試してみる",
"Replying With Files": "ファイルを添付して返信",
"The file '%(fileName)s' failed to upload.": "ファイル '%(fileName)s' のアップロードに失敗しました",
"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.": "このサーバは指定された部屋バージョンに対応していません。",
"Name or Matrix ID": "名前またはMatrix ID",
@ -1116,7 +1116,7 @@
"This room is end-to-end encrypted": "この部屋はエンドツーエンド暗号化されています",
"Encrypted by an unverified session": "未検証のセッションによる暗号化",
"Close preview": "プレビューを閉じる",
"Direct Messages": "ダイレクトメッセージ",
"Direct Messages": "対話",
"Loading …": "読み込み中 …",
"Direct message": "ダイレクトメッセージ",
"Your display name": "あなたの表示名",
@ -1324,5 +1324,51 @@
"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 クライアント",
"Without completing security on this session, it wont have access to encrypted messages.": "このセッションでのセキュリティを完了させない限り、暗号化されたメッセージにはアクセスできません。"
"Without completing security on this session, it wont have access to encrypted messages.": "このセッションでのセキュリティを完了させない限り、暗号化されたメッセージにはアクセスできません。",
"Single Sign On": "シングルサインオン",
"Light": "ライト",
"Dark": "ダーク",
"Font size": "フォントサイズ",
"Use custom size": "独自のサイズを使用",
"Use a more compact Modern layout": "よりコンパクトで現代的なレイアウトを使用",
"Use a system font": "システムフォントを使用",
"System font name": "システムフォントの名前",
"Enable experimental, compact IRC style layout": "コンパクトな IRC スタイルレイアウトを使用 (実験的機能)",
"Messages containing my username": "自身のユーザー名を含むメッセージ",
"Messages containing @room": "@room を含むメッセージ",
"When rooms are upgraded": "部屋がアップグレードされた時",
"Hey you. You're the best!": "こんにちは、よろしくね!",
"Customise your appearance": "外観のカスタマイズ",
"Appearance Settings only affect this %(brand)s session.": "外観の設定はこの %(brand)s セッションにのみ適用されます。",
"People": "連絡先",
"Notification options": "通知設定",
"Verify User": "ユーザーの検証",
"Your homeserver": "あなたのホームサーバー",
"%(displayName)s cancelled verification.": "%(displayName)s が検証をキャンセルしました。",
"You cancelled verification.": "あなたが検証をキャンセルしました。",
"Verification cancelled": "検証のキャンセル",
"Notification settings": "通知設定",
"Switch to light mode": "ライトテーマに切り替え",
"Switch to dark mode": "ダークテーマに切り替え",
"Switch theme": "テーマを切り替え",
"Security & privacy": "セキュリティとプライバシー",
"All settings": "全ての設定",
"Feedback": "フィードバック",
"User menu": "ユーザーメニュー",
"Connecting to integration manager...": "インテグレーションマネージャに接続中...",
"Cannot connect to integration manager": "インテグレーションマネージャに接続できません",
"Leave Room": "部屋を退出",
"Failed to connect to integration manager": "インテグレーションマネージャへの接続に失敗しました",
"Start verification again from their profile.": "プロフィールから再度検証を開始してください。",
"Integration Manager": "インテグレーションマネージャ",
"Do not use an identity server": "ID サーバーを使用しない",
"Composer": "入力欄",
"Sort by": "並び替え",
"List options": "一覧の設定",
"Use Single Sign On to continue": "シングルサインオンを使用して続行",
"Accept <policyLink /> to continue:": "<policyLink /> に同意して続行:",
"Always show the window menu bar": "常にウィンドウメニューバーを表示する",
"Create room": "部屋を作成",
"Show %(count)s more|other": "さらに %(count)s 件を表示",
"Show %(count)s more|one": "さらに %(count)s 件を表示"
}

View file

@ -1,158 +1,158 @@
{
"This email address is already in use": ".i ca'o pilno le ve samymri",
"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",
"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",
"Your homeserver's URL": "le urli be le do 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. <CurrentPageURL>": "mu'a zoi urli. <CurrentPageURL> .urli",
"Your device resolution": "le ni vidnysle",
"Analytics": "lo se lanli datni",
"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",
"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.",
"You cannot place a call with yourself.": ".i lo nu do fonjo'e do na cumki",
"Call in Progress": ".i ca'o nu fonjo'e",
"A call is currently being placed!": ".i pu'o nu fonjo'e",
"A call is already in progress!": ".i ca'o drata nu fonjo'e",
"Permission Required": ".i do notci lo nu curmi",
"You do not have permission to start a conference call in this room": ".i na curmi lo nu do co'a nunjmaji fonjo'e ne'i le kumfa pe'a",
"Upload Failed": ".i pu fliba lo nu kibdu'a",
"Failure to create room": ".i fliba lo nu zbasu lo kumfa pe'a",
"Call Timeout": ".i mutce temci lo nu co'a fonjo'e",
"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",
"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": "benji",
"Sun": "nondei",
"Mon": "pavdei",
"Tue": "reldei",
"Wed": "cibdei",
"Thu": "vondei",
"Fri": "mumdei",
"Sat": "xavdei",
"Jan": "pa",
"Feb": "re",
"Mar": "ci",
"Apr": "vo",
"May": "mu",
"Jun": "xa",
"Jul": "ze",
"Aug": "bi",
"Sep": "so",
"Oct": "pa no",
"Nov": "pa pa",
"Dec": "pa re",
"PM": "su'i pa re",
"AM": "su'i no",
"%(weekDayName)s %(time)s": "de'i lo %(weekDayName)s ti'u li %(time)s",
"%(weekDayName)s, %(monthName)s %(day)s %(time)s": "de'i li %(day)s pi'e %(monthName)s noi %(weekDayName)s ge'u ti'u li %(time)s",
"%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "de'i li %(day)s pi'e %(monthName)s pi'e %(fullYear)s noi %(weekDayName)s",
"%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s": "de'i li %(day)s pi'e %(monthName)s pi'e %(fullYear)s noi %(weekDayName)s ge'u ti'u li %(time)s",
"Who would you like to add to this community?": ".i do djica lo nu jmina ma le girzu",
"Warning: any person you add to a community will be publicly visible to anyone who knows the community ID": ".i ju'i lo djuno be lo judri be lo girzu cu kakne lo nu viska lo liste be ro lo prenu poi se jmina do gy.",
"Invite new community members": "vi'ecpe lo prenu poi cnino le girzu",
"Invite to Community": "vi'ecpe fi le girzu",
"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",
"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",
"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",
"This email address is already in use": ".i xa'o pilno fa da le samymri judri",
"This phone number is already in use": ".i xa'o pilno fa da le fonxa judri",
"Failed to verify email address: make sure you clicked the link in the email": ".i da nabmi fi lo nu facki le du'u do ponse le te samymri .i ko birti le du'u do samcu'a le judrysni pe le se samymri",
"The platform you're on": "jicmu vau je se pilno do",
"Your language of choice": "se cuxna fo le ka bangu",
"Which officially provided instance you are using, if any": "samtcise'u vau je catni jai te selfu vau je se pilno do",
"Whether or not you're using the Richtext mode of the Rich Text Editor": "jei do pilno le se jadni ciska tadji pe le notci ciska tutci",
"Your homeserver's URL": "judri le samtcise'u",
"e.g. %(exampleValue)s": ".i zoi zoi. %(exampleValue)s .zoi mupli",
"Every page you use in the app": "liste lu'i ro pagbu be le samtci be'o poi se pilno do",
"e.g. <CurrentPageURL>": ".i zoi zoi. <CurrentPageURL> .zoi mupli",
"Your device resolution": "vidnysle relca'u le vidni",
"Analytics": "lanli datni",
"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 zilbe'i le samtcise'u fa le te zilvi'u be le datni bei lu'o ro datni be le du'u mu'a pa ve zilbe'i ja pa pilno ja pa girzu ja pa drata cu jai steci do",
"Call Failed": ".i da nabmi fi lo nu co'a fonjo'e",
"You are already in a call.": ".i do xa'o ca'o fonjo'e da",
"VoIP is unsupported": ".i na ka'e pilno la .voip.",
"You cannot place VoIP calls in this browser.": ".i le kibrbrauzero na ka'e pilno la .voip. lo nu fonjo'e",
"You cannot place a call with yourself.": ".i do na ka'e fonjo'e do",
"Call in Progress": ".i ca'o fonjo'e",
"A call is currently being placed!": ".i ca'o co'a fonjo'e",
"A call is already in progress!": ".i xa'o ca'o fonjo'e da",
"Permission Required": ".i lo nu curmi cu sarcu",
"You do not have permission to start a conference call in this room": ".i na curmi lo nu le du'u co'a girzu fonjo'e cu zilbe'i do fo le ca se cuxna",
"Upload Failed": ".i da nabmi fi lo nu kibdu'a",
"Failure to create room": ".i da nabmi fi lo nu cupra le ve zilbe'i",
"Call Timeout": ".i dukse le ka ca'o ce'u co'a fonjo'e",
"The remote side failed to pick up": ".i da poi do co'a fonjo'e ke'a na spuda",
"Unable to capture screen": ".i na ka'e facki le du'u vidvi fi le vidni",
"Existing Call": ".i xa'o ca'o fonjo'e",
"Server may be unavailable, overloaded, or you hit a bug.": ".i la'a cu'i gi ja le samtcise'u cu spofu vau ja mutce le ka gunka gi da samcfi",
"Send": "nu zilbe'i",
"Sun": "jy. dy. ze",
"Mon": "jy. dy. pa",
"Tue": "jy. dy. re",
"Wed": "jy. dy. ci",
"Thu": "dy. jy. vo",
"Fri": "dy. jy. mu",
"Sat": "dy. jy. xa",
"Jan": "ly. pa",
"Feb": "ly. re",
"Mar": "ly. ci",
"Apr": "ly. vo",
"May": "ly. mu",
"Jun": "ly. xa",
"Jul": "ly. ze",
"Aug": "ly. bi",
"Sep": "ly. so",
"Oct": "ly. pa no",
"Nov": "ly. pa pa",
"Dec": "ly. pa re",
"PM": "ly. cy.",
"AM": "cy. cy.",
"%(weekDayName)s %(time)s": ".i li %(weekDayName)s %(time)s detri",
"%(weekDayName)s, %(monthName)s %(day)s %(time)s": ".i li %(monthName)s %(day)s %(weekDayName)s %(time)s detri",
"%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": ".i li %(fullYear)s %(monthName)s %(day)s %(weekDayName)s detri",
"%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s": ".i li %(fullYear)s %(monthName)s %(day)s %(weekDayName)s %(time)s detri",
"Who would you like to add to this community?": ".i do djica lo nu ma ziljmina le girzu",
"Warning: any person you add to a community will be publicly visible to anyone who knows the community ID": ".i ju'i zo'e ro djuno be le du'u judri le girzu cu ka'e zgana le du'u ro da poi pagbu le girzu zo'u da go'i",
"Invite new community members": "nu friti le ka ziljmina le girzu",
"Invite to Community": "nu friti le ka ziljmina le girzu",
"Which rooms would you like to add to this community?": ".i do djica lo nu ma poi ve zilbe'i cu ziljmina le girzu",
"Show these rooms to non-members on the community page and room list?": ".i xu do djica lo nu ro na cmima cu ka'e zgana le du'u le ve zilbe'i cu pagbu le girzu je le ve zilbe'i liste",
"Add rooms to the community": "nu jmina pa ve zilbe'i le girzu",
"Add to community": "nu ziljmina le girzu",
"Failed to invite the following users to %(groupId)s:": ".i da nabmi fi lo nu friti le ka ziljmina la'o zoi. %(groupId)s .zoi kei le di'e pilno",
"Failed to invite users to community": ".i da nabmi fi lo nu friti le ka ziljmina le girzu",
"Failed to invite users to %(groupId)s": ".i da nabmi fi lo nu friti le ka ziljmina la'o zoi. %(groupId)s .zoi",
"Failed to add the following rooms to %(groupId)s:": ".i da nabmi fi lo nu le di'e ve zilbe'i cu ziljmina la'o zoi. %(groupId)s .zoi",
"Unnamed Room": "na da cmene",
"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",
"Register": "cmeveigau",
"Default": "lo zmiselcu'a",
"Restricted": "li so'u",
"Moderator": "li so'i",
"Admin": "li ro",
"Power level must be positive integer.": ".i .ei lo ni vlipa cu kacna'u",
"This email address was not found": ".i na da zo'u facki le du'u samymri judri da",
"Your email address does not appear to be associated with a Matrix ID on this Homeserver.": ".i za'a le samymri judri na ckini pa judri be fi la .meitriks. be'o pe le samtcise'u",
"Register": "nu co'a na'o jaspu",
"Default": "zmiselcu'a",
"Restricted": "vlipa so'u da",
"Moderator": "vlipa so'o da",
"Admin": "vlipa so'i da",
"Power level must be positive integer.": ".i lo nu le ni vlipa cu kacna'u cu sarcu",
"%(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",
"%(userId)s from %(fromPowerLevel)s to %(toPowerLevel)s": "lo ni la'o ny. %(userId)s .ny. vlipa noi pu du %(fromPowerLevel)s ku %(toPowerLevel)s",
"Operation failed": ".i pu fliba",
"Failed to invite": ".i pu fliba lo nu vi'ecpe",
"Failed to invite the following users to the %(roomName)s room:": "lo pilno poi fliba lo nu vi'ecpe ke'a la'o ly. %(roomName)s .ly. noi kumfa pe'a",
"You need to be logged in.": ".i .ei do cmisau",
"You need to be able to invite users to do that.": ".i lo nu do kakne lo nu vi'ecpe lo pilno cu sarcu ta",
"Operation failed": ".i da nabmi",
"Failed to invite": ".i da nabmi fi lo nu friti le ka ziljmina",
"Failed to invite the following users to the %(roomName)s room:": ".i da nabmi fi lo nu friti le ka ziljmina le se zilbe'i be fo la'o zoi. %(roomName)s .zoi kei le di'e pilno",
"You need to be logged in.": ".i lo nu da jaspu do sarcu",
"You need to be able to invite users to do that.": ".i lo nu do vlipa le ka friti le ka ziljmina cu sarcu",
"Unable to create widget.": ".i na kakne lo nu zbasu lo uidje",
"Missing roomId.": ".i claxu lo judri be lo kumfa pe'a",
"Failed to send request.": ".i pu fliba lo nu benji lo ve cpedu",
"Failed to send request.": ".i da nabmi fi lo nu benji le ve cpedu",
"This room is not recognised.": ".i na sanji le kumfa pe'a",
"You are not in this room.": ".i do na zvati le kumfa pe'a",
"You do not have permission to do that in this room.": ".i ne'i le kumfa pe'a na curmi ta poi do troci",
"Missing room_id in request": ".i lo ve cpedu cu claxu lo judri be lo kumfa pe'a",
"You are not in this room.": ".i do na pagbu le se zilbe'i",
"You do not have permission to do that in this room.": ".i do na vlipa le ka zo'e zilbe'i do fo zo'e",
"Missing room_id in request": ".i na pa judri be pa ve zilbe'i cu pagbu le ve cpedu",
"Room %(roomId)s not visible": ".i na kakne lo nu viska la'o ly. %(roomId)s .ly. noi kumfa pe'a",
"Missing user_id in request": ".i lo ve cpedu cu claxu lo judri be lo pilno",
"Usage": "lo tadji be lo nu pilno",
"Missing user_id in request": ".i na pa judri be pa pilno cu pagbu le ve cpedu",
"Usage": "tadji lo nu pilno",
"Searches DuckDuckGo for results": ".i sisku se pi'o la datkysisku",
"/ddg is not a command": "zoi ny. /ddg .ny. na nu minde",
"Changes your display nickname": ".i galfi le do cmene",
"Changes your display nickname": "",
"Invites user with given id to current room": ".i vi'ecpe lo pilno poi se judri ti ku le kumfa pe'a",
"Leave room": "cliva le kumfa pe'a",
"Leave room": "nu do zilvi'u le se zilbe'i",
"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",
"Ignored user": ".i do no'e jundi le pilno",
"You are now ignoring %(userId)s": ".i do ca no'e jundi la'o ny. %(userId)s .ny.",
"Ignored user": ".i mo'u co'a na jundi tu'a le pilno",
"You are now ignoring %(userId)s": ".i ca na jundi tu'a la'o zoi. %(userId)s .zoi",
"Stops ignoring a user, showing their messages going forward": ".i sisti lo nu no'e jundi lo pilno gi'e mipri lo notci be fi py. do",
"Unignored user": ".i do sisti lo nu no'e jundi le pilno",
"You are no longer ignoring %(userId)s": ".i do ca sisti lo nu no'e jundi la'o ny. %(userId)s .ny.",
"Unignored user": ".i mo'u co'a jundi tu'a le pilno",
"You are no longer ignoring %(userId)s": ".i ca jundi tu'a la'o zoi. %(userId)s .zoi",
"Define the power level of a user": ".i ninga'igau lo ni lo pilno cu vlipa",
"Deops user with given id": ".i xruti lo ni lo pilno poi se judri ti cu vlipa",
"Opens the Developer Tools dialog": ".i samymo'i lo favgau se pilno uidje",
"Verified key": "lo termifckiku poi se lacri",
"Verified key": "ckiku vau je se lacri",
"Displays action": ".i mrilu lo nu do gasnu",
"Forces the current outbound group session in an encrypted room to be discarded": ".i macnu vimcu lo ca barkla termifckiku gunma lo kumfa pe'a poi mifra",
"Reason": "lo krinu",
"%(targetName)s accepted the invitation for %(displayName)s.": ".i la'o ly. %(targetName)s .ly. fitytu'i lo ve vi'ecpe be fi la'o ly. %(displayName)s .ly.",
"%(targetName)s accepted an invitation.": ".i la'o ly. %(targetName)s .ly. fitytu'i lo ve vi'ecpe",
"%(senderName)s requested a VoIP conference.": ".i la'o ly. %(senderName)s .ly. cpedu lo .voip. zei nunjmaji",
"%(senderName)s invited %(targetName)s.": ".i la'o ly. %(senderName)s .ly. vi'ecpe la'o ly. %(targetName)s .ly.",
"Reason": "krinu",
"%(targetName)s accepted the invitation for %(displayName)s.": "",
"%(targetName)s accepted an invitation.": ".i la'o zoi. %(targetName)s .zoi zukte pa se friti",
"%(senderName)s requested a VoIP conference.": "",
"%(senderName)s invited %(targetName)s.": ".i la'o zoi. %(senderName)s .zoi friti le ka ziljmina kei la'o zoi. %(targetName)s .zoi",
"%(senderName)s banned %(targetName)s.": ".i la'o ly. %(senderName)s .ly. gasnu lo nu la'o ly. %(targetName)s .ly. vitno cliva",
"%(oldDisplayName)s changed their display name to %(displayName)s.": ".i la'o ly. %(oldDisplayName)s .ly. gafygau lo cmene be ri zoi ly. %(displayName)s .ly.",
"%(senderName)s set their display name to %(displayName)s.": ".i la'o ny. %(senderName)s .ny. jmina lo cmene be ri be'o no'u zoi ly. %(displayName)s .ly.",
"%(senderName)s removed their display name (%(oldDisplayName)s).": ".i la'o ny. %(senderName)s .ny. vimcu lo cmene be ri be'o no'u zoi ly. %(oldDisplayName)s .ly.",
"%(senderName)s removed their profile picture.": ".i la'o ly. %(senderName)s .ly. vimcu lo predatni pixra pe ri",
"%(senderName)s changed their profile picture.": ".i la'o ly. %(senderName)s .ly. gafygau lo predatni pixra pe ri",
"%(senderName)s set a profile picture.": ".i la'o ly. %(senderName)s .ly. jmina lo predatni pixra pe ri",
"%(oldDisplayName)s changed their display name to %(displayName)s.": ".i zoi zoi. %(displayName)s .zoi basti zoi zoi. %(oldDisplayName)s .zoi le ka cmene",
"%(senderName)s set their display name to %(displayName)s.": ".i zoi zoi. %(displayName)s .zoi co'a cmene la'o zoi. %(senderName)s .zoi",
"%(senderName)s removed their display name (%(oldDisplayName)s).": ".i zoi zoi. %(oldDisplayName)s .zoi co'u cmene la'o zoi. %(senderName)s .zoi",
"%(senderName)s removed their profile picture.": ".i da co'u pixra sinxa la'o zoi. %(senderName)s .zoi",
"%(senderName)s changed their profile picture.": ".i da basti de le ka pixra sinxa la'o zoi. %(senderName)s .zoi",
"%(senderName)s set a profile picture.": ".i da co'a pixra sinxa la'o zoi. %(senderName)s .zoi",
"VoIP conference started.": ".i co'a .voip. zei nunjmaji",
"%(targetName)s joined the room.": ".i la'o ly. %(targetName)s .ly. binxo lo cmima be le kumfa pe'a",
"%(targetName)s joined the room.": ".i la'o zoi. %(targetName)s .zoi ziljmina le se zilbe'i",
"VoIP conference finished.": ".i mo'u .voip. zei nunjmaji",
"%(targetName)s rejected the invitation.": ".i la'o ly. %(targetName)s .ly. fitytoltu'i lo ve vi'ecpe",
"%(targetName)s left the room.": ".i la'o ly. %(targetName)s .ly. cliva le kumfa pe'a",
"%(targetName)s rejected the invitation.": ".i la'o zoi. %(targetName)s .zoi zukte le ka na ckaji le se friti",
"%(targetName)s left the room.": ".i la'o zoi. %(targetName)s .zoi zilvi'u le se zilbe'i",
"%(senderName)s unbanned %(targetName)s.": ".i la'o ly. %(senderName)s .ly. xruti fo lo nu la'o ly. %(targetName)s .ly. vitno cliva",
"%(senderName)s kicked %(targetName)s.": ".i la'o ly. %(senderName)s .ly. gasnu lo nu la'o ly. %(targetName)s .ly. cliva",
"%(senderName)s withdrew %(targetName)s's invitation.": ".i la'o ly. %(senderName)s .ly. lebna lo ve vi'ecpe be la'o ly. %(targetName)s .ly.",
"%(senderDisplayName)s changed the topic to \"%(topic)s\".": ".i la'o ly. %(senderDisplayName)s .ly. gafygau lo se casnu pe le kumfa pe'a zoi ly. %(topic)s .ly.",
"%(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 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",
"(not supported by this browser)": "to le do kibyca'o na kakne toi",
"%(senderName)s answered the call.": ".i la'o ly. %(senderName)s .ly. spuda lo nu fonjo'e",
"%(senderName)s kicked %(targetName)s.": ".i gau la'o zoi. %(senderName)s .zoi la'o zoi. %(targetName)s .zoi zilvi'u le se zilbe'i",
"%(senderName)s withdrew %(targetName)s's invitation.": ".i la'o zoi. %(senderName)s .zoi co'u friti le ka ziljmina kei la'o zoi. %(targetName)s .zoi",
"%(senderDisplayName)s changed the topic to \"%(topic)s\".": ".i gau la'o zoi. %(senderDisplayName)s .zoi zoi zoi. %(topic)s .zoi basti da le ka skicu lerpoi",
"%(senderDisplayName)s removed the room name.": ".i gau la'o zoi. %(senderDisplayName)s .zoi da co'u cmene le se zilbe'i",
"%(senderDisplayName)s changed the room name to %(roomName)s.": ".i gau la'o zoi. %(senderDisplayName)s .zoi zoi zoi. %(roomName)s .zoi basti da le ka cmene le se zilbe'i",
"%(senderDisplayName)s sent an image.": ".i pa pixra cu zilbe'i fi la'o zoi. %(senderDisplayName)s .zoi",
"%(senderName)s set the main address for this room to %(address)s.": ".i gau la'o zoi. %(senderName)s .zoi zoi zoi. %(address)s .zoi co'a ralju le'i judri be le ve zilbe'i",
"%(senderName)s removed the main address for this room.": ".i gau la'o zoi. %(senderName)s .zoi da co'u ralju le'i judri be le ve zilbe'i",
"Someone": "da",
"(not supported by this browser)": ".i le kibrbrauzero na kakne",
"%(senderName)s answered the call.": ".i mo'u co'a fonjo'e la'o zoi. %(senderName)s .zoi",
"(could not connect media)": "to na kakne lo nu ganvi samjongau toi",
"(no answer)": "to na spuda toi",
"(no answer)": ".i na spuda",
"(unknown failure: %(reason)s)": "to na'e te djuno nu fliba fi'o ve skicu zoi gy. %(reason)s .gy. toi",
"%(senderName)s ended the call.": ".i la'o ly. %(senderName)s .ly. sisti lo nu fonjo'e",
"%(senderName)s sent an invitation to %(targetDisplayName)s to join the room.": ".i la'o ly. %(senderName)s .ly. vi'ecpe la'o ly. %(targetDisplayName)s .ly. le kumfa pe'a",
"%(senderName)s made future room history visible to all room members, from the point they are invited.": ".i la'o ly. %(senderName)s .ly. gasnu lo nu ro lo cmima ka'e viska ro lo notci be ba lo mu'e cy. se vi'ecpe",
"%(senderName)s made future room history visible to all room members, from the point they joined.": ".i la'o ly. %(senderName)s .ly. gasnu lo nu ro lo cmima ka'e viska ro lo notci be ba lo mu'e cy. cmibi'o",
"%(senderName)s made future room history visible to all room members.": ".i la'o ly. %(senderName)s .ly. gasnu lo nu ro lo cmima ka'e viska ro lo ba notci",
"%(senderName)s made future room history visible to anyone.": ".i la'o ly. %(senderName)s .ly. gasnu lo nu ro lo prenu ka'e viska ro lo ba notci",
"%(senderName)s ended the call.": ".i gau la'o zoi. %(senderName)s .zoi co'u fonjo'e ri",
"%(senderName)s sent an invitation to %(targetDisplayName)s to join the room.": ".i la'o zoi. %(senderName)s .zoi friti le ka ziljmina le se zilbe'i kei la'o zoi. %(targetDisplayName)s .zoi",
"%(senderName)s made future room history visible to all room members, from the point they are invited.": ".i ro da poi pagbu le se zilbe'i zo'u gau la'o zoi. %(senderName)s .zoi da ka'e tcidu ro notci poi ba lo nu da te friti ba zilbe'i",
"%(senderName)s made future room history visible to all room members, from the point they joined.": ".i ro da poi pagbu le se zilbe'i zo'u gau la'o zoi. %(senderName)s .zoi da ka'e tcidu ro notci poi ba lo nu da ziljmina ba zilbe'i",
"%(senderName)s made future room history visible to all room members.": ".i gau la'o zoi. %(senderName)s .zoi ro pagbu be le se zilbe'i cu ka'e tcidu ro notci poi ba zilbe'i",
"%(senderName)s made future room history visible to anyone.": ".i gau la'o zoi. %(senderName)s .zoi ro da ka'e tcidu ro notci poi ba zilbe'i",
"%(senderName)s made future room history visible to unknown (%(visibility)s).": ".i la'o ly. %(senderName)s .ly. gasnu lo nu zo'e ka'e viska lo notci to cuxna zoi ny. %(visibility)s .ny. toi",
"%(senderName)s changed the pinned messages for the room.": ".i la'o ly. %(senderName)s .ly. gafygau lo vitno notci pe le kumfa pe'a",
"%(widgetName)s widget modified by %(senderName)s": ".i la'o ly. %(senderName)s .ly. gafygau la'o ny. %(widgetName)s .ny. noi uidje",
@ -160,13 +160,13 @@
"%(widgetName)s widget removed by %(senderName)s": ".i la'o ly. %(senderName)s .ly. vimcu la'o ny. %(widgetName)s .ny. noi uidje",
"This homeserver has hit its Monthly Active User limit.": ".i le samtcise'u cu bancu lo masti jimte be ri bei lo ni ca'o pilno",
"This homeserver has exceeded one of its resource limits.": ".i le samtcise'u cu bancu pa lo jimte be ri",
"Please <a>contact your service administrator</a> to continue using the service.": ".i .e'o ko <a>tavla lo do te selfu admine</a> .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",
"Please <a>contact your service administrator</a> to continue using the service.": ".i lo nu do <a>tavla pa jitro be le samtcise'u</a> cu sarcu lo nu za'o selfu do",
"Unable to connect to Homeserver. Retrying...": ".i da nabmi fi lo nu samjo'e le samtcise'u .i ca'o za'u re'u troci",
"Your browser does not support the required cryptography extensions": ".i le kibrbrauzero na ka'e pilno le mifra ciste poi jai sarcu",
"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",
"Failed to join room": ".i pu fliba lo nu cmibi'o le kumfa pe'a",
"Failed to join room": ".i da nabmi lo nu ziljmina le se zilbe'i",
"Message Pinning": "lo du'u xu kau kakne lo nu mrilu lo vitno notci",
"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",
@ -179,43 +179,43 @@
"Enable inline URL previews by default": "lo zmiselcu'a pe lo du'u xu kau zmiku purzga lo se urli",
"Enable URL previews for this room (only affects you)": "lo du'u xu kau do zmiku purzga lo se urli ne'i le kumfa pe'a",
"Enable URL previews by default for participants in this room": "lo zmiselcu'a pe lo du'u xu kau lo cmima be le kumfa pe'a cu zmiku purzga lo se urli",
"Room Colour": "lo se skari be le kumfa pe'a",
"Room Colour": "se skari le ve zilbe'i",
"Enable widget screenshots on supported widgets": "lo du'u xu kau kakne lo nu co'a pixra lo uidje kei lo nu kakne tu'a .ubu",
"Collecting app version information": ".i ca'o crepu lo datni be lo favytcinymupli",
"Collecting logs": ".i ca'o crepu lo vreji",
"Uploading report": ".i ca'o kibdu'a lo datnynoi",
"Collecting app version information": ".i ca'o facki le du'u favytcinymupli",
"Collecting logs": ".i ca'o facki le du'u citri",
"Uploading report": ".i ca'o kibdu'a le vreji",
"Waiting for response from server": ".i ca'o denpa lo nu le samtcise'u cu spuda",
"Messages containing my display name": "lo notci poi vasru lo cmene be mi",
"Messages in one-to-one chats": "lo notci be fi pa lo prenu bei pa lo prenu",
"Messages in group chats": "lo notci pe lo girzu tavla",
"When I'm invited to a room": "lo nu vi'ecpe mi lo kumfa pe'a",
"Call invitation": "lo nu vi'ecpe mi lo nu fonjo'e",
"Messages sent by bot": "lo notci be fi lo sampre",
"Messages containing my display name": "nu pa se pagbu be le cmene be mi cu zilbe'i",
"Messages in one-to-one chats": "nu da zilbe'i pa prenu",
"Messages in group chats": "nu da zilbe'i lu'o pa prenu",
"When I'm invited to a room": "nu da friti le ka ziljmina lo se zilbe'i kei do",
"Call invitation": "nu da co'a fonjo'e do",
"Messages sent by bot": "nu da zilbe'i fi pa sampre",
"Active call (%(roomName)s)": "le ca fonjo'e ne la'o ly. %(roomName)s .ly.",
"unknown caller": "lo fonjo'e noi na'e te djuno",
"Incoming voice call from %(name)s": ".i la'o ly. %(name)s .ly. ca'o snavi fonjo'e",
"Incoming video call from %(name)s": ".i la'o ly. %(name)s .ly. ca'o vidvi fonjo'e",
"Incoming call from %(name)s": ".i la'o ly. %(name)s .ly. ca'o fonjo'e",
"Decline": "fitytoltu'i",
"Accept": "fitytu'i",
"Error": "lo se srera",
"Decline": "nu na fonjo'e",
"Accept": "nu fonjo'e",
"Error": "nabmi",
"Incorrect verification code": ".i na'e drani ke lacri lerpoi",
"Submit": "benji",
"Phone": "lo fonxa",
"Submit": "nu zilbe'i",
"Phone": "fonxa",
"Add": "jmina",
"Failed to upload profile picture!": ".i pu fliba lo nu kibdu'a lo predatni pixra",
"No display name": ".i no da cmene",
"New passwords don't match": ".i le'i japyvla poi cnino na simxu lo nu mintu",
"Failed to upload profile picture!": ".i da nabmi lo nu kibdu'a le pixra sinxa",
"No display name": ".i na da cmene",
"New passwords don't match": ".i le'i lerpoijaspu poi cnino na simxu le ka du",
"Passwords can't be empty": ".i lu li'u .e'a nai japyvla",
"Warning!": ".i ju'i",
"Export E2E room keys": "barbei lo kumfa pe'a termifckiku",
"Continue": "",
"Do you want to set an email address?": ".i .au pei do jmina lo te samymri",
"Current password": "lo ca japyvla",
"Password": "lo japyvla",
"New Password": "lo japyvla poi cnino",
"Password": "lerpoijaspu",
"New Password": "lerpoijaspu vau je cnino",
"Confirm password": "lo za'u re'u japyvla poi cnino",
"Change Password": "galfi lo japyvla",
"Change Password": "nu basti fi le ka lerpoijaspu",
"Authentication": "lo nu facki lo du'u do du ma kau",
"Last seen": "lo ro re'u nu viska",
"Failed to set display name": ".i pu fliba lo nu galfi lo cmene",
@ -227,5 +227,358 @@
"Failed to change settings": ".i pu fliba lo nu galfi lo se cuxna",
"Can't update user notification settings": ".i pu fliba lo nu galfi lo se cuxna pe lo nu sajgau",
"Failed to update keywords": ".i pu fliba lo nu galfi lo midvla",
"Messages containing <span>keywords</span>": "lo notci poi vasru <span>lo midvla</span>"
"Messages containing <span>keywords</span>": "lo notci poi vasru <span>lo midvla</span>",
"Try using turn.matrix.org": ".i ko troci le ka pilno le se judri be zoi zoi. turn.matrix.org .zoi",
"Room name or address": "fe pa ve zilbe'i cu cmene vau ja judri",
"Custom (%(level)s)": "drata (%(level)s)",
"Failed to invite users to the room:": ".i la'e di'e nabmi fi lo nu friti le ka ziljmina le se zilbe'i kei le pilno",
"Messages": "notci",
"Actions": "ka'e se zukte",
"Advanced": "macnu",
"Other": "drata",
"Command error": ".i da nabmi fi lo nu minde",
"Failed to set topic": ".i da nabmi lo nu co'a skicu lerpoi",
"This room has no topic.": ".i na da skicu lerpoi le ve zilbe'i",
"Command failed": ".i da nabmi lo nu minde",
"Could not find user in room": ".i le pilno na pagbu le se zilbe'i",
"Session already verified!": ".i xa'o lacri le se samtcise'u",
"WARNING: Session already verified, but keys do NOT MATCH!": ".i ju'i zo'e xa'o lacri le se samtcise'u .i ku'i le'i ckiku ba'e na simxu le ka mapti",
"%(senderName)s made no change.": ".i la'o zoi. %(senderName)s .zoi na binxo da de",
"%(senderDisplayName)s changed the room name from %(oldRoomName)s to %(newRoomName)s.": ".i gau la'o zoi. %(senderDisplayName)s .zoi zoi zoi. %(newRoomName)s .zoi basti zoi zoi. %(oldRoomName)s .zoi le ka cmene le se zilbe'i",
"%(senderDisplayName)s made the room public to whoever knows the link.": ".i gau la'o zoi. %(senderDisplayName)s .zoi ro djuno be le du'u judri cu ka'e ziljmina le se zilbe'i",
"%(senderDisplayName)s made the room invite only.": ".i ro da zo'u gau la'o zoi. %(senderDisplayName)s .zoi lo nu de friti le ka ziljmina le se zilbe'i kei da sarcu",
"%(senderDisplayName)s has allowed guests to join the room.": ".i la'o zoi. %(senderDisplayName)s .zoi curmi lo nu ro na te friti cu ka'e ziljmina le se zilbe'i",
"%(senderDisplayName)s has prevented guests from joining the room.": ".i la'o zoi. %(senderDisplayName)s .zoi na curmi lo nu ro na te friti cu ka'e ziljmina le se zilbe'i",
"%(senderName)s added the alternative addresses %(addresses)s for this room.|other": ".i gau la'o zoi. %(senderName)s .zoi zoi zoi. %(addresses)s .zoi poi na ralju co'a judri le se zilbe'i",
"%(senderName)s added the alternative addresses %(addresses)s for this room.|one": ".i gau la'o zoi. %(senderName)s .zoi zoi zoi. %(addresses)s .zoi poi na ralju co'a judri le se zilbe'i",
"%(senderName)s removed the alternative addresses %(addresses)s for this room.|other": ".i gau la'o zoi. %(senderName)s .zoi zoi zoi. %(addresses)s .zoi poi na ralju co'u judri le se zilbe'i",
"%(senderName)s removed the alternative addresses %(addresses)s for this room.|one": ".i gau la'o zoi. %(senderName)s .zoi zoi zoi. %(addresses)s .zoi poi na ralju co'u judri le se zilbe'i",
"%(senderName)s changed the alternative addresses for this room.": ".i gau la'o zoi. %(senderName)s .zoi pa na ralju cu basti da le ka judri le se zilbe'i",
"%(senderName)s changed the main and alternative addresses for this room.": ".i gau la'o zoi. %(senderName)s .zoi pa ralju je pa na ralju cu basti da le ka judri le se zilbe'i",
"%(senderName)s changed the addresses for this room.": ".i gau la'o zoi. %(senderName)s .zoi da basti de le ka judri le se zilbe'i",
"%(senderName)s placed a voice call.": ".i la'o zoi. %(senderName)s .zoi co'a fonjo'e",
"%(senderName)s placed a voice call. (not supported by this browser)": ".i la'o zoi. %(senderName)s .zoi co'a fonjo'e .i le do kibrbrauzero na kakne",
"%(senderName)s placed a video call.": ".i la'o zoi. %(senderName)s .zoi co'a vidvi fonjo'e",
"%(senderName)s placed a video call. (not supported by this browser)": ".i la'o zoi. %(senderName)s .zoi co'a vidvi fonjo'e .i le do kibrbrauzero na kakne",
"%(senderName)s revoked the invitation for %(targetDisplayName)s to join the room.": ".i la'o zoi. %(senderName)s .zoi co'u friti le ka ziljmina le se zilbe'i kei la'o zoi. %(targetDisplayName)s .zoi",
"Light": "carmi",
"Dark": "manku",
"You signed in to a new session without verifying it:": ".i fe le di'e se samtcise'u pu co'a jaspu vau je za'o na lacri",
"They match": "du",
"They don't match": "na du",
"Dog": "gerku",
"Cat": "mlatu",
"Lion": "cinfo",
"Horse": "xirma",
"Unicorn": "pavyseljirna",
"Pig": "xarju",
"Elephant": "xanto",
"Rabbit": "ractu",
"Panda": "ribrmelanole'usa",
"Rooster": "jipci",
"Penguin": "zipcpi",
"Turtle": "cakyrespa",
"Fish": "finpe",
"Octopus": "dalroktopoda",
"Butterfly": "toldi",
"Flower": "xrula",
"Tree": "tricu",
"Cactus": "jesyspa",
"Mushroom": "mledi",
"Globe": "bolcartu",
"Moon": "lunra",
"Cloud": "dilnu",
"Fire": "fagri",
"Banana": "badna",
"Apple": "plise",
"Strawberry": "grutrananasa",
"Corn": "zumri",
"Pizza": "cidjrpitsa",
"Cake": "titnanba",
"Heart": "risna",
"Smiley": "cisma",
"Robot": "sampre",
"Hat": "mapku",
"Glasses": "vistci",
"Santa": "la santa",
"Umbrella": "santa",
"Hourglass": "canjunla",
"Clock": "junla",
"Light bulb": "te gusni",
"Book": "cukta",
"Pencil": "pinsi",
"Scissors": "jinci",
"Lock": "stela",
"Key": "ckiku",
"Hammer": "mruli",
"Telephone": "fonxa",
"Flag": "lanci",
"Train": "trene",
"Bicycle": "carvrama'e",
"Aeroplane": "vinji",
"Rocket": "jakne",
"Ball": "bolci",
"Guitar": "jgita",
"Trumpet": "tabra",
"Bell": "janbe",
"Headphones": "selsnapra",
"Pin": "pijne",
"Upload": "nu kibdu'a",
"Send an encrypted reply…": "nu pa mifra be pa jai te spuda cu zilbe'i",
"Send a reply…": "nu pa jai te spuda cu zilbe'i",
"Send an encrypted message…": "nu pa mifra be pa notci cu zilbe'i",
"Send a message…": "nu pa notci cu zilbe'i",
"Search": "nu sisku",
"People": "prenu",
"Rooms": "ve zilbe'i",
"Show %(count)s more|other": "nu viska %(count)s na du",
"Show %(count)s more|one": "nu viska %(count)s na du",
"Search…": "nu sisku",
"Sunday": "li jy. dy. ze detri",
"Monday": "li jy. dy. pa detri",
"Tuesday": "li jy. dy. re detri",
"Wednesday": "li jy. dy. ci detri",
"Thursday": "li jy. dy. vo detri",
"Friday": "li jy. dy. mu detri",
"Saturday": "li jy. dy. xa detri",
"Today": "cabdei",
"Yesterday": "prulamdei",
"Cancel search": "nu co'u sisku",
"Search rooms": "sisku fi le'i ve zilbe'i",
"Search failed": ".i da nabmi lo nu sisku",
"Switch to light mode": "nu le jvinu cu binxo le ka carmi",
"Switch to dark mode": "nu le jvinu cu binxo le ka manku",
"Switch theme": "nu basti fi le ka jvinu",
"Syncing...": ".i ca'o samymo'i",
"Signing In...": ".i ca'o co'a jaspu",
"If you've joined lots of rooms, this might take a while": ".i gi na ja do pagbu so'i se zilbe'i gi la'a ze'u gunka",
"Set a display name:": ".i ko cuxna fo le ka cmene",
"Upload an avatar:": ".i ko cuxna fo le ka pixra sinxa",
"Incorrect password": ".i le lerpoijaspu na drani",
"Emoji": "cinmo sinxa",
"Users": "pilno",
"That matches!": ".i du",
"Download": "nu kibycpa",
"Retry": "nu za'u re'u troci",
"Success!": ".i snada",
"Room List": "liste le'i ve zilbe'i",
"Upload a file": "nu kibdu'a pa vreji",
"Verify your other session using one of the options below.": ".i ko cuxna da le di'e gai'o le ka tadji lo nu do co'a lacri",
"Ask this user to verify their session, or manually verify it below.": ".i ko cpedu le ka co'a lacri le se samtcise'u kei le pilno vau ja pilno le di'e gai'o le ka co'a lacri",
"Not Trusted": "na se lacri",
"Manually Verify by Text": "nu pilno pa lerpoi lo nu co'a lacri",
"Interactively verify by Emoji": "nu pilno vu'i pa cinmo sinxa lo nu co'a lacri",
"Done": "nu mo'u co'e",
"%(displayName)s is typing …": ".i la'o zoi. %(displayName)s .zoi ca'o ciska",
"%(names)s and %(count)s others are typing …|other": ".i la'o zoi. %(names)s .zoi je %(count)s na du ca'o ciska",
"%(names)s and %(count)s others are typing …|one": ".i la'o zoi. %(names)s .zoi je pa na du ca'o ciska",
"%(names)s and %(lastPerson)s are typing …": ".i la'o zoi. %(names)s .zoi je la'o zoi. %(lastPerson)s .zoi ca'o ciska",
"Cannot reach homeserver": ".i ca ku na da ka'e zilbe'i le samtcise'u",
"Match system theme": "nu mapti le jvinu be le vanbi",
"Never send encrypted messages to unverified sessions in this room from this session": "nu na pa mifra be pa notci cu zilbe'i pa se samtcise'u poi na se lanli ku'o le se samtcise'u le gai'o",
"Order rooms by name": "nu porsi tu'a lo cmene",
"Messages containing my username": "nu pa se pagbu be le judri be mi cu zilbe'i",
"Messages containing @room": "nu pa se pagbu be zoi zoi. @room .zoi cu zilbe'i",
"Encrypted messages in one-to-one chats": "nu pa mifra cu zilbe'i pa prenu",
"Encrypted messages in group chats": "nu pa mifra cu zilbe'i lu'o pa prenu",
"Active call": ".i ca'o fonjo'e",
"Incoming voice call": ".i da co'a snavi fonjo'e do",
"Incoming video call": ".i da co'a vidvi fonjo'e do",
"Incoming call": ".i da co'a fonjo'e do",
"The other party cancelled the verification.": ".i le na du be do co'u troci le ka co'a lacri",
"Verified!": ".i mo'u co'a lacri",
"You've successfully verified this user.": ".i mo'u co'a lacri le pilno",
"Got It": "je'e",
"Start": "nu co'a co'e",
"Waiting for your other session, %(deviceName)s (%(deviceId)s), to verify…": ".i ca'o denpa lo nu le se samtcise'u poi na du vau je du la'o zoi. %(deviceName)s .zoi poi se judri zoi zoi. %(deviceId)s .zoi mo'u co'a lacri",
"Waiting for your other session to verify…": ".i ca'o denpa lo nu le se samtcise'u poi na du mo'u co'a lacri",
"Waiting for %(displayName)s to verify…": ".i ca'o denpa lo nu la'o zoi. %(displayName)s .zoi mo'u co'a lacri",
"Cancelling…": ".i ca'o co'u co'e",
"To be secure, do this in person or use a trusted way to communicate.": ".i lo nu marji penmi vau ja pilno pa se lacri lo nu tavla cu sarcu lo nu snura",
"Matrix ID": "judri fi la .meitriks.",
"Matrix Room ID": "judri pa ve zilbe'i la .meitriks.",
"email address": "samymri judri",
"User %(userId)s is already in the room": ".i la'o zoi. %(userId)s .zoi xa'o pagbu le se zilbe'i",
"User %(user_id)s does not exist": ".i zoi zoi. %(user_id)s .zoi na judri pa pilno",
"User %(user_id)s may or may not exist": ".i la'a cu'i zoi zoi. %(user_id)s .zoi na judri pa pilno",
"Help us improve %(brand)s": ".i ko sidju fi le ka xagzengau la'o zoi. %(brand)s .zoi",
"I want to help": ".i mi kaidji le ka sidju",
"No": ".i na co'e",
"Close": "nu zilmipri",
"Ok": "je'e",
"Verify this session": "nu co'a lacri le se samtcise'u",
"Verify": "nu co'a lacri",
"What's New": "notci le du'u cnino",
"A new version of %(brand)s is available!": ".i da favytcinymupli pa cnino la'o zoi. %(brand)s .zoi",
"You joined the call": ".i do mo'u co'a fonjo'e",
"%(senderName)s joined the call": ".i la'o zoi. %(senderName)s .zoi mo'u co'a fonjo'e",
"Call in progress": ".i ca'o fonjo'e",
"You left the call": ".i do co'u fonjo'e",
"%(senderName)s left the call": ".i la'o zoi. %(senderName)s .zoi co'u fonjo'e",
"Call ended": ".i co'u fonjo'e",
"You started a call": ".i do co'a fonjo'e",
"%(senderName)s started a call": ".i la'o zoi. %(senderName)s .zoi co'a fonjo'e",
"Waiting for answer": ".i ca'o denpa lo nu spuda",
"%(senderName)s is calling": ".i la'o zoi. %(senderName)s .zoi co'a fonjo'e",
"You created the room": ".i do cupra le ve zilbe'i",
"%(senderName)s created the room": ".i la'o zoi. %(senderName)s .zoi cupra le ve zilbe'i",
"You made the chat encrypted": ".i gau do ro ba zilbe'i be fo le gai'o cu mifra",
"%(senderName)s made the chat encrypted": ".i gau la'o zoi. %(senderName)s .zoi ro ba zilbe'i be fo le gai'o cu mifra",
"You were invited": ".i da friti le ka ziljmina kei do",
"%(targetName)s was invited": ".i da friti le ka ziljmina kei la'o zoi. %(targetName)s .zoi",
"You left": ".i do zilvi'u",
"%(targetName)s left": ".i la'o zoi. %(targetName)s .zoi zilvi'u",
"You were kicked (%(reason)s)": ".i gau da do zilvi'u fi'o krinu lerpoi zoi zoi. %(reason)s .zoi",
"%(targetName)s was kicked (%(reason)s)": ".i gau da la'o zoi. %(targetName)s .zoi zilvi'u fi'o krinu lerpoi zoi zoi. %(reason)s .zoi",
"You were kicked": ".i gau da do zilvi'u",
"%(targetName)s was kicked": ".i gau da la'o zoi. %(targetName)s .zoi zilvi'u",
"You rejected the invite": ".i do zukte le ka na ckaji le se friti",
"%(targetName)s rejected the invite": ".i la'o zoi. %(targetName)s .zoi zukte le ka na ckaji le se friti",
"You were uninvited": ".i da co'u friti le ka ziljmina kei do",
"%(targetName)s was uninvited": ".i da co'u friti le ka ziljmina kei la'o zoi. %(targetName)s .zoi",
"You changed your name": ".i gau do da basti de le ka cmene do",
"%(targetName)s changed their name": ".i gau da zoi zoi. %(targetName)s .zoi basti de le ka cmene da",
"You changed your avatar": ".i gau do da basti de le ka pixra sinxa do",
"%(targetName)s changed their avatar": ".i gau la'o zoi. %(targetName)s .zoi da basti de le ka pixra sinxa ri",
"%(senderName)s %(emote)s": ".i la'o zoi. %(senderName)s .zoi ckaji le smuni be zoi zoi. %(emote)s .zoi",
"%(senderName)s: %(message)s": "%(senderName)s: %(message)s",
"You changed the room name": ".i gau do da basti de le ka cmene le ve zilbe'i",
"%(senderName)s changed the room name": ".i gau la'o zoi. %(senderName)s .zoi da basti de le ka cmene le ve zilbe'i",
"%(senderName)s: %(reaction)s": "%(senderName)s: %(reaction)s",
"%(senderName)s: %(stickerName)s": "%(senderName)s: %(stickerName)s",
"You uninvited %(targetName)s": ".i do co'u friti le ka ziljmina kei la'o zoi. %(targetName)s .zoi",
"%(senderName)s uninvited %(targetName)s": ".i la'o zoi. %(senderName)s .zoi co'u friti le ka ziljmina kei la'o zoi. %(targetName)s .zoi",
"You invited %(targetName)s": ".i do friti le ka ziljmina kei la'o zoi. %(targetName)s .zoi",
"%(senderName)s invited %(targetName)s": ".i la'o zoi. %(senderName)s .zoi friti le ka ziljmina kei la'o zoi. %(targetName)s .zoi",
"You changed the room topic": ".i gau do da basti de le ka skicu be le ve zilbe'i be'o lerpoi",
"%(senderName)s changed the room topic": ".i gau la'o zoi. %(senderName)s .zoi da basti de le ka skicu be le ve zilbe'i be'o lerpoi",
"Use a system font": "nu da pe le vanbi cu ci'artai",
"System font name": "cmene le ci'artai pe le vanbi",
"Never send encrypted messages to unverified sessions from this session": "nu na pa mifra be pa notci cu zilbe'i pa se samtcise'u poi na se lanli ku'o le se samtcise'u",
"Sign In": "nu co'a jaspu",
"Later": "nu ca na co'e",
"Other users may not trust it": ".i la'a na pa na du be do cu lacri",
"Change": "nu basti",
"Change room avatar": "nu basti fi le ka pixra sinxa le ve zilbe'i",
"Change room name": "nu basti fi le ka cmene le ve zilbe'i",
"Change main address for the room": "nu basti fi le ka ralju lu'i ro judri be le ve zilbe'i",
"Change topic": "nu basti fi le ka skicu lerpoi",
"Sign Up": "nu co'a na'o jaspu",
"<userName/> wants to chat": ".i la'o zoi. <userName/> .zoi kaidji le ka tavla do",
"<userName/> invited you": ".i la'o zoi. <userName/> .zoi friti le ka ziljmina kei do",
"Username": "judri cmene",
"Enter username": ".i ko cuxna fo le ka judri cmene",
"Were excited to announce Riot is now Element": ".i fizbu lo nu zo .elyment. basti zo .raiyt. le ka cmene",
"Riot is now Element!": ".i zo .elyment. basti zo .raiyt. le ka cmene",
"Learn More": "nu facki",
"Were excited to announce Riot is now Element!": ".i fizbu lo nu gubni xusra le du'u zo .elyment. basti zo .raiyt. le ka cmene",
"Messages in this room are secured with end-to-end encryption. Only you and the recipient(s) have the keys to read these messages.": ".i ro zilbe'i be fo le gai'o cu mifra .i le ka ka'e tcidu lo notci cu steci fi lu'i do je ro pagbu be le se zilbe'i",
"Messages in this room are end-to-end encrypted.": ".i ro zilbe'i be fo le gai'o cu mifra",
"Messages in this room are not end-to-end encrypted.": ".i na pa zilbe'i be fo le gai'o cu mifra",
"Members": "pagbu le se zilbe'i",
"Files": "vreji",
"Trusted": "se lacri",
"Not trusted": "na se lacri",
"%(count)s verified sessions|other": ".i lacri %(count)s se samtcise'u",
"%(count)s verified sessions|one": ".i lacri pa se samtcise'u",
"Hide verified sessions": "nu ro se samtcise'u poi se lacri cu zilmipri",
"%(count)s sessions|other": ".i samtcise'u %(count)s da",
"%(count)s sessions|one": ".i samtcise'u %(count)s da",
"Hide sessions": "nu ro se samtcise'u cu zilmipri",
"Invite": "nu friti le ka ziljmina",
"Logout": "nu co'u jaspu",
"For help with using %(brand)s, click <a>here</a> or start a chat with our bot using the button below.": ".i gi je lo nu samcu'a <a>le dei gai'o</a> gi lo nu co'a tavla le sampre cu tadji lo nu facki le du'u tadji lo nu pilno la'o zoi. %(brand)s .zoi",
"This room is end-to-end encrypted": ".i ro zilbe'i be fo le gai'o cu mifra",
"Everyone in this room is verified": ".i do lacri ro pagbu be le se zilbe'i",
"Start chat": "nu co'a tavla",
"Create room": "nu cupra pa ve zilbe'i",
"The file '%(fileName)s' failed to upload.": ".i da nabmi fi lo nu kibdu'a la'o zoi. %(fileName)s .zoi",
"Invite users": "nu friti le ka ziljmina kei pa pilno",
"Invite to this room": "nu friti le ka ziljmina le se zilbe'i",
"Voice call": "nu snavi fonjo'e",
"Video call": "nu vidvi fonjo'e",
"Upload file": "nu kibdu'a pa vreji",
"Rejecting invite …": ".i ca'o zukte le ka na ckaji le se friti",
"Leave Room": "nu co'u pagbu le se zilbe'i",
"Revoke invite": "nu zukte le ka na ckaji le se friti",
"Invalid community ID": ".i na drani le ka judri pa girzu",
"'%(groupId)s' is not a valid community ID": ".i zoi zoi. %(groupId)s .zoi na drani le ka judri pa girzu",
"Showing flair for these communities:": ".i sinxa jarco le ka pagbu le di'e girzu",
"This room is not showing flair for any communities": ".i na da poi girzu zo'u le ve zilbe'i cu sinxa jarco le ka pagbu da",
"New community ID (e.g. +foo:%(localDomain)s)": "judri le girzu to zoi zoi. +foo:%(localDomain)s .zoi mupli toi",
"Remove from community": "nu zilvi'u le girzu",
"Disinvite this user from community?": ".i xu do djica lo nu co'u friti le ka ziljmina le girzu",
"Remove this user from community?": ".i xu do djica lo nu le pilno co'u pagbu le girzu",
"Failed to remove user from community": ".i da nabmi fi lo nu le pilno co'u pagbu le girzu",
"Invite to this community": "nu friti le ka ziljmina le girzu",
"Failed to remove room from community": ".i da nabmi fi lo nu le ve zilbe'i co'u pagbu le girzu",
"Add rooms to this community": "nu pa ve zilbe'i cu ziljmina le girzu",
"Filter community rooms": "nu sisku fi lu'i ro ve zilbe'i poi pagbu le girzu",
"Something went wrong when trying to get your communities.": ".i da nabmi fi lo nu facki le du'u do pagbu lo girzu",
"You're not currently a member of any communities.": ".i do ca na pagbu pa girzu",
"collapse": "nu tcila be na ku viska",
"expand": "nu tcila viska",
"Create Community": "nu cupra pa girzu",
"Community Name": "cmene le girzu",
"Community ID": "judri le girzu",
"Create a public room": "nu cupra pa ve zilbe'i poi gubni",
"Create a private room": "nu cupra pa ve zilbe'i poi na gubni",
"Create Room": "nu cupra pa ve zilbe'i",
"Sign out": "nu co'u jaspu",
"Are you sure you want to sign out?": ".i xu do birti le du'u do kaidji le ka co'u se jaspu",
"Sign out and remove encryption keys?": ".i xu do djica lo nu co'u jaspu do je lo nu tolmo'i le du'u mifra ckiku",
"Upload %(count)s other files|one": "nu kibdu'a %(count)s vreji poi na du",
"View Community": "nu viska le girzu",
"Hide": "nu zilmipri",
"Leave Community": "nu do zilvi'u le girzu",
"Unable to leave community": ".i da nabmi fi lo nu do zilvi'u le girzu",
"Join this community": "nu do ziljmina le girzu",
"Leave this community": "nu do zilvi'u le girzu",
"Your community hasn't got a Long Description, a HTML page to show to community members.<br />Click here to open settings and give it one!": ".i na da tcila skicu be le girzu bei ro girzu pagbu be'o lerpoi bau la'au xy. bu ty. my. ly. li'u<br />.i lo nu samcu'a le dei gai'o cu tadji lo nu da go'i",
"Long Description (HTML)": "tcila skicu lerpoi bau la'au xy. bu ty. my. ly. li'u",
"Community %(groupId)s not found": ".i na da poi girzu zo'u facki le du'u zoi zoi. %(groupId)s .zoi judri da",
"This homeserver does not support communities": ".i le samtcise'u na kakne tu'a lo girzu",
"Are you sure you want to leave the room '%(roomName)s'?": ".i xu do birti le du'u do kaidji le ka co'u pagbu le se zilbe'i be fo la'o zoi. %(roomName)s .zoi",
"Failed to leave room": ".i da nabmi fi lo nu do co'u pagbu le se zilbe'i",
"For security, this session has been signed out. Please sign in again.": ".i ki'u lo nu snura co'u jaspu le se samtcise'u .i ko za'u re'u co'a se jaspu",
"Your Communities": "girzu vau je se pagbu do",
"Error whilst fetching joined communities": ".i da nabmi fi lo nu kibycpa ro girzu poi se pagbu do",
"Communities": "girzu",
"Create a new community": "nu cupra pa girzu",
"React": "nu cinmo spuda",
"Reply": "nu spuda",
"<a>In reply to</a> <pill>": ".i nu <a>spuda</a> tu'a la'o zoi. <pill> .zoi",
"%(senderName)s made history visible to anyone": ".i gau la'o zoi. %(senderName)s .zoi ro da ka'e tcidu ro pu zilbe'i",
"You joined": ".i do ziljmina",
"%(targetName)s joined": ".i la'o zoi. %(targetName)s .zoi ziljmina",
"Show less": "nu viska so'u da",
"Save": "nu co'a vreji",
"Unable to share email address": ".i da nabmi fi lo nu jungau le du'u samymri judri",
"Share": "nu jungau",
"Unable to share phone number": ".i da nabmi fi lo nu jungau le du'u fonjudri",
"Edit message": "nu basti fi le ka notci",
"Share room": "nu jungau fi le du'u ve zilbe'i",
"Share Link to User": "nu jungau pa pilno le du'u judri",
"Edit": "nu basti",
"Share Room": "nu jungau fi le du'u ve zilbe'i",
"Share User": "nu jungau fi le du'u pilno",
"Share Community": "nu jungau fi le du'u girzu",
"Share Room Message": "nu jungau fi le du'u notci",
"Resend edit": "nu le basti cu za'u re'u zilbe'i",
"Share Permalink": "nu jungau fi le du'u vitno judri",
"Share Message": "nu jungau fi le du'u notci",
"%(senderName)s made history visible to new members": ".i gau la'o zoi. %(senderName)s .zoi ro cnino be fi le ka pagbu le se zilbe'i cu ka'e tcidu ro pu zilbe'i",
"%(senderName)s made history visible to future members": ".i gau la'o zoi. %(senderName)s .zoi ro ba pagbu be le se zilbe'i cu ka'e tcidu ro pu zilbe'i",
"%(senderName)s sent an image": ".i pa pixra cu zilbe'i fi la'o zoi. %(senderName)s .zoi",
"%(senderName)s sent a video": ".i pa se vidvi cu zilbe'i fi la'o zoi. %(senderName)s .zoi",
"%(senderName)s uploaded a file": ".i pa vreji cu zilbe'i fi la'o zoi. %(senderName)s .zoi",
"Seen by %(displayName)s (%(userName)s) at %(dateTime)s": ".i la'o zoi. %(displayName)s .zoi poi se judri zoi zoi. %(userName)s .zoi zgana de'i li %(dateTime)s",
"Waiting for %(displayName)s to accept…": ".i ca'o denpa lo nu la'o zoi. %(displayName)s .zoi zanru",
"Ask %(displayName)s to scan your code:": ".i ko cpedu le ka gau ce'u kacma samymo'i le sinxa kei la'o zoi. %(displayName)s .zoi",
"Almost there! Is %(displayName)s showing the same shield?": ".uo ru'e .i xu la'o zoi. %(displayName)s .zoi jarco ta'i tu'a pa sinxa poi mapti",
"You've successfully verified %(displayName)s!": ".i do mo'u co'a lacri la'o zoi. %(displayName)s .zoi",
"%(displayName)s cancelled verification.": ".i la'o zoi. %(displayName)s .zoi co'u co'a lacri",
"Decrypt %(text)s": "nu facki le du'u mifra la'o zoi. %(text)s .zoi",
"Download %(text)s": "nu kibycpa la'o zoi. %(text)s .zoi",
"Download this file": "nu kibycpa le vreji"
}

View file

@ -279,10 +279,10 @@
"Download": "Sader",
"Retry": "Ɛreḍ tikkelt-nniḍen",
"Starting backup...": "Asenker n uḥraz...",
"Success!": "Akka d rrbeḥ !",
"Success!": "Tammug akken iwata!",
"Disable": "Sens",
"Navigation": "Tunigin",
"Calls": "isawalen",
"Calls": "Isawalen",
"Alt": "Alt",
"Shift": "Shift",
"New line": "Izirig amaynut",
@ -459,5 +459,305 @@
"Failure to create room": "Timerna n texxamt ur teddi ara",
"If you cancel now, you won't complete verifying your other session.": "Ma yella teffɣeḍ tura, ur tessawaḍeḍ ara ad tesneqdeḍ akk tiɣimiyin-inek.inem.",
"If you cancel now, you won't complete your operation.": "Ma yella teffɣeḍ tura, tamhelt-ik.im ur tettemmed ara.",
"Show these rooms to non-members on the community page and room list?": "Sken tixxamin-a i wid ur nettekka ara deg usebter n temɣiwent d tebdert n texxamt?"
"Show these rooms to non-members on the community page and room list?": "Sken tixxamin-a i wid ur nettekka ara deg usebter n temɣiwent d tebdert n texxamt?",
"The remote side failed to pick up": "Amazan ur yessaweḍ ara ad d-yerr",
"Call failed due to misconfigured server": "Ur yeddi ara usiwel ssebba n uqeddac ur nettuswel ara akken iwata",
"Please ask the administrator of your homeserver (<code>%(homeserverDomain)s</code>) to configure a TURN server in order for calls to work reliably.": "Ttxil-k·m suter deg anedbal n uqeddac-ik·im agejdan (<code>%(homeserverDomain)s</code>) ad yeswel aqeddac TURN akken isawalen ad ddun akken ilaq.",
"Alternatively, you can try to use the public server at <code>turn.matrix.org</code>, but this will not be as reliable, and it will share your IP address with that server. You can also manage this in Settings.": "Neɣ, tzemreḍ ad tεerḍed aseqdec n uqeddac azayez deg <code>turn.matrix.org</code>, maca ayagi ur yelhi ara, yezmer ad yebḍu tansa-inek·inem IP d uqeddac-a. Tzemreḍ ad tesferkeḍ daɣen ayagi deg yiɣewwaren.",
"You do not have permission to start a conference call in this room": "Ur tesεiḍ ara tisirag ad tebduḍ asireg s usiwel deg texxamt-a",
"At this time it is not possible to reply with a file. Would you like to upload this file without replying?": "Akka tura, d awezɣi ad tili tririt s ufaylu. Tebɣiḍ ad tessaliḍ afaylu-a s war tiririt?",
"The file '%(fileName)s' exceeds this homeserver's size limit for uploads": "Teɣzi n ufaylu-a '%(fileName)s' tεedda teɣzi yettusirgen sɣur aqeddac-a i usali",
"Server may be unavailable, overloaded, or you hit a bug.": "Yezmer ulac aqeddac, yeččur ugar neɣ temlaleḍ-d d wabug.",
"Are you sure you want to cancel entering passphrase?": "S tidet tebɣiḍ ad tesfesxeḍ asekcem n tefyirt tuffirt?",
"This action requires accessing the default identity server <server /> to validate an email address or phone number, but the server does not have any terms of service.": "Tigawt-a tesra anekcum ɣer uqeddac n tmagit tamezwert <server /> i usentem n tansa n yimayl neɣ uṭṭun n tiliɣri, maca aqeddac ur yesεi ula d yiwet n twali n umeẓlu.",
"Only continue if you trust the owner of the server.": "Ala ma tettekleḍ ɣef bab n uqeddac ara tkemmleḍ.",
"Use your account to sign in to the latest version": "Seqdec amiḍan-ik·im akken ad tkecmeḍ ɣer lqem aneggaru",
"Riot is now Element!": "Tura, Riot d aferdis!",
"Learn More": "Issin ugar",
"Restricted": "Yesεa tilas",
"Set up": "Sbadu",
"Pencil": "Akeryun",
"Compact": "Akussem",
"Modern": "Atrar",
"Online": "Srid",
"Mention": "Abder",
"Verify session": "Asenqed n tɣimit",
"Message edits": "Tiẓrigin n yizen",
"Your account is not secure": "Amiḍan-ik·im d araɣelsan",
"Your password": "Awal-ik·im uffir",
"New session": "Tiɣimit tamaynut",
"This wasn't me": "Wagi/tagi mačči d nekk",
"Security Key": "Tasarut n tɣellist",
"Resend": "Ɛawed azen",
"Premium": "Premium",
"Everyone": "Yal yiwen",
"New Recovery Method": "Tarrayt tamaynut n ujebber",
"Go to Settings": "Ddu ɣer yiɣewwaren",
"Set up Secure Messages": "Sbadu iznan iɣelsanen",
"Not currently indexing messages for any room.": "Ulac asmiter amiran n yiznan i yal taxxamt.",
"Currently indexing: %(currentRoom)s": "Asmiter amiran: %(currentRoom)s",
"Space used:": "Tallunt yettwasqedcen:",
"Indexed messages:": "Iznan s umatar:",
"Indexed rooms:": "Tixxamin s umatar:",
"%(doneRooms)s out of %(totalRooms)s": "%(doneRooms)s beṛṛa n %(totalRooms)s",
"Room List": "Tabdert n texxamt",
"Autocomplete": "Asmad awurman",
"Alt Gr": "Alt Gr",
"Super": "Ayuz",
"Ctrl": "Ctrl",
"Were excited to announce Riot is now Element": "S tumert meqqren ara d-nselɣu belli Riot tura d aferdis",
"Operation failed": "Tamhelt ur teddi ara",
"Failed to invite users to the room:": "Yegguma ad yeddu usnubget n yiseqdacen ɣer texxamt:",
"Failed to invite the following users to the %(roomName)s room:": "Asnubget n yiseqdacen i d-iteddun ɣer taxxamt %(roomName)s ur yeddi ara:",
"Unable to create widget.": "Timerna n uwiǧit ulamek.",
"Missing roomId.": "Ixuṣ usulay n texxamt.",
"Prepends ¯\\_(ツ)_/¯ to a plain-text message": "Yerna ¯\\_(ツ)_/¯ ɣer yizen n uḍris arewway",
"Searches DuckDuckGo for results": "Yettnadi DuckDuckGo ɣef yigmaḍ",
"To use it, just wait for autocomplete results to load and tab through them.": "I useqdec-ines, ṛǧu kan i yigmaḍ iwurmanen iččuranen i usali syen nadi deg-sen.",
"Changes the avatar of the current room": "Ibeddel avatar n texxamt tamirant",
"Gets or sets the room topic": "Yufa-d neɣ yesbadu asentel n texxamt",
"Failed to set topic": "Asbadu n usentel ur yeddi ara",
"This room has no topic.": "Taxxamt-a ulac ɣur-s asentel.",
"Sets the room name": "Yesbadu isem n texxamt",
"Invites user with given id to current room": "Inced iseqdacen s tikci n usulay i texxamt tamirant",
"Use an identity server to invite by email. Manage in Settings.": "Seqdec aqeddac n timagit i uncad s yimayl. Asefrek deg yiɣewwaren.",
"Unrecognised room address:": "Tansa n texxamt ur tettwassen ara:",
"Bans user with given id": "Agi aseqdac s usulay i d-yettunefken",
"Unbans user with given ID": "Kkes aseqdac s usulay i d-yettunefkan",
"Stops ignoring a user, showing their messages going forward": "Ḥbes tiǧǧtin n useqdac, sken iznan-ines sya d afella",
"Define the power level of a user": "Sbadu aswir iǧehden n useqdac",
"Please supply a https:// or http:// widget URL": "Ttxil-k·m mudd URL n uwigit https:// neɣ http://",
"You cannot modify widgets in this room.": "Ur tezmireḍ ara ad tbeddleḍ iwiǧiten n texxamt-a.",
"Unknown (user, session) pair:": "Tayuga tarussint (aseqdac, tiɣimit):",
"Session already verified!": "Tiɣimit tettwasenqed yakan!",
"Verified key": "Tasarut tettwasenqed",
"Displays information about a user": "Yeskan talɣut ɣef useqdac",
"Send a bug report with logs": "Azen aneqqis n wabug s yiɣƔisen",
"Logs sent": "Iɣmisen ttewaznen",
"Opens chat with the given user": "Yeldi adiwenni d useqdac i d-yettunefken",
"Sends a message to the given user": "Yuzen iznan i useqdac i d-yettunefken",
"Displays action": "Yeskan tigawt",
"%(targetName)s accepted an invitation.": "%(targetName)s yeqbel tinnubga.",
"%(senderName)s invited %(targetName)s.": "%(senderName)s inced-d %(targetName)s.",
"%(senderName)s banned %(targetName)s.": "%(senderName)s yugi %(targetName)s.",
"%(senderName)s removed their display name (%(oldDisplayName)s).": "%(senderName)s kksen isem ara d-ibanen (%(oldDisplayName)s).",
"%(senderName)s removed their profile picture.": "%(senderName)s yekkes tawlaft n umaqnu-ines.",
"%(senderName)s changed their profile picture.": "%(senderName)s ibeddel tawlaft n umaɣnu-ines.",
"%(senderName)s set a profile picture.": "%(senderName)s yesbadu tawlaft n umaɣnu.",
"%(senderName)s made no change.": "%(senderName)s ur yegi ara ula d yiwen n ubeddel.",
"VoIP conference started.": "Asarag VoIP yebda.",
"%(targetName)s joined the room.": "%(targetName)s yerna-d ɣer texxamt.",
"VoIP conference finished.": "Asarag VoIP yekfa.",
"%(targetName)s rejected the invitation.": "%(targetName)s yeugi tinnubga.",
"%(targetName)s left the room.": "%(targetName)s yeǧǧa texxamt.",
"%(senderName)s unbanned %(targetName)s.": "%(senderName)s yeqbel %(targetName)s.",
"%(senderName)s withdrew %(targetName)s's invitation.": "%(senderName)s yekkes-d tinnubga n %(targetName)s.",
"%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s ibeddel asentel ɣer \"%(topic)s\".",
"%(senderDisplayName)s removed the room name.": "%(senderDisplayName)s yekkes isem n texxamt.",
"%(senderDisplayName)s upgraded this room.": "%(senderDisplayName)s ileqqem taxxamt-a.",
"%(senderDisplayName)s made the room invite only.": "%(senderDisplayName)s yerra taxxamt s tinnubga kan.",
"%(senderDisplayName)s has allowed guests to join the room.": "%(senderDisplayName)s yefka tisirag i uttekki deg texxamt.",
"%(senderDisplayName)s sent an image.": "%(senderDisplayName)s yuzen-d tugna.",
"%(senderName)s removed the main address for this room.": "%(senderName)s yekkes tansa tagejdant n texxamt-a.",
"%(senderName)s added the alternative addresses %(addresses)s for this room.|other": "%(senderName)s yerna tansiwin-nniḍen %(addresses)s ɣer texxamt-a.",
"(unknown failure: %(reason)s)": "(abrir tarussint: %(reason)s)",
"%(senderName)s ended the call.": "%(senderName)s yekfa asiwel.",
"%(widgetName)s widget added by %(senderName)s": "%(widgetName)s awiǧit yettwarna sɣur %(senderName)s",
"%(widgetName)s widget removed by %(senderName)s": "%(widgetName)s awiǧit yettwakkes sɣur %(senderName)s",
"Not Trusted": "Ur yettwattkal ara",
"%(displayName)s is typing …": "%(displayName)s yettaru-d …",
"%(names)s and %(count)s others are typing …|other": "%(names)s d %(count)s wiyaḍ ttarun-d …",
"%(names)s and %(count)s others are typing …|one": "%(names)s d wayeḍ-nniḍen yettaru-d …",
"%(names)s and %(lastPerson)s are typing …": "%(names)s d %(count)s ttarun-d …",
"%(items)s and %(count)s others|other": "%(names)s d %(count)s wiyaḍ",
"%(items)s and %(count)s others|one": "%(names)s d wayeḍ-nniḍen",
"%(items)s and %(lastItem)s": "%(items)s d %(lastItem)s",
"a few seconds ago": "kra n tesinin seg yimir-nni",
"about a minute ago": "tasdidt seg yimir-nni",
"%(num)s minutes ago": "%(num)s tesdat seg yimir-nni",
"about an hour ago": "azal n usrag seg yimir-nni",
"Set Password": "Sbadu awal uffir",
"Set up encryption": "Swel awgelhen",
"Encryption upgrade available": "Yella uleqqem n uwgelhen",
"Verify this session": "Asenqed n tɣimit",
"Other users may not trust it": "Iseqdacen-nniḍen yezmer ur tettamnen ara",
"You joined the call": "Terniḍ ɣer usiwel",
"%(senderName)s joined the call": "%(senderName)s yerna ɣer usiwel",
"Call in progress": "Asiwel la iteddu",
"You left the call": "Teǧǧiḍ asiwel",
"%(senderName)s left the call": "%(senderName)s yeǧǧa asiwel",
"Call ended": "Asiwel yekfa",
"You started a call": "Tebdiḍ asiwel",
"%(senderName)s started a call": "%(senderName)s yebda asiwel",
"Waiting for answer": "Yettṛaǧu tiririt",
"%(senderName)s is calling": "%(senderName)s yessawal",
"You created the room": "Terniḍ taxxamt",
"%(senderName)s created the room": "%(senderName)s yerna taxxamt",
"You made the chat encrypted": "Terriḍ adiwenni yettuwgelhen",
"%(senderName)s made the chat encrypted": "%(senderName)s yerra adiwenni yettuwgelhen",
"You made history visible to new members": "Terriḍ amazray yettban i yimttekkiyen imaynuten",
"%(senderName)s made history visible to new members": "%(senderName)s yerra amazray yettban i yimttekkiyen imaynuten",
"You made history visible to anyone": "Terriḍ amazray yettban i yal amdan",
"%(senderName)s made history visible to anyone": "%(senderName)s yerra amazray yettban i yal amdan",
"You made history visible to future members": "Terriḍ amazray yettban i yimttekkiyen ara d-yernun",
"%(senderName)s made history visible to future members": "%(senderName)s yerra amazray yettban i yimttekkiyen ara d-yernun",
"You were invited": "Tettusnubegteḍ",
"%(targetName)s was invited": "%(senderName)s yettusnubget",
"You left": "Truḥeḍ",
"%(targetName)s left": "%(targetName)s iṛuḥ",
"You rejected the invite": "Tugiḍ tinnubga",
"%(targetName)s rejected the invite": "%(targetName)s yugi tinnubga",
"You were uninvited": "Ur tettusnubegteḍ ara",
"%(targetName)s was uninvited": "%(senderName)s ur yettusnubget ara",
"You joined": "Terniḍ",
"%(targetName)s joined": "%(targetName)s yerna",
"You changed your name": "Tbeddleḍ isem-ik·im",
"%(targetName)s changed their name": "%(targetName)s ibeddel isem-is",
"You changed your avatar": "Tbeddleḍ avatar-inek·inem",
"%(targetName)s changed their avatar": "%(targetName)s ibeddel avatar-ines",
"%(senderName)s %(emote)s": "%(senderName)s %(emote)s",
"%(senderName)s: %(message)s": "%(senderName)s: %(message)s",
"You changed the room name": "Tbeddleḍ isem n texxamt",
"%(senderName)s changed the room name": "%(senderName)s kksen isem n texxamt",
"%(senderName)s: %(reaction)s": "%(senderName)s: %(reaction)s",
"%(senderName)s: %(stickerName)s": "%(senderName)s: %(stickerName)s",
"You uninvited %(targetName)s": "Ur tettusnubegteḍ ara sɣur %(targetName)s",
"%(senderName)s uninvited %(targetName)s": "%(senderName)s ur yettusnubget ara sɣur %(targetName)s",
"You invited %(targetName)s": "Tettusnubegteḍ sɣur %(targetName)s",
"%(senderName)s invited %(targetName)s": "%(senderName)s yettusnubget %(targetName)s",
"You changed the room topic": "Tbeddleḍ asentel n texxamt",
"%(senderName)s changed the room topic": "%(senderName)s ibeddel asentel n texxamt",
"Message Pinning": "Arezzi n yizen",
"Group & filter rooms by custom tags (refresh to apply changes)": "Sdukkel tixxamin, tsizedgeḍ-tent s tebzimin tudmawanin (smiren akken ad alin yisnifal)",
"Order rooms by name": "Semyizwer tixxamin s yisem",
"Show rooms with unread notifications first": "Sken tixxamin yesεan ilɣa ur nettwaɣra ara d timezwura",
"Collecting logs": "Alqaḍ n yiɣmisen",
"Uploading report": "Asali n uneqqis",
"Waiting for response from server": "Aṛaǧu n tririt sɣur aqeddac",
"Messages containing my display name": "Iznan ideg yella yisem-iw yettwaskanen",
"Messages containing my username": "Iznan ideg yella yisem-iw n useqdac",
"Messages containing @room": "Iznan ideg yella @taxxamt",
"Delete sessions|other": "Kkes tiɣimiyin",
"Delete sessions|one": "Kkes tiɣimit",
"Delete %(count)s sessions|other": "Kkes tiɣimiyin n %(count)s",
"Delete %(count)s sessions|one": "Kkes tiɣimit n %(count)s",
"Public Name": "Isem azayez",
"Last seen": "Timeẓri taneggarut",
"Failed to set display name": "Asbadu n yisem yettwaskanen ur yeddi ara",
" to store messages from ": " i usekles n yiznan sɣur ",
"rooms.": "tixxamin.",
"Connecting to integration manager...": "Tuqqna ɣer umsefrak n useddu...",
"Cannot connect to integration manager": "Ur nessaweḍ ara ad neqqen ɣer umsefrak n useddu...",
"Delete Backup": "Kkes aḥraz",
"Encrypted messages are secured with end-to-end encryption. Only you and the recipient(s) have the keys to read these messages.": "Iznan yettwawgelhen ttuḥerzen s uwgelhen n yixef ɣer yixef. Ala kečč d unermas (inermasen) i yesεan tisura akken ad ɣren iznan-a.",
"This session is backing up your keys. ": "Tiɣimit tḥerrez tisura-inek·inem. ",
"Connect this session to Key Backup": "Qqen tiɣimit-a ɣer uḥraz n tsarut",
"Server Name": "Isem n uqeddac",
"Enter password": "Sekcem awal n uffir",
"Nice, strong password!": "Igerrez, d awal uffir iǧhed aṭas!",
"Password is allowed, but unsafe": "Awal uffir yettusireg, maca d araɣelsan",
"Keep going...": "Kemmel ddu...",
"The email field must not be blank.": "Urti n yimayl ur ilaq ara ad yili d ilem.",
"The username field must not be blank.": "Urti n yisem n useqdac ur ilaq ara ad yili d ilem.",
"The phone number field must not be blank.": "Urti n wuṭṭun n tiliɣri ur ilaq ara ad yili d ilem.",
"The password field must not be blank.": "Urti n wawal uffir ilaq ara ad yili d ilem.",
"Not sure of your password? <a>Set a new one</a>": "Tcukkteḍ deg wawal-ik·im uffir? <a>Sbadu yiwen-nniḍen d amaynut</a>",
"Sign in with": "Kcem s",
"Use an email address to recover your account": "Seqdec tansa n yimayl akken ad t-terreḍ amiḍan-ik:im",
"Enter email address (required on this homeserver)": "Sekcem tansa n yimayl (yettusra deg uqeddac-a agejdan)",
"Doesn't look like a valid email address": "Ur tettban ara d tansa n yimayl tameɣtut",
"Other users can invite you to rooms using your contact details": "Iseqdacen wiyaḍ zemren ad ak·akem-snubegten ɣer texxamin s useqdec n tlqayt n unermas",
"Enter phone number (required on this homeserver)": "Sekcem uṭṭun n tiliɣri (yettusra deg uqeddac-a agejdan)",
"Doesn't look like a valid phone number": "Ur tettban ara d uṭṭun n tiliɣri ameɣtu",
"Enter username": "Sekcem isem n useqdac",
"Phone (optional)": "Tiliɣri (d afrayan)",
"Create your Matrix account on %(serverName)s": "Rnu amiḍan-ik·im Matrix deg %(serverName)s",
"Create your Matrix account on <underlinedServerName />": "Rnu amiḍan-ik·im Matrix deg <underlinedServerName />",
"Enter your custom homeserver URL <a>What does this mean?</a>": "Sekcem URL n uqeddac agejdan udmawan <a>D acu-t unamek n waya?</a>",
"Homeserver URL": "URL n uqeddac agejdan",
"Enter your custom identity server URL <a>What does this mean?</a>": "Sekcem URL n uqeddac n timagit udmawan <a>D acu-t unamek n waya?</a>",
"Forgotten your password?": "Tettuḍ awal-ik·im uffir?",
"Sign in and regain access to your account.": "Qqen syen εreḍ anekcum ɣer umiḍan-inek·inem tikkelt-nniḍen.",
"You cannot sign in to your account. Please contact your homeserver admin for more information.": "Ur tessawḍeḍ ara ad teqqneḍ ɣer umiḍan-inek:inem. Ttxil-k·m nermes anedbal n uqeddac-ik·im agejdan i wugar n talɣut.",
"You're signed out": "Teffɣeḍ-d seg tuqqna",
"Clear personal data": "Sfeḍ isefka udmawanen",
"Community Autocomplete": "Asmad awurman n temɣiwent",
"Results from DuckDuckGo": "Igmaḍ seg DuckDuchGo",
"DuckDuckGo Results": "Igmaḍ n DuckDuckGo",
"Notify the whole room": "Selɣu akk taxxamt",
"Room Notification": "Ilɣa n texxamt",
"Notification Autocomplete": "Asmad awurman n yilɣa",
"Room Autocomplete": "Asmad awurman n texxamt",
"User Autocomplete": "Asmad awurman n useqdac",
"Passphrases must match": "Tifyar tuffirin ilaq ad mṣadant",
"Passphrase must not be empty": "Tafyirt tuffirt ur ilaq ara ad ilint d tilmawin",
"Export room keys": "Sifeḍ tisura n texxamt",
"Confirm passphrase": "Sentem tafyirt tuffirt",
"Import room keys": "Kter tisura n texxamt",
"File to import": "Afaylu i uktar",
"Confirm encryption setup": "Sentem asebded n uwgelhen",
"Click the button below to confirm setting up encryption.": "Sit ɣef tqeffalt ddaw akken ad tesnetmeḍ asebded n uwgelhen.",
"Generate a Security Key": "Sirew tasarut n tɣellist",
"Enter a Security Phrase": "Sekcem tafyirt tuffirt",
"Enter your account password to confirm the upgrade:": "Sekcem awal uffir n umiḍan-ik·im akken ad tesnetmeḍ aleqqem:",
"Great! This recovery passphrase looks strong enough.": "Ayuz! Tafyirt-agi tuffirt n ujebber tettban teǧhed nezzeh.",
"That matches!": "Yemṣada!",
"Use a different passphrase?": "Seqdec tafyirt tuffirt yemgaraden?",
"That doesn't match.": "Ur yemṣada ara.",
"Go back to set it again.": "Uɣal ɣer deffir akken ad t-tesbaduḍ i tikkelt-nniḍen.",
"Enter your recovery passphrase a second time to confirm it.": "Sekcem tafyirt-ik·im tuffirt n ujebber i tikkelt-nniḍen akken ad tt-tesnetmeḍ.",
"Confirm your recovery passphrase": "Sentem tafyirt-ik·im tuffirt n ujebber",
"Set up Secure backup": "Sebded aḥraz aɣelsan",
"Upgrade your encryption": "Leqqem awgelhen-inek·inem",
"Set a Security Phrase": "Sbadu tafyirt taɣelsant",
"Confirm Security Phrase": "Sentem tafyirt tuffirt",
"Don't ask again": "Ur d-sutur ara tikelt-nniḍen",
"Recovery Method Removed": "Tarrayt n ujebber tettwakkes",
"Failed to set direct chat tag": "Asbadu n tebzimt n udiwenni usrid ur yeddi ara",
"Failed to remove tag %(tagName)s from room": "Tukksa n tebzimt %(tagName)s seg texxamt ur yeddi ara",
"Failed to add tag %(tagName)s to room": "Timerna n tebzimt %(tagName)s ɣer texxamt ur yeddi ara",
"%(num)s hours ago": "%(num)s usrag seg yimir-nni",
"about a day ago": "azal n wass seg yimir-nni",
"%(num)s days ago": "%(num)s wussan seg yimir-nni",
"a few seconds from now": "Kra n tesinin seg yimir-a",
"%(name)s (%(userId)s)": "%(name)s (%(userId)s)",
"Not a valid %(brand)s keyfile": "Afaylu n tsarut %(brand)s d arameɣtu",
"User %(user_id)s does not exist": "Aseqdac %(user_id)s ulac-it",
"Unknown server error": "Tuccḍa n uqeddac d tarussint",
"Avoid repeated words and characters": "Zgel i wawalen i d-yettasen d yisekkilen",
"Avoid sequences": "Zgel igzumen",
"Avoid recent years": "Zgel iseggasen ineggura",
"Avoid years that are associated with you": "Zgel iseggasen i icudden ɣur-k",
"Avoid dates and years that are associated with you": "Zgel izmaz akked iseggasen i icudden ɣur-k",
"System font name": "Isem n tsefsit n unagraw",
"Send analytics data": "Azen isefka n tesleḍt",
"Cancelling…": "Asefsex...",
"They match": "Mṣadan",
"They don't match": "Ur mṣadan ara",
"Dog": "Aqjun",
"Horse": "Aεewdiw",
"Pig": "Ilef",
"Elephant": "Ilu",
"Panda": "Apunda",
"Rooster": "Ayaziḍ",
"Fish": "Lḥut",
"Butterfly": "Aferteṭṭu",
"Flower": "Ajeǧǧig",
"Mushroom": "Agersal",
"Moon": "Ayyur",
"Cloud": "Agu",
"Fire": "Times",
"Banana": "Tabanant",
"Apple": "Tatteffaḥt",
"Strawberry": "Tazwelt",
"Corn": "Akbal",
"Cake": "Angul",
"Heart": "Ul",
"Smiley": "Acmumeḥ",
"Robot": "Aṛubut",
"Hat": "Acapun",
"Glasses": "Tisekkadin",
"Umbrella": "Tasiwant",
"Gift": "Asefk",
"Light bulb": "Taftilt"
}

View file

@ -388,7 +388,7 @@
"New passwords must match each other.": "Nauji slaptažodžiai privalo sutapti.",
"I have verified my email address": "Aš patvirtinau savo el. pašto adresą",
"Return to login screen": "Grįžti į prisijungimą",
"Send Reset Email": "Siųsti nustatymo iš naujo el. laišką",
"Send Reset Email": "Siųsti naujo slaptažodžio nustatymo el. laišką",
"Incorrect username and/or password.": "Neteisingas vartotojo vardas ir/arba slaptažodis.",
"Please note you are logging into the %(hs)s server, not matrix.org.": "Atkreipkite dėmesį, kad jūs jungiatės prie %(hs)s serverio, o ne matrix.org.",
"Failed to fetch avatar URL": "Nepavyko gauti pseudoportreto URL",
@ -840,10 +840,10 @@
"Confirm": "Patvirtinti",
"Create your Matrix account on %(serverName)s": "Sukurkite savo Matrix paskyrą %(serverName)s serveryje",
"Create your Matrix account on <underlinedServerName />": "Sukurkite savo Matrix paskyrą <underlinedServerName /> serveryje",
"Set an email for account recovery. Use email or phone to optionally be discoverable by existing contacts.": "Nustatykite el. paštą paskyros atgavimui. Naudokite el. paštą ar tel. nr. norėdami pasirinktinai būti aptinkami esamų kontaktų.",
"Set an email for account recovery. Use email to optionally be discoverable by existing contacts.": "Nustatykite el. paštą paskyros atgavimui. Naudokite el. paštą norėdami pasirinktinai būti aptinkami esamų kontaktų.",
"Set an email for account recovery. Use email or phone to optionally be discoverable by existing contacts.": "Nustatykite el. paštą paskyros susigrąžinimui. Naudokite el. paštą ar telefoną, jei norite, kad esami kontaktai galėtų jus rasti.",
"Set an email for account recovery. Use email to optionally be discoverable by existing contacts.": "Nustatykite el. paštą paskyros susigrąžinimui. Naudokite el. paštą, jei norite, kad esami kontaktai galėtų jus rasti.",
"Sign in instead": "Prisijungti",
"A verification email will be sent to your inbox to confirm setting your new password.": "Patvirtinimo laiškas bus išsiųstas į jūsų pašto dėžutę tam, kad patvirtintumėte naujo slaptažodžio nustatymą.",
"A verification email will be sent to your inbox to confirm setting your new password.": "Tam, kad patvirtinti jūsų naujo slaptažodžio nustatymą, į jūsų pašto dėžutę bus išsiųstas patvirtinimo laiškas.",
"Set a new password": "Nustatykite naują slaptažodį",
"Create account": "Sukurti paskyrą",
"Create your account": "Sukurkite savo paskyrą",
@ -1331,7 +1331,7 @@
"You have not verified this user.": "Jūs nepatvirtinote šio vartotojo.",
"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",
"Encrypted by a deleted session": "Užšifruota ištrinto seanso",
"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.",
@ -1436,7 +1436,7 @@
"%(name)s is requesting verification": "%(name)s prašo patvirtinimo",
"Sign In or Create Account": "Prisijungti arba Sukurti Paskyrą",
"Use your account or create a new one to continue.": "Norėdami tęsti naudokite savo paskyrą arba sukurkite naują.",
"Create Account": "Sukurti Paskyrą",
"Create Account": "Sukurti paskyrą",
"Custom (%(level)s)": "Pasirinktinis (%(level)s)",
"Ask this user to verify their session, or manually verify it below.": "Paprašykite šio vartotojo patvirtinti savo seansą arba patvirtinkite jį rankiniu būdu žemiau.",
"Encryption upgrade available": "Galimas šifravimo atnaujinimas",
@ -1625,5 +1625,7 @@
"Toggle right panel": "Perjungti dešinį skydelį",
"Toggle this dialog": "Perjungti šį dialogą",
"Move autocomplete selection up/down": "Perkelti automatinio užbaigimo pasirinkimą aukštyn/žemyn",
"Cancel autocomplete": "Atšaukti automatinį užbaigimą"
"Cancel autocomplete": "Atšaukti automatinį užbaigimą",
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Geriausiam veikimui suinstaliuokite <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, arba <safariLink>Safari</safariLink>.",
"Use Recovery Key or Passphrase": "Naudoti atgavimo raktą arba slaptafrazę"
}

View file

@ -16,7 +16,7 @@
"Failed to set direct chat tag": "Kunne ikke angi direkte chat-tagg",
"Today": "I dag",
"Files": "Filer",
"You are not receiving desktop notifications": "Du mottar ikke skrivebords varsler",
"You are not receiving desktop notifications": "Du mottar ikke skrivebordsvarsler",
"Friday": "Fredag",
"Notifications": "Varsler",
"Unable to fetch notification target list": "Kunne ikke hente varsel-mål liste",
@ -1401,5 +1401,11 @@
"Toggle Bold": "Veksle fet",
"Toggle Italics": "Veksle kursiv",
"Toggle Quote": "Veksle siteringsformat",
"Upload a file": "Last opp en fil"
"Upload a file": "Last opp en fil",
"Confirm the emoji below are displayed on both sessions, in the same order:": "Bekreft at emotene nedenfor vises på begge økter, i samme rekkefølge:",
"Not sure of your password? <a>Set a new one</a>": "Er du usikker på passordet ditt? <a>Velg et nytt et</a>",
"Sign in to your Matrix account on %(serverName)s": "Logg inn på Matrix-kontoen din på %(serverName)s",
"Sign in to your Matrix account on <underlinedServerName />": "Logg inn på Matrix-kontoen din på <underlinedServerName />",
"If you've joined lots of rooms, this might take a while": "Hvis du har blitt med i mange rom, kan dette ta en stund",
"Your new session is now verified. It has access to your encrypted messages, and other users will see it as trusted.": "Den nye økten din er nå verifisert. Den har tilgang til dine krypterte meldinger, og andre brukere vil se at den blir stolt på."
}

View file

@ -1846,7 +1846,7 @@
"Reactions": "Reacties",
"<reactors/><reactedWith> reacted with %(content)s</reactedWith>": "<reactors/><reactedWith> heeft gereageerd met %(content)s</reactedWith>",
"Frequently Used": "Vaak gebruikt",
"Smileys & People": "Smileys en personen",
"Smileys & People": "Emoticons en personen",
"Animals & Nature": "Dieren en natuur",
"Food & Drink": "Eten en drinken",
"Activities": "Activiteiten",
@ -2024,5 +2024,7 @@
"Dark": "Donker",
"Set password": "Stel wachtwoord in",
"To return to your account in future you need to set a password": "Zonder wachtwoord kunt u later niet tot uw account terugkeren",
"Restart": "Herstarten"
"Restart": "Herstarten",
"People": "Tweegesprekken",
"Set a room address to easily share your room with other people.": "Geef het gesprek een adres om het gemakkelijk met anderen te kunnen delen."
}

View file

@ -204,9 +204,9 @@
"Do you want to set an email address?": "Vil du setja ei epostadresse?",
"Current password": "Gjeldande passord",
"Password": "Passord",
"New Password": "Nytt Passord",
"New Password": "Nytt passord",
"Confirm password": "Stadfest passord",
"Change Password": "Endra Passord",
"Change Password": "Endra passord",
"Authentication": "Authentisering",
"Last seen": "Sist sedd",
"Failed to set display name": "Fekk ikkje til å setja visningsnamn",
@ -311,7 +311,7 @@
"No rooms to show": "Ingen rom å visa",
"Unnamed room": "Rom utan namn",
"Guests can join": "Gjester kan bli med",
"Save": "Lagre",
"Save": "Lagra",
"(~%(count)s results)|other": "(~%(count)s resultat)",
"(~%(count)s results)|one": "(~%(count)s resultat)",
"Join Room": "Bli med i rom",
@ -345,7 +345,7 @@
"Only people who have been invited": "Berre dei som har vorte inviterte",
"Anyone who knows the room's link, apart from guests": "Dei som kjenner lenkja til rommet, sett vekk frå gjester",
"Anyone who knows the room's link, including guests": "Dei som kjenner lenkja til rommet, gjester òg",
"Publish this room to the public in %(domain)s's room directory?": "Gjer dette rommet offentleg i %(domain)s sitt romkatalog?",
"Publish this room to the public in %(domain)s's room directory?": "Gjer dette rommet offentleg i %(domain)s sin romkatalog?",
"Who can read history?": "Kven kan lesa historia?",
"Anyone": "Kven som helst",
"Members only (since the point in time of selecting this option)": "Berre medlemmar (frå då denne innstillinga vart skrudd på)",
@ -872,7 +872,7 @@
"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 heimetenaren støttar ikkje innloggingar med e-postadresser.",
"Please <a>contact your service administrator</a> to continue using this service.": "<a>Kontakt din systemadministrator</a> for å vidare å bruke tenesta.",
"Please <a>contact your service administrator</a> to continue using this service.": "<a>Kontakt din systemadministrator</a> for å vidare bruka tenesta.",
"This account has been deactivated.": "Denne kontoen har blitt deaktivert.",
"Failed to perform homeserver discovery": "Fekk ikkje til å utforska heimetenaren",
"Sign in with single sign-on": "Logg på med Single-Sign-On",
@ -899,7 +899,7 @@
"Go back to set it again.": "Gå tilbake for å sette den på nytt.",
"Download": "Last ned",
"<b>Print it</b> and store it somewhere safe": "<b>Skriv ut</b> og ta vare på den på ein trygg stad",
"<b>Save it</b> on a USB key or backup drive": "<b>Lagre</b> til ein USB-pinne eller sikkerheitskopidisk",
"<b>Save it</b> on a USB key or backup drive": "<b>Lagra</b> til ein USB-pinne eller sikkerheitskopidisk",
"<b>Copy it</b> to your personal cloud storage": "<b>Kopier den</b> 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",
@ -1007,14 +1007,14 @@
"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.",
"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.": "Å bruke ein identitetstenar er frivillig. Om du vel å ikkje bruke dette, vil ikkje brukaren din bli oppdaga av andre brukarar, og du kan ikkje invitera andre med e-post eller telefonnummer.",
"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.": "Å bruka ein identitetstenar er frivillig. Om du vel å ikkje bruka dette, vil ikkje brukaren din bli oppdaga av andre brukarar, og du kan ikkje invitera andre med e-post eller telefonnummer.",
"Your password was successfully changed. You will not receive push notifications on other sessions until you log back in to them": "Passordet ditt vart endra. Du vil ikkje motta push-varslingar på andre økter, før etter til at du har logga inn på nytt der",
"Error downloading theme information.": "Feil under nedlasting av temainformasjon.",
"Theme added!": "Tema lagt til!",
"Email addresses": "E-postadresser",
"Phone numbers": "Telefonnummer",
"Set a new account password...": "Lag nytt kontopassord...",
"Help & About": "Hjelp & Om",
"Help & About": "Hjelp og om",
"Bug reporting": "Feilrapportering",
"Accept all %(invitedRooms)s invites": "Aksepter alle invitasjonar frå %(invitedRooms)s",
"Security & Privacy": "Sikkerheit og personvern",
@ -1047,7 +1047,7 @@
"Code block": "Kodeblokk",
"Room %(name)s": "Rom %(name)s",
"Recent rooms": "Siste rom",
"Direct Messages": "Direktemeldingar",
"Direct Messages": "Folk",
"Joining room …": "Blir med i rommet…",
"Loading …": "Lastar…",
"Rejecting invite …": "Avviser invitasjon…",
@ -1089,7 +1089,7 @@
"%(count)s unread messages.|one": "1 ulesen melding.",
"Unread messages.": "Uleste meldingar.",
"Unknown Command": "Ukjend kommando",
"You can use <code>/help</code> to list available commands. Did you mean to send this as a message?": "Du kan bruke <code>/help</code> for å liste kommandoar. Meinte du å sende dette som ein melding ?",
"You can use <code>/help</code> to list available commands. Did you mean to send this as a message?": "Du kan bruka <code>/help</code> for å lista tilgjengelege kommandoar. Meinte du å senda dette som ein melding ?",
"Hint: Begin your message with <code>//</code> to start it with a slash.": "Hint: Start meldinga med <code>//</code> for å starte den med skråstrek.",
"Send as message": "Send som melding",
"Failed to revoke invite": "Fekk ikkje til å trekke invitasjonen",
@ -1115,7 +1115,7 @@
"Room Topic": "Romemne",
"Room avatar": "Rom-avatar",
"Power level": "Tilgangsnivå",
"Voice & Video": "Tale & Video",
"Voice & Video": "Tale og video",
"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",
@ -1200,8 +1200,8 @@
"Add theme": "Legg til tema",
"Theme": "Tema",
"Credits": "Bidragsytarar",
"For help with using %(brand)s, click <a>here</a>.": "For hjelp med å bruke %(brand)s, klikk <a>her</a>.",
"For help with using %(brand)s, click <a>here</a> or start a chat with our bot using the button below.": "For hjelp med å bruke %(brand)s, klikk <a>her</a>, eller start ein samtale med vår bot ved å bruke knappen under.",
"For help with using %(brand)s, click <a>here</a>.": "For hjelp med å bruka %(brand)s, klikk <a>her</a>.",
"For help with using %(brand)s, click <a>here</a> or start a chat with our bot using the button below.": "For hjelp med å bruka %(brand)s, klikk <a>her</a>, 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",
@ -1210,7 +1210,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 å stadfeste 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 å bruka Single-sign-on for å stadfeste identiteten din.",
"Single Sign On": "Single-sign-on",
"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",
@ -1236,7 +1236,7 @@
"Incorrect recovery passphrase": "Feil 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 <button1>use your recovery key</button1> or <button2>set up new recovery options</button2>": "Har du gløymt gjennopprettingspassfrasen kan du <button1>bruke gjennopprettingsnøkkel</button1> eller <button2>sette opp nye gjennopprettingsval</button2>",
"If you've forgotten your recovery passphrase you can <button1>use your recovery key</button1> or <button2>set up new recovery options</button2>": "Har du gløymt gjennopprettingspassfrasen kan du <button1>bruka ein gjennopprettingsnøkkel</button1> eller <button2>setta opp nye gjennopprettingsval</button2>",
"Help": "Hjelp",
"Explore": "Utforsk",
"%(creator)s created and configured the room.": "%(creator)s oppretta og konfiguerte dette rommet.",
@ -1285,7 +1285,7 @@
"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)",
"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 å bruka 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",
@ -1328,5 +1328,8 @@
"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"
"Join millions for free on the largest public server": "Kom ihop med millionar av andre på den største offentlege tenaren",
"Order rooms by name": "Sorter rom etter namn",
"Show rooms with unread notifications first": "Vis rom med ulesne varsel fyrst",
"Show rooms with unread messages first": "Vis rom med ulesne meldingar fyrst"
}

View file

@ -757,7 +757,7 @@
"Demote yourself?": "Zdegradować siebie?",
"Demote": "Zdegraduj",
"Hide Stickers": "Ukryj Naklejki",
"Show Stickers": "Pokaż Naklejki",
"Show Stickers": "Pokaż naklejki",
"The email field must not be blank.": "Pole e-mail nie może być puste.",
"The phone number field must not be blank.": "Pole numeru telefonu nie może być puste.",
"The password field must not be blank.": "Pole hasła nie może być puste.",
@ -1322,7 +1322,7 @@
"Use your account or create a new one to continue.": "Użyj konta lub utwórz nowe, aby kontynuować.",
"No": "Nie",
"Yes": "Tak",
"React": "Zareaguj",
"React": "Dodaj reakcję",
"Edited at %(date)s. Click to view edits.": "Edytowano w %(date)s. Kliknij, aby zobaczyć zmiany.",
"Frequently Used": "Często używane",
"Smileys & People": "Buźki i osoby",
@ -1505,5 +1505,31 @@
"Use Single Sign On to continue": "Użyj pojedynczego logowania, aby kontynuować",
"Confirm adding this email address by using Single Sign On to prove your identity.": "Potwierdź dodanie tego adresu e-mail przez użycie pojedynczego logowania, aby potwierdzić swoją tożsamość.",
"Single Sign On": "Pojedyncze logowanie",
"Confirm adding this phone number by using Single Sign On to prove your identity.": "Potwierdź dodanie tego numeru telefonu przez użycie pojedynczego logowania, aby potwierdzić swoją tożsamość."
"Confirm adding this phone number by using Single Sign On to prove your identity.": "Potwierdź dodanie tego numeru telefonu przez użycie pojedynczego logowania, aby potwierdzić swoją tożsamość.",
"Learn More": "Dowiedz się więcej",
"Light": "Jasny",
"Dark": "Ciemny",
"Font size": "Rozmiar czcionki",
"People": "Ludzie",
"Appearance": "Wygląd",
"Show rooms with unread messages first": "Pokazuj najpierw pokoje z nieprzeczytanymi wiadomościami",
"Show previews of messages": "Pokazuj podglądy wiadomości",
"Sort by": "Sortuj według",
"Activity": "Aktywności",
"A-Z": "A-Z",
"Notification options": "Opcje powiadomień",
"Leave Room": "Opuść pokój",
"Favourited": "Ulubiony",
"This room is public": "Ten pokój jest publiczny",
"Unknown Command": "Nieznane polecenie",
"Unrecognised command: %(commandText)s": "Nieznane polecenie: %(commandText)s",
"You can use <code>/help</code> to list available commands. Did you mean to send this as a message?": "Możesz użyć <code>/help</code> aby wyświetlić listę dostępnych poleceń. Czy chciałeś(-aś) wysłać to jako wiadomość?",
"Hint: Begin your message with <code>//</code> to start it with a slash.": "Wskazówka: Rozpocznij swoją wiadomość od <code>//</code>, aby rozpocząć ją ukośnikiem.",
"Send as message": "Wyślij jako wiadomość",
"Remove %(count)s messages|other": "Usuń %(count)s wiadomości",
"Remove %(count)s messages|one": "Usuń 1 wiadomość",
"Switch to light mode": "Przełącz na tryb jasny",
"Switch to dark mode": "Przełącz na tryb ciemny",
"Switch theme": "Przełącz motyw",
"All settings": "Wszystkie ustawienia"
}

File diff suppressed because it is too large Load diff

View file

@ -22,7 +22,7 @@
"Error": "Ошибка",
"Export E2E room keys": "Экспорт ключей шифрования",
"Failed to change password. Is your password correct?": "Не удалось сменить пароль. Вы правильно ввели текущий пароль?",
"Failed to leave room": "Не удалось выйти из комнаты",
"Failed to leave room": "Не удалось покинуть комнату",
"Failed to reject invitation": "Не удалось отклонить приглашение",
"Failed to send email": "Ошибка отправки email",
"Failed to unban": "Не удалось разблокировать",
@ -232,7 +232,7 @@
"Room": "Комната",
"Cancel": "Отмена",
"Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or <a>enable unsafe scripts</a>.": "Не удается подключиться к домашнему серверу через HTTP, так как в адресной строке браузера указан адрес HTTPS. Используйте HTTPS или <a>включите небезопасные скрипты</a>.",
"Dismiss": "Отклонить",
"Dismiss": "Закрыть",
"Custom Server Options": "Параметры другого сервера",
"Mute": "Приглушить",
"Operation failed": "Сбой операции",
@ -347,7 +347,7 @@
"Something went wrong!": "Что-то пошло не так!",
"This will be your account name on the <span></span> homeserver, or you can pick a <a>different server</a>.": "Это будет имя вашей учётной записи на <span></span> домашнем сервере, либо вы можете выбрать <a>другой сервер</a>.",
"If you already have a Matrix account you can <a>log in</a> instead.": "Если у вас уже есть учётная запись Matrix, вы можете <a>войти</a>.",
"Home": "Начало",
"Home": "Home",
"Accept": "Принять",
"Active call (%(roomName)s)": "Текущий вызов (%(roomName)s)",
"Admin Tools": "Инструменты администратора",
@ -998,14 +998,14 @@
"Download": "Скачать",
"Create your account": "Создать учётную запись",
"Username": "Имя пользователя",
"Not sure of your password? <a>Set a new one</a>": "Не уверены в пароле? <a>Установите новый</a>",
"Not sure of your password? <a>Set a new one</a>": "Не помните пароль? <a>Установите новый</a>",
"The username field must not be blank.": "Имя пользователя не должно быть пустым.",
"Server Name": "Название сервера",
"Your Modular server": "Ваш Модульный сервер",
"Email (optional)": "Адрес электронной почты (не обязательно)",
"Phone (optional)": "Телефон (не обязательно)",
"Confirm": "Подтвердить",
"Other servers": "Другие сервера",
"Other servers": "Другие серверы",
"Homeserver URL": "URL сервера",
"Identity Server URL": "URL сервера идентификации",
"Free": "Бесплатный",
@ -1514,8 +1514,8 @@
"Close dialog": "Закрыть диалог",
"Please enter a name for the room": "Пожалуйста, введите название комнаты",
"This room is private, and can only be joined by invitation.": "Эта комната приватная, в неё можно войти только по приглашению.",
"Hide advanced": "Скрыть расширения",
"Show advanced": "Показать расширения",
"Hide advanced": "Скрыть дополнительные настройки",
"Show advanced": "Показать дополнительные настройки",
"Please fill why you're reporting.": "Пожалуйста, заполните, почему вы сообщаете.",
"Report Content to Your Homeserver Administrator": "Сообщите о содержании своему администратору домашнего сервера",
"Send report": "Отослать отчёт",
@ -1547,9 +1547,9 @@
"%(creator)s created and configured the room.": "%(creator)s создал и настроил комнату.",
"Preview": "Заглянуть",
"View": "Просмотр",
"Find a room…": "Найди комнату…",
"Find a room… (e.g. %(exampleRoom)s)": "Найди комнату... (напр. %(exampleRoom)s)",
"Explore rooms": "Исследуйте комнаты",
"Find a room…": "Поиск комнат…",
"Find a room… (e.g. %(exampleRoom)s)": "Поиск комнат... (напр. %(exampleRoom)s)",
"Explore rooms": "Список комнат",
"No identity server is configured: add one in server settings to reset your password.": "Идентификационный сервер не настроен: добавьте его в настройки сервера, чтобы сбросить пароль.",
"Command Autocomplete": "Автозаполнение команды",
"Community Autocomplete": "Автозаполнение сообщества",
@ -1609,13 +1609,13 @@
"Verifies a user, session, and pubkey tuple": "Проверяет пользователя, сессию и публичные ключи",
"Unknown (user, session) pair:": "Неизвестная (пользователь:сессия) пара:",
"Session already verified!": "Сессия уже подтверждена!",
"Never send encrypted messages to unverified sessions from this session": "Никогда не отправляйте зашифрованные сообщения в непроверенные сессий из этой сессии",
"Never send encrypted messages to unverified sessions in this room from this session": "Никогда не отправляйте зашифрованные сообщения в непроверенные сессии в эту комнату из этой сессии",
"Never send encrypted messages to unverified sessions from this session": "Никогда не отправлять зашифрованные сообщения непроверенным сессиям в этой сессии",
"Never send encrypted messages to unverified sessions in this room from this session": "Никогда не отправлять зашифрованные сообщения непроверенным сессиям в этой комнате и в этой сессии",
"Your keys are <b>not being backed up from this session</b>.": "Ваши ключи <b>не резервируются с этой сессии</b>.",
"Server or user ID to ignore": "Сервер или ID пользователя для игнорирования",
"Subscribed lists": "Подписанные списки",
"Subscribe": "Подписаться",
"A session's public name is visible to people you communicate with": "Публичное имя сессии видны людям, с которыми вы общаетесь",
"A session's public name is visible to people you communicate with": "Ваши собеседники видят публичные имена сессий",
"If you cancel now, you won't complete verifying the other user.": "Если вы сейчас отмените, у вас не будет завершена проверка других пользователей.",
"Cancel entering passphrase?": "Отмена ввода пароль?",
"Setting up keys": "Настройка ключей",
@ -1993,5 +1993,187 @@
"Signature upload success": "Отпечаток успешно отправлен",
"Signature upload failed": "Сбой отправки отпечатка",
"Room name or address": "Имя или адрес комнаты",
"Unrecognised room address:": "Не удалось найти адрес комнаты:"
"Unrecognised room address:": "Не удалось найти адрес комнаты:",
"Use your account to sign in to the latest version": "Используйте свой аккаунт для входа в последнюю версию",
"Were excited to announce Riot is now Element": "Мы рады объявить, что Riot теперь Element",
"Riot is now Element!": "Riot теперь Element!",
"Learn More": "Узнать больше",
"Joins room with given address": "Присоединиться к комнате с указанным адресом",
"Opens chat with the given user": "Открыть чат с данным пользователем",
"Sends a message to the given user": "Отправить сообщение данному пользователю",
"You signed in to a new session without verifying it:": "Вы вошли в новый сеанс, не подтвердив его:",
"Verify your other session using one of the options below.": "Проверьте другой сеанс, используя один из вариантов ниже.",
"Help us improve %(brand)s": "Помогите нам улучшить %(brand)s",
"Send <UsageDataLink>anonymous usage data</UsageDataLink> which helps us improve %(brand)s. This will use a <PolicyLink>cookie</PolicyLink>.": "Отправьте <UsageDataLink>анонимные данные об использовании</UsageDataLink>, которые помогут нам улучшить %(brand)s. Для этого будеть использоваться <PolicyLink>cookie</PolicyLink>.",
"I want to help": "Я хочу помочь",
"Review where youre logged in": "Проверьте, где вы вошли",
"Verify all your sessions to ensure your account & messages are safe": "Проверьте все свои сеансы, чтобы убедиться, что ваша учетная запись и сообщения в безопасности",
"Your homeserver has exceeded its user limit.": "Ваш домашний сервер превысил свой лимит пользователей.",
"Your homeserver has exceeded one of its resource limits.": "Ваш домашний сервер превысил один из своих лимитов ресурсов.",
"Are you sure you want to cancel entering passphrase?": "Вы уверены, что хотите отменить ввод пароля?",
"Go Back": "Назад",
"Contact your <a>server admin</a>.": "Обратитесь к <a>администратору сервера</a>.",
"Ok": "Хорошо",
"Set password": "Установить пароль",
"To return to your account in future you need to set a password": "Чтобы вернуться в свой аккаунт в будущем, вам необходимо установить пароль",
"New login. Was this you?": "Новый вход в вашу учётную запись. Это были Вы?",
"Verify the new login accessing your account: %(name)s": "Проверьте новый вход в вашу учётную запись: %(name)s",
"Restart": "Перезапустить",
"Upgrade your %(brand)s": "Обновите ваш %(brand)s",
"A new version of %(brand)s is available!": "Доступна новая версия %(brand)s!",
"You joined the call": "Вы присоединились к звонку",
"%(senderName)s joined the call": "%(senderName)s присоединился к звонку",
"Call in progress": "Звонок в процессе",
"You left the call": "Вы покинули звонок",
"%(senderName)s left the call": "%(senderName)s покинул звонок",
"Call ended": "Звонок завершён",
"You started a call": "Вы начали звонок",
"%(senderName)s started a call": "%(senderName)s начал(а) звонок",
"Waiting for answer": "Ждём ответа",
"%(senderName)s is calling": "%(senderName)s звонит",
"You created the room": "Вы создали комнату",
"%(senderName)s created the room": "%(senderName)s создал(а) комнату",
"You made the chat encrypted": "Вы включили шифрование в комнате",
"%(senderName)s made the chat encrypted": "%(senderName)s включил(а) шифрование в комнате",
"You made history visible to new members": "Вы сделали историю видимой для новых участников",
"%(senderName)s made history visible to new members": "%(senderName)s сделал(а) историю видимой для новых участников",
"You made history visible to anyone": "Вы сделали историю видимой для всех",
"%(senderName)s made history visible to anyone": "%(senderName)s сделал(а) историю видимой для всех",
"You made history visible to future members": "Вы сделали историю видимой для будущих участников",
"%(senderName)s made history visible to future members": "%(senderName)s сделал(а) историю видимой для будущих участников",
"You were invited": "Вы были приглашены",
"%(targetName)s was invited": "%(targetName)s был(а) приглашен(а)",
"You left": "Вы покинули комнату",
"%(targetName)s left": "%(targetName)s покинул комнату",
"You were kicked (%(reason)s)": "Вас исключили из комнаты (%(reason)s)",
"%(targetName)s was kicked (%(reason)s)": "%(targetName)s был(а) исключен(а) из комнаты (%(reason)s)",
"You were kicked": "Вас исключили из комнаты",
"%(targetName)s was kicked": "%(targetName)s был(а) исключен(а) из комнаты",
"You rejected the invite": "Вы отклонили приглашение",
"%(targetName)s rejected the invite": "%(targetName)s отклонил(а) приглашение",
"You were uninvited": "Вам отменили приглашение",
"%(targetName)s was uninvited": "Приглашение для %(targetName)s отменено",
"You were banned (%(reason)s)": "Вас забанили (%(reason)s)",
"%(targetName)s was banned (%(reason)s)": "%(targetName)s был(а) исключен(а) из комнаты (%(reason)s)",
"You were banned": "Вас заблокировали",
"%(targetName)s was banned": "%(targetName)s был(а) забанен(а)",
"You joined": "Вы вошли",
"%(targetName)s joined": "%(targetName)s присоединился(ась)",
"You changed your name": "Вы поменяли своё имя",
"%(targetName)s changed their name": "%(targetName)s поменял(а) своё имя",
"You changed your avatar": "Вы поменяли свой аватар",
"%(targetName)s changed their avatar": "%(targetName)s поменял(а) свой аватар",
"You changed the room name": "Вы поменяли имя комнаты",
"Enable experimental, compact IRC style layout": "Включите экспериментальный, компактный стиль IRC",
"Unknown caller": "Неизвестный абонент",
"Incoming call": "Входящий звонок",
"Waiting for your other session to verify…": "В ожидании вашего другого сеанса, чтобы проверить…",
"%(brand)s can't securely cache encrypted messages locally while running in a web browser. Use <desktopLink>%(brand)s Desktop</desktopLink> for encrypted messages to appear in search results.": "%(brand)s не может безопасно кэшировать зашифрованные сообщения локально во время работы в веб-браузере. Используйте <desktopLink>%(brand)s Desktop</desktopLink>, чтобы зашифрованные сообщения появились в результатах поиска.",
"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.": "Возможно, вы настроили их на клиенте, отличном от %(brand)s. Вы не можете настроить их на %(brand)s, но они все еще применяются.",
"New version available. <a>Update now.</a>": "Доступна новая версия. <a>Обновить сейчас.</a>",
"Hey you. You're the best!": "Эй! Ты лучший!",
"Size must be a number": "Размер должен быть числом",
"Custom font size can only be between %(min)s pt and %(max)s pt": "Пользовательский размер шрифта может быть только между %(min)s pt и %(max)s pt",
"Use between %(min)s pt and %(max)s pt": "Введите значение между %(min)s pt и %(max)s pt",
"Message layout": "Макет сообщения",
"Compact": "Компактно",
"Modern": "Новый",
"Set the name of a font installed on your system & %(brand)s will attempt to use it.": "Установите имя шрифта, установленного в вашей системе, и %(brand)s попытается его использовать.",
"Customise your appearance": "Настройка внешнего вида",
"Reload": "Перезагрузить",
"Take picture": "Сделать снимок",
"Remove for everyone": "Убрать для всех",
"Remove for me": "Убрать для меня",
"User Status": "Статус пользователя",
"Country Dropdown": "Выпадающий список стран",
"%(senderName)s %(emote)s": "%(senderName)s %(emote)s",
"%(senderName)s: %(message)s": "%(senderName)s: %(message)s",
"%(senderName)s changed the room name": "%(senderName)s изменил(а) название комнаты",
"%(senderName)s: %(reaction)s": "%(senderName)s: %(reaction)s",
"%(senderName)s: %(stickerName)s": "%(senderName)s: %(stickerName)s",
"You uninvited %(targetName)s": "Вы отозвали приглашение %(targetName)s",
"%(senderName)s uninvited %(targetName)s": "%(senderName)s отозвал(а) приглашение %(targetName)s",
"You invited %(targetName)s": "Вы пригласили %(targetName)s",
"%(senderName)s invited %(targetName)s": "%(senderName)s пригласил(а) %(targetName)s",
"You changed the room topic": "Вы изменили тему комнаты",
"%(senderName)s changed the room topic": "%(senderName)s изменил(а) тему комнаты",
"Enable advanced debugging for the room list": "Разрешить расширенную отладку списка комнат",
"Font size": "Размер шрифта",
"Use custom size": "Использовать другой размер",
"Use a more compact Modern layout": "Использовать компактную 'современную' тему оформления",
"Use a system font": "Использовать системный шрифт",
"System font name": "Название системного шрифта",
"Incoming voice call": "Входящий звонок",
"Incoming video call": "Входящий видеозвонок",
"Please verify the room ID or address and try again.": "Проверьте ID комнаты или адрес и попробуйте снова.",
"Your server admin has disabled end-to-end encryption by default in private rooms & Direct Messages.": "Администратор вашего сервера отключил сквозное шифрование по умолчанию в приватных комнатах и диалогах.",
"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": "Маловажные комнаты отображаются в конце списка в отдельной секции",
"People": "Люди",
"%(networkName)s rooms": "Комнаты %(networkName)s",
"Explore Public Rooms": "Просмотреть публичные комнаты",
"Search rooms": "Поиск комнат",
"Where youre logged in": "Где вы вошли",
"Manage the names of and sign out of your sessions below or <a>verify them in your User Profile</a>.": "Ниже вы можете изменить названия сессий или выйти из них, либо <a>подтвердите их в своём профиле</a>.",
"Create room": "Создать комнату",
"Custom Tag": "Пользовательский тег",
"Appearance": "Внешний вид",
"Show rooms with unread messages first": "Комнаты с непрочитанными сообщениями в начале",
"Show previews of messages": "Показывать последнее сообщение",
"Sort by": "Сортировать",
"Activity": "По активности",
"A-Z": "А-Я",
"List options": "Настройки списка",
"Show %(count)s more|other": "Показать ещё %(count)s",
"Notification options": "Настройки уведомлений",
"Favourited": "В избранном",
"Leave Room": "Покинуть комнату",
"Room options": "Настройки комнаты",
"Set a room address to easily share your room with other people.": "Присвойте комнате адрес, чтобы поделиться ею с другими людьми.",
"You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use %(brand)s with an existing Matrix account on a different homeserver.": "Вы можете ввести адрес домашнего сервера вручную, чтобы войти на другой сервер. Таким образом, вы сможете использовать %(brand)s с существующей учётной записью Matrix на другом сервере.",
"Welcome to %(appName)s": "Добро пожаловать в %(appName)s",
"Liberate your communication": "Освободите общение",
"Create a Group Chat": "Создать групповой чат",
"Security & privacy": "Безопасность и конфиденциальность",
"All settings": "Все настройки",
"Feedback": "Отзыв",
"* %(senderName)s %(emote)s": "* %(senderName)s %(emote)s",
"New spinner design": "Новый дизайн спиннера",
"Appearance Settings only affect this %(brand)s session.": "Настройки внешнего вида работают только в этой сессии %(brand)s.",
"Emoji picker": "Смайлики",
"Show %(count)s more|one": "Показать ещё %(count)s",
"Mentions & Keywords": "Упоминания и ключевые слова",
"Forget Room": "Забыть комнату",
"This room is public": "Это публичная комната",
"Away": "Отошёл(ла)",
"You can use <code>/help</code> to list available commands. Did you mean to send this as a message?": "Введите <code>/help</code> для списка доступных команд. Хотите отправить это сообщение как есть?",
"Error creating address": "Ошибка при создании адреса",
"You don't have permission to delete the address.": "У вас нет прав для удаления этого адреса.",
"Error removing address": "Ошибка при удалении адреса",
"Your messages are secured and only you and the recipient have the unique keys to unlock them.": "Ваши сообщения в безопасности, ключи для расшифровки есть только у вас и получателя.",
"In encrypted rooms, your messages are secured and only you and the recipient have the unique keys to unlock them.": "В зашифрованных комнатах ваши сообщения в безопасности, только у вас и у получателя есть ключи для расшифровки.",
"You've successfully verified your device!": "Вы успешно подтвердили это устройство!",
"Start verification again from the notification.": "Начните подтверждение заново с уведомления.",
"You have ignored this user, so their message is hidden. <a>Show anyways.</a>": "Вы заигнорировали этого пользователя, сообщение скрыто. <a>Показать</a>",
"Message deleted": "Сообщение удалено",
"Message deleted by %(name)s": "Сообщение удалено %(name)s",
"Message deleted on %(date)s": "Сообщение удалено %(date)s",
"Edited at %(date)s": "Отредактировано %(date)s",
"Click to view edits": "Нажмите для просмотра правок",
"Can't load this message": "Не удалось загрузить это сообщение",
"Submit logs": "Отправить логи",
"Categories": "Категории",
"Widgets do not use message encryption.": "Виджеты не используют шифрование сообщений.",
"QR Code": "QR код",
"Room address": "Адрес комнаты",
"Please provide a room address": "Укажите адрес комнаты",
"This address is available to use": "Этот адрес доступен",
"This address is already in use": "Этот адрес уже используется",
"Are you sure you want to remove <b>%(serverName)s</b>": "Вы уверены, что хотите удалить <b>%(serverName)s</b>",
"Enter the name of a new server you want to explore.": "Введите имя нового сервера для просмотра.",
"Reminder: Your browser is unsupported, so your experience may be unpredictable.": "Напоминание: ваш браузер не поддерживается, возможны непредвиденные проблемы.",
"Notification settings": "Настройки уведомлений",
"Switch to light mode": "Переключить в светлый режим",
"Switch to dark mode": "Переключить в тёмный режим"
}

Some files were not shown because too many files have changed in this diff Show more