mirror of
https://github.com/element-hq/element-web
synced 2024-11-23 17:56:01 +03:00
Merge branches 'develop' and 't3chguy/toasts3_2' of github.com:matrix-org/matrix-react-sdk into t3chguy/toasts3_2
This commit is contained in:
commit
c492ae97fd
78 changed files with 2797 additions and 1590 deletions
|
@ -6,7 +6,6 @@ src/components/structures/RoomView.js
|
|||
src/components/structures/ScrollPanel.js
|
||||
src/components/structures/SearchBox.js
|
||||
src/components/structures/UploadBar.js
|
||||
src/components/views/avatars/BaseAvatar.js
|
||||
src/components/views/avatars/MemberAvatar.js
|
||||
src/components/views/create_room/RoomAlias.js
|
||||
src/components/views/dialogs/SetPasswordDialog.js
|
||||
|
|
|
@ -119,10 +119,12 @@
|
|||
"@peculiar/webcrypto": "^1.0.22",
|
||||
"@types/classnames": "^2.2.10",
|
||||
"@types/flux": "^3.1.9",
|
||||
"@types/lodash": "^4.14.152",
|
||||
"@types/modernizr": "^3.5.3",
|
||||
"@types/node": "^12.12.41",
|
||||
"@types/qrcode": "^1.3.4",
|
||||
"@types/react": "16.9",
|
||||
"@types/react": "^16.9",
|
||||
"@types/react-dom": "^16.9.8",
|
||||
"@types/zxcvbn": "^4.4.0",
|
||||
"babel-eslint": "^10.0.3",
|
||||
"babel-jest": "^24.9.0",
|
||||
|
@ -142,6 +144,7 @@
|
|||
"flow-parser": "^0.57.3",
|
||||
"glob": "^5.0.14",
|
||||
"jest": "^24.9.0",
|
||||
"jest-canvas-mock": "^2.2.0",
|
||||
"lolex": "^5.1.2",
|
||||
"matrix-mock-request": "^1.2.3",
|
||||
"matrix-react-test-utils": "^0.2.2",
|
||||
|
@ -161,6 +164,7 @@
|
|||
"testMatch": [
|
||||
"<rootDir>/test/**/*-test.js"
|
||||
],
|
||||
"setupFiles": ["jest-canvas-mock"],
|
||||
"setupFilesAfterEnv": [
|
||||
"<rootDir>/test/setupTests.js"
|
||||
],
|
||||
|
|
|
@ -63,7 +63,6 @@
|
|||
@import "./views/dialogs/_DeactivateAccountDialog.scss";
|
||||
@import "./views/dialogs/_DeviceVerifyDialog.scss";
|
||||
@import "./views/dialogs/_DevtoolsDialog.scss";
|
||||
@import "./views/dialogs/_EncryptedEventDialog.scss";
|
||||
@import "./views/dialogs/_GroupAddressPicker.scss";
|
||||
@import "./views/dialogs/_IncomingSasDialog.scss";
|
||||
@import "./views/dialogs/_InviteDialog.scss";
|
||||
|
|
|
@ -28,8 +28,8 @@ limitations under the License.
|
|||
margin: 0 4px;
|
||||
grid-row: 2 / 4;
|
||||
grid-column: 1;
|
||||
background-color: white;
|
||||
box-shadow: 0px 4px 12px $menu-box-shadow-color;
|
||||
background-color: $dark-panel-bg-color;
|
||||
box-shadow: 0px 4px 20px rgba(0, 0, 0, 0.5);
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
|
@ -37,16 +37,15 @@ limitations under the License.
|
|||
grid-row: 1 / 3;
|
||||
grid-column: 1;
|
||||
color: $primary-fg-color;
|
||||
background-color: $primary-bg-color;
|
||||
box-shadow: 0px 4px 12px $menu-box-shadow-color;
|
||||
background-color: $dark-panel-bg-color;
|
||||
box-shadow: 0px 4px 20px rgba(0, 0, 0, 0.5);
|
||||
border-radius: 8px;
|
||||
overflow: hidden;
|
||||
display: grid;
|
||||
grid-template-columns: 20px 1fr;
|
||||
column-gap: 10px;
|
||||
grid-template-columns: 22px 1fr;
|
||||
column-gap: 8px;
|
||||
row-gap: 4px;
|
||||
padding: 8px;
|
||||
padding-right: 16px;
|
||||
|
||||
&.mx_Toast_hasIcon {
|
||||
&::after {
|
||||
|
@ -68,10 +67,26 @@ limitations under the License.
|
|||
background-image: url("$(res)/img/e2e/warning.svg");
|
||||
}
|
||||
|
||||
h2, .mx_Toast_body {
|
||||
.mx_Toast_title, .mx_Toast_body {
|
||||
grid-column: 2;
|
||||
}
|
||||
}
|
||||
&:not(.mx_Toast_hasIcon) {
|
||||
padding-left: 12px;
|
||||
|
||||
.mx_Toast_title {
|
||||
grid-column: 1 / -1;
|
||||
}
|
||||
}
|
||||
|
||||
.mx_Toast_title,
|
||||
.mx_Toast_description {
|
||||
padding-right: 8px;
|
||||
}
|
||||
|
||||
.mx_Toast_title {
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
|
||||
h2 {
|
||||
grid-column: 1 / 3;
|
||||
|
@ -79,6 +94,18 @@ limitations under the License.
|
|||
margin: 0;
|
||||
font-size: $font-15px;
|
||||
font-weight: 600;
|
||||
display: inline;
|
||||
width: auto;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
span {
|
||||
padding-left: 8px;
|
||||
float: right;
|
||||
font-size: $font-12px;
|
||||
line-height: $font-22px;
|
||||
color: $muted-fg-color;
|
||||
}
|
||||
}
|
||||
|
||||
.mx_Toast_body {
|
||||
|
@ -87,7 +114,13 @@ limitations under the License.
|
|||
}
|
||||
|
||||
.mx_Toast_buttons {
|
||||
float: right;
|
||||
display: flex;
|
||||
|
||||
.mx_FormButton {
|
||||
min-width: 96px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
}
|
||||
|
||||
.mx_Toast_description {
|
||||
|
@ -96,6 +129,15 @@ limitations under the License.
|
|||
text-overflow: ellipsis;
|
||||
margin: 4px 0 11px 0;
|
||||
font-size: $font-12px;
|
||||
|
||||
.mx_AccessibleButton_kind_link {
|
||||
font-size: inherit;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
|
||||
.mx_Toast_deviceID {
|
||||
|
|
|
@ -1,34 +0,0 @@
|
|||
/*
|
||||
Copyright 2016 OpenMarket Ltd
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
.mx_EncryptedEventDialog .mx_DeviceVerifyButtons {
|
||||
float: right;
|
||||
padding: 0px;
|
||||
margin-right: 42px;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.mx_EncryptedEventDialog .mx_MemberDeviceInfo_textButton {
|
||||
@mixin mx_DialogButton;
|
||||
background-color: $primary-bg-color;
|
||||
color: $accent-color;
|
||||
}
|
||||
|
||||
.mx_EncryptedEventDialog button {
|
||||
margin-top: 0px;
|
||||
}
|
|
@ -190,7 +190,7 @@ limitations under the License.
|
|||
|
||||
.mx_EmojiPicker_footer {
|
||||
border-top: 1px solid $message-action-bar-border-color;
|
||||
height: 72px;
|
||||
min-height: 72px;
|
||||
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
|
4
src/@types/global.d.ts
vendored
4
src/@types/global.d.ts
vendored
|
@ -15,16 +15,20 @@ limitations under the License.
|
|||
*/
|
||||
|
||||
import * as ModernizrStatic from "modernizr";
|
||||
import ContentMessages from "../ContentMessages";
|
||||
import { IMatrixClientPeg } from "../MatrixClientPeg";
|
||||
import ToastStore from "../stores/ToastStore";
|
||||
import DeviceListener from "../DeviceListener";
|
||||
|
||||
declare global {
|
||||
interface Window {
|
||||
Modernizr: ModernizrStatic;
|
||||
mxMatrixClientPeg: IMatrixClientPeg;
|
||||
Olm: {
|
||||
init: () => Promise<void>;
|
||||
};
|
||||
|
||||
mx_ContentMessages: ContentMessages;
|
||||
mx_ToastStore: ToastStore;
|
||||
mx_DeviceListener: DeviceListener;
|
||||
}
|
||||
|
|
|
@ -19,6 +19,7 @@ import {MatrixClientPeg} from './MatrixClientPeg';
|
|||
import DMRoomMap from './utils/DMRoomMap';
|
||||
import {getHttpUriForMxc} from "matrix-js-sdk/src/content-repo";
|
||||
|
||||
// Not to be used for BaseAvatar urls as that has similar default avatar fallback already
|
||||
export function avatarUrlForMember(member, width, height, resizeMethod) {
|
||||
let url;
|
||||
if (member && member.getAvatarUrl) {
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
/*
|
||||
Copyright 2015, 2016 OpenMarket Ltd
|
||||
Copyright 2019 New Vector Ltd
|
||||
Copyright 2020 The Matrix.org Foundation C.I.C.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
|
@ -15,11 +16,11 @@ See the License for the specific language governing permissions and
|
|||
limitations under the License.
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import React from "react";
|
||||
import extend from './extend';
|
||||
import dis from './dispatcher/dispatcher';
|
||||
import {MatrixClientPeg} from './MatrixClientPeg';
|
||||
import {MatrixClient} from "matrix-js-sdk/src/client";
|
||||
import * as sdk from './index';
|
||||
import { _t } from './languageHandler';
|
||||
import Modal from './Modal';
|
||||
|
@ -39,6 +40,50 @@ const PHYS_HIDPI = [0x00, 0x00, 0x16, 0x25, 0x00, 0x00, 0x16, 0x25, 0x01];
|
|||
|
||||
export class UploadCanceledError extends Error {}
|
||||
|
||||
type ThumbnailableElement = HTMLImageElement | HTMLVideoElement;
|
||||
|
||||
interface IUpload {
|
||||
fileName: string;
|
||||
roomId: string;
|
||||
total: number;
|
||||
loaded: number;
|
||||
promise: Promise<any>;
|
||||
canceled?: boolean;
|
||||
}
|
||||
|
||||
interface IMediaConfig {
|
||||
"m.upload.size"?: number;
|
||||
}
|
||||
|
||||
interface IContent {
|
||||
body: string;
|
||||
msgtype: string;
|
||||
info: {
|
||||
size: number;
|
||||
mimetype?: string;
|
||||
};
|
||||
file?: string;
|
||||
url?: string;
|
||||
}
|
||||
|
||||
interface IThumbnail {
|
||||
info: {
|
||||
thumbnail_info: {
|
||||
w: number;
|
||||
h: number;
|
||||
mimetype: string;
|
||||
size: number;
|
||||
};
|
||||
w: number;
|
||||
h: number;
|
||||
};
|
||||
thumbnail: Blob;
|
||||
}
|
||||
|
||||
interface IAbortablePromise<T> extends Promise<T> {
|
||||
abort(): void;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a thumbnail for a image DOM element.
|
||||
* The image will be smaller than MAX_WIDTH and MAX_HEIGHT.
|
||||
|
@ -51,13 +96,13 @@ export class UploadCanceledError extends Error {}
|
|||
* about the original image and the thumbnail.
|
||||
*
|
||||
* @param {HTMLElement} element The element to thumbnail.
|
||||
* @param {integer} inputWidth The width of the image in the input element.
|
||||
* @param {integer} inputHeight the width of the image in the input element.
|
||||
* @param {number} inputWidth The width of the image in the input element.
|
||||
* @param {number} inputHeight the width of the image in the input element.
|
||||
* @param {String} mimeType The mimeType to save the blob as.
|
||||
* @return {Promise} A promise that resolves with an object with an info key
|
||||
* and a thumbnail key.
|
||||
*/
|
||||
function createThumbnail(element, inputWidth, inputHeight, mimeType) {
|
||||
function createThumbnail(element: ThumbnailableElement, inputWidth: number, inputHeight: number, mimeType: string): Promise<IThumbnail> {
|
||||
return new Promise((resolve) => {
|
||||
let targetWidth = inputWidth;
|
||||
let targetHeight = inputHeight;
|
||||
|
@ -98,7 +143,7 @@ function createThumbnail(element, inputWidth, inputHeight, mimeType) {
|
|||
* @param {File} imageFile The file to load in an image element.
|
||||
* @return {Promise} A promise that resolves with the html image element.
|
||||
*/
|
||||
async function loadImageElement(imageFile) {
|
||||
async function loadImageElement(imageFile: File) {
|
||||
// Load the file into an html element
|
||||
const img = document.createElement("img");
|
||||
const objectUrl = URL.createObjectURL(imageFile);
|
||||
|
@ -128,8 +173,7 @@ async function loadImageElement(imageFile) {
|
|||
for (const chunk of chunks) {
|
||||
if (chunk.name === 'pHYs') {
|
||||
if (chunk.data.byteLength !== PHYS_HIDPI.length) return;
|
||||
const hidpi = chunk.data.every((val, i) => val === PHYS_HIDPI[i]);
|
||||
return hidpi;
|
||||
return chunk.data.every((val, i) => val === PHYS_HIDPI[i]);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
@ -152,7 +196,7 @@ async function loadImageElement(imageFile) {
|
|||
*/
|
||||
function infoForImageFile(matrixClient, roomId, imageFile) {
|
||||
let thumbnailType = "image/png";
|
||||
if (imageFile.type == "image/jpeg") {
|
||||
if (imageFile.type === "image/jpeg") {
|
||||
thumbnailType = "image/jpeg";
|
||||
}
|
||||
|
||||
|
@ -175,15 +219,15 @@ function infoForImageFile(matrixClient, roomId, imageFile) {
|
|||
* @param {File} videoFile The file to load in an video element.
|
||||
* @return {Promise} A promise that resolves with the video image element.
|
||||
*/
|
||||
function loadVideoElement(videoFile) {
|
||||
function loadVideoElement(videoFile): Promise<HTMLVideoElement> {
|
||||
return new Promise((resolve, reject) => {
|
||||
// Load the file into an html element
|
||||
const video = document.createElement("video");
|
||||
|
||||
const reader = new FileReader();
|
||||
|
||||
reader.onload = function(e) {
|
||||
video.src = e.target.result;
|
||||
reader.onload = function(ev) {
|
||||
video.src = ev.target.result as string;
|
||||
|
||||
// Once ready, returns its size
|
||||
// Wait until we have enough data to thumbnail the first frame.
|
||||
|
@ -231,11 +275,11 @@ function infoForVideoFile(matrixClient, roomId, videoFile) {
|
|||
* @return {Promise} A promise that resolves with an ArrayBuffer when the file
|
||||
* is read.
|
||||
*/
|
||||
function readFileAsArrayBuffer(file) {
|
||||
function readFileAsArrayBuffer(file: File | Blob): Promise<ArrayBuffer> {
|
||||
return new Promise((resolve, reject) => {
|
||||
const reader = new FileReader();
|
||||
reader.onload = function(e) {
|
||||
resolve(e.target.result);
|
||||
resolve(e.target.result as ArrayBuffer);
|
||||
};
|
||||
reader.onerror = function(e) {
|
||||
reject(e);
|
||||
|
@ -257,11 +301,11 @@ function readFileAsArrayBuffer(file) {
|
|||
* If the file is unencrypted then the object will have a "url" key.
|
||||
* If the file is encrypted then the object will have a "file" key.
|
||||
*/
|
||||
function uploadFile(matrixClient, roomId, file, progressHandler) {
|
||||
function uploadFile(matrixClient: MatrixClient, roomId: string, file: File | Blob, progressHandler?: any) {
|
||||
let canceled = false;
|
||||
if (matrixClient.isRoomEncrypted(roomId)) {
|
||||
// If the room is encrypted then encrypt the file before uploading it.
|
||||
// First read the file into memory.
|
||||
let canceled = false;
|
||||
let uploadPromise;
|
||||
let encryptInfo;
|
||||
const prom = readFileAsArrayBuffer(file).then(function(data) {
|
||||
|
@ -278,9 +322,9 @@ function uploadFile(matrixClient, roomId, file, progressHandler) {
|
|||
progressHandler: progressHandler,
|
||||
includeFilename: false,
|
||||
});
|
||||
|
||||
return uploadPromise;
|
||||
}).then(function(url) {
|
||||
if (canceled) throw new UploadCanceledError();
|
||||
// If the attachment is encrypted then bundle the URL along
|
||||
// with the information needed to decrypt the attachment and
|
||||
// add it under a file key.
|
||||
|
@ -290,7 +334,7 @@ function uploadFile(matrixClient, roomId, file, progressHandler) {
|
|||
}
|
||||
return {"file": encryptInfo};
|
||||
});
|
||||
prom.abort = () => {
|
||||
(prom as IAbortablePromise<any>).abort = () => {
|
||||
canceled = true;
|
||||
if (uploadPromise) MatrixClientPeg.get().cancelUpload(uploadPromise);
|
||||
};
|
||||
|
@ -300,55 +344,23 @@ function uploadFile(matrixClient, roomId, file, progressHandler) {
|
|||
progressHandler: progressHandler,
|
||||
});
|
||||
const promise1 = basePromise.then(function(url) {
|
||||
if (canceled) throw new UploadCanceledError();
|
||||
// If the attachment isn't encrypted then include the URL directly.
|
||||
return {"url": url};
|
||||
});
|
||||
// XXX: copy over the abort method to the new promise
|
||||
promise1.abort = basePromise.abort;
|
||||
promise1.abort = () => {
|
||||
canceled = true;
|
||||
MatrixClientPeg.get().cancelUpload(basePromise);
|
||||
};
|
||||
return promise1;
|
||||
}
|
||||
}
|
||||
|
||||
export default class ContentMessages {
|
||||
constructor() {
|
||||
this.inprogress = [];
|
||||
this.nextId = 0;
|
||||
this._mediaConfig = null;
|
||||
}
|
||||
private inprogress: IUpload[] = [];
|
||||
private mediaConfig: IMediaConfig = null;
|
||||
|
||||
static sharedInstance() {
|
||||
if (global.mx_ContentMessages === undefined) {
|
||||
global.mx_ContentMessages = new ContentMessages();
|
||||
}
|
||||
return global.mx_ContentMessages;
|
||||
}
|
||||
|
||||
_isFileSizeAcceptable(file) {
|
||||
if (this._mediaConfig !== null &&
|
||||
this._mediaConfig["m.upload.size"] !== undefined &&
|
||||
file.size > this._mediaConfig["m.upload.size"]) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
_ensureMediaConfigFetched() {
|
||||
if (this._mediaConfig !== null) return;
|
||||
|
||||
console.log("[Media Config] Fetching");
|
||||
return MatrixClientPeg.get().getMediaConfig().then((config) => {
|
||||
console.log("[Media Config] Fetched config:", config);
|
||||
return config;
|
||||
}).catch(() => {
|
||||
// Media repo can't or won't report limits, so provide an empty object (no limits).
|
||||
console.log("[Media Config] Could not fetch config, so not limiting uploads.");
|
||||
return {};
|
||||
}).then((config) => {
|
||||
this._mediaConfig = config;
|
||||
});
|
||||
}
|
||||
|
||||
sendStickerContentToRoom(url, roomId, info, text, matrixClient) {
|
||||
sendStickerContentToRoom(url: string, roomId: string, info: string, text: string, matrixClient: MatrixClient) {
|
||||
return MatrixClientPeg.get().sendStickerMessage(roomId, url, info, text).catch((e) => {
|
||||
console.warn(`Failed to send content with URL ${url} to room ${roomId}`, e);
|
||||
throw e;
|
||||
|
@ -356,14 +368,14 @@ export default class ContentMessages {
|
|||
}
|
||||
|
||||
getUploadLimit() {
|
||||
if (this._mediaConfig !== null && this._mediaConfig["m.upload.size"] !== undefined) {
|
||||
return this._mediaConfig["m.upload.size"];
|
||||
if (this.mediaConfig !== null && this.mediaConfig["m.upload.size"] !== undefined) {
|
||||
return this.mediaConfig["m.upload.size"];
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
async sendContentListToRoom(files, roomId, matrixClient) {
|
||||
async sendContentListToRoom(files: File[], roomId: string, matrixClient: MatrixClient) {
|
||||
if (matrixClient.isGuest()) {
|
||||
dis.dispatch({action: 'require_registration'});
|
||||
return;
|
||||
|
@ -372,8 +384,7 @@ export default class ContentMessages {
|
|||
const isQuoting = Boolean(RoomViewStore.getQuotingEvent());
|
||||
if (isQuoting) {
|
||||
const QuestionDialog = sdk.getComponent("dialogs.QuestionDialog");
|
||||
const shouldUpload = await new Promise((resolve) => {
|
||||
Modal.createTrackedDialog('Upload Reply Warning', '', QuestionDialog, {
|
||||
const {finished} = Modal.createTrackedDialog('Upload Reply Warning', '', QuestionDialog, {
|
||||
title: _t('Replying With Files'),
|
||||
description: (
|
||||
<div>{_t(
|
||||
|
@ -383,21 +394,18 @@ export default class ContentMessages {
|
|||
),
|
||||
hasCancelButton: true,
|
||||
button: _t("Continue"),
|
||||
onFinished: (shouldUpload) => {
|
||||
resolve(shouldUpload);
|
||||
},
|
||||
});
|
||||
});
|
||||
const [shouldUpload]: [boolean] = await finished;
|
||||
if (!shouldUpload) return;
|
||||
}
|
||||
|
||||
await this._ensureMediaConfigFetched();
|
||||
await this.ensureMediaConfigFetched();
|
||||
|
||||
const tooBigFiles = [];
|
||||
const okFiles = [];
|
||||
|
||||
for (let i = 0; i < files.length; ++i) {
|
||||
if (this._isFileSizeAcceptable(files[i])) {
|
||||
if (this.isFileSizeAcceptable(files[i])) {
|
||||
okFiles.push(files[i]);
|
||||
} else {
|
||||
tooBigFiles.push(files[i]);
|
||||
|
@ -406,17 +414,12 @@ export default class ContentMessages {
|
|||
|
||||
if (tooBigFiles.length > 0) {
|
||||
const UploadFailureDialog = sdk.getComponent("dialogs.UploadFailureDialog");
|
||||
const uploadFailureDialogPromise = new Promise((resolve) => {
|
||||
Modal.createTrackedDialog('Upload Failure', '', UploadFailureDialog, {
|
||||
const {finished} = Modal.createTrackedDialog('Upload Failure', '', UploadFailureDialog, {
|
||||
badFiles: tooBigFiles,
|
||||
totalFiles: files.length,
|
||||
contentMessages: this,
|
||||
onFinished: (shouldContinue) => {
|
||||
resolve(shouldContinue);
|
||||
},
|
||||
});
|
||||
});
|
||||
const shouldContinue = await uploadFailureDialogPromise;
|
||||
const [shouldContinue]: [boolean] = await finished;
|
||||
if (!shouldContinue) return;
|
||||
}
|
||||
|
||||
|
@ -428,31 +431,47 @@ export default class ContentMessages {
|
|||
for (let i = 0; i < okFiles.length; ++i) {
|
||||
const file = okFiles[i];
|
||||
if (!uploadAll) {
|
||||
const shouldContinue = await new Promise((resolve) => {
|
||||
Modal.createTrackedDialog('Upload Files confirmation', '', UploadConfirmDialog, {
|
||||
const {finished} = Modal.createTrackedDialog('Upload Files confirmation', '', UploadConfirmDialog, {
|
||||
file,
|
||||
currentIndex: i,
|
||||
totalFiles: okFiles.length,
|
||||
onFinished: (shouldContinue, shouldUploadAll) => {
|
||||
});
|
||||
const [shouldContinue, shouldUploadAll]: [boolean, boolean] = await finished;
|
||||
if (!shouldContinue) break;
|
||||
if (shouldUploadAll) {
|
||||
uploadAll = true;
|
||||
}
|
||||
resolve(shouldContinue);
|
||||
},
|
||||
});
|
||||
});
|
||||
if (!shouldContinue) break;
|
||||
}
|
||||
promBefore = this._sendContentToRoom(file, roomId, matrixClient, promBefore);
|
||||
promBefore = this.sendContentToRoom(file, roomId, matrixClient, promBefore);
|
||||
}
|
||||
}
|
||||
|
||||
_sendContentToRoom(file, roomId, matrixClient, promBefore) {
|
||||
const content = {
|
||||
getCurrentUploads() {
|
||||
return this.inprogress.filter(u => !u.canceled);
|
||||
}
|
||||
|
||||
cancelUpload(promise: Promise<any>) {
|
||||
let upload: IUpload;
|
||||
for (let i = 0; i < this.inprogress.length; ++i) {
|
||||
if (this.inprogress[i].promise === promise) {
|
||||
upload = this.inprogress[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (upload) {
|
||||
upload.canceled = true;
|
||||
MatrixClientPeg.get().cancelUpload(upload.promise);
|
||||
dis.dispatch({action: 'upload_canceled', upload});
|
||||
}
|
||||
}
|
||||
|
||||
private sendContentToRoom(file: File, roomId: string, matrixClient: MatrixClient, promBefore: Promise<any>) {
|
||||
const content: IContent = {
|
||||
body: file.name || 'Attachment',
|
||||
info: {
|
||||
size: file.size,
|
||||
},
|
||||
msgtype: "", // set later
|
||||
};
|
||||
|
||||
// if we have a mime type for the file, add it to the message metadata
|
||||
|
@ -461,25 +480,25 @@ export default class ContentMessages {
|
|||
}
|
||||
|
||||
const prom = new Promise((resolve) => {
|
||||
if (file.type.indexOf('image/') == 0) {
|
||||
if (file.type.indexOf('image/') === 0) {
|
||||
content.msgtype = 'm.image';
|
||||
infoForImageFile(matrixClient, roomId, file).then((imageInfo)=>{
|
||||
infoForImageFile(matrixClient, roomId, file).then((imageInfo) => {
|
||||
extend(content.info, imageInfo);
|
||||
resolve();
|
||||
}, (error)=>{
|
||||
console.error(error);
|
||||
}, (e) => {
|
||||
console.error(e);
|
||||
content.msgtype = 'm.file';
|
||||
resolve();
|
||||
});
|
||||
} else if (file.type.indexOf('audio/') == 0) {
|
||||
} else if (file.type.indexOf('audio/') === 0) {
|
||||
content.msgtype = 'm.audio';
|
||||
resolve();
|
||||
} else if (file.type.indexOf('video/') == 0) {
|
||||
} else if (file.type.indexOf('video/') === 0) {
|
||||
content.msgtype = 'm.video';
|
||||
infoForVideoFile(matrixClient, roomId, file).then((videoInfo)=>{
|
||||
infoForVideoFile(matrixClient, roomId, file).then((videoInfo) => {
|
||||
extend(content.info, videoInfo);
|
||||
resolve();
|
||||
}, (error)=>{
|
||||
}, (e) => {
|
||||
content.msgtype = 'm.file';
|
||||
resolve();
|
||||
});
|
||||
|
@ -489,11 +508,17 @@ export default class ContentMessages {
|
|||
}
|
||||
});
|
||||
|
||||
const upload = {
|
||||
// create temporary abort handler for before the actual upload gets passed off to js-sdk
|
||||
(prom as IAbortablePromise<any>).abort = () => {
|
||||
upload.canceled = true;
|
||||
};
|
||||
|
||||
const upload: IUpload = {
|
||||
fileName: file.name || 'Attachment',
|
||||
roomId: roomId,
|
||||
total: 0,
|
||||
total: file.size,
|
||||
loaded: 0,
|
||||
promise: prom,
|
||||
};
|
||||
this.inprogress.push(upload);
|
||||
dis.dispatch({action: 'upload_started'});
|
||||
|
@ -501,15 +526,15 @@ export default class ContentMessages {
|
|||
// Focus the composer view
|
||||
dis.dispatch({action: 'focus_composer'});
|
||||
|
||||
let error;
|
||||
|
||||
function onProgress(ev) {
|
||||
upload.total = ev.total;
|
||||
upload.loaded = ev.loaded;
|
||||
dis.dispatch({action: 'upload_progress', upload: upload});
|
||||
}
|
||||
|
||||
let error;
|
||||
return prom.then(function() {
|
||||
if (upload.canceled) throw new UploadCanceledError();
|
||||
// XXX: upload.promise must be the promise that
|
||||
// is returned by uploadFile as it has an abort()
|
||||
// method hacked onto it.
|
||||
|
@ -520,16 +545,17 @@ export default class ContentMessages {
|
|||
content.file = result.file;
|
||||
content.url = result.url;
|
||||
});
|
||||
}).then((url) => {
|
||||
}).then(() => {
|
||||
// Await previous message being sent into the room
|
||||
return promBefore;
|
||||
}).then(function() {
|
||||
if (upload.canceled) throw new UploadCanceledError();
|
||||
return matrixClient.sendMessage(roomId, content);
|
||||
}, function(err) {
|
||||
error = err;
|
||||
if (!upload.canceled) {
|
||||
let desc = _t("The file '%(fileName)s' failed to upload.", {fileName: upload.fileName});
|
||||
if (err.http_status == 413) {
|
||||
if (err.http_status === 413) {
|
||||
desc = _t(
|
||||
"The file '%(fileName)s' exceeds this homeserver's size limit for uploads",
|
||||
{fileName: upload.fileName},
|
||||
|
@ -542,11 +568,9 @@ export default class ContentMessages {
|
|||
});
|
||||
}
|
||||
}).finally(() => {
|
||||
const inprogressKeys = Object.keys(this.inprogress);
|
||||
for (let i = 0; i < this.inprogress.length; ++i) {
|
||||
const k = inprogressKeys[i];
|
||||
if (this.inprogress[k].promise === upload.promise) {
|
||||
this.inprogress.splice(k, 1);
|
||||
if (this.inprogress[i].promise === upload.promise) {
|
||||
this.inprogress.splice(i, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -555,7 +579,7 @@ export default class ContentMessages {
|
|||
// clear the media size limit so we fetch it again next time
|
||||
// we try to upload
|
||||
if (error && error.http_status === 413) {
|
||||
this._mediaConfig = null;
|
||||
this.mediaConfig = null;
|
||||
}
|
||||
dis.dispatch({action: 'upload_failed', upload, error});
|
||||
} else {
|
||||
|
@ -565,24 +589,35 @@ export default class ContentMessages {
|
|||
});
|
||||
}
|
||||
|
||||
getCurrentUploads() {
|
||||
return this.inprogress.filter(u => !u.canceled);
|
||||
private isFileSizeAcceptable(file: File) {
|
||||
if (this.mediaConfig !== null &&
|
||||
this.mediaConfig["m.upload.size"] !== undefined &&
|
||||
file.size > this.mediaConfig["m.upload.size"]) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
cancelUpload(promise) {
|
||||
const inprogressKeys = Object.keys(this.inprogress);
|
||||
let upload;
|
||||
for (let i = 0; i < this.inprogress.length; ++i) {
|
||||
const k = inprogressKeys[i];
|
||||
if (this.inprogress[k].promise === promise) {
|
||||
upload = this.inprogress[k];
|
||||
break;
|
||||
private ensureMediaConfigFetched() {
|
||||
if (this.mediaConfig !== null) return;
|
||||
|
||||
console.log("[Media Config] Fetching");
|
||||
return MatrixClientPeg.get().getMediaConfig().then((config) => {
|
||||
console.log("[Media Config] Fetched config:", config);
|
||||
return config;
|
||||
}).catch(() => {
|
||||
// Media repo can't or won't report limits, so provide an empty object (no limits).
|
||||
console.log("[Media Config] Could not fetch config, so not limiting uploads.");
|
||||
return {};
|
||||
}).then((config) => {
|
||||
this.mediaConfig = config;
|
||||
});
|
||||
}
|
||||
|
||||
static sharedInstance() {
|
||||
if (window.mx_ContentMessages === undefined) {
|
||||
window.mx_ContentMessages = new ContentMessages();
|
||||
}
|
||||
if (upload) {
|
||||
upload.canceled = true;
|
||||
MatrixClientPeg.get().cancelUpload(upload.promise);
|
||||
dis.dispatch({action: 'upload_canceled', upload});
|
||||
}
|
||||
return window.mx_ContentMessages;
|
||||
}
|
||||
}
|
|
@ -73,7 +73,7 @@ export function showGroupAddRoomDialog(groupId) {
|
|||
title: _t("Add rooms to the community"),
|
||||
description: description,
|
||||
extraNode: checkboxContainer,
|
||||
placeholder: _t("Room name or alias"),
|
||||
placeholder: _t("Room name or address"),
|
||||
button: _t("Add to community"),
|
||||
pickerType: 'room',
|
||||
validAddressTypes: ['mx-room-id'],
|
||||
|
|
|
@ -17,8 +17,8 @@ See the License for the specific language governing permissions and
|
|||
limitations under the License.
|
||||
*/
|
||||
|
||||
import {MatrixClient, MemoryStore} from 'matrix-js-sdk';
|
||||
|
||||
import {MatrixClient} from 'matrix-js-sdk/src/client';
|
||||
import {MemoryStore} from 'matrix-js-sdk/src/store/memory';
|
||||
import * as utils from 'matrix-js-sdk/src/utils';
|
||||
import {EventTimeline} from 'matrix-js-sdk/src/models/event-timeline';
|
||||
import {EventTimelineSet} from 'matrix-js-sdk/src/models/event-timeline-set';
|
||||
|
@ -34,7 +34,7 @@ import IdentityAuthClient from './IdentityAuthClient';
|
|||
import { crossSigningCallbacks } from './CrossSigningManager';
|
||||
import {SHOW_QR_CODE_METHOD} from "matrix-js-sdk/src/crypto/verification/QRCode";
|
||||
|
||||
interface MatrixClientCreds {
|
||||
export interface IMatrixClientCreds {
|
||||
homeserverUrl: string,
|
||||
identityServerUrl: string,
|
||||
userId: string,
|
||||
|
@ -43,28 +43,15 @@ interface MatrixClientCreds {
|
|||
guest: boolean,
|
||||
}
|
||||
|
||||
/**
|
||||
* Wrapper object for handling the js-sdk Matrix Client object in the react-sdk
|
||||
* Handles the creation/initialisation of client objects.
|
||||
* This module provides a singleton instance of this class so the 'current'
|
||||
* Matrix Client object is available easily.
|
||||
*/
|
||||
class _MatrixClientPeg {
|
||||
constructor() {
|
||||
this.matrixClient = null;
|
||||
this._justRegisteredUserId = null;
|
||||
// TODO: Move this to the js-sdk
|
||||
export interface IOpts {
|
||||
initialSyncLimit?: number;
|
||||
pendingEventOrdering?: "detached" | "chronological";
|
||||
lazyLoadMembers?: boolean;
|
||||
}
|
||||
|
||||
// These are the default options used when when the
|
||||
// client is started in 'start'. These can be altered
|
||||
// at any time up to after the 'will_start_client'
|
||||
// event is finished processing.
|
||||
this.opts = {
|
||||
initialSyncLimit: 20,
|
||||
};
|
||||
// the credentials used to init the current client object.
|
||||
// used if we tear it down & recreate it with a different store
|
||||
this._currentClientCreds = null;
|
||||
}
|
||||
export interface IMatrixClientPeg {
|
||||
opts: IOpts;
|
||||
|
||||
/**
|
||||
* Sets the script href passed to the IndexedDB web worker
|
||||
|
@ -73,19 +60,23 @@ class _MatrixClientPeg {
|
|||
*
|
||||
* @param {string} script href to the script to be passed to the web worker
|
||||
*/
|
||||
setIndexedDbWorkerScript(script) {
|
||||
createMatrixClient.indexedDbWorkerScript = script;
|
||||
}
|
||||
setIndexedDbWorkerScript(script: string): void;
|
||||
|
||||
get(): MatrixClient {
|
||||
return this.matrixClient;
|
||||
}
|
||||
/**
|
||||
* Return the server name of the user's homeserver
|
||||
* Throws an error if unable to deduce the homeserver name
|
||||
* (eg. if the user is not logged in)
|
||||
*
|
||||
* @returns {string} The homeserver name, if present.
|
||||
*/
|
||||
getHomeserverName(): string;
|
||||
|
||||
unset() {
|
||||
this.matrixClient = null;
|
||||
get(): MatrixClient;
|
||||
unset(): void;
|
||||
assign(): Promise<any>;
|
||||
start(): Promise<any>;
|
||||
|
||||
MatrixActionCreators.stop();
|
||||
}
|
||||
getCredentials(): IMatrixClientCreds;
|
||||
|
||||
/**
|
||||
* If we've registered a user ID we set this to the ID of the
|
||||
|
@ -95,9 +86,7 @@ class _MatrixClientPeg {
|
|||
*
|
||||
* @param {string} uid The user ID of the user we've just registered
|
||||
*/
|
||||
setJustRegisteredUserId(uid) {
|
||||
this._justRegisteredUserId = uid;
|
||||
}
|
||||
setJustRegisteredUserId(uid: string): void;
|
||||
|
||||
/**
|
||||
* Returns true if the current user has just been registered by this
|
||||
|
@ -105,23 +94,73 @@ class _MatrixClientPeg {
|
|||
*
|
||||
* @returns {bool} True if user has just been registered
|
||||
*/
|
||||
currentUserIsJustRegistered() {
|
||||
currentUserIsJustRegistered(): boolean;
|
||||
|
||||
/**
|
||||
* Replace this MatrixClientPeg's client with a client instance that has
|
||||
* homeserver / identity server URLs and active credentials
|
||||
*
|
||||
* @param {IMatrixClientCreds} creds The new credentials to use.
|
||||
*/
|
||||
replaceUsingCreds(creds: IMatrixClientCreds): void;
|
||||
}
|
||||
|
||||
/**
|
||||
* Wrapper object for handling the js-sdk Matrix Client object in the react-sdk
|
||||
* Handles the creation/initialisation of client objects.
|
||||
* This module provides a singleton instance of this class so the 'current'
|
||||
* Matrix Client object is available easily.
|
||||
*/
|
||||
class _MatrixClientPeg implements IMatrixClientPeg {
|
||||
// These are the default options used when when the
|
||||
// client is started in 'start'. These can be altered
|
||||
// at any time up to after the 'will_start_client'
|
||||
// event is finished processing.
|
||||
public opts: IOpts = {
|
||||
initialSyncLimit: 20,
|
||||
};
|
||||
|
||||
private matrixClient: MatrixClient = null;
|
||||
private justRegisteredUserId: string;
|
||||
|
||||
// the credentials used to init the current client object.
|
||||
// used if we tear it down & recreate it with a different store
|
||||
private currentClientCreds: IMatrixClientCreds;
|
||||
|
||||
constructor() {
|
||||
}
|
||||
|
||||
public setIndexedDbWorkerScript(script: string): void {
|
||||
createMatrixClient.indexedDbWorkerScript = script;
|
||||
}
|
||||
|
||||
public get(): MatrixClient {
|
||||
return this.matrixClient;
|
||||
}
|
||||
|
||||
public unset(): void {
|
||||
this.matrixClient = null;
|
||||
|
||||
MatrixActionCreators.stop();
|
||||
}
|
||||
|
||||
public setJustRegisteredUserId(uid: string): void {
|
||||
this.justRegisteredUserId = uid;
|
||||
}
|
||||
|
||||
public currentUserIsJustRegistered(): boolean {
|
||||
return (
|
||||
this.matrixClient &&
|
||||
this.matrixClient.credentials.userId === this._justRegisteredUserId
|
||||
this.matrixClient.credentials.userId === this.justRegisteredUserId
|
||||
);
|
||||
}
|
||||
|
||||
/*
|
||||
* Replace this MatrixClientPeg's client with a client instance that has
|
||||
* homeserver / identity server URLs and active credentials
|
||||
*/
|
||||
replaceUsingCreds(creds: MatrixClientCreds) {
|
||||
this._currentClientCreds = creds;
|
||||
this._createClient(creds);
|
||||
public replaceUsingCreds(creds: IMatrixClientCreds): void {
|
||||
this.currentClientCreds = creds;
|
||||
this.createClient(creds);
|
||||
}
|
||||
|
||||
async assign() {
|
||||
public async assign(): Promise<any> {
|
||||
for (const dbType of ['indexeddb', 'memory']) {
|
||||
try {
|
||||
const promise = this.matrixClient.store.startup();
|
||||
|
@ -132,7 +171,7 @@ class _MatrixClientPeg {
|
|||
if (dbType === 'indexeddb') {
|
||||
console.error('Error starting matrixclient store - falling back to memory store', err);
|
||||
this.matrixClient.store = new MemoryStore({
|
||||
localStorage: global.localStorage,
|
||||
localStorage: localStorage,
|
||||
});
|
||||
} else {
|
||||
console.error('Failed to start memory store!', err);
|
||||
|
@ -158,9 +197,7 @@ class _MatrixClientPeg {
|
|||
// The js-sdk found a crypto DB too new for it to use
|
||||
const CryptoStoreTooNewDialog =
|
||||
sdk.getComponent("views.dialogs.CryptoStoreTooNewDialog");
|
||||
Modal.createDialog(CryptoStoreTooNewDialog, {
|
||||
host: window.location.host,
|
||||
});
|
||||
Modal.createDialog(CryptoStoreTooNewDialog);
|
||||
}
|
||||
// this can happen for a number of reasons, the most likely being
|
||||
// that the olm library was missing. It's not fatal.
|
||||
|
@ -179,7 +216,7 @@ class _MatrixClientPeg {
|
|||
return opts;
|
||||
}
|
||||
|
||||
async start() {
|
||||
public async start(): Promise<any> {
|
||||
const opts = await this.assign();
|
||||
|
||||
console.log(`MatrixClientPeg: really starting MatrixClient`);
|
||||
|
@ -187,7 +224,7 @@ class _MatrixClientPeg {
|
|||
console.log(`MatrixClientPeg: MatrixClient started`);
|
||||
}
|
||||
|
||||
getCredentials(): MatrixClientCreds {
|
||||
public getCredentials(): IMatrixClientCreds {
|
||||
return {
|
||||
homeserverUrl: this.matrixClient.baseUrl,
|
||||
identityServerUrl: this.matrixClient.idBaseUrl,
|
||||
|
@ -198,12 +235,7 @@ class _MatrixClientPeg {
|
|||
};
|
||||
}
|
||||
|
||||
/*
|
||||
* Return the server name of the user's homeserver
|
||||
* Throws an error if unable to deduce the homeserver name
|
||||
* (eg. if the user is not logged in)
|
||||
*/
|
||||
getHomeserverName() {
|
||||
public getHomeserverName(): string {
|
||||
const matches = /^@.+:(.+)$/.exec(this.matrixClient.credentials.userId);
|
||||
if (matches === null || matches.length < 1) {
|
||||
throw new Error("Failed to derive homeserver name from user ID!");
|
||||
|
@ -211,7 +243,8 @@ class _MatrixClientPeg {
|
|||
return matches[1];
|
||||
}
|
||||
|
||||
_createClient(creds: MatrixClientCreds) {
|
||||
private createClient(creds: IMatrixClientCreds): void {
|
||||
// TODO: Make these opts typesafe with the js-sdk
|
||||
const opts = {
|
||||
baseUrl: creds.homeserverUrl,
|
||||
idBaseUrl: creds.identityServerUrl,
|
||||
|
@ -228,9 +261,9 @@ class _MatrixClientPeg {
|
|||
],
|
||||
unstableClientRelationAggregation: true,
|
||||
identityServer: new IdentityAuthClient(),
|
||||
cryptoCallbacks: {},
|
||||
};
|
||||
|
||||
opts.cryptoCallbacks = {};
|
||||
// These are always installed regardless of the labs flag so that
|
||||
// cross-signing features can toggle on without reloading and also be
|
||||
// accessed immediately after login.
|
||||
|
@ -253,8 +286,8 @@ class _MatrixClientPeg {
|
|||
}
|
||||
}
|
||||
|
||||
if (!global.mxMatrixClientPeg) {
|
||||
global.mxMatrixClientPeg = new _MatrixClientPeg();
|
||||
if (!window.mxMatrixClientPeg) {
|
||||
window.mxMatrixClientPeg = new _MatrixClientPeg();
|
||||
}
|
||||
|
||||
export const MatrixClientPeg = global.mxMatrixClientPeg;
|
||||
export const MatrixClientPeg = window.mxMatrixClientPeg;
|
|
@ -450,8 +450,8 @@ export const Commands = [
|
|||
new Command({
|
||||
command: 'join',
|
||||
aliases: ['j', 'goto'],
|
||||
args: '<room-alias>',
|
||||
description: _td('Joins room with given alias'),
|
||||
args: '<room-address>',
|
||||
description: _td('Joins room with given address'),
|
||||
runFn: function(_, args) {
|
||||
if (args) {
|
||||
// Note: we support 2 versions of this command. The first is
|
||||
|
@ -562,7 +562,7 @@ export const Commands = [
|
|||
}),
|
||||
new Command({
|
||||
command: 'part',
|
||||
args: '[<room-alias>]',
|
||||
args: '[<room-address>]',
|
||||
description: _td('Leave room'),
|
||||
runFn: function(roomId, args) {
|
||||
const cli = MatrixClientPeg.get();
|
||||
|
@ -594,7 +594,7 @@ export const Commands = [
|
|||
}
|
||||
if (targetRoomId) break;
|
||||
}
|
||||
if (!targetRoomId) return reject(_t('Unrecognised room alias:') + ' ' + roomAlias);
|
||||
if (!targetRoomId) return reject(_t('Unrecognised room address:') + ' ' + roomAlias);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,206 +0,0 @@
|
|||
/*
|
||||
Copyright 2015, 2016 OpenMarket Ltd
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
import React from "react";
|
||||
import createReactClass from 'create-react-class';
|
||||
import PropTypes from 'prop-types';
|
||||
import { _t } from '../../../languageHandler';
|
||||
import {MatrixClientPeg} from "../../../MatrixClientPeg";
|
||||
import {Key} from "../../../Keyboard";
|
||||
import * as sdk from "../../../index";
|
||||
|
||||
// XXX: This component is not cross-signing aware.
|
||||
// https://github.com/vector-im/riot-web/issues/11752 tracks either updating this
|
||||
// component or taking it out to pasture.
|
||||
export default createReactClass({
|
||||
displayName: 'EncryptedEventDialog',
|
||||
|
||||
propTypes: {
|
||||
event: PropTypes.object.isRequired,
|
||||
onFinished: PropTypes.func.isRequired,
|
||||
},
|
||||
|
||||
getInitialState: function() {
|
||||
return { device: null };
|
||||
},
|
||||
|
||||
componentDidMount: function() {
|
||||
this._unmounted = false;
|
||||
const client = MatrixClientPeg.get();
|
||||
|
||||
// first try to load the device from our store.
|
||||
//
|
||||
this.refreshDevice().then((dev) => {
|
||||
if (dev) {
|
||||
return dev;
|
||||
}
|
||||
|
||||
// tell the client to try to refresh the device list for this user
|
||||
return client.downloadKeys([this.props.event.getSender()], true).then(() => {
|
||||
return this.refreshDevice();
|
||||
});
|
||||
}).then((dev) => {
|
||||
if (this._unmounted) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.setState({ device: dev });
|
||||
client.on("deviceVerificationChanged", this.onDeviceVerificationChanged);
|
||||
}, (err)=>{
|
||||
console.log("Error downloading devices", err);
|
||||
});
|
||||
},
|
||||
|
||||
componentWillUnmount: function() {
|
||||
this._unmounted = true;
|
||||
const client = MatrixClientPeg.get();
|
||||
if (client) {
|
||||
client.removeListener("deviceVerificationChanged", this.onDeviceVerificationChanged);
|
||||
}
|
||||
},
|
||||
|
||||
refreshDevice: function() {
|
||||
// Promise.resolve to handle transition from static result to promise; can be removed
|
||||
// in future
|
||||
return Promise.resolve(MatrixClientPeg.get().getEventSenderDeviceInfo(this.props.event));
|
||||
},
|
||||
|
||||
onDeviceVerificationChanged: function(userId, device) {
|
||||
if (userId === this.props.event.getSender()) {
|
||||
this.refreshDevice().then((dev) => {
|
||||
this.setState({ device: dev });
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
onKeyDown: function(e) {
|
||||
if (e.key === Key.ESCAPE) {
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
this.props.onFinished(false);
|
||||
}
|
||||
},
|
||||
|
||||
_renderDeviceInfo: function() {
|
||||
const device = this.state.device;
|
||||
if (!device) {
|
||||
return (<i>{ _t('unknown device') }</i>);
|
||||
}
|
||||
|
||||
let verificationStatus = (<b>{ _t('NOT verified') }</b>);
|
||||
if (device.isBlocked()) {
|
||||
verificationStatus = (<b>{ _t('Blacklisted') }</b>);
|
||||
} else if (device.isVerified()) {
|
||||
verificationStatus = _t('verified');
|
||||
}
|
||||
|
||||
return (
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>{ _t('Name') }</td>
|
||||
<td>{ device.getDisplayName() }</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{ _t('Device ID') }</td>
|
||||
<td><code>{ device.deviceId }</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{ _t('Verification') }</td>
|
||||
<td>{ verificationStatus }</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{ _t('Ed25519 fingerprint') }</td>
|
||||
<td><code>{ device.getFingerprint() }</code></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
);
|
||||
},
|
||||
|
||||
_renderEventInfo: function() {
|
||||
const event = this.props.event;
|
||||
|
||||
return (
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>{ _t('User ID') }</td>
|
||||
<td>{ event.getSender() }</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{ _t('Curve25519 identity key') }</td>
|
||||
<td><code>{ event.getSenderKey() || <i>{ _t('none') }</i> }</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{ _t('Claimed Ed25519 fingerprint key') }</td>
|
||||
<td><code>{ event.getKeysClaimed().ed25519 || <i>{ _t('none') }</i> }</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>{ _t('Algorithm') }</td>
|
||||
<td>{ event.getWireContent().algorithm || <i>{ _t('unencrypted') }</i> }</td>
|
||||
</tr>
|
||||
{
|
||||
event.getContent().msgtype === 'm.bad.encrypted' ? (
|
||||
<tr>
|
||||
<td>{ _t('Decryption error') }</td>
|
||||
<td>{ event.getContent().body }</td>
|
||||
</tr>
|
||||
) : null
|
||||
}
|
||||
<tr>
|
||||
<td>{ _t('Session ID') }</td>
|
||||
<td><code>{ event.getWireContent().session_id || <i>{ _t('none') }</i> }</code></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
);
|
||||
},
|
||||
|
||||
render: function() {
|
||||
const DeviceVerifyButtons = sdk.getComponent('elements.DeviceVerifyButtons');
|
||||
|
||||
let buttons = null;
|
||||
if (this.state.device) {
|
||||
buttons = (
|
||||
<DeviceVerifyButtons device={this.state.device}
|
||||
userId={this.props.event.getSender()}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="mx_EncryptedEventDialog" onKeyDown={this.onKeyDown}>
|
||||
<div className="mx_Dialog_title">
|
||||
{ _t('End-to-end encryption information') }
|
||||
</div>
|
||||
<div className="mx_Dialog_content">
|
||||
<h4>{ _t('Event information') }</h4>
|
||||
{ this._renderEventInfo() }
|
||||
|
||||
<h4>{ _t('Sender session information') }</h4>
|
||||
{ this._renderDeviceInfo() }
|
||||
</div>
|
||||
<div className="mx_Dialog_buttons">
|
||||
<button className="mx_Dialog_primary" onClick={this.props.onFinished} autoFocus={true}>
|
||||
{ _t('OK') }
|
||||
</button>
|
||||
{ buttons }
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
},
|
||||
});
|
|
@ -284,8 +284,10 @@ export default class CreateKeyBackupDialog extends React.PureComponent {
|
|||
const AccessibleButton = sdk.getComponent('elements.AccessibleButton');
|
||||
|
||||
let matchText;
|
||||
let changeText;
|
||||
if (this.state.passPhraseConfirm === this.state.passPhrase) {
|
||||
matchText = _t("That matches!");
|
||||
changeText = _t("Use a different passphrase?");
|
||||
} else if (!this.state.passPhrase.startsWith(this.state.passPhraseConfirm)) {
|
||||
// only tell them they're wrong if they've actually gone wrong.
|
||||
// Security concious readers will note that if you left riot-web unattended
|
||||
|
@ -295,6 +297,7 @@ export default class CreateKeyBackupDialog extends React.PureComponent {
|
|||
// Note that not having typed anything at all will not hit this clause and
|
||||
// fall through so empty box === no hint.
|
||||
matchText = _t("That doesn't match.");
|
||||
changeText = _t("Go back to set it again.");
|
||||
}
|
||||
|
||||
let passPhraseMatch = null;
|
||||
|
@ -303,7 +306,7 @@ export default class CreateKeyBackupDialog extends React.PureComponent {
|
|||
<div>{matchText}</div>
|
||||
<div>
|
||||
<AccessibleButton element="span" className="mx_linkButton" onClick={this._onSetAgainClick}>
|
||||
{_t("Go back to set it again.")}
|
||||
{changeText}
|
||||
</AccessibleButton>
|
||||
</div>
|
||||
</div>;
|
||||
|
|
|
@ -538,8 +538,10 @@ export default class CreateSecretStorageDialog extends React.PureComponent {
|
|||
const Field = sdk.getComponent('views.elements.Field');
|
||||
|
||||
let matchText;
|
||||
let changeText;
|
||||
if (this.state.passPhraseConfirm === this.state.passPhrase) {
|
||||
matchText = _t("That matches!");
|
||||
changeText = _t("Use a different passphrase?");
|
||||
} else if (!this.state.passPhrase.startsWith(this.state.passPhraseConfirm)) {
|
||||
// only tell them they're wrong if they've actually gone wrong.
|
||||
// Security concious readers will note that if you left riot-web unattended
|
||||
|
@ -549,6 +551,7 @@ export default class CreateSecretStorageDialog extends React.PureComponent {
|
|||
// Note that not having typed anything at all will not hit this clause and
|
||||
// fall through so empty box === no hint.
|
||||
matchText = _t("That doesn't match.");
|
||||
changeText = _t("Go back to set it again.");
|
||||
}
|
||||
|
||||
let passPhraseMatch = null;
|
||||
|
@ -557,7 +560,7 @@ export default class CreateSecretStorageDialog extends React.PureComponent {
|
|||
<div>{matchText}</div>
|
||||
<div>
|
||||
<AccessibleButton element="span" className="mx_linkButton" onClick={this._onSetAgainClick}>
|
||||
{_t("Go back to set it again.")}
|
||||
{changeText}
|
||||
</AccessibleButton>
|
||||
</div>
|
||||
</div>;
|
||||
|
|
|
@ -69,7 +69,7 @@ export default class EmojiProvider extends AutocompleteProvider {
|
|||
|
||||
constructor() {
|
||||
super(EMOJI_REGEX);
|
||||
this.matcher = new QueryMatcher(EMOJI_SHORTNAMES, {
|
||||
this.matcher = new QueryMatcher<IEmojiShort>(EMOJI_SHORTNAMES, {
|
||||
keys: ['emoji.emoticon', 'shortname'],
|
||||
funcs: [
|
||||
(o) => o.emoji.shortcodes.length > 1 ? o.emoji.shortcodes.slice(1).map(s => `:${s}:`).join(" ") : "", // aliases
|
||||
|
|
|
@ -45,7 +45,7 @@ interface IOptions<T extends {}> {
|
|||
* @param {function[]} options.funcs List of functions that when called with the
|
||||
* object as an arg will return a string to use as an index
|
||||
*/
|
||||
export default class QueryMatcher<T> {
|
||||
export default class QueryMatcher<T extends Object> {
|
||||
private _options: IOptions<T>;
|
||||
private _keys: IOptions<T>["keys"];
|
||||
private _funcs: Required<IOptions<T>["funcs"]>;
|
||||
|
@ -75,7 +75,11 @@ export default class QueryMatcher<T> {
|
|||
this._items = new Map();
|
||||
|
||||
for (const object of objects) {
|
||||
const keyValues = _at(object, this._keys);
|
||||
// Need to use unsafe coerce here because the objects can have any
|
||||
// type for their values. We assume that those values who's keys have
|
||||
// been specified will be string. Also, we cannot infer all the
|
||||
// types of the keys of the objects at compile.
|
||||
const keyValues = _at<string>(<any>object, this._keys);
|
||||
|
||||
for (const f of this._funcs) {
|
||||
keyValues.push(f(object));
|
||||
|
|
|
@ -92,7 +92,7 @@ const CategoryRoomList = createReactClass({
|
|||
Modal.createTrackedDialog('Add Rooms to Group Summary', '', AddressPickerDialog, {
|
||||
title: _t('Add rooms to the community summary'),
|
||||
description: _t("Which rooms would you like to add to this summary?"),
|
||||
placeholder: _t("Room name or alias"),
|
||||
placeholder: _t("Room name or address"),
|
||||
button: _t("Add to summary"),
|
||||
pickerType: 'room',
|
||||
validAddressTypes: ['mx-room-id'],
|
||||
|
|
|
@ -29,7 +29,7 @@ import { fixupColorFonts } from '../../utils/FontManager';
|
|||
import * as sdk from '../../index';
|
||||
import dis from '../../dispatcher/dispatcher';
|
||||
import sessionStore from '../../stores/SessionStore';
|
||||
import {MatrixClientPeg, MatrixClientCreds} from '../../MatrixClientPeg';
|
||||
import {MatrixClientPeg, IMatrixClientCreds} from '../../MatrixClientPeg';
|
||||
import SettingsStore from "../../settings/SettingsStore";
|
||||
|
||||
import TagOrderActions from '../../actions/TagOrderActions';
|
||||
|
@ -66,7 +66,7 @@ function canElementReceiveInput(el) {
|
|||
|
||||
interface IProps {
|
||||
matrixClient: MatrixClient;
|
||||
onRegistered: (credentials: MatrixClientCreds) => Promise<MatrixClient>;
|
||||
onRegistered: (credentials: IMatrixClientCreds) => Promise<MatrixClient>;
|
||||
viaServers?: string[];
|
||||
hideToSRUsers: boolean;
|
||||
resizeNotifier: ResizeNotifier;
|
||||
|
|
|
@ -904,9 +904,20 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
|
|||
});
|
||||
}
|
||||
|
||||
private viewGroup(payload) {
|
||||
private async viewGroup(payload) {
|
||||
const groupId = payload.group_id;
|
||||
|
||||
// Wait for the first sync to complete
|
||||
if (!this.firstSyncComplete) {
|
||||
if (!this.firstSyncPromise) {
|
||||
console.warn('Cannot view a group before first sync. group_id:', groupId);
|
||||
return;
|
||||
}
|
||||
await this.firstSyncPromise.promise;
|
||||
}
|
||||
|
||||
this.setState({
|
||||
view: Views.LOGGED_IN,
|
||||
currentGroupId: groupId,
|
||||
currentGroupIsNew: payload.group_is_new,
|
||||
});
|
||||
|
|
|
@ -199,7 +199,7 @@ export default createReactClass({
|
|||
|
||||
let desc;
|
||||
if (alias) {
|
||||
desc = _t('Delete the room alias %(alias)s and remove %(name)s from the directory?', {alias: alias, name: name});
|
||||
desc = _t('Delete the room address %(alias)s and remove %(name)s from the directory?', {alias, name});
|
||||
} else {
|
||||
desc = _t('Remove %(name)s from the directory?', {name: name});
|
||||
}
|
||||
|
@ -216,7 +216,7 @@ export default createReactClass({
|
|||
|
||||
MatrixClientPeg.get().setRoomDirectoryVisibility(room.room_id, 'private').then(() => {
|
||||
if (!alias) return;
|
||||
step = _t('delete the alias.');
|
||||
step = _t('delete the address.');
|
||||
return MatrixClientPeg.get().deleteAlias(alias);
|
||||
}).then(() => {
|
||||
modal.close();
|
||||
|
|
|
@ -15,12 +15,12 @@ limitations under the License.
|
|||
*/
|
||||
|
||||
import * as React from "react";
|
||||
import { _t } from '../../languageHandler';
|
||||
import ToastStore, {IToast} from "../../stores/ToastStore";
|
||||
import classNames from "classnames";
|
||||
|
||||
interface IState {
|
||||
toasts: IToast<any>[];
|
||||
countSeen: number;
|
||||
}
|
||||
|
||||
export default class ToastContainer extends React.Component<{}, IState> {
|
||||
|
@ -28,6 +28,7 @@ export default class ToastContainer extends React.Component<{}, IState> {
|
|||
super(props, context);
|
||||
this.state = {
|
||||
toasts: ToastStore.sharedInstance().getToasts(),
|
||||
countSeen: ToastStore.sharedInstance().getCountSeen(),
|
||||
};
|
||||
|
||||
// Start listening here rather than in componentDidMount because
|
||||
|
@ -42,7 +43,10 @@ export default class ToastContainer extends React.Component<{}, IState> {
|
|||
}
|
||||
|
||||
_onToastStoreUpdate = () => {
|
||||
this.setState({toasts: ToastStore.sharedInstance().getToasts()});
|
||||
this.setState({
|
||||
toasts: ToastStore.sharedInstance().getToasts(),
|
||||
countSeen: ToastStore.sharedInstance().getCountSeen(),
|
||||
});
|
||||
};
|
||||
|
||||
render() {
|
||||
|
@ -56,14 +60,21 @@ export default class ToastContainer extends React.Component<{}, IState> {
|
|||
"mx_Toast_hasIcon": icon,
|
||||
[`mx_Toast_icon_${icon}`]: icon,
|
||||
});
|
||||
const countIndicator = isStacked ? _t(" (1/%(totalCount)s)", {totalCount}) : null;
|
||||
|
||||
let countIndicator;
|
||||
if (isStacked || this.state.countSeen > 0) {
|
||||
countIndicator = ` (${this.state.countSeen + 1}/${this.state.countSeen + totalCount})`;
|
||||
}
|
||||
|
||||
const toastProps = Object.assign({}, props, {
|
||||
key,
|
||||
toastKey: key,
|
||||
});
|
||||
toast = (<div className={toastClasses}>
|
||||
<h2>{title}{countIndicator}</h2>
|
||||
<div className="mx_Toast_title">
|
||||
<h2>{title}</h2>
|
||||
<span>{countIndicator}</span>
|
||||
</div>
|
||||
<div className="mx_Toast_body">{React.createElement(component, toastProps)}</div>
|
||||
</div>);
|
||||
}
|
||||
|
|
|
@ -36,7 +36,7 @@ interface IProps {
|
|||
labelStrongPassword?: string;
|
||||
labelAllowedButUnsafe?: string;
|
||||
|
||||
onChange(ev: KeyboardEvent);
|
||||
onChange(ev: React.FormEvent<HTMLElement>);
|
||||
onValidate(result: IValidationResult);
|
||||
}
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
Copyright 2015, 2016 OpenMarket Ltd
|
||||
Copyright 2018 New Vector Ltd
|
||||
Copyright 2019 Michael Telatynski <7t3chguy@gmail.com>
|
||||
Copyright 2019 The Matrix.org Foundation C.I.C.
|
||||
Copyright 2019, 2020 The Matrix.org Foundation C.I.C.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
|
@ -17,154 +17,83 @@ See the License for the specific language governing permissions and
|
|||
limitations under the License.
|
||||
*/
|
||||
|
||||
import React from 'react';
|
||||
import React, {useCallback, useContext, useEffect, useMemo, useState} from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import createReactClass from 'create-react-class';
|
||||
import * as AvatarLogic from '../../../Avatar';
|
||||
import SettingsStore from "../../../settings/SettingsStore";
|
||||
import AccessibleButton from '../elements/AccessibleButton';
|
||||
import MatrixClientContext from "../../../contexts/MatrixClientContext";
|
||||
import {useEventEmitter} from "../../../hooks/useEventEmitter";
|
||||
import {toPx} from "../../../utils/units";
|
||||
|
||||
export default createReactClass({
|
||||
displayName: 'BaseAvatar',
|
||||
const useImageUrl = ({url, urls}) => {
|
||||
const [imageUrls, setUrls] = useState([]);
|
||||
const [urlsIndex, setIndex] = useState();
|
||||
|
||||
propTypes: {
|
||||
name: PropTypes.string.isRequired, // The name (first initial used as default)
|
||||
idName: PropTypes.string, // ID for generating hash colours
|
||||
title: PropTypes.string, // onHover title text
|
||||
url: PropTypes.string, // highest priority of them all, shortcut to set in urls[0]
|
||||
urls: PropTypes.array, // [highest_priority, ... , lowest_priority]
|
||||
width: PropTypes.number,
|
||||
height: PropTypes.number,
|
||||
// XXX resizeMethod not actually used.
|
||||
resizeMethod: PropTypes.string,
|
||||
defaultToInitialLetter: PropTypes.bool, // true to add default url
|
||||
inputRef: PropTypes.oneOfType([
|
||||
// Either a function
|
||||
PropTypes.func,
|
||||
// Or the instance of a DOM native element
|
||||
PropTypes.shape({ current: PropTypes.instanceOf(Element) }),
|
||||
]),
|
||||
},
|
||||
const onError = useCallback(() => {
|
||||
setIndex(i => i + 1); // try the next one
|
||||
}, []);
|
||||
const memoizedUrls = useMemo(() => urls, [JSON.stringify(urls)]); // eslint-disable-line react-hooks/exhaustive-deps
|
||||
|
||||
statics: {
|
||||
contextType: MatrixClientContext,
|
||||
},
|
||||
|
||||
getDefaultProps: function() {
|
||||
return {
|
||||
width: 40,
|
||||
height: 40,
|
||||
resizeMethod: 'crop',
|
||||
defaultToInitialLetter: true,
|
||||
};
|
||||
},
|
||||
|
||||
getInitialState: function() {
|
||||
return this._getState(this.props);
|
||||
},
|
||||
|
||||
componentDidMount() {
|
||||
this.unmounted = false;
|
||||
this.context.on('sync', this.onClientSync);
|
||||
},
|
||||
|
||||
componentWillUnmount() {
|
||||
this.unmounted = true;
|
||||
this.context.removeListener('sync', this.onClientSync);
|
||||
},
|
||||
|
||||
// TODO: [REACT-WARNING] Replace with appropriate lifecycle event
|
||||
UNSAFE_componentWillReceiveProps: function(nextProps) {
|
||||
// work out if we need to call setState (if the image URLs array has changed)
|
||||
const newState = this._getState(nextProps);
|
||||
const newImageUrls = newState.imageUrls;
|
||||
const oldImageUrls = this.state.imageUrls;
|
||||
if (newImageUrls.length !== oldImageUrls.length) {
|
||||
this.setState(newState); // detected a new entry
|
||||
} else {
|
||||
// check each one to see if they are the same
|
||||
for (let i = 0; i < newImageUrls.length; i++) {
|
||||
if (oldImageUrls[i] !== newImageUrls[i]) {
|
||||
this.setState(newState); // detected a diff
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
onClientSync: function(syncState, prevState) {
|
||||
if (this.unmounted) return;
|
||||
|
||||
// Consider the client reconnected if there is no error with syncing.
|
||||
// This means the state could be RECONNECTING, SYNCING, PREPARED or CATCHUP.
|
||||
const reconnected = syncState !== "ERROR" && prevState !== syncState;
|
||||
if (reconnected &&
|
||||
// Did we fall back?
|
||||
this.state.urlsIndex > 0
|
||||
) {
|
||||
// Start from the highest priority URL again
|
||||
this.setState({
|
||||
urlsIndex: 0,
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
_getState: function(props) {
|
||||
useEffect(() => {
|
||||
// work out the full set of urls to try to load. This is formed like so:
|
||||
// imageUrls: [ props.url, props.urls, default image ]
|
||||
// imageUrls: [ props.url, ...props.urls ]
|
||||
|
||||
let urls = [];
|
||||
let _urls = [];
|
||||
if (!SettingsStore.getValue("lowBandwidth")) {
|
||||
urls = props.urls || [];
|
||||
_urls = memoizedUrls || [];
|
||||
|
||||
if (props.url) {
|
||||
urls.unshift(props.url); // put in urls[0]
|
||||
if (url) {
|
||||
_urls.unshift(url); // put in urls[0]
|
||||
}
|
||||
}
|
||||
|
||||
let defaultImageUrl = null;
|
||||
if (props.defaultToInitialLetter) {
|
||||
defaultImageUrl = AvatarLogic.defaultAvatarUrlForString(
|
||||
props.idName || props.name,
|
||||
);
|
||||
urls.push(defaultImageUrl); // lowest priority
|
||||
}
|
||||
|
||||
// deduplicate URLs
|
||||
urls = Array.from(new Set(urls));
|
||||
_urls = Array.from(new Set(_urls));
|
||||
|
||||
return {
|
||||
imageUrls: urls,
|
||||
defaultImageUrl: defaultImageUrl,
|
||||
urlsIndex: 0,
|
||||
};
|
||||
},
|
||||
setIndex(0);
|
||||
setUrls(_urls);
|
||||
}, [url, memoizedUrls]); // eslint-disable-line react-hooks/exhaustive-deps
|
||||
|
||||
onError: function(ev) {
|
||||
const nextIndex = this.state.urlsIndex + 1;
|
||||
if (nextIndex < this.state.imageUrls.length) {
|
||||
// try the next one
|
||||
this.setState({
|
||||
urlsIndex: nextIndex,
|
||||
});
|
||||
const cli = useContext(MatrixClientContext);
|
||||
const onClientSync = useCallback((syncState, prevState) => {
|
||||
// Consider the client reconnected if there is no error with syncing.
|
||||
// This means the state could be RECONNECTING, SYNCING, PREPARED or CATCHUP.
|
||||
const reconnected = syncState !== "ERROR" && prevState !== syncState;
|
||||
if (reconnected) {
|
||||
setIndex(0);
|
||||
}
|
||||
},
|
||||
}, []);
|
||||
useEventEmitter(cli, "sync", onClientSync);
|
||||
|
||||
render: function() {
|
||||
const imageUrl = this.state.imageUrls[this.state.urlsIndex];
|
||||
const imageUrl = imageUrls[urlsIndex];
|
||||
return [imageUrl, onError];
|
||||
};
|
||||
|
||||
const BaseAvatar = (props) => {
|
||||
const {
|
||||
name, idName, title, url, urls, width, height, resizeMethod,
|
||||
defaultToInitialLetter, onClick, inputRef,
|
||||
name,
|
||||
idName,
|
||||
title,
|
||||
url,
|
||||
urls,
|
||||
width=40,
|
||||
height=40,
|
||||
resizeMethod="crop", // eslint-disable-line no-unused-vars
|
||||
defaultToInitialLetter=true,
|
||||
onClick,
|
||||
inputRef,
|
||||
...otherProps
|
||||
} = this.props;
|
||||
} = props;
|
||||
|
||||
if (imageUrl === this.state.defaultImageUrl) {
|
||||
const [imageUrl, onError] = useImageUrl({url, urls});
|
||||
|
||||
if (!imageUrl && defaultToInitialLetter) {
|
||||
const initialLetter = AvatarLogic.getInitialLetter(name);
|
||||
const textNode = (
|
||||
<span className="mx_BaseAvatar_initial" aria-hidden="true"
|
||||
<span
|
||||
className="mx_BaseAvatar_initial"
|
||||
aria-hidden="true"
|
||||
style={{
|
||||
fontSize: toPx(width * 0.65),
|
||||
width: toPx(width),
|
||||
|
@ -175,18 +104,27 @@ export default createReactClass({
|
|||
</span>
|
||||
);
|
||||
const imgNode = (
|
||||
<img className="mx_BaseAvatar_image" src={imageUrl}
|
||||
alt="" title={title} onError={this.onError}
|
||||
aria-hidden="true"
|
||||
<img
|
||||
className="mx_BaseAvatar_image"
|
||||
src={AvatarLogic.defaultAvatarUrlForString(idName || name)}
|
||||
alt=""
|
||||
title={title}
|
||||
onError={onError}
|
||||
style={{
|
||||
width: toPx(width),
|
||||
height: toPx(height)
|
||||
}} />
|
||||
height: toPx(height),
|
||||
}}
|
||||
aria-hidden="true" />
|
||||
);
|
||||
|
||||
if (onClick != null) {
|
||||
return (
|
||||
<AccessibleButton element='span' className="mx_BaseAvatar"
|
||||
onClick={onClick} inputRef={inputRef} {...otherProps}
|
||||
<AccessibleButton
|
||||
{...otherProps}
|
||||
element="span"
|
||||
className="mx_BaseAvatar"
|
||||
onClick={onClick}
|
||||
inputRef={inputRef}
|
||||
>
|
||||
{ textNode }
|
||||
{ imgNode }
|
||||
|
@ -201,6 +139,7 @@ export default createReactClass({
|
|||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (onClick != null) {
|
||||
return (
|
||||
<AccessibleButton
|
||||
|
@ -208,7 +147,7 @@ export default createReactClass({
|
|||
element='img'
|
||||
src={imageUrl}
|
||||
onClick={onClick}
|
||||
onError={this.onError}
|
||||
onError={onError}
|
||||
style={{
|
||||
width: toPx(width),
|
||||
height: toPx(height),
|
||||
|
@ -222,7 +161,7 @@ export default createReactClass({
|
|||
<img
|
||||
className="mx_BaseAvatar mx_BaseAvatar_image"
|
||||
src={imageUrl}
|
||||
onError={this.onError}
|
||||
onError={onError}
|
||||
style={{
|
||||
width: toPx(width),
|
||||
height: toPx(height),
|
||||
|
@ -232,5 +171,28 @@ export default createReactClass({
|
|||
{...otherProps} />
|
||||
);
|
||||
}
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
BaseAvatar.displayName = "BaseAvatar";
|
||||
|
||||
BaseAvatar.propTypes = {
|
||||
name: PropTypes.string.isRequired, // The name (first initial used as default)
|
||||
idName: PropTypes.string, // ID for generating hash colours
|
||||
title: PropTypes.string, // onHover title text
|
||||
url: PropTypes.string, // highest priority of them all, shortcut to set in urls[0]
|
||||
urls: PropTypes.array, // [highest_priority, ... , lowest_priority]
|
||||
width: PropTypes.number,
|
||||
height: PropTypes.number,
|
||||
// XXX resizeMethod not actually used.
|
||||
resizeMethod: PropTypes.string,
|
||||
defaultToInitialLetter: PropTypes.bool, // true to add default url
|
||||
onClick: PropTypes.func,
|
||||
inputRef: PropTypes.oneOfType([
|
||||
// Either a function
|
||||
PropTypes.func,
|
||||
// Or the instance of a DOM native element
|
||||
PropTypes.shape({ current: PropTypes.instanceOf(Element) }),
|
||||
]),
|
||||
};
|
||||
|
||||
export default BaseAvatar;
|
||||
|
|
|
@ -18,10 +18,10 @@ limitations under the License.
|
|||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import createReactClass from 'create-react-class';
|
||||
import * as Avatar from '../../../Avatar';
|
||||
import * as sdk from "../../../index";
|
||||
import dis from "../../../dispatcher/dispatcher";
|
||||
import {Action} from "../../../dispatcher/actions";
|
||||
import {MatrixClientPeg} from "../../../MatrixClientPeg";
|
||||
|
||||
export default createReactClass({
|
||||
displayName: 'MemberAvatar',
|
||||
|
@ -62,10 +62,14 @@ export default createReactClass({
|
|||
return {
|
||||
name: props.member.name,
|
||||
title: props.title || props.member.userId,
|
||||
imageUrl: Avatar.avatarUrlForMember(props.member,
|
||||
props.width,
|
||||
props.height,
|
||||
props.resizeMethod),
|
||||
imageUrl: props.member.getAvatarUrl(
|
||||
MatrixClientPeg.get().getHomeserverUrl(),
|
||||
Math.floor(props.width * window.devicePixelRatio),
|
||||
Math.floor(props.height * window.devicePixelRatio),
|
||||
props.resizeMethod,
|
||||
false,
|
||||
false,
|
||||
),
|
||||
};
|
||||
} else if (props.fallbackUserId) {
|
||||
return {
|
||||
|
|
|
@ -116,11 +116,6 @@ export default createReactClass({
|
|||
this.closeMenu();
|
||||
},
|
||||
|
||||
e2eInfoClicked: function() {
|
||||
this.props.e2eInfoCallback();
|
||||
this.closeMenu();
|
||||
},
|
||||
|
||||
onReportEventClick: function() {
|
||||
const ReportEventDialog = sdk.getComponent("dialogs.ReportEventDialog");
|
||||
Modal.createTrackedDialog('Report Event', '', ReportEventDialog, {
|
||||
|
@ -465,15 +460,6 @@ export default createReactClass({
|
|||
);
|
||||
}
|
||||
|
||||
let e2eInfo;
|
||||
if (this.props.e2eInfoCallback) {
|
||||
e2eInfo = (
|
||||
<MenuItem className="mx_MessageContextMenu_field" onClick={this.e2eInfoClicked}>
|
||||
{ _t('End-to-end encryption information') }
|
||||
</MenuItem>
|
||||
);
|
||||
}
|
||||
|
||||
let reportEventButton;
|
||||
if (mxEvent.getSender() !== me) {
|
||||
reportEventButton = (
|
||||
|
@ -500,7 +486,6 @@ export default createReactClass({
|
|||
{ quoteButton }
|
||||
{ externalURLButton }
|
||||
{ collapseReplyThread }
|
||||
{ e2eInfo }
|
||||
{ reportEventButton }
|
||||
</div>
|
||||
);
|
||||
|
|
|
@ -98,7 +98,7 @@ export default createReactClass({
|
|||
|
||||
render: function() {
|
||||
return (
|
||||
<input type="text" className="mx_RoomAlias" placeholder={_t("Alias (optional)")}
|
||||
<input type="text" className="mx_RoomAlias" placeholder={_t("Address (optional)")}
|
||||
onChange={this.onValueChanged} onFocus={this.onFocus} onBlur={this.onBlur}
|
||||
value={this.props.alias} />
|
||||
);
|
||||
|
|
|
@ -181,7 +181,7 @@ export default createReactClass({
|
|||
let publicPrivateLabel;
|
||||
let aliasField;
|
||||
if (this.state.isPublic) {
|
||||
publicPrivateLabel = (<p>{_t("Set a room alias to easily share your room with other people.")}</p>);
|
||||
publicPrivateLabel = (<p>{_t("Set a room address to easily share your room with other people.")}</p>);
|
||||
const domain = MatrixClientPeg.get().getDomain();
|
||||
aliasField = (
|
||||
<div className="mx_CreateRoomDialog_aliasContainer">
|
||||
|
|
|
@ -42,11 +42,9 @@ export default (props) => {
|
|||
};
|
||||
|
||||
const description =
|
||||
_t("You've previously used a newer version of Riot on %(host)s. " +
|
||||
_t("You've previously used a newer version of Riot with this session. " +
|
||||
"To use this version again with end to end encryption, you will " +
|
||||
"need to sign out and back in again. ",
|
||||
{host: props.host},
|
||||
);
|
||||
"need to sign out and back in again.");
|
||||
|
||||
const BaseDialog = sdk.getComponent('views.dialogs.BaseDialog');
|
||||
const DialogButtons = sdk.getComponent('views.elements.DialogButtons');
|
||||
|
|
|
@ -15,10 +15,10 @@ limitations under the License.
|
|||
*/
|
||||
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import classNames from 'classnames';
|
||||
import * as sdk from '../../../index';
|
||||
import { debounce } from 'lodash';
|
||||
import {IFieldState, IValidationResult} from "../elements/Validation";
|
||||
|
||||
// Invoke validation from user input (when typing, etc.) at most once every N ms.
|
||||
const VALIDATION_THROTTLE_MS = 200;
|
||||
|
@ -29,58 +29,93 @@ function getId() {
|
|||
return `${BASE_ID}_${count++}`;
|
||||
}
|
||||
|
||||
export default class Field extends React.PureComponent {
|
||||
static propTypes = {
|
||||
interface IProps extends React.InputHTMLAttributes<HTMLSelectElement | HTMLInputElement> {
|
||||
// The field's ID, which binds the input and label together. Immutable.
|
||||
id: PropTypes.string,
|
||||
id?: string,
|
||||
// The element to create. Defaults to "input".
|
||||
// To define options for a select, use <Field><option ... /></Field>
|
||||
element: PropTypes.oneOf(["input", "select", "textarea"]),
|
||||
element?: "input" | " select" | "textarea",
|
||||
// The field's type (when used as an <input>). Defaults to "text".
|
||||
type: PropTypes.string,
|
||||
type?: string,
|
||||
// id of a <datalist> element for suggestions
|
||||
list: PropTypes.string,
|
||||
list?: string,
|
||||
// The field's label string.
|
||||
label: PropTypes.string,
|
||||
label?: string,
|
||||
// The field's placeholder string. Defaults to the label.
|
||||
placeholder: PropTypes.string,
|
||||
placeholder?: string,
|
||||
// The field's value.
|
||||
// This is a controlled component, so the value is required.
|
||||
value: PropTypes.string.isRequired,
|
||||
value: string,
|
||||
// Optional component to include inside the field before the input.
|
||||
prefix: PropTypes.node,
|
||||
prefixComponent?: React.ReactNode,
|
||||
// Optional component to include inside the field after the input.
|
||||
postfix: PropTypes.node,
|
||||
postfixComponent?: React.ReactNode,
|
||||
// The callback called whenever the contents of the field
|
||||
// changes. Returns an object with `valid` boolean field
|
||||
// and a `feedback` react component field to provide feedback
|
||||
// to the user.
|
||||
onValidate: PropTypes.func,
|
||||
onValidate?: (input: IFieldState) => Promise<IValidationResult>,
|
||||
// If specified, overrides the value returned by onValidate.
|
||||
flagInvalid: PropTypes.bool,
|
||||
flagInvalid?: boolean,
|
||||
// If specified, contents will appear as a tooltip on the element and
|
||||
// validation feedback tooltips will be suppressed.
|
||||
tooltipContent: PropTypes.node,
|
||||
tooltipContent?: React.ReactNode,
|
||||
// If specified alongside tooltipContent, the class name to apply to the
|
||||
// tooltip itself.
|
||||
tooltipClassName: PropTypes.string,
|
||||
tooltipClassName?: string,
|
||||
// If specified, an additional class name to apply to the field container
|
||||
className: PropTypes.string,
|
||||
className?: string,
|
||||
// All other props pass through to the <input>.
|
||||
};
|
||||
}
|
||||
|
||||
interface IState {
|
||||
valid: boolean,
|
||||
feedback: React.ReactNode,
|
||||
feedbackVisible: boolean,
|
||||
focused: boolean,
|
||||
}
|
||||
|
||||
export default class Field extends React.PureComponent<IProps, IState> {
|
||||
private id: string;
|
||||
private input: HTMLInputElement;
|
||||
|
||||
private static defaultProps = {
|
||||
element: "input",
|
||||
type: "text",
|
||||
}
|
||||
|
||||
/*
|
||||
* This was changed from throttle to debounce: this is more traditional for
|
||||
* form validation since it means that the validation doesn't happen at all
|
||||
* until the user stops typing for a bit (debounce defaults to not running on
|
||||
* the leading edge). If we're doing an HTTP hit on each validation, we have more
|
||||
* incentive to prevent validating input that's very unlikely to be valid.
|
||||
* We may find that we actually want different behaviour for registration
|
||||
* fields, in which case we can add some options to control it.
|
||||
*/
|
||||
private validateOnChange = debounce(() => {
|
||||
this.validate({
|
||||
focused: true,
|
||||
});
|
||||
}, VALIDATION_THROTTLE_MS);
|
||||
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
valid: undefined,
|
||||
feedback: undefined,
|
||||
feedbackVisible: false,
|
||||
focused: false,
|
||||
};
|
||||
|
||||
this.id = this.props.id || getId();
|
||||
}
|
||||
|
||||
onFocus = (ev) => {
|
||||
public focus() {
|
||||
this.input.focus();
|
||||
}
|
||||
|
||||
private onFocus = (ev) => {
|
||||
this.setState({
|
||||
focused: true,
|
||||
});
|
||||
|
@ -93,7 +128,7 @@ export default class Field extends React.PureComponent {
|
|||
}
|
||||
};
|
||||
|
||||
onChange = (ev) => {
|
||||
private onChange = (ev) => {
|
||||
this.validateOnChange();
|
||||
// Parent component may have supplied its own `onChange` as well
|
||||
if (this.props.onChange) {
|
||||
|
@ -101,7 +136,7 @@ export default class Field extends React.PureComponent {
|
|||
}
|
||||
};
|
||||
|
||||
onBlur = (ev) => {
|
||||
private onBlur = (ev) => {
|
||||
this.setState({
|
||||
focused: false,
|
||||
});
|
||||
|
@ -114,11 +149,7 @@ export default class Field extends React.PureComponent {
|
|||
}
|
||||
};
|
||||
|
||||
focus() {
|
||||
this.input.focus();
|
||||
}
|
||||
|
||||
async validate({ focused, allowEmpty = true }) {
|
||||
private async validate({ focused, allowEmpty = true }: {focused: boolean, allowEmpty?: boolean}) {
|
||||
if (!this.props.onValidate) {
|
||||
return;
|
||||
}
|
||||
|
@ -149,56 +180,42 @@ export default class Field extends React.PureComponent {
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* This was changed from throttle to debounce: this is more traditional for
|
||||
* form validation since it means that the validation doesn't happen at all
|
||||
* until the user stops typing for a bit (debounce defaults to not running on
|
||||
* the leading edge). If we're doing an HTTP hit on each validation, we have more
|
||||
* incentive to prevent validating input that's very unlikely to be valid.
|
||||
* We may find that we actually want different behaviour for registration
|
||||
* fields, in which case we can add some options to control it.
|
||||
*/
|
||||
validateOnChange = debounce(() => {
|
||||
this.validate({
|
||||
focused: true,
|
||||
});
|
||||
}, VALIDATION_THROTTLE_MS);
|
||||
|
||||
render() {
|
||||
|
||||
public render() {
|
||||
const {
|
||||
element, prefix, postfix, className, onValidate, children,
|
||||
element, prefixComponent, postfixComponent, className, onValidate, children,
|
||||
tooltipContent, flagInvalid, tooltipClassName, list, ...inputProps} = this.props;
|
||||
|
||||
const inputElement = element || "input";
|
||||
|
||||
// Set some defaults for the <input> element
|
||||
inputProps.type = inputProps.type || "text";
|
||||
inputProps.ref = input => this.input = input;
|
||||
const ref = input => this.input = input;
|
||||
inputProps.placeholder = inputProps.placeholder || inputProps.label;
|
||||
inputProps.id = this.id; // this overwrites the id from props
|
||||
|
||||
inputProps.onFocus = this.onFocus;
|
||||
inputProps.onChange = this.onChange;
|
||||
inputProps.onBlur = this.onBlur;
|
||||
inputProps.list = list;
|
||||
|
||||
const fieldInput = React.createElement(inputElement, inputProps, children);
|
||||
// Appease typescript's inference
|
||||
const inputProps_ = {...inputProps, ref, list};
|
||||
|
||||
const fieldInput = React.createElement(this.props.element, inputProps_, children);
|
||||
|
||||
let prefixContainer = null;
|
||||
if (prefix) {
|
||||
prefixContainer = <span className="mx_Field_prefix">{prefix}</span>;
|
||||
if (prefixComponent) {
|
||||
prefixContainer = <span className="mx_Field_prefix">{prefixComponent}</span>;
|
||||
}
|
||||
let postfixContainer = null;
|
||||
if (postfix) {
|
||||
postfixContainer = <span className="mx_Field_postfix">{postfix}</span>;
|
||||
if (postfixComponent) {
|
||||
postfixContainer = <span className="mx_Field_postfix">{postfixComponent}</span>;
|
||||
}
|
||||
|
||||
const hasValidationFlag = flagInvalid !== null && flagInvalid !== undefined;
|
||||
const fieldClasses = classNames("mx_Field", `mx_Field_${inputElement}`, className, {
|
||||
const fieldClasses = classNames("mx_Field", `mx_Field_${this.props.element}`, className, {
|
||||
// If we have a prefix element, leave the label always at the top left and
|
||||
// don't animate it, as it looks a bit clunky and would add complexity to do
|
||||
// properly.
|
||||
mx_Field_labelAlwaysTopLeft: prefix,
|
||||
mx_Field_labelAlwaysTopLeft: prefixComponent,
|
||||
mx_Field_valid: onValidate && this.state.valid === true,
|
||||
mx_Field_invalid: hasValidationFlag
|
||||
? flagInvalid
|
|
@ -45,7 +45,7 @@ export default class RoomAliasField extends React.PureComponent {
|
|||
const maxlength = 255 - this.props.domain.length - 2; // 2 for # and :
|
||||
return (
|
||||
<Field
|
||||
label={_t("Room alias")}
|
||||
label={_t("Room address")}
|
||||
className="mx_RoomAliasField"
|
||||
prefix={poundSign}
|
||||
postfix={domain}
|
||||
|
@ -87,7 +87,7 @@ export default class RoomAliasField extends React.PureComponent {
|
|||
}, {
|
||||
key: "required",
|
||||
test: async ({ value, allowEmpty }) => allowEmpty || !!value,
|
||||
invalid: () => _t("Please provide a room alias"),
|
||||
invalid: () => _t("Please provide a room address"),
|
||||
}, {
|
||||
key: "taken",
|
||||
final: true,
|
||||
|
@ -107,8 +107,8 @@ export default class RoomAliasField extends React.PureComponent {
|
|||
return !!err.errcode;
|
||||
}
|
||||
},
|
||||
valid: () => _t("This alias is available to use"),
|
||||
invalid: () => _t("This alias is already in use"),
|
||||
valid: () => _t("This address is available to use"),
|
||||
invalid: () => _t("This address is already in use"),
|
||||
},
|
||||
],
|
||||
});
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
Copyright 2015, 2016 OpenMarket Ltd
|
||||
Copyright 2019 New Vector Ltd
|
||||
Copyright 2019 Michael Telatynski <7t3chguy@gmail.com>
|
||||
Copyright 2019 The Matrix.org Foundation C.I.C.
|
||||
Copyright 2019, 2020 The Matrix.org Foundation C.I.C.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
|
@ -18,67 +18,68 @@ limitations under the License.
|
|||
*/
|
||||
|
||||
|
||||
import React from 'react';
|
||||
import React, { Component } from 'react';
|
||||
import ReactDOM from 'react-dom';
|
||||
import PropTypes from 'prop-types';
|
||||
import createReactClass from 'create-react-class';
|
||||
import dis from '../../../dispatcher/dispatcher';
|
||||
import classNames from 'classnames';
|
||||
import { ViewTooltipPayload } from '../../../dispatcher/payloads/ViewTooltipPayload';
|
||||
import { Action } from '../../../dispatcher/actions';
|
||||
|
||||
const MIN_TOOLTIP_HEIGHT = 25;
|
||||
|
||||
export default createReactClass({
|
||||
displayName: 'Tooltip',
|
||||
|
||||
propTypes: {
|
||||
interface IProps {
|
||||
// Class applied to the element used to position the tooltip
|
||||
className: PropTypes.string,
|
||||
className: string,
|
||||
// Class applied to the tooltip itself
|
||||
tooltipClassName: PropTypes.string,
|
||||
tooltipClassName?: string,
|
||||
// Whether the tooltip is visible or hidden.
|
||||
// The hidden state allows animating the tooltip away via CSS.
|
||||
// Defaults to visible if unset.
|
||||
visible: PropTypes.bool,
|
||||
visible?: boolean,
|
||||
// the react element to put into the tooltip
|
||||
label: PropTypes.node,
|
||||
},
|
||||
label: React.ReactNode,
|
||||
}
|
||||
|
||||
getDefaultProps() {
|
||||
return {
|
||||
export default class Tooltip extends React.Component<IProps> {
|
||||
private tooltipContainer: HTMLElement;
|
||||
private tooltip: void | Element | Component<Element, any, any>;
|
||||
private parent: Element;
|
||||
|
||||
|
||||
public static readonly defaultProps = {
|
||||
visible: true,
|
||||
};
|
||||
},
|
||||
|
||||
// Create a wrapper for the tooltip outside the parent and attach it to the body element
|
||||
componentDidMount: function() {
|
||||
public componentDidMount() {
|
||||
this.tooltipContainer = document.createElement("div");
|
||||
this.tooltipContainer.className = "mx_Tooltip_wrapper";
|
||||
document.body.appendChild(this.tooltipContainer);
|
||||
window.addEventListener('scroll', this._renderTooltip, true);
|
||||
window.addEventListener('scroll', this.renderTooltip, true);
|
||||
|
||||
this.parent = ReactDOM.findDOMNode(this).parentNode;
|
||||
this.parent = ReactDOM.findDOMNode(this).parentNode as Element;
|
||||
|
||||
this._renderTooltip();
|
||||
},
|
||||
this.renderTooltip();
|
||||
}
|
||||
|
||||
componentDidUpdate: function() {
|
||||
this._renderTooltip();
|
||||
},
|
||||
public componentDidUpdate() {
|
||||
this.renderTooltip();
|
||||
}
|
||||
|
||||
// Remove the wrapper element, as the tooltip has finished using it
|
||||
componentWillUnmount: function() {
|
||||
dis.dispatch({
|
||||
action: 'view_tooltip',
|
||||
public componentWillUnmount() {
|
||||
dis.dispatch<ViewTooltipPayload>({
|
||||
action: Action.ViewTooltip,
|
||||
tooltip: null,
|
||||
parent: null,
|
||||
});
|
||||
|
||||
ReactDOM.unmountComponentAtNode(this.tooltipContainer);
|
||||
document.body.removeChild(this.tooltipContainer);
|
||||
window.removeEventListener('scroll', this._renderTooltip, true);
|
||||
},
|
||||
window.removeEventListener('scroll', this.renderTooltip, true);
|
||||
}
|
||||
|
||||
_updatePosition(style) {
|
||||
private updatePosition(style: {[key: string]: any}) {
|
||||
const parentBox = this.parent.getBoundingClientRect();
|
||||
let offset = 0;
|
||||
if (parentBox.height > MIN_TOOLTIP_HEIGHT) {
|
||||
|
@ -91,16 +92,15 @@ export default createReactClass({
|
|||
style.top = (parentBox.top - 2) + window.pageYOffset + offset;
|
||||
style.left = 6 + parentBox.right + window.pageXOffset;
|
||||
return style;
|
||||
},
|
||||
}
|
||||
|
||||
_renderTooltip: function() {
|
||||
private renderTooltip() {
|
||||
// Add the parent's position to the tooltips, so it's correctly
|
||||
// positioned, also taking into account any window zoom
|
||||
// NOTE: The additional 6 pixels for the left position, is to take account of the
|
||||
// tooltips chevron
|
||||
const parent = ReactDOM.findDOMNode(this).parentNode;
|
||||
let style = {};
|
||||
style = this._updatePosition(style);
|
||||
const parent = ReactDOM.findDOMNode(this).parentNode as Element;
|
||||
const style = this.updatePosition({});
|
||||
// Hide the entire container when not visible. This prevents flashing of the tooltip
|
||||
// if it is not meant to be visible on first mount.
|
||||
style.display = this.props.visible ? "block" : "none";
|
||||
|
@ -118,21 +118,21 @@ export default createReactClass({
|
|||
);
|
||||
|
||||
// Render the tooltip manually, as we wish it not to be rendered within the parent
|
||||
this.tooltip = ReactDOM.render(tooltip, this.tooltipContainer);
|
||||
this.tooltip = ReactDOM.render<Element>(tooltip, this.tooltipContainer);
|
||||
|
||||
// Tell the roomlist about us so it can manipulate us if it wishes
|
||||
dis.dispatch({
|
||||
action: 'view_tooltip',
|
||||
dis.dispatch<ViewTooltipPayload>({
|
||||
action: Action.ViewTooltip,
|
||||
tooltip: this.tooltip,
|
||||
parent: parent,
|
||||
});
|
||||
},
|
||||
}
|
||||
|
||||
render: function() {
|
||||
public render() {
|
||||
// Render a placeholder
|
||||
return (
|
||||
<div className={this.props.className} >
|
||||
</div>
|
||||
);
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
|
@ -67,7 +67,13 @@ class Category extends React.PureComponent {
|
|||
const localScrollTop = Math.max(0, scrollTop - listTop);
|
||||
|
||||
return (
|
||||
<section className="mx_EmojiPicker_category" data-category-id={this.props.id}>
|
||||
<section
|
||||
id={`mx_EmojiPicker_category_${this.props.id}`}
|
||||
className="mx_EmojiPicker_category"
|
||||
data-category-id={this.props.id}
|
||||
role="tabpanel"
|
||||
aria-label={name}
|
||||
>
|
||||
<h2 className="mx_EmojiPicker_category_label">
|
||||
{name}
|
||||
</h2>
|
||||
|
|
|
@ -16,6 +16,7 @@ limitations under the License.
|
|||
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import {MenuItem} from "../../structures/ContextMenu";
|
||||
|
||||
class Emoji extends React.PureComponent {
|
||||
static propTypes = {
|
||||
|
@ -30,14 +31,18 @@ class Emoji extends React.PureComponent {
|
|||
const { onClick, onMouseEnter, onMouseLeave, emoji, selectedEmojis } = this.props;
|
||||
const isSelected = selectedEmojis && selectedEmojis.has(emoji.unicode);
|
||||
return (
|
||||
<li onClick={() => onClick(emoji)}
|
||||
<MenuItem
|
||||
element="li"
|
||||
onClick={() => onClick(emoji)}
|
||||
onMouseEnter={() => onMouseEnter(emoji)}
|
||||
onMouseLeave={() => onMouseLeave(emoji)}
|
||||
className="mx_EmojiPicker_item_wrapper">
|
||||
className="mx_EmojiPicker_item_wrapper"
|
||||
label={emoji.unicode}
|
||||
>
|
||||
<div className={`mx_EmojiPicker_item ${isSelected ? 'mx_EmojiPicker_item_selected' : ''}`}>
|
||||
{emoji.unicode}
|
||||
</div>
|
||||
</li>
|
||||
</MenuItem>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -147,8 +147,12 @@ class EmojiPicker extends React.Component {
|
|||
// We update this here instead of through React to avoid re-render on scroll.
|
||||
if (cat.visible) {
|
||||
cat.ref.current.classList.add("mx_EmojiPicker_anchor_visible");
|
||||
cat.ref.current.setAttribute("aria-selected", true);
|
||||
cat.ref.current.setAttribute("tabindex", 0);
|
||||
} else {
|
||||
cat.ref.current.classList.remove("mx_EmojiPicker_anchor_visible");
|
||||
cat.ref.current.setAttribute("aria-selected", false);
|
||||
cat.ref.current.setAttribute("tabindex", -1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,23 +16,89 @@ limitations under the License.
|
|||
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import classNames from "classnames";
|
||||
|
||||
import {_t} from "../../../languageHandler";
|
||||
import {Key} from "../../../Keyboard";
|
||||
|
||||
class Header extends React.PureComponent {
|
||||
static propTypes = {
|
||||
categories: PropTypes.arrayOf(PropTypes.object).isRequired,
|
||||
onAnchorClick: PropTypes.func.isRequired,
|
||||
refs: PropTypes.object,
|
||||
};
|
||||
|
||||
findNearestEnabled(index, delta) {
|
||||
index += this.props.categories.length;
|
||||
const cats = [...this.props.categories, ...this.props.categories, ...this.props.categories];
|
||||
|
||||
while (index < cats.length && index >= 0) {
|
||||
if (cats[index].enabled) return index % this.props.categories.length;
|
||||
index += delta > 0 ? 1 : -1;
|
||||
}
|
||||
}
|
||||
|
||||
changeCategoryRelative(delta) {
|
||||
const current = this.props.categories.findIndex(c => c.visible);
|
||||
this.changeCategoryAbsolute(current + delta, delta);
|
||||
}
|
||||
|
||||
changeCategoryAbsolute(index, delta=1) {
|
||||
const category = this.props.categories[this.findNearestEnabled(index, delta)];
|
||||
if (category) {
|
||||
this.props.onAnchorClick(category.id);
|
||||
category.ref.current.focus();
|
||||
}
|
||||
}
|
||||
|
||||
// Implements ARIA Tabs with Automatic Activation pattern
|
||||
// https://www.w3.org/TR/wai-aria-practices/examples/tabs/tabs-1/tabs.html
|
||||
onKeyDown = (ev) => {
|
||||
let handled = true;
|
||||
switch (ev.key) {
|
||||
case Key.ARROW_LEFT:
|
||||
this.changeCategoryRelative(-1);
|
||||
break;
|
||||
case Key.ARROW_RIGHT:
|
||||
this.changeCategoryRelative(1);
|
||||
break;
|
||||
|
||||
case Key.HOME:
|
||||
this.changeCategoryAbsolute(0);
|
||||
break;
|
||||
case Key.END:
|
||||
this.changeCategoryAbsolute(this.props.categories.length - 1, -1);
|
||||
break;
|
||||
default:
|
||||
handled = false;
|
||||
}
|
||||
|
||||
if (handled) {
|
||||
ev.preventDefault();
|
||||
ev.stopPropagation();
|
||||
}
|
||||
};
|
||||
|
||||
render() {
|
||||
return (
|
||||
<nav className="mx_EmojiPicker_header">
|
||||
{this.props.categories.map(category => (
|
||||
<button disabled={!category.enabled} key={category.id} ref={category.ref}
|
||||
className={`mx_EmojiPicker_anchor ${category.visible ? 'mx_EmojiPicker_anchor_visible' : ''}
|
||||
mx_EmojiPicker_anchor_${category.id}`}
|
||||
onClick={() => this.props.onAnchorClick(category.id)} title={category.name} />
|
||||
))}
|
||||
<nav className="mx_EmojiPicker_header" role="tablist" aria-label={_t("Categories")} onKeyDown={this.onKeyDown}>
|
||||
{this.props.categories.map(category => {
|
||||
const classes = classNames(`mx_EmojiPicker_anchor mx_EmojiPicker_anchor_${category.id}`, {
|
||||
mx_EmojiPicker_anchor_visible: category.visible,
|
||||
});
|
||||
// Properties of this button are also modified by EmojiPicker's updateVisibility in DOM.
|
||||
return <button
|
||||
disabled={!category.enabled}
|
||||
key={category.id}
|
||||
ref={category.ref}
|
||||
className={classes}
|
||||
onClick={() => this.props.onAnchorClick(category.id)}
|
||||
title={category.name}
|
||||
role="tab"
|
||||
tabIndex={category.visible ? 0 : -1} // roving
|
||||
aria-selected={category.visible}
|
||||
aria-controls={`mx_EmojiPicker_category_${category.id}`}
|
||||
/>;
|
||||
})}
|
||||
</nav>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -72,7 +72,7 @@ class QuickReactions extends React.Component {
|
|||
</React.Fragment>
|
||||
}
|
||||
</h2>
|
||||
<ul className="mx_EmojiPicker_list">
|
||||
<ul className="mx_EmojiPicker_list" aria-label={_t("Quick Reactions")}>
|
||||
{QUICK_REACTIONS.map(emoji => <Emoji
|
||||
key={emoji.hexcode} emoji={emoji} onClick={this.props.onClick}
|
||||
onMouseEnter={this.onMouseEnter} onMouseLeave={this.onMouseLeave}
|
||||
|
|
|
@ -18,6 +18,7 @@ import React from 'react';
|
|||
import PropTypes from "prop-types";
|
||||
import EmojiPicker from "./EmojiPicker";
|
||||
import {MatrixClientPeg} from "../../../MatrixClientPeg";
|
||||
import dis from "../../../dispatcher/dispatcher";
|
||||
|
||||
class ReactionPicker extends React.Component {
|
||||
static propTypes = {
|
||||
|
@ -105,6 +106,7 @@ class ReactionPicker extends React.Component {
|
|||
"key": reaction,
|
||||
},
|
||||
});
|
||||
dis.dispatch({action: "message_sent"});
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
Copyright 2019 New Vector Ltd
|
||||
Copyright 2019 Michael Telatynski <7t3chguy@gmail.com>
|
||||
Copyright 2019 The Matrix.org Foundation C.I.C.
|
||||
Copyright 2019, 2020 The Matrix.org Foundation C.I.C.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
|
@ -22,11 +22,9 @@ import PropTypes from 'prop-types';
|
|||
import { _t } from '../../../languageHandler';
|
||||
import * as sdk from '../../../index';
|
||||
import dis from '../../../dispatcher/dispatcher';
|
||||
import Modal from '../../../Modal';
|
||||
import {aboveLeftOf, ContextMenu, ContextMenuButton, useContextMenu} from '../../structures/ContextMenu';
|
||||
import { isContentActionable, canEditContent } from '../../../utils/EventUtils';
|
||||
import RoomContext from "../../../contexts/RoomContext";
|
||||
import SettingsStore from '../../../settings/SettingsStore';
|
||||
|
||||
const OptionsButton = ({mxEvent, getTile, getReplyThread, permalinkCreator, onFocusChange}) => {
|
||||
const [menuDisplayed, button, openMenu, closeMenu] = useContextMenu();
|
||||
|
@ -41,18 +39,6 @@ const OptionsButton = ({mxEvent, getTile, getReplyThread, permalinkCreator, onFo
|
|||
const tile = getTile && getTile();
|
||||
const replyThread = getReplyThread && getReplyThread();
|
||||
|
||||
const onCryptoClick = () => {
|
||||
Modal.createTrackedDialogAsync('Encrypted Event Dialog', '',
|
||||
import('../../../async-components/views/dialogs/EncryptedEventDialog'),
|
||||
{event: mxEvent},
|
||||
);
|
||||
};
|
||||
|
||||
let e2eInfoCallback = null;
|
||||
if (mxEvent.isEncrypted() && !SettingsStore.getValue("feature_cross_signing")) {
|
||||
e2eInfoCallback = onCryptoClick;
|
||||
}
|
||||
|
||||
const buttonRect = button.current.getBoundingClientRect();
|
||||
contextMenu = <ContextMenu {...aboveLeftOf(buttonRect)} onFinished={closeMenu}>
|
||||
<MessageContextMenu
|
||||
|
@ -60,7 +46,6 @@ const OptionsButton = ({mxEvent, getTile, getReplyThread, permalinkCreator, onFo
|
|||
permalinkCreator={permalinkCreator}
|
||||
eventTileOps={tile && tile.getEventTileOps ? tile.getEventTileOps() : undefined}
|
||||
collapseReplyThread={replyThread && replyThread.canCollapse() ? replyThread.collapse : undefined}
|
||||
e2eInfoCallback={e2eInfoCallback}
|
||||
onFinished={closeMenu}
|
||||
/>
|
||||
</ContextMenu>;
|
||||
|
|
|
@ -22,6 +22,7 @@ import {MatrixClientPeg} from '../../../MatrixClientPeg';
|
|||
import * as sdk from '../../../index';
|
||||
import { _t } from '../../../languageHandler';
|
||||
import { formatCommaSeparatedList } from '../../../utils/FormattingUtils';
|
||||
import dis from "../../../dispatcher/dispatcher";
|
||||
|
||||
export default class ReactionsRowButton extends React.PureComponent {
|
||||
static propTypes = {
|
||||
|
@ -60,6 +61,7 @@ export default class ReactionsRowButton extends React.PureComponent {
|
|||
"key": content,
|
||||
},
|
||||
});
|
||||
dis.dispatch({action: "message_sent"});
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -220,10 +220,10 @@ export default class AliasSettings extends React.Component {
|
|||
}
|
||||
}).catch((err) => {
|
||||
console.error(err);
|
||||
Modal.createTrackedDialog('Error creating alias', '', ErrorDialog, {
|
||||
title: _t("Error creating alias"),
|
||||
Modal.createTrackedDialog('Error creating address', '', ErrorDialog, {
|
||||
title: _t("Error creating address"),
|
||||
description: _t(
|
||||
"There was an error creating that alias. It may not be allowed by the server " +
|
||||
"There was an error creating that address. It may not be allowed by the server " +
|
||||
"or a temporary failure occurred.",
|
||||
),
|
||||
});
|
||||
|
@ -245,15 +245,15 @@ export default class AliasSettings extends React.Component {
|
|||
console.error(err);
|
||||
let description;
|
||||
if (err.errcode === "M_FORBIDDEN") {
|
||||
description = _t("You don't have permission to delete the alias.");
|
||||
description = _t("You don't have permission to delete the address.");
|
||||
} else {
|
||||
description = _t(
|
||||
"There was an error removing that alias. It may no longer exist or a temporary " +
|
||||
"There was an error removing that address. It may no longer exist or a temporary " +
|
||||
"error occurred.",
|
||||
);
|
||||
}
|
||||
Modal.createTrackedDialog('Error removing alias', '', ErrorDialog, {
|
||||
title: _t("Error removing alias"),
|
||||
Modal.createTrackedDialog('Error removing address', '', ErrorDialog, {
|
||||
title: _t("Error removing address"),
|
||||
description,
|
||||
});
|
||||
});
|
||||
|
|
|
@ -190,6 +190,7 @@ export default class EditMessageComposer extends React.Component {
|
|||
const roomId = editedEvent.getRoomId();
|
||||
this._cancelPreviousPendingEdit();
|
||||
this.context.sendMessage(roomId, editContent);
|
||||
dis.dispatch({action: "message_sent"});
|
||||
}
|
||||
|
||||
// close the event editing and focus composer
|
||||
|
|
|
@ -403,7 +403,7 @@ export default createReactClass({
|
|||
},
|
||||
|
||||
shouldHighlight: function() {
|
||||
const actions = this.context.getPushActionsForEvent(this.props.mxEvent);
|
||||
const actions = this.context.getPushActionsForEvent(this.props.mxEvent.replacingEvent() || this.props.mxEvent);
|
||||
if (!actions || !actions.tweaks) { return false; }
|
||||
|
||||
// don't show self-highlights from another of our clients
|
||||
|
|
|
@ -30,6 +30,8 @@ import * as RoomNotifs from '../../../RoomNotifs';
|
|||
import { EffectiveMembership, getEffectiveMembership } from "../../../stores/room-list/membership";
|
||||
import * as Unread from '../../../Unread';
|
||||
import * as FormattingUtils from "../../../utils/FormattingUtils";
|
||||
import { MatrixClientPeg } from "../../../MatrixClientPeg";
|
||||
import { MatrixEvent } from "matrix-js-sdk/src/models/event";
|
||||
|
||||
/*******************************************************************
|
||||
* CAUTION *
|
||||
|
@ -39,6 +41,14 @@ import * as FormattingUtils from "../../../utils/FormattingUtils";
|
|||
* warning disappears. *
|
||||
*******************************************************************/
|
||||
|
||||
enum NotificationColor {
|
||||
// Inverted (None -> Red) because we do integer comparisons on this
|
||||
None, // nothing special
|
||||
Bold, // no badge, show as unread
|
||||
Grey, // unread notified messages
|
||||
Red, // unread pings
|
||||
}
|
||||
|
||||
interface IProps {
|
||||
room: Room;
|
||||
|
||||
|
@ -47,16 +57,14 @@ interface IProps {
|
|||
// TODO: Incoming call boxes?
|
||||
}
|
||||
|
||||
interface IBadgeState {
|
||||
showBadge: boolean; // if numUnread > 0 && !showBadge -> bold room
|
||||
numUnread: number; // used only if showBadge or showBadgeHighlight is true
|
||||
hasUnread: number; // used to make the room bold
|
||||
showBadgeHighlight: boolean; // make the badge red
|
||||
isInvite: boolean; // show a `!` instead of a number
|
||||
interface INotificationState {
|
||||
symbol: string;
|
||||
color: NotificationColor;
|
||||
}
|
||||
|
||||
interface IState extends IBadgeState {
|
||||
interface IState {
|
||||
hover: boolean;
|
||||
notificationState: INotificationState;
|
||||
}
|
||||
|
||||
export default class RoomTile2 extends React.Component<IProps, IState> {
|
||||
|
@ -78,37 +86,86 @@ export default class RoomTile2 extends React.Component<IProps, IState> {
|
|||
|
||||
this.state = {
|
||||
hover: false,
|
||||
|
||||
...this.getBadgeState(),
|
||||
notificationState: this.getNotificationState(),
|
||||
};
|
||||
|
||||
this.props.room.on("Room.receipt", this.handleRoomEventUpdate);
|
||||
this.props.room.on("Room.timeline", this.handleRoomEventUpdate);
|
||||
this.props.room.on("Room.redaction", this.handleRoomEventUpdate);
|
||||
MatrixClientPeg.get().on("Event.decrypted", this.handleRoomEventUpdate);
|
||||
}
|
||||
|
||||
public componentWillUnmount() {
|
||||
// TODO: Listen for changes to the badge count and update as needed
|
||||
if (this.props.room) {
|
||||
this.props.room.removeListener("Room.receipt", this.handleRoomEventUpdate);
|
||||
this.props.room.removeListener("Room.timeline", this.handleRoomEventUpdate);
|
||||
this.props.room.removeListener("Room.redaction", this.handleRoomEventUpdate);
|
||||
}
|
||||
if (MatrixClientPeg.get()) {
|
||||
MatrixClientPeg.get().removeListener("Event.decrypted", this.handleRoomEventUpdate);
|
||||
}
|
||||
}
|
||||
|
||||
private updateBadgeCount() {
|
||||
this.setState({...this.getBadgeState()});
|
||||
// XXX: This is a bit of an awful-looking hack. We should probably be using state for
|
||||
// this, but instead we're kinda forced to either duplicate the code or thread a variable
|
||||
// through the code paths. This feels like the least evil option.
|
||||
private get roomIsInvite(): boolean {
|
||||
return getEffectiveMembership(this.props.room.getMyMembership()) === EffectiveMembership.Invite;
|
||||
}
|
||||
|
||||
private getBadgeState(): IBadgeState {
|
||||
// TODO: Make this code path faster
|
||||
const highlightCount = RoomNotifs.getUnreadNotificationCount(this.props.room, 'highlight');
|
||||
const numUnread = RoomNotifs.getUnreadNotificationCount(this.props.room);
|
||||
const showBadge = Unread.doesRoomHaveUnreadMessages(this.props.room);
|
||||
const myMembership = getEffectiveMembership(this.props.room.getMyMembership());
|
||||
const isInvite = myMembership === EffectiveMembership.Invite;
|
||||
const notifState = RoomNotifs.getRoomNotifsState(this.props.room.roomId);
|
||||
const shouldShowNotifBadge = RoomNotifs.shouldShowNotifBadge(notifState);
|
||||
const shouldShowHighlightBadge = RoomNotifs.shouldShowMentionBadge(notifState);
|
||||
private handleRoomEventUpdate = (event: MatrixEvent) => {
|
||||
const roomId = event.getRoomId();
|
||||
|
||||
return {
|
||||
showBadge: (showBadge && shouldShowNotifBadge) || isInvite,
|
||||
numUnread,
|
||||
hasUnread: showBadge,
|
||||
showBadgeHighlight: (highlightCount > 0 && shouldShowHighlightBadge) || isInvite,
|
||||
isInvite,
|
||||
// Sanity check: should never happen
|
||||
if (roomId !== this.props.room.roomId) return;
|
||||
|
||||
this.updateNotificationState();
|
||||
};
|
||||
|
||||
private updateNotificationState() {
|
||||
this.setState({notificationState: this.getNotificationState()});
|
||||
}
|
||||
|
||||
private getNotificationState(): INotificationState {
|
||||
const state: INotificationState = {
|
||||
color: NotificationColor.None,
|
||||
symbol: null,
|
||||
};
|
||||
|
||||
if (this.roomIsInvite) {
|
||||
state.color = NotificationColor.Red;
|
||||
state.symbol = "!";
|
||||
} else {
|
||||
const redNotifs = RoomNotifs.getUnreadNotificationCount(this.props.room, 'highlight');
|
||||
const greyNotifs = RoomNotifs.getUnreadNotificationCount(this.props.room, 'total');
|
||||
|
||||
// For a 'true count' we pick the grey notifications first because they include the
|
||||
// red notifications. If we don't have a grey count for some reason we use the red
|
||||
// count. If that count is broken for some reason, assume zero. This avoids us showing
|
||||
// a badge for 'NaN' (which formats as 'NaNB' for NaN Billion).
|
||||
const trueCount = greyNotifs ? greyNotifs : (redNotifs ? redNotifs : 0);
|
||||
|
||||
// Note: we only set the symbol if we have an actual count. We don't want to show
|
||||
// zero on badges.
|
||||
|
||||
if (redNotifs > 0) {
|
||||
state.color = NotificationColor.Red;
|
||||
state.symbol = FormattingUtils.formatCount(trueCount);
|
||||
} else if (greyNotifs > 0) {
|
||||
state.color = NotificationColor.Grey;
|
||||
state.symbol = FormattingUtils.formatCount(trueCount);
|
||||
} else {
|
||||
// We don't have any notified messages, but we might have unread messages. Let's
|
||||
// find out.
|
||||
const hasUnread = Unread.doesRoomHaveUnreadMessages(this.props.room);
|
||||
if (hasUnread) {
|
||||
state.color = NotificationColor.Bold;
|
||||
// no symbol for this state
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return state;
|
||||
}
|
||||
|
||||
private onTileMouseEnter = () => {
|
||||
|
@ -135,15 +192,17 @@ export default class RoomTile2 extends React.Component<IProps, IState> {
|
|||
// TODO: a11y proper
|
||||
// TODO: Render more than bare minimum
|
||||
|
||||
const hasBadge = this.state.notificationState.color > NotificationColor.Bold;
|
||||
const isUnread = this.state.notificationState.color > NotificationColor.None;
|
||||
const classes = classNames({
|
||||
'mx_RoomTile': true,
|
||||
// 'mx_RoomTile_selected': this.state.selected,
|
||||
'mx_RoomTile_unread': this.state.numUnread > 0 || this.state.hasUnread,
|
||||
'mx_RoomTile_unreadNotify': this.state.showBadge,
|
||||
'mx_RoomTile_highlight': this.state.showBadgeHighlight,
|
||||
'mx_RoomTile_invited': this.state.isInvite,
|
||||
'mx_RoomTile_unread': isUnread,
|
||||
'mx_RoomTile_unreadNotify': this.state.notificationState.color >= NotificationColor.Grey,
|
||||
'mx_RoomTile_highlight': this.state.notificationState.color >= NotificationColor.Red,
|
||||
'mx_RoomTile_invited': this.roomIsInvite,
|
||||
// 'mx_RoomTile_menuDisplayed': isMenuDisplayed,
|
||||
'mx_RoomTile_noBadges': !this.state.showBadge,
|
||||
'mx_RoomTile_noBadges': !hasBadge,
|
||||
// 'mx_RoomTile_transparent': this.props.transparent,
|
||||
// 'mx_RoomTile_hasSubtext': subtext && !this.props.collapsed,
|
||||
});
|
||||
|
@ -154,13 +213,12 @@ export default class RoomTile2 extends React.Component<IProps, IState> {
|
|||
|
||||
|
||||
let badge;
|
||||
if (this.state.showBadge) {
|
||||
if (hasBadge) {
|
||||
const badgeClasses = classNames({
|
||||
'mx_RoomTile_badge': true,
|
||||
'mx_RoomTile_badgeButton': false, // this.state.badgeHover || isMenuDisplayed
|
||||
});
|
||||
const formattedCount = this.state.isInvite ? `!` : FormattingUtils.formatCount(this.state.numUnread);
|
||||
badge = <div className={badgeClasses}>{formattedCount}</div>;
|
||||
badge = <div className={badgeClasses}>{this.state.notificationState.symbol}</div>;
|
||||
}
|
||||
|
||||
// TODO: the original RoomTile uses state for the room name. Do we need to?
|
||||
|
@ -170,15 +228,15 @@ export default class RoomTile2 extends React.Component<IProps, IState> {
|
|||
|
||||
const nameClasses = classNames({
|
||||
'mx_RoomTile_name': true,
|
||||
'mx_RoomTile_invite': this.state.isInvite,
|
||||
'mx_RoomTile_badgeShown': this.state.showBadge,
|
||||
'mx_RoomTile_invite': this.roomIsInvite,
|
||||
'mx_RoomTile_badgeShown': hasBadge,
|
||||
});
|
||||
|
||||
// TODO: Support collapsed state properly
|
||||
let tooltip = null;
|
||||
if (false) { // isCollapsed
|
||||
if (this.state.hover) {
|
||||
tooltip = <Tooltip className="mx_RoomTile_tooltip" label={this.props.room.name} dir="auto"/>
|
||||
tooltip = <Tooltip className="mx_RoomTile_tooltip" label={this.props.room.name} />
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -312,6 +312,7 @@ export default class SendMessageComposer extends React.Component {
|
|||
event: null,
|
||||
});
|
||||
}
|
||||
dis.dispatch({action: "message_sent"});
|
||||
}
|
||||
|
||||
this.sendHistoryManager.save(this.model);
|
||||
|
|
|
@ -267,7 +267,7 @@ export default class PhoneNumbers extends React.Component {
|
|||
label={_t("Phone Number")}
|
||||
autoComplete="off"
|
||||
disabled={this.state.verifying}
|
||||
prefix={phoneCountry}
|
||||
prefixComponent={phoneCountry}
|
||||
value={this.state.newPhoneNumber}
|
||||
onChange={this._onChangeNewPhoneNumber}
|
||||
/>
|
||||
|
|
|
@ -247,7 +247,7 @@ export default class SecurityRoomSettingsTab extends React.Component {
|
|||
<div className='mx_SecurityRoomSettingsTab_warning'>
|
||||
<img src={require("../../../../../../res/img/warning.svg")} width={15} height={15} />
|
||||
<span>
|
||||
{_t("To link to this room, please add an alias.")}
|
||||
{_t("To link to this room, please add an address.")}
|
||||
</span>
|
||||
</div>
|
||||
);
|
||||
|
|
|
@ -84,7 +84,7 @@ export default class MjolnirUserSettingsTab extends React.Component {
|
|||
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
Modal.createTrackedDialog('Failed to subscribe to Mjolnir list', '', ErrorDialog, {
|
||||
title: _t('Error subscribing to list'),
|
||||
description: _t('Please verify the room ID or alias and try again.'),
|
||||
description: _t('Please verify the room ID or address and try again.'),
|
||||
});
|
||||
} finally {
|
||||
this.setState({busy: false});
|
||||
|
@ -305,7 +305,7 @@ export default class MjolnirUserSettingsTab extends React.Component {
|
|||
<form onSubmit={this._onSubscribeList} autoComplete="off">
|
||||
<Field
|
||||
type="text"
|
||||
label={_t("Room ID or alias of ban list")}
|
||||
label={_t("Room ID or address of ban list")}
|
||||
value={this.state.newList}
|
||||
onChange={this._onNewListChanged}
|
||||
/>
|
||||
|
|
|
@ -38,5 +38,10 @@ export enum Action {
|
|||
* Open the user settings. No additional payload information required.
|
||||
*/
|
||||
ViewUserSettings = "view_user_settings",
|
||||
|
||||
/**
|
||||
* Sets the current tooltip. Should be use with ViewTooltipPayload.
|
||||
*/
|
||||
ViewTooltip = "view_tooltip",
|
||||
}
|
||||
|
||||
|
|
35
src/dispatcher/payloads/ViewTooltipPayload.ts
Normal file
35
src/dispatcher/payloads/ViewTooltipPayload.ts
Normal file
|
@ -0,0 +1,35 @@
|
|||
/*
|
||||
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";
|
||||
import { Component } from "react";
|
||||
|
||||
export interface ViewTooltipPayload extends ActionPayload {
|
||||
action: Action.ViewTooltip,
|
||||
|
||||
/*
|
||||
* The tooltip to render. If it's null the tooltip will not be rendered
|
||||
* We need the void type because of typescript headaches.
|
||||
*/
|
||||
tooltip: null | void | Element | Component<Element, any, any>;
|
||||
|
||||
/*
|
||||
* The parent under which to render the tooltip. Can be null to remove
|
||||
* the parent type.
|
||||
*/
|
||||
parent: null | Element
|
||||
}
|
|
@ -32,7 +32,7 @@ export const useEventEmitter = (emitter, eventName, handler) => {
|
|||
if (!emitter) return;
|
||||
|
||||
// Create event listener that calls handler function stored in ref
|
||||
const eventListener = event => savedHandler.current(event);
|
||||
const eventListener = (...args) => savedHandler.current(...args);
|
||||
|
||||
// Add event listener
|
||||
emitter.on(eventName, eventListener);
|
||||
|
|
|
@ -2211,5 +2211,59 @@
|
|||
"Invite someone using their name, username (like <userId/>), email address or <a>share this room</a>.": "Поканете някой посредством име, потребителско име (като <userId/>), имейл адрес или като <a>споделите тази стая</a>.",
|
||||
"You added a new session '%(displayName)s', which is requesting encryption keys.": "Добавихте нова сесия '%(displayName)s', която изисква ключове за шифроване.",
|
||||
"Your unverified session '%(displayName)s' is requesting encryption keys.": "Непотвърдената ви сесия '%(displayName)s' изисква ключове за шифроване.",
|
||||
"Loading session info...": "Зареждане на информация за сесията..."
|
||||
"Loading session info...": "Зареждане на информация за сесията...",
|
||||
"Opens chat with the given user": "Отваря чат с дадения потребител",
|
||||
"Sends a message to the given user": "Изпраща съобщение до дадения потребител",
|
||||
"Font scaling": "Мащабиране на шрифта",
|
||||
"Use the improved room list (in development - refresh to apply changes)": "Използвай подобрения списък със стаи (в процес на разработка - презаредете за да приложите промените)",
|
||||
"Use IRC layout": "Използвай IRC изглед",
|
||||
"Font size": "Размер на шрифта",
|
||||
"Custom font size": "Собствен размер на шрифта",
|
||||
"IRC display name width": "Ширина на IRC името",
|
||||
"Waiting for your other session to verify…": "Изчакване другата сесията да потвърди…",
|
||||
"Size must be a number": "Размера трябва да е число",
|
||||
"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",
|
||||
"Appearance": "Изглед",
|
||||
"Create room": "Създай стая",
|
||||
"You've successfully verified your device!": "Успешно потвърдихте устройството си!",
|
||||
"Message deleted": "Съобщението беше изтрито",
|
||||
"Message deleted by %(name)s": "Съобщението беше изтрито от %(name)s",
|
||||
"QR Code": "QR код",
|
||||
"To continue, use Single Sign On to prove your identity.": "За да продължите, използвайте Single Sign On за да потвърдите самоличността си.",
|
||||
"Confirm to continue": "Потвърдете за да продължите",
|
||||
"Click the button below to confirm your identity.": "Кликнете бутона по-долу за да потвърдите самоличността си.",
|
||||
"a new master key signature": "нов подпис на основния ключ",
|
||||
"a new cross-signing key signature": "нов подпис на ключа за кръстосано-подписване",
|
||||
"a device cross-signing signature": "подпис за кръстосано-подписване на устройства",
|
||||
"a key signature": "подпис на ключ",
|
||||
"Riot encountered an error during upload of:": "Riot срещна проблем при качването на:",
|
||||
"Upload completed": "Качването завърши",
|
||||
"Cancelled signature upload": "Отказано качване на подпис",
|
||||
"Unable to upload": "Неуспешно качване",
|
||||
"Signature upload success": "Успешно качване на подпис",
|
||||
"Signature upload failed": "Неуспешно качване на подпис",
|
||||
"Confirm by comparing the following with the User Settings in your other session:": "Потвърдете чрез сравняване на следното с Потребителски Настройки в другата ви сесия:",
|
||||
"Confirm this user's session by comparing the following with their User Settings:": "Потвърдете сесията на този потребител чрез сравняване на следното с техните Потребителски Настройки:",
|
||||
"If they don't match, the security of your communication may be compromised.": "Ако няма съвпадение, сигурността на комуникацията ви може би е компрометирана.",
|
||||
"Your account is not secure": "Профилът ви не е защитен",
|
||||
"Your password": "Паролата ви",
|
||||
"This session, or the other session": "Тази сесия или другата сесия",
|
||||
"The internet connection either session is using": "Интернет връзката, която сесиите използват",
|
||||
"We recommend you change your password and recovery key in Settings immediately": "Препоръчваме веднага да промените паролата и ключа за възстановяване от Настройки",
|
||||
"New session": "Нова сесия",
|
||||
"Use this session to verify your new one, granting it access to encrypted messages:": "Използвайте тази сесия за да потвърдите новата, давайки й достъп до шифрованите съобщения:",
|
||||
"If you didn’t sign in to this session, your account may be compromised.": "Ако не сте се вписвали в тази сесия, профила ви може би е бил компрометиран.",
|
||||
"This wasn't me": "Не бях аз",
|
||||
"This will allow you to return to your account after signing out, and sign in on other sessions.": "Това ще ви позволи да се върнете в профила си след излизането от него, както и да влизате от други сесии.",
|
||||
"You are currently blacklisting unverified sessions; to send messages to these sessions you must verify them.": "В момента блокирате непотвърдени сесии; за да изпратите съобщения до тях ще трябва да ги потвърдите.",
|
||||
"We recommend you go through the verification process for each session to confirm they belong to their legitimate owner, but you can resend the message without verifying if you prefer.": "Препоръчваме да минете през процеса на потвърждение за всяка една сесия и да проверите дали принадлежи на собственика си, но ако желаете, може да изпратите съобщението и без потвърждение.",
|
||||
"Room contains unknown sessions": "Стаята съдържа непознати сесии",
|
||||
"\"%(RoomName)s\" contains sessions that you haven't seen before.": "\"%(RoomName)s\" съдържа сесии, които не сте виждали досега.",
|
||||
"Unknown sessions": "Непознати сесии",
|
||||
"Verify other session": "Потвърди другата сесия",
|
||||
"Enter recovery passphrase": "Въведете парола за възстановяване",
|
||||
"Unable to access secret storage. Please verify that you entered the correct recovery passphrase.": "Неуспешен достъп до секретното складиране. Потвърдете, че сте въвели правилната парола за възстановяване.",
|
||||
"<b>Warning</b>: You should only do this on a trusted computer.": "<b>Внимание</b>: трябва да правите това само от доверен компютър.",
|
||||
"Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery passphrase.": "Въведете паролата си за възстановяване за да достъпите защитената история на съобщенията и самоличността си за кръстосано-подписване за потвърждаване на другите сесии."
|
||||
}
|
||||
|
|
|
@ -2150,7 +2150,7 @@
|
|||
"Sign In or Create Account": "Přihlásit nebo vytvořit nový účet",
|
||||
"Use your account or create a new one to continue.": "Pro pokračování se přihlaste existujícím účtem, nebo si vytvořte nový.",
|
||||
"Create Account": "Vytvořit účet",
|
||||
"Order rooms by name": "Seřadit místnosti podle názvz",
|
||||
"Order rooms by name": "Seřadit místnosti podle názvu",
|
||||
"Show rooms with unread notifications first": "Zobrazovat místnosti s nepřečtenými oznámeními navrchu",
|
||||
"Show shortcuts to recently viewed rooms above the room list": "Zobrazovat zkratky do nedávno zobrazených místností navrchu",
|
||||
"Cancelling…": "Rušení…",
|
||||
|
|
|
@ -1103,7 +1103,7 @@
|
|||
"Room information": "Rauminformationen",
|
||||
"Internal room ID:": "Interne Raum ID:",
|
||||
"Room version": "Raum Version",
|
||||
"Room version:": "Raum Version:",
|
||||
"Room version:": "Raum-Version:",
|
||||
"Developer options": "Entwickleroptionen",
|
||||
"General": "Allgemein",
|
||||
"Set a new account password...": "Neues Benutzerkonto-Passwort festlegen...",
|
||||
|
@ -1543,7 +1543,7 @@
|
|||
"View rules": "Regeln betrachten",
|
||||
"You are currently subscribed to:": "Du abonnierst momentan:",
|
||||
"⚠ These settings are meant for advanced users.": "⚠ Diese Einstellungen sind für fortgeschrittene Nutzer gedacht.",
|
||||
"The version of Riot": "Die Version von Riot",
|
||||
"The version of Riot": "Die Riot-Version",
|
||||
"Whether you're using Riot on a device where touch is the primary input mechanism": "Ob du Riot auf einem Gerät verwendest, bei dem Berührung der primäre Eingabemechanismus ist",
|
||||
"Whether you're using Riot as an installed Progressive Web App": "Ob Sie Riot als installierte progressive Web-App verwenden",
|
||||
"Your user agent": "Dein User-Agent",
|
||||
|
@ -1793,15 +1793,15 @@
|
|||
"Use Single Sign On to continue": "Benutze „Single Sign-On“ (Einmalanmeldung) um fortzufahren",
|
||||
"Confirm adding this email address by using Single Sign On to prove your identity.": "Bestätige das Hinzufügen dieser E-Mail-Adresse mit „Single Sign-On“, um deine Identität nachzuweisen.",
|
||||
"Single Sign On": "Single Sign-On",
|
||||
"Confirm adding email": "Bestätige das Hinzfugen der Email-Addresse",
|
||||
"Confirm adding email": "Bestätige das Hinzufügen der Email-Adresse",
|
||||
"Confirm adding this phone number by using Single Sign On to prove your identity.": "Bestätige das Hinzufügen dieser Telefonnummer, indem du deine Identität mittels „Single Sign-On“ nachweist.",
|
||||
"Click the button below to confirm adding this phone number.": "Betätige unten die Schaltfläche um das Hinzufügen dieser Telefonnummer zu bestätigen.",
|
||||
"Click the button below to confirm adding this phone number.": "Klicke unten die Schaltfläche, um die hinzugefügte Telefonnummer zu bestätigen.",
|
||||
"If you cancel now, you won't complete your operation.": "Wenn du jetzt abbrichst, wirst du deinen Vorgang nicht fertigstellen.",
|
||||
"%(name)s is requesting verification": "%(name)s fordert eine Verifizierung an",
|
||||
"Failed to set topic": "Das Festlegen des Themas ist fehlgeschlagen",
|
||||
"Command failed": "Befehl fehlgeschlagen",
|
||||
"Could not find user in room": "Der Benutzer konnte im Raum nicht gefunden werden",
|
||||
"Click the button below to confirm adding this email address.": "Klicken Sie auf die Schaltfläche unten, um das Hinzufügen dieser E-Mail-Adresse zu bestätigen.",
|
||||
"Click the button below to confirm adding this email address.": "Klicke unten auf die Schaltfläche, um die hinzugefügte E-Mail-Adresse zu bestätigen.",
|
||||
"Confirm adding phone number": "Bestätige das Hinzufügen der Telefonnummer",
|
||||
"%(senderName)s changed a rule that was banning servers matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s ändert eine Ausschluss-Regel für Server von %(oldGlob)s nach %(newGlob)s wegen %(reason)s",
|
||||
"%(senderName)s updated a ban rule that was matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s erneuert eine Ausschluss-Regel von %(oldGlob)s nach %(newGlob)s wegen %(reason)s",
|
||||
|
@ -2375,5 +2375,19 @@
|
|||
"Confirm to continue": "Bestätige um fortzufahren",
|
||||
"Click the button below to confirm your identity.": "Klicke den Button unten um deine Identität zu bestätigen.",
|
||||
"Confirm encryption setup": "Bestätige die Einrichtung der Verschlüsselung",
|
||||
"Click the button below to confirm setting up encryption.": "Klick die Schaltfläche unten um die Einstellungen der Verschlüsselung zu bestätigen."
|
||||
"Click the button below to confirm setting up encryption.": "Klick die Schaltfläche unten um die Einstellungen der Verschlüsselung zu bestätigen.",
|
||||
"Font scaling": "Schriftskalierung",
|
||||
"Use the improved room list (in development - refresh to apply changes)": "Verwende die verbesserte Raumliste (in Entwicklung - neu laden um die Änderungen anzuwenden)",
|
||||
"Use IRC layout": "Verwende das IRC Layout",
|
||||
"Font size": "Schriftgröße",
|
||||
"Custom font size": "Eigene Schriftgröße",
|
||||
"IRC display name width": "Breite des IRC Anzeigenamens",
|
||||
"Size must be a number": "Größe muss eine Zahl sein",
|
||||
"Custom font size can only be between %(min)s pt and %(max)s pt": "Eigene Schriftgröße kann nur eine Zahl zwischen %(min)s pt und %(max)s pt sein",
|
||||
"Use between %(min)s pt and %(max)s pt": "Verwende eine Zahl zwischen %(min)s pt und %(max)s pt",
|
||||
"Appearance": "Erscheinungsbild",
|
||||
"Create room": "Raum erstellen",
|
||||
"Jump to oldest unread message": "Zur ältesten ungelesenen Nachricht springen",
|
||||
"Upload a file": "Eine Datei hochladen",
|
||||
"Dismiss read marker and jump to bottom": "Entferne Lesemarker und springe nach unten"
|
||||
}
|
||||
|
|
|
@ -110,7 +110,7 @@
|
|||
"Which rooms would you like to add to this community?": "Which rooms would you like to add to this community?",
|
||||
"Show these rooms to non-members on the community page and room list?": "Show these rooms to non-members on the community page and room list?",
|
||||
"Add rooms to the community": "Add rooms to the community",
|
||||
"Room name or alias": "Room name or alias",
|
||||
"Room name or address": "Room name or address",
|
||||
"Add to community": "Add to community",
|
||||
"Failed to invite the following users to %(groupId)s:": "Failed to invite the following users to %(groupId)s:",
|
||||
"Failed to invite users to community": "Failed to invite users to community",
|
||||
|
@ -180,9 +180,9 @@
|
|||
"Use an identity server": "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.": "Use an identity server to invite by email. Click continue to use the default identity server (%(defaultIdentityServerName)s) or manage in Settings.",
|
||||
"Use an identity server to invite by email. Manage in Settings.": "Use an identity server to invite by email. Manage in Settings.",
|
||||
"Joins room with given alias": "Joins room with given alias",
|
||||
"Joins room with given address": "Joins room with given address",
|
||||
"Leave room": "Leave room",
|
||||
"Unrecognised room alias:": "Unrecognised room alias:",
|
||||
"Unrecognised room address:": "Unrecognised room address:",
|
||||
"Kicks user with given id": "Kicks user with given id",
|
||||
"Bans user with given id": "Bans user with given id",
|
||||
"Unbans user with given ID": "Unbans user with given ID",
|
||||
|
@ -826,7 +826,7 @@
|
|||
"Error adding ignored user/server": "Error adding ignored user/server",
|
||||
"Something went wrong. Please try again or view your console for hints.": "Something went wrong. Please try again or view your console for hints.",
|
||||
"Error subscribing to list": "Error subscribing to list",
|
||||
"Please verify the room ID or alias and try again.": "Please verify the room ID or alias and try again.",
|
||||
"Please verify the room ID or address and try again.": "Please verify the room ID or address and try again.",
|
||||
"Error removing ignored user/server": "Error removing ignored user/server",
|
||||
"Error unsubscribing from list": "Error unsubscribing from list",
|
||||
"Please try again or view your console for hints.": "Please try again or view your console for hints.",
|
||||
|
@ -852,7 +852,7 @@
|
|||
"Subscribed lists": "Subscribed lists",
|
||||
"Subscribing to a ban list will cause you to join it!": "Subscribing to a ban list will cause you to join it!",
|
||||
"If this isn't what you want, please use a different tool to ignore users.": "If this isn't what you want, please use a different tool to ignore users.",
|
||||
"Room ID or alias of ban list": "Room ID or alias of ban list",
|
||||
"Room ID or address of ban list": "Room ID or address of ban list",
|
||||
"Subscribe": "Subscribe",
|
||||
"Start automatically after system login": "Start automatically after system login",
|
||||
"Always show the window menu bar": "Always show the window menu bar",
|
||||
|
@ -953,7 +953,7 @@
|
|||
"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>": "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>",
|
||||
"Guests cannot join this room even if explicitly invited.": "Guests cannot join this room even if explicitly invited.",
|
||||
"Click here to fix": "Click here to fix",
|
||||
"To link to this room, please add an alias.": "To link to this room, please add an alias.",
|
||||
"To link to this room, please add an address.": "To link to this room, please add an address.",
|
||||
"Only people who have been invited": "Only people who have been invited",
|
||||
"Anyone who knows the room's link, apart from guests": "Anyone who knows the room's link, apart from guests",
|
||||
"Anyone who knows the room's link, including guests": "Anyone who knows the room's link, including guests",
|
||||
|
@ -1228,11 +1228,11 @@
|
|||
"Error updating main address": "Error updating main address",
|
||||
"There was an error updating the room's main address. It may not be allowed by the server or a temporary failure occurred.": "There was an error updating the room's main address. It may not be allowed by the server or a temporary failure occurred.",
|
||||
"There was an error updating the room's alternative addresses. It may not be allowed by the server or a temporary failure occurred.": "There was an error updating the room's alternative addresses. It may not be allowed by the server or a temporary failure occurred.",
|
||||
"Error creating alias": "Error creating alias",
|
||||
"There was an error creating that alias. It may not be allowed by the server or a temporary failure occurred.": "There was an error creating that alias. It may not be allowed by the server or a temporary failure occurred.",
|
||||
"You don't have permission to delete the alias.": "You don't have permission to delete the alias.",
|
||||
"There was an error removing that alias. It may no longer exist or a temporary error occurred.": "There was an error removing that alias. It may no longer exist or a temporary error occurred.",
|
||||
"Error removing alias": "Error removing alias",
|
||||
"Error creating address": "Error creating address",
|
||||
"There was an error creating that address. It may not be allowed by the server or a temporary failure occurred.": "There was an error creating that address. It may not be allowed by the server or a temporary failure occurred.",
|
||||
"You don't have permission to delete the address.": "You don't have permission to delete the address.",
|
||||
"There was an error removing that address. It may no longer exist or a temporary error occurred.": "There was an error removing that address. It may no longer exist or a temporary error occurred.",
|
||||
"Error removing address": "Error removing address",
|
||||
"Main address": "Main address",
|
||||
"not specified": "not specified",
|
||||
"This room has no local addresses": "This room has no local addresses",
|
||||
|
@ -1410,6 +1410,7 @@
|
|||
"Objects": "Objects",
|
||||
"Symbols": "Symbols",
|
||||
"Flags": "Flags",
|
||||
"Categories": "Categories",
|
||||
"Quick Reactions": "Quick Reactions",
|
||||
"Cancel search": "Cancel search",
|
||||
"Unknown Address": "Unknown Address",
|
||||
|
@ -1513,12 +1514,12 @@
|
|||
"QR Code": "QR Code",
|
||||
"Unable to load event that was replied to, it either does not exist or you do not have permission to view it.": "Unable to load event that was replied to, it either does not exist or you do not have permission to view it.",
|
||||
"<a>In reply to</a> <pill>": "<a>In reply to</a> <pill>",
|
||||
"Room alias": "Room alias",
|
||||
"Room address": "Room address",
|
||||
"e.g. my-room": "e.g. my-room",
|
||||
"Some characters not allowed": "Some characters not allowed",
|
||||
"Please provide a room alias": "Please provide a room alias",
|
||||
"This alias is available to use": "This alias is available to use",
|
||||
"This alias is already in use": "This alias is already in use",
|
||||
"Please provide a room address": "Please provide a room address",
|
||||
"This address is available to use": "This address is available to use",
|
||||
"This address is already in use": "This address is already in use",
|
||||
"Room directory": "Room directory",
|
||||
"Sign in with single sign-on": "Sign in with single sign-on",
|
||||
"And %(count)s more...|other": "And %(count)s more...",
|
||||
|
@ -1584,7 +1585,7 @@
|
|||
"example": "example",
|
||||
"Create": "Create",
|
||||
"Please enter a name for the room": "Please enter a name for the room",
|
||||
"Set a room alias to easily share your room with other people.": "Set a room alias to easily share your room with other people.",
|
||||
"Set a room address to easily share your room with other people.": "Set a room address to easily share your room with other people.",
|
||||
"This room is private, and can only be joined by invitation.": "This room is private, and can only be joined by invitation.",
|
||||
"Enable end-to-end encryption": "Enable end-to-end encryption",
|
||||
"You can’t disable this later. Bridges & most bots won’t work yet.": "You can’t disable this later. Bridges & most bots won’t work yet.",
|
||||
|
@ -1599,7 +1600,7 @@
|
|||
"Create Room": "Create Room",
|
||||
"Sign out": "Sign out",
|
||||
"To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of Riot to do this": "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of Riot to do this",
|
||||
"You've previously used a newer version of Riot on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "You've previously used a newer version of Riot on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ",
|
||||
"You've previously used a newer version of Riot with this session. To use this version again with end to end encryption, you will need to sign out and back in again.": "You've previously used a newer version of Riot with this session. To use this version again with end to end encryption, you will need to sign out and back in again.",
|
||||
"Incompatible Database": "Incompatible Database",
|
||||
"Continue With Encryption Disabled": "Continue With Encryption Disabled",
|
||||
"Confirm your account deactivation by using Single Sign On to prove your identity.": "Confirm your account deactivation by using Single Sign On to prove your identity.",
|
||||
|
@ -1840,7 +1841,7 @@
|
|||
"Private Chat": "Private Chat",
|
||||
"Public Chat": "Public Chat",
|
||||
"Custom": "Custom",
|
||||
"Alias (optional)": "Alias (optional)",
|
||||
"Address (optional)": "Address (optional)",
|
||||
"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",
|
||||
|
@ -1857,7 +1858,6 @@
|
|||
"Share Message": "Share Message",
|
||||
"Source URL": "Source URL",
|
||||
"Collapse Reply Thread": "Collapse Reply Thread",
|
||||
"End-to-end encryption information": "End-to-end encryption information",
|
||||
"Report Content": "Report Content",
|
||||
"Failed to set Direct Message status of room": "Failed to set Direct Message status of room",
|
||||
"Failed to forget room %(errCode)s": "Failed to forget room %(errCode)s",
|
||||
|
@ -2035,11 +2035,11 @@
|
|||
"Riot failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "Riot failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.",
|
||||
"Riot failed to get the public room list.": "Riot failed to get the public room list.",
|
||||
"The homeserver may be unavailable or overloaded.": "The homeserver may be unavailable or overloaded.",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Delete the room alias %(alias)s and remove %(name)s from the directory?",
|
||||
"Delete the room address %(alias)s and remove %(name)s from the directory?": "Delete the room address %(alias)s and remove %(name)s from the directory?",
|
||||
"Remove %(name)s from the directory?": "Remove %(name)s from the directory?",
|
||||
"Remove from Directory": "Remove from Directory",
|
||||
"remove %(name)s from the directory.": "remove %(name)s from the directory.",
|
||||
"delete the alias.": "delete the alias.",
|
||||
"delete the address.": "delete the address.",
|
||||
"The server may be unavailable or overloaded": "The server may be unavailable or overloaded",
|
||||
"Unable to join network": "Unable to join network",
|
||||
"Riot does not know how to join a room on this network": "Riot does not know how to join a room on this network",
|
||||
|
@ -2085,7 +2085,6 @@
|
|||
"Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.",
|
||||
"Tried to load a specific point in this room's timeline, but was unable to find it.": "Tried to load a specific point in this room's timeline, but was unable to find it.",
|
||||
"Failed to load timeline position": "Failed to load timeline position",
|
||||
" (1/%(totalCount)s)": " (1/%(totalCount)s)",
|
||||
"Guest": "Guest",
|
||||
"Your profile": "Your profile",
|
||||
"Uploading %(filename)s and %(count)s others|other": "Uploading %(filename)s and %(count)s others",
|
||||
|
@ -2178,22 +2177,6 @@
|
|||
"Room Autocomplete": "Room Autocomplete",
|
||||
"Users": "Users",
|
||||
"User Autocomplete": "User Autocomplete",
|
||||
"unknown device": "unknown device",
|
||||
"NOT verified": "NOT verified",
|
||||
"Blacklisted": "Blacklisted",
|
||||
"verified": "verified",
|
||||
"Device ID": "Device ID",
|
||||
"Verification": "Verification",
|
||||
"Ed25519 fingerprint": "Ed25519 fingerprint",
|
||||
"User ID": "User ID",
|
||||
"Curve25519 identity key": "Curve25519 identity key",
|
||||
"none": "none",
|
||||
"Claimed Ed25519 fingerprint key": "Claimed Ed25519 fingerprint key",
|
||||
"Algorithm": "Algorithm",
|
||||
"unencrypted": "unencrypted",
|
||||
"Decryption error": "Decryption error",
|
||||
"Event information": "Event information",
|
||||
"Sender session information": "Sender session information",
|
||||
"Passphrases must match": "Passphrases must match",
|
||||
"Passphrase must not be empty": "Passphrase must not be empty",
|
||||
"Export room keys": "Export room keys",
|
||||
|
@ -2219,6 +2202,7 @@
|
|||
"Back up encrypted message keys": "Back up encrypted message keys",
|
||||
"Set up with a recovery key": "Set up with a recovery key",
|
||||
"That matches!": "That matches!",
|
||||
"Use a different passphrase?": "Use a different passphrase?",
|
||||
"That doesn't match.": "That doesn't match.",
|
||||
"Go back to set it again.": "Go back to set it again.",
|
||||
"Enter your recovery passphrase a second time to confirm it.": "Enter your recovery passphrase a second time to confirm it.",
|
||||
|
|
|
@ -385,7 +385,7 @@
|
|||
"Communities": "Komunumoj",
|
||||
"Home": "Hejmo",
|
||||
"Could not connect to the integration server": "Malsukcesis konektiĝi al la kuniga servilo",
|
||||
"Manage Integrations": "Administri integrojn",
|
||||
"Manage Integrations": "Administri kunigojn",
|
||||
"%(nameList)s %(transitionList)s": "%(nameList)s %(transitionList)s",
|
||||
"%(severalUsers)sjoined %(count)s times|other": "%(severalUsers)s%(count)s-foje aliĝis",
|
||||
"%(severalUsers)sjoined %(count)s times|one": "%(severalUsers)saliĝis",
|
||||
|
@ -882,7 +882,7 @@
|
|||
"Delete Backup": "Forigi savkopion",
|
||||
"Language and region": "Lingvo kaj regiono",
|
||||
"Theme": "Haŭto",
|
||||
"General": "Ĝenerala",
|
||||
"General": "Ĝeneralaj",
|
||||
"<a>In reply to</a> <pill>": "<a>Responde al</a> <pill>",
|
||||
"Share Message": "Diskonigi",
|
||||
"Whether or not you're logged in (we don't record your username)": "Ĉu vi salutis aŭ ne (ni ne registras vian uzantonomon)",
|
||||
|
@ -974,9 +974,9 @@
|
|||
"Room list": "Ĉambrolisto",
|
||||
"Ignored users": "Malatentaj uzantoj",
|
||||
"Key backup": "Sekurkopio de ŝlosilo",
|
||||
"Security & Privacy": "Sekureco & Privateco",
|
||||
"Security & Privacy": "Sekureco kaj Privateco",
|
||||
"Voice & Video": "Voĉo kaj vido",
|
||||
"Room information": "Ĉambraj informoj",
|
||||
"Room information": "Informoj pri ĉambro",
|
||||
"Internal room ID:": "Ena ĉambra identigilo:",
|
||||
"Room version": "Ĉambra versio",
|
||||
"Room version:": "Ĉambra versio:",
|
||||
|
@ -998,7 +998,7 @@
|
|||
"Remove messages": "Forigi mesaĝojn",
|
||||
"Notify everyone": "Sciigi ĉiujn",
|
||||
"Muted Users": "Silentigitaj uzantoj",
|
||||
"Roles & Permissions": "Roloj & Permesoj",
|
||||
"Roles & Permissions": "Roloj kaj Permesoj",
|
||||
"Enable encryption?": "Ĉu ŝalti ĉifradon?",
|
||||
"Share Link to User": "Kunhavigi ligilon al uzanto",
|
||||
"Seen by %(displayName)s (%(userName)s) at %(dateTime)s": "Vidita de %(displayName)s (%(userName)s) je %(dateTime)s",
|
||||
|
@ -1017,7 +1017,7 @@
|
|||
"To continue, please enter your password:": "Por daŭrigi, bonvoluenigi vian pasvorton:",
|
||||
"Updating Riot": "Ĝisdatigante Riot",
|
||||
"Go back": "Reen iri",
|
||||
"Room Settings - %(roomName)s": "Ĉambraj agordoj — %(roomName)s",
|
||||
"Room Settings - %(roomName)s": "Agordoj de ĉambro – %(roomName)s",
|
||||
"Failed to upgrade room": "Malsukcesis gradaltigi ĉambron",
|
||||
"Refresh": "Aktualigi",
|
||||
"Checking...": "Kontrolante…",
|
||||
|
@ -1025,7 +1025,7 @@
|
|||
"Share User": "Kunhavigi uzanton",
|
||||
"Share Community": "Kunhavigi komunumon",
|
||||
"Share Room Message": "Kunhavigi ĉambran mesaĝon",
|
||||
"COPY": "KOPIO",
|
||||
"COPY": "KOPII",
|
||||
"Next": "Sekva",
|
||||
"Clear status": "Vakigi staton",
|
||||
"Update status": "Ĝisdatigi staton",
|
||||
|
@ -1386,7 +1386,7 @@
|
|||
"The conversation continues here.": "La interparolo pluas ĉ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 ĉambraj administrantoj vidos ĉi tiun averton",
|
||||
"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:",
|
||||
|
@ -2055,7 +2055,7 @@
|
|||
"%(displayName)s cancelled verification. Start verification again from their profile.": "%(displayName)s nuligis la kontrolon. Rekomencu ĝin de ĝia profilo.",
|
||||
"You cancelled verification. Start verification again from their profile.": "Vi nuligis la kontrolon. Rekomencu ĝin de ĝia profilo.",
|
||||
"Encryption enabled": "Ĉifrado estas ŝaltita",
|
||||
"Messages in this room are end-to-end encrypted. Learn more & verify this user in their user profile.": "Mesaĝojn en ĉi tiu ĉambro estas tutvoje ĉifrataj. Eksciu plion kaj kontrolu ĉi tiun uzanton el ĝia profilo.",
|
||||
"Messages in this room are end-to-end encrypted. Learn more & verify this user in their user profile.": "Mesaĝoj en ĉi tiu ĉambro estas tutvoje ĉifrataj. Eksciu plion kaj kontrolu ĉi tiun uzanton per ĝia profilo.",
|
||||
"Encryption not enabled": "Ĉifrado ne estas ŝaltita",
|
||||
"The encryption used by this room isn't supported.": "La ĉifro uzata de ĉi tiu ĉambro ne estas subtenata.",
|
||||
"You have ignored this user, so their message is hidden. <a>Show anyways.</a>": "Vi malatentis ĉi tiun uzanton, ĝia mesaĝo estas do kaŝita. <a>Tamen montri.</a>",
|
||||
|
@ -2409,5 +2409,16 @@
|
|||
"QR Code": "Rapidresponda kodo",
|
||||
"Dismiss read marker and jump to bottom": "Forigi legomarkon kaj iri al fundo",
|
||||
"Jump to oldest unread message": "Iri al plej malnova nelegita mesaĝo",
|
||||
"Upload a file": "Alŝuti dosieron"
|
||||
"Upload a file": "Alŝuti dosieron",
|
||||
"Create room": "Krei ĉambron",
|
||||
"Use IRC layout": "Uzi aranĝon de IRC",
|
||||
"IRC display name width": "Larĝo de vidiga nomo de IRC",
|
||||
"Font scaling": "Skalado de tiparoj",
|
||||
"Font size": "Grando de tiparo",
|
||||
"Custom font size": "Propra grando de tiparo",
|
||||
"Size must be a number": "Grando devas esti nombro",
|
||||
"Custom font size can only be between %(min)s pt and %(max)s pt": "Propra grando de tiparo povas interi nur %(min)s punktojn kaj %(max)s punktojn",
|
||||
"Use between %(min)s pt and %(max)s pt": "Uzi inter %(min)s punktoj kaj %(max)s punktoj",
|
||||
"Appearance": "Aspekto",
|
||||
"Use the improved room list (in development - refresh to apply changes)": "Uzi la plibonigitan liston de ĉambroj (ankoraŭ evoluigate – aktualigu la paĝon por efektivigi ŝanĝojn)"
|
||||
}
|
||||
|
|
|
@ -1236,5 +1236,45 @@
|
|||
"Nothing appearing? Not all clients support interactive verification yet. <button>Use legacy verification</button>.": "Mitte midagi ei kuvata? Kõik Matrix'i kliendid ei toeta veel interaktiivset verifitseerimist. <button>Kasuta vana kooli verifitseerimismeetodit</button>.",
|
||||
"Waiting for %(userId)s to confirm...": "Ootan kinnitust kasutajalt %(userId)s…",
|
||||
"Skip": "Jäta vahele",
|
||||
"Token incorrect": "Vigane tunnusluba"
|
||||
"Token incorrect": "Vigane tunnusluba",
|
||||
"%(oneUser)schanged their name %(count)s times|one": "Kasutaja %(oneUser)s muutis oma nime",
|
||||
"Are you sure you want to deactivate your account? This is irreversible.": "Kas sa oled kindel, et soovid oma konto sulgeda? Seda tegevust ei saa hiljem tagasi pöörata.",
|
||||
"Confirm account deactivation": "Kinnita konto sulgemine",
|
||||
"There was a problem communicating with the server. Please try again.": "Serveriühenduses tekkis viga. Palun proovi uuesti.",
|
||||
"Server did not return valid authentication information.": "Serveri saadetud vastuses ei olnud kehtivat autentimisteavet.",
|
||||
"Please fill why you're reporting.": "Palun kirjelda veateate põhjust.",
|
||||
"Something went wrong trying to invite the users.": "Kasutajatele kutse saatmisel läks midagi viltu.",
|
||||
"We couldn't invite those users. Please check the users you want to invite and try again.": "Meil ei õnnestunud neile kasutajatele kutset saata. Palun kontrolli, keda soovid kutsuda ning proovi uuesti.",
|
||||
"Failed to find the following users": "Järgnevaid kasutajaid ei õnnestunud leida",
|
||||
"The following users might not exist or are invalid, and cannot be invited: %(csvNames)s": "Järgmisi kasutajanimesid pole olemas või on vigaselt kirjas ning seega ei saa neile kutset saata: %(csvNames)s",
|
||||
"Recently Direct Messaged": "Viimased otsesõnumite saajad",
|
||||
"Invite someone using their name, username (like <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>.",
|
||||
"You added a new session '%(displayName)s', which is requesting encryption keys.": "Sa oled lisanud uue sessiooni '%(displayName)s', mis küsib krüptimisvõtmeid.",
|
||||
"Start verification": "Alusta verifitseerimist",
|
||||
"Share without verifying": "Jaga ilma verifitseerimata",
|
||||
"Loading session info...": "Laen sessiooniteavet…",
|
||||
"Encryption key request": "Krüptimisvõtmete päring",
|
||||
"Upload completed": "Üleslaadimine valmis",
|
||||
"Riot now uses 3-5x less memory, by only loading information about other users when needed. Please wait whilst we resynchronise with the server!": "Riot kasutab varasemaga võrreldes 3-5 korda vähem mälu, sest laeb teavet kasutajate kohta vaid siis, kui vaja. Palun oota hetke, kuni sünkroniseerime andmeid serveriga!",
|
||||
"Updating Riot": "Uuenda Riot'it",
|
||||
"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",
|
||||
"Are you sure you want to sign out?": "Kas sa oled kindel, et soovid välja logida?",
|
||||
"Upload %(count)s other files|one": "Lae üles %(count)s muu fail",
|
||||
"Cancel All": "Tühista kõik",
|
||||
"Upload Error": "Üleslaadimise viga",
|
||||
"Verify other session": "Verifitseeri teine sessioon",
|
||||
"Verification Request": "Verifitseerimispäring",
|
||||
"A widget would like to verify your identity": "Vidin soovib verifitseerida sinu isikut",
|
||||
"A widget located at %(widgetUrl)s would like to verify your identity. By allowing this, the widget will be able to verify your user ID, but not perform actions as you.": "Vidin %(widgetUrl)s saidist soovib verifitseerida sinu isikut. Kui sa seda lubad, siis vidin verifitseerib vaid sinu kasutajatunnuse, kuid ei saa teha toiminguid sinuna.",
|
||||
"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",
|
||||
"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!",
|
||||
"Successfully restored %(sessionCount)s keys": "%(sessionCount)s sessiooni võtme taastamine õnnestus",
|
||||
"<b>Warning</b>: you should only set up key backup from a trusted computer.": "<b>Hoiatus</b>: sa peaksid võtmete varunduse seadistama vaid usaldusväärsest arvutist."
|
||||
}
|
||||
|
|
|
@ -783,7 +783,7 @@
|
|||
"Explore Account Data": "Miatu kontuaren datuak",
|
||||
"All messages (noisy)": "Mezu guztiak (ozen)",
|
||||
"Saturday": "Larunbata",
|
||||
"I understand the risks and wish to continue": "Arriskua ulertzen dut eta jarraitu nahi dut",
|
||||
"I understand the risks and wish to continue": "Arriskuak ulertzen ditut eta jarraitu nahi dut",
|
||||
"Direct Chat": "Txat zuzena",
|
||||
"The server may be unavailable or overloaded": "Zerbitzaria eskuraezin edo gainezka egon daiteke",
|
||||
"Reject": "Baztertu",
|
||||
|
@ -2385,5 +2385,45 @@
|
|||
"Please enter your recovery passphrase a second time to confirm.": "Sartu zure berreskuratze pasa-esaldia berriro baieztatzeko.",
|
||||
"Repeat your recovery passphrase...": "Errepikatu zure berreskuratze pasa-esaldia...",
|
||||
"Secure your backup with a recovery passphrase": "Babestu zure babeskopia berreskuratze pasa-esaldi batekin",
|
||||
"Currently indexing: %(currentRoom)s": "Orain indexatzen: %(currentRoom)s"
|
||||
"Currently indexing: %(currentRoom)s": "Orain indexatzen: %(currentRoom)s",
|
||||
"Review where you’re logged in": "Berrikusi non hasi duzun saioa",
|
||||
"New login. Was this you?": "Saio berria. Zu izan zara?",
|
||||
"Opens chat with the given user": "Erabiltzailearekin txata irekitzen du",
|
||||
"Sends a message to the given user": "Erabiltzaileari mezua bidaltzen dio",
|
||||
"You signed in to a new session without verifying it:": "Saio berria hasi duzu hau egiaztatu gabe:",
|
||||
"Verify your other session using one of the options below.": "Egiaztatu zure beste saioa beheko aukeretako batekin.",
|
||||
"Font scaling": "Letren eskalatzea",
|
||||
"Use the improved room list (in development - refresh to apply changes)": "Erabili gelen zerrenda hobetua (garapenean, freskatu aldaketak aplikatzedko)",
|
||||
"Use IRC layout": "Erabili IRC diseinua",
|
||||
"Font size": "Letra-tamaina",
|
||||
"Custom font size": "Letra-tamaina pertsonalizatua",
|
||||
"IRC display name width": "IRC-ko pantaila izenaren zabalera",
|
||||
"Waiting for your other session to verify…": "Zure beste saioak egiaztatu bitartean zain…",
|
||||
"Verify all your sessions to ensure your account & messages are safe": "Egiaztatu zure saio guztiak kontua eta mezuak seguru daudela bermatzeko",
|
||||
"Verify the new login accessing your account: %(name)s": "Egiaztatu zure kontuan hasitako saio berria: %(name)s",
|
||||
"Size must be a number": "Tamaina zenbaki bat izan behar da",
|
||||
"Custom font size can only be between %(min)s pt and %(max)s pt": "Letra tamaina pertsonalizatua %(min)s pt eta %(max)s pt bitartean egon behar du",
|
||||
"Use between %(min)s pt and %(max)s pt": "Erabili %(min)s pt eta %(max)s pt bitarteko balioa",
|
||||
"Appearance": "Itxura",
|
||||
"Where you’re logged in": "Non hasi duzun saioa",
|
||||
"Manage the names of and sign out of your sessions below or <a>verify them in your User Profile</a>.": "Kudeatu azpiko saioen izenak eta hauek amaitu edo <a>egiaztatu zure erabiltzaile-profilean</a>.",
|
||||
"Create room": "Sortu gela",
|
||||
"You've successfully verified your device!": "Ongi egiaztatu duzu zure gailua!",
|
||||
"Message deleted": "Mezu ezabatuta",
|
||||
"Message deleted by %(name)s": "Mezua ezabatu du %(name)s erabiltzaileak",
|
||||
"QR Code": "QR kodea",
|
||||
"To continue, use Single Sign On to prove your identity.": "Jarraitzeko, erabili Single Sign On zure identitatea frogatzeko.",
|
||||
"Confirm to continue": "Berretsi jarraitzeko",
|
||||
"Click the button below to confirm your identity.": "Sakatu azpiko botoia zure identitatea frogatzeko.",
|
||||
"Invite someone using their name, username (like <userId/>), email address or <a>share this room</a>.": "Gonbidatu norbait bere izena, erabiltzaile izena (esaterako <userId/>), e-mail helbidea erabiliz, edo <a>partekatu gela hau</a>.",
|
||||
"Restoring keys from backup": "Gakoak babes-kopiatik berrezartzen",
|
||||
"Fetching keys from server...": "Gakoak zerbitzaritik eskuratzen...",
|
||||
"%(completed)s of %(total)s keys restored": "%(completed)s/%(total)s gako berreskuratuta",
|
||||
"Keys restored": "Gakoak berreskuratuta",
|
||||
"Successfully restored %(sessionCount)s keys": "%(sessionCount)s gako ongi berreskuratuta",
|
||||
"Confirm encryption setup": "Berretsi zifratze ezarpena",
|
||||
"Click the button below to confirm setting up encryption.": "Sakatu azpiko botoia zifratze-ezarpena berresteko.",
|
||||
"Dismiss read marker and jump to bottom": "Baztertu irakurtze-marka eta jauzi beheraino",
|
||||
"Jump to oldest unread message": "Jauzi irakurri gabeko mezu zaharrenera",
|
||||
"Upload a file": "Igo fitxategia"
|
||||
}
|
||||
|
|
|
@ -421,7 +421,7 @@
|
|||
"Invite new community members": "Kutsu uusia jäseniä yhteisöön",
|
||||
"Invite to Community": "Kutsu yhteisöön",
|
||||
"Which rooms would you like to add to this community?": "Mitkä huoneet haluaisit lisätä tähän yhteisöön?",
|
||||
"Show these rooms to non-members on the community page and room list?": "Näytetäänkö nämä huoneet ei-jäsenille yhteisön sivulla ja huonelistassa?",
|
||||
"Show these rooms to non-members on the community page and room list?": "Näytetäänkö nämä huoneet ei-jäsenille yhteisön sivulla ja huoneluettelossa?",
|
||||
"Add rooms to the community": "Lisää huoneita tähän yhteisöön",
|
||||
"Room name or alias": "Huoneen nimi tai alias",
|
||||
"Add to community": "Lisää yhteisöön",
|
||||
|
@ -1343,7 +1343,7 @@
|
|||
"Deny": "Kiellä",
|
||||
"Data from an older version of Riot has been detected. This will have caused end-to-end cryptography to malfunction in the older version. End-to-end encrypted messages exchanged recently whilst using the older version may not be decryptable in this version. This may also cause messages exchanged with this version to fail. If you experience problems, log out and back in again. To retain message history, export and re-import your keys.": "Tunnistimme dataa, joka on lähtöisin vanhasta Riotin versiosta. Tämä aiheuttaa toimintahäiriöitä osapuolten välisessä salauksessa vanhassa versiossa. Viestejä, jotka on salattu osapuolten välisellä salauksella vanhalla versiolla, ei välttämättä voida purkaa tällä versiolla. Tämä voi myös aiheuttaa epäonnistumisia viestien välityksessä tämän version kanssa. Jos kohtaat ongelmia, kirjaudu ulos ja takaisin sisään. Säilyttääksesi viestihistoriasi, vie salausavaimesi ja tuo ne uudelleen.",
|
||||
"Riot failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "Riot epäonnistui protokollalistan hakemisessa kotipalvelimelta. Kotipalvelin saattaa olla liian vanha tukeakseen kolmannen osapuolen verkkoja.",
|
||||
"Riot failed to get the public room list.": "Riot epäonnistui julkisen huonelistan haussa.",
|
||||
"Riot failed to get the public room list.": "Riot ei onnistunut hakemaan julkista huoneluetteloa.",
|
||||
"The homeserver may be unavailable or overloaded.": "Kotipalvelin saattaa olla saavuttamattomissa tai ylikuormitettuna.",
|
||||
"You have %(count)s unread notifications in a prior version of this room.|other": "Sinulla on %(count)s lukematonta ilmoitusta huoneen edellisessä versiossa.",
|
||||
"You have %(count)s unread notifications in a prior version of this room.|one": "Sinulla on %(count)s lukematon ilmoitus huoneen edellisessä versiossa.",
|
||||
|
@ -1374,7 +1374,7 @@
|
|||
"Set up Secure Messages": "Ota käyttöön salatut viestit",
|
||||
"Recovery Method Removed": "Palautustapa poistettu",
|
||||
"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.": "Jos et poistanut palautustapaa, hyökkääjä saattaa yrittää käyttää tiliäsi. Vaihda tilisi salasana ja aseta uusi palautustapa asetuksissa välittömästi.",
|
||||
"Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "Käytätkö 'leivänmuruja' (kuvia huonelistan yläpuolella) vai et",
|
||||
"Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "Käytätkö 'leivänmuruja' (kuvia huoneluettelon yläpuolella) vai et",
|
||||
"Replying With Files": "Tiedostoilla vastaaminen",
|
||||
"At this time it is not possible to reply with a file. Would you like to upload this file without replying?": "Tiedostolla vastaaminen ei onnistu tällä erää. Haluatko ladata tiedoston vastaamatta?",
|
||||
"The file '%(fileName)s' failed to upload.": "Tiedoston '%(fileName)s' lataaminen ei onnistunut.",
|
||||
|
@ -2033,7 +2033,7 @@
|
|||
"Support adding custom themes": "Tue mukaututettujen teemojen lisäämistä",
|
||||
"Enable cross-signing to verify per-user instead of per-session (in development)": "Ota ristivarmennus käyttöön varmentaaksesi käyttäjät istuntojen sijaan (kehitysversio)",
|
||||
"Show rooms with unread notifications first": "Näytä ensin huoneet, joissa on lukemattomia viestejä",
|
||||
"Show shortcuts to recently viewed rooms above the room list": "Näytä oikotiet viimeiseksi katsottuihin huoneisiin huonelistan yläpuolella",
|
||||
"Show shortcuts to recently viewed rooms above the room list": "Näytä oikotiet viimeiseksi katsottuihin huoneisiin huoneluettelon yläpuolella",
|
||||
"Enable message search in encrypted rooms": "Ota viestihaku salausta käyttävissä huoneissa käyttöön",
|
||||
"Keep secret storage passphrase in memory for this session": "Pidä salavaraston salalause muistissa tämän istunnon ajan",
|
||||
"How fast should messages be downloaded.": "Kuinka nopeasti viestit pitäisi ladata.",
|
||||
|
@ -2189,5 +2189,129 @@
|
|||
"Successfully restored %(sessionCount)s keys": "%(sessionCount)s avaimen palautus onnistui",
|
||||
"This requires the latest Riot on your other devices:": "Tämä vaatii uusimman Riotin muilla laitteillasi:",
|
||||
"Currently indexing: %(currentRoom)s": "Indeksoidaan huonetta: %(currentRoom)s",
|
||||
"Jump to oldest unread message": "Siirry vanhimpaan lukemattomaan viestiin"
|
||||
"Jump to oldest unread message": "Siirry vanhimpaan lukemattomaan viestiin",
|
||||
"Opens chat with the given user": "Avaa keskustelun annetun käyttäjän kanssa",
|
||||
"Sends a message to the given user": "Lähettää viestin annetulle käyttäjälle",
|
||||
"Manually Verify by Text": "Varmenna käsin tekstillä",
|
||||
"Interactively verify by Emoji": "Varmenna interaktiivisesti emojilla",
|
||||
"Use IRC layout": "Käytä IRC-asettelua",
|
||||
"Enable cross-signing to verify per-user instead of per-session": "Ota ristivarmennus käyttöön varmentaaksesi käyttäjät istuntojen sijaan",
|
||||
"Keep recovery passphrase in memory for this session": "Pidä palautuksen salalause muistissa tämän istunnon ajan",
|
||||
"Manually verify all remote sessions": "Varmenna kaikki etäistunnot käsin",
|
||||
"IRC display name width": "IRC-näyttönimen leveys",
|
||||
"Verify this session by confirming the following number appears on its screen.": "Varmenna tämä istunto varmistamalla, että seuraava numero ilmestyy sen näytölle.",
|
||||
"Waiting for your other session, %(deviceName)s (%(deviceId)s), to verify…": "Odotetaan toista istuntoasi, %(deviceName)s (%(deviceId)s), varmennukseen…",
|
||||
"Waiting for your other session to verify…": "odotetaan toista istuntoasi varmennukseen…",
|
||||
"Verify all your sessions to ensure your account & messages are safe": "Varmenna kaikki istuntosi varmistaaksesi, että tunnuksesi ja viestisi ovat turvassa",
|
||||
"Verify the new login accessing your account: %(name)s": "Varmenna uusi tunnuksellesi sisäänkirjautunut taho: %(name)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.": "Tällä hetkellä salasanan vaihtaminen nollaa kaikki osapuolten välisen salauksen avaimet kaikissa istunnoissa, tehden salatusta keskusteluhistoriasta lukukelvotonta, ellet ensin vie kaikkia huoneavaimiasi ja tuo niitä salasanan vaihtamisen jäkeen takaisin. Tulevaisuudessa tämä tulee toimimaan paremmin.",
|
||||
"Your homeserver does not support cross-signing.": "Kotipalvelimesi ei tue ristivarmennusta.",
|
||||
"Your account has a cross-signing identity in secret storage, but it is not yet trusted by this session.": "Tunnuksellasi on ristivarmennuksen identiteetti salavarastossa, mutta tämä istunto ei luota siihen.",
|
||||
"Reset cross-signing and secret storage": "Nollaa ristivarmennus ja salavarasto",
|
||||
"Individually verify each session used by a user to mark it as trusted, not trusting cross-signed devices.": "Varmenna jokainen käyttäjän istunto erikseen, äläkä luota ristivarmennettuihin laitteisiin.",
|
||||
"Securely cache encrypted messages locally for them to appear in search results.": "Pidä salatut viestit turvallisessa välimuistissa, jotta ne näkyvät hakutuloksissa.",
|
||||
"Riot is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom Riot Desktop with <nativeLink>search components added</nativeLink>.": "Riotissa ei ole joitain komponentteja, joita tarvitaan viestien turvalliseen välimuistitallennukseen. Jos haluat kokeilla tätä ominaisuutta, käännä mukautettu Riot Desktop, jossa on mukana <nativeLink>hakukomponentit</nativeLink>.",
|
||||
"Riot can't securely cache encrypted messages locally while running in a web browser. Use <riotLink>Riot Desktop</riotLink> for encrypted messages to appear in search results.": "Riot ei voi tallentaa viestejä turvalliseen välimuistiin pyöriessään selaimessa. Käytä Electron-pohjaista <riotLink>Riot Desktop</riotLink>-sovellusta nähdäksesi salatut viestit hakutuloksissa.",
|
||||
"This session is backing up your keys. ": "Tämä istunto varmuuskopioi avaimesi. ",
|
||||
"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.": "Tämä istunto <b>ei varmuuskopioi avaimiasi</b>, mutta sillä on olemassaoleva varmuuskopio, jonka voit palauttaa ja lisätä jatkaaksesi.",
|
||||
"Connect this session to key backup before signing out to avoid losing any keys that may only be on this session.": "Yhdistä tämä istunto avainten varmuuskopiointiin ennen uloskirjautumista, jotta et menetä avaimia, jotka ovat vain tässä istunnossa.",
|
||||
"Connect this session to Key Backup": "Yhdistä tämä istunto avainten varmuuskopiointiin",
|
||||
"Backup has a <validity>valid</validity> signature from <verify>verified</verify> session <device></device>": "Varmuuskopiossa on <validity>kelvollinen</validity> allekirjoitus <verify>varmennetusta</verify> istunnosta <device></device>",
|
||||
"Backup has a <validity>valid</validity> signature from <verify>unverified</verify> session <device></device>": "Varmuuskopiossa on <validity>kelvollinen</validity> allekirjoitus <verify>varmentamattomasta</verify> istunnosta <device></device>",
|
||||
"Backup has an <validity>invalid</validity> signature from <verify>verified</verify> session <device></device>": "Varmuuskopiossa on <validity>epäkelpo</validity> allekirjoitus <verify>varmennetusta</verify> istunnosta <device></device>",
|
||||
"Backup has an <validity>invalid</validity> signature from <verify>unverified</verify> session <device></device>": "Varmuuskopiossa on <validity>epäkelpo</validity> allekirjoitus <verify>varmentamattomasta</verify> istunnosta <device></device>",
|
||||
"This backup is trusted because it has been restored on this session": "Tähän varmuuskopioon luotetaan, koska se on palautettu tässä istunnossa",
|
||||
"Backup key stored in secret storage, but this feature is not enabled on this session. Please enable cross-signing in Labs to modify key backup state.": "Vara-avain on salavarastossa, mutta salavarasto ei ole käytössä tässä istunnossa. Ota ristivarmennus käyttöön Laboratoriosta muokkaaksesi avainten varmuuskopioinnin tilaa.",
|
||||
"Your keys are <b>not being backed up from this session</b>.": "Avaimiasi <b>ei varmuuskopioida tästä istunnosta</b>.",
|
||||
"Your password was successfully changed. You will not receive push notifications on other sessions until you log back in to them": "Salasanasi on onnistuneesti vaihdettu. Et saa ilmoituksia muilla laitteillasi ennen kuin kirjaudut niillä takaisin sisään",
|
||||
"Invalid theme schema.": "Epäkelpo teeman skeema.",
|
||||
"Custom theme URL": "Mukautettu teeman osoite",
|
||||
"Keyboard Shortcuts": "Pikanäppäimet",
|
||||
"Session ID:": "Istunnon tunnus:",
|
||||
"Session key:": "Istunnon avain:",
|
||||
"Where you’re logged in": "Missä olet sisäänkirjautuneena",
|
||||
"Manage the names of and sign out of your sessions below or <a>verify them in your User Profile</a>.": "Muokkaa istuntojesi nimiä ja kirjaudu niistä ulos alapuolella tai <a>varmenna ne käyttäjäprofiilissasi</a>.",
|
||||
"This user has not verified all of their sessions.": "Tämä käyttäjä ei ole varmentanut kaikkia istuntojaan.",
|
||||
"You have not verified this user.": "Et ole varmentanut tätä käyttäjää.",
|
||||
"You have verified this user. This user has verified all of their sessions.": "Olet varmentanut tämän käyttäjän. Tämä käyttäjä on varmentanut kaikki istuntonsa.",
|
||||
"This room is end-to-end encrypted": "Tämä huone käyttää osapuolten välistä salausta",
|
||||
"Everyone in this room is verified": "Kaikki tämän huoneen käyttäjät on varmennettu",
|
||||
"Some sessions for this user are not trusted": "Osaan tämän käyttäjän istunnoista ei luoteta",
|
||||
"All sessions for this user are trusted": "Kaikkiin tämän käyttäjän istunnoista luotetaan",
|
||||
"Some sessions in this encrypted room are not trusted": "Osaan tämän salausta käyttävän huoneen istunnoista ei luoteta",
|
||||
"All sessions in this encrypted room are trusted": "Kaikkiin tämän salausta käyttävän huoneen istuntoihin luotetaan",
|
||||
"Your key share request has been sent - please check your other sessions for key share requests.": "Avainten jakopyyntösi on lähetetty. Tarkista muut istuntosi avainten jakopyyntöjen varalta.",
|
||||
"Key share requests are sent to your other sessions automatically. If you rejected or dismissed the key share request on your other sessions, click here to request the keys for this session again.": "Avainten jakopyynnöt lähetetään muille istunnoillesi automaattisesti. Jos hylkäsit tai jätit huomiotta avainten jakopyynnön toisessa istunnossasi, klikkaa tästä pyytääksesi avaimia uudelleen.",
|
||||
"If your other sessions do not have the key for this message you will not be able to decrypt them.": "Jos muissa laitteissasi ei ole avainta tämän viestin purkamiseen, niillä istunnoilla ei voi lukea tätä viestiä.",
|
||||
"Encrypted by an unverified session": "Salattu varmentamattoman istunnon toimesta",
|
||||
"Encrypted by a deleted session": "Salattu poistetun istunnon toimesta",
|
||||
"No sessions with registered encryption keys": "Yhdelläkään istunnolla ei ole rekisteröityjä salausavaimia",
|
||||
"Create room": "Luo huone",
|
||||
"Reject & Ignore user": "Hylkää ja jätä käyttäjä huomiotta",
|
||||
"Start Verification": "Aloita varmennus",
|
||||
"Your messages are secured and only you and the recipient have the unique keys to unlock them.": "Viestisi ovat turvattu, ja vain sinulla ja vastaanottajalla on avaimet viestien lukemiseen.",
|
||||
"In encrypted rooms, your messages are secured and only you and the recipient have the unique keys to unlock them.": "Salausta käyttävissä huoneissa viestisi on turvattu, ja vain sinulla ja vastaanottajilla on yksityiset avaimet viestien lukemiseen.",
|
||||
"Verify User": "Varmenna käyttäjä",
|
||||
"For extra security, verify this user by checking a one-time code on both of your devices.": "Lisäturvaksi, varmenna tämä käyttäjä tarkistamalla koodin kummankin laitteella.",
|
||||
"The homeserver the user you’re verifying is connected to": "Käyttäjä, jota varmennat, on kotipalvelimella",
|
||||
"The session you are trying to verify doesn't support scanning a QR code or emoji verification, which is what Riot supports. Try with a different client.": "Istunto, jota yrität varmentaa, ei tue QR-koodin skannausta tai emoji-varmennusta, joita Riot tukee. Kokeile eri asiakasohjelmalla.",
|
||||
"Verify by scanning": "Varmenna skannaamalla",
|
||||
"If you can't scan the code above, verify by comparing unique emoji.": "Jos et pysty skannaamaan yläpuolella olevaa koodia, varmenna vertaamalla emojia.",
|
||||
"Verify by comparing unique emoji.": "Varmenna vertaamalla uniikkia emojia.",
|
||||
"Verify by emoji": "Varmenna emojilla",
|
||||
"Verify all users in a room to ensure it's secure.": "Varmenna kaikki huoneen käyttäjät varmistaaksesi, että se on turvallinen.",
|
||||
"In encrypted rooms, verify all users to ensure it’s secure.": "Varmenna kaikki käyttäjät salausta käyttävissä huoneissa, jotta huone on varmasti turvallinen.",
|
||||
"You've successfully verified your device!": "Olet onnistuneesti varmentanut laitteesi!",
|
||||
"You've successfully verified %(deviceName)s (%(deviceId)s)!": "Olet onnistuneesti varmentanut laitteen %(deviceName)s (%(deviceId)s)!",
|
||||
"You've successfully verified %(displayName)s!": "Olet varmentanut käyttäjän %(displayName)s!",
|
||||
"Verified": "Varmennettu",
|
||||
"Font size": "Fonttikoko",
|
||||
"Custom font size": "Mukautettu fonttikoko",
|
||||
"Size must be a number": "Koon täytyy olla luku",
|
||||
"Custom font size can only be between %(min)s pt and %(max)s pt": "Mukautetun fonttikoon täytyy olla vähintään %(min)s pt ja enintään %(max)s pt",
|
||||
"Use between %(min)s pt and %(max)s pt": "Käytä kokoa väliltä %(min)s pt ja %(max)s pt",
|
||||
"Appearance": "Ulkoasu",
|
||||
"You can’t disable this later. Bridges & most bots won’t work yet.": "Et voi poistaa tätä käytöstä jatkossa. Sillat ja useimmat botit eivät vielä toimi.",
|
||||
"Navigate up/down in the room list": "Siirry huoneluettelossa ylöspäin/alaspäin",
|
||||
"Select room from the room list": "Valitse huone huoneluettelosta",
|
||||
"Previous/next unread room or DM": "Edellinen/seuraava lukematon huone tai yksityisviesti",
|
||||
"Previous/next room or DM": "Edellinen/seuraava huone tai yksityisviesti",
|
||||
"Toggle this dialog": "Tämä valintaikkuna päälle/pois",
|
||||
"Use the improved room list (in development - refresh to apply changes)": "Käytä parannettua huoneluetteloa (kehitysversio — päivitä sivu ottaaksesi muutokset käyttöön)",
|
||||
"Start verification again from the notification.": "Aloita varmennus uudelleen ilmoituksesta.",
|
||||
"Start verification again from their profile.": "Aloita varmennus uudelleen hänen profiilista.",
|
||||
"Verification timed out.": "Varmennuksessa kesti liikaa.",
|
||||
"You cancelled verification on your other session.": "Peruutit varmennuksen toisessa istunnossasi.",
|
||||
"%(displayName)s cancelled verification.": "%(displayName)s peruutti varmennuksen.",
|
||||
"You cancelled verification.": "Peruutit varmennuksen.",
|
||||
"Verification cancelled": "Varmennus peruutettu",
|
||||
"Messages in this room are end-to-end encrypted. Learn more & verify this user in their user profile.": "Tämän huoneen viestit ovat salattuja osapuolten välisellä salauksella. Lue lisää ja varmenna tämä käyttäjä hänen profiilistaan.",
|
||||
"Enter the name of a new server you want to explore.": "Syötä sen uuden palvelimen nimi, jota hauat tutkia.",
|
||||
"%(networkName)s rooms": "Verkon %(networkName)s huoneet",
|
||||
"Destroy cross-signing keys?": "Tuhoa ristivarmennuksen avaimet?",
|
||||
"Deleting cross-signing keys is permanent. Anyone you have verified with will see security alerts. You almost certainly don't want to do this, unless you've lost every device you can cross-sign from.": "Ristivarmennuksen avainten tuhoamista ei voi kumota. Jokainen, jonka olet varmentanut, tulee näkemään turvallisuushälytyksiä. Et todennäköisesti halua tehdä tätä, ellet ole hukannut kaikkia laitteitasi, joista pystyt ristivarmentamaan.",
|
||||
"Clear cross-signing keys": "Tyhjennä ristivarmennuksen avaimet",
|
||||
"Enable end-to-end encryption": "Ota osapuolten välinen salaus käyttöön",
|
||||
"To verify that this session can be trusted, please check that the key you see in User Settings on that device matches the key below:": "Jotta tähän istuntoon voitaisiin luottaa, tarkista, että käyttäjän asetuksissa näkyvä avain täsmää alapuolella olevaan avaimeen:",
|
||||
"To verify that this session can be trusted, please contact its owner using some other means (e.g. in person or a phone call) and ask them whether the key they see in their User Settings for this session matches the key below:": "Jotta tähän istuntoon voitaisiin luottaa, ota yhteyttä sen omistajaan jotain muuta kautta (esim. kasvotusten tai puhelimitse) ja kysy, että täsmääkö hänen käyttäjäasetuksissa näkemänsä istunnon avain alla olevaan:",
|
||||
"Session key": "Istunnon tunnus",
|
||||
"If it matches, press the verify button below. If it doesn't, then someone else is intercepting this session and you probably want to press the blacklist button instead.": "Jos se täsmää, paina varmennuspainiketta alapuolella. Jos se ei täsmää, joku häiritsee tätä istuntoa ja haluat luultavasti painaa estä -painiketta sen sijaan.",
|
||||
"Verification Requests": "Varmennuspyynnöt",
|
||||
"Verifying this user will mark their session as trusted, and also mark your session as trusted to them.": "Tämän käyttäjän varmentaminen merkitsee hänen istuntonsa luotetuksi, ja myös merkkaa sinun istuntosi luotetuksi hänen laitteissaan.",
|
||||
"Verify this device to mark it as trusted. Trusting this device gives you and other users extra peace of mind when using end-to-end encrypted messages.": "Varmenna tämä laite merkataksesi se luotetuksi. Tähän laitteeseen luottaminen antaa sinulle ja muille käyttäjille ylimääräistä mielenrauhaa, kun käytätte osapuolten välistä salausta.",
|
||||
"Verifying this device will mark it as trusted, and users who have verified with you will trust this device.": "Tämän laitteen varmentaminen merkkaa sen luotetuksi, ja sinut varmentaneet käyttäjät luottavat automaattisesti tähän laitteeseen.",
|
||||
"Confirm to continue": "Haluan jatkaa",
|
||||
"Click the button below to confirm your identity.": "Paina alapuolella olevaa painiketta varmistaaksesi identiteettisi.",
|
||||
"We couldn't create your DM. Please check the users you want to invite and try again.": "Emme onnistuneet luomaan yksityisviestiä. Tarkista, että kutsumasi henkilöt haluavat kutsusi ja yritä uudelleen.",
|
||||
"The following users might not exist or are invalid, and cannot be invited: %(csvNames)s": "Seuraavat käyttäjät eivät välttämättä ole olemassa tai ne ovat epäkelpoja, joten niitä ei voida kutsua: %(csvNames)s",
|
||||
"Recently Direct Messaged": "Viimeaikaiset yksityisviestit",
|
||||
"Start a conversation with someone using their name, username (like <userId/>) or email address.": "Aloita keskustelu jonkun kanssa käyttäen hänen nimeä, käyttäjätunnus (kuten <userId/>) tai sähköpostiosoitetta.",
|
||||
"Invite someone using their name, username (like <userId/>), email address or <a>share this room</a>.": "Kutsu tähän huoneeseen käyttäen nimeä, käyttäjätunnusta (kuten <userId/>), sähköpostiosoitetta tai <a>jaa tämä huone</a>.",
|
||||
"Your unverified session '%(displayName)s' is requesting encryption keys.": "Varmentamaton istuntosi '%(displayName)s' pyytää salausavaimia.",
|
||||
"Riot encountered an error during upload of:": "Riot kohtasi virheen lähettäessään:",
|
||||
"Upload completed": "Lähetys valmis",
|
||||
"Cancelled signature upload": "Allekirjoituksen lähetys peruutettu",
|
||||
"Unable to upload": "Lähettäminen ei ole mahdollista",
|
||||
"Signature upload success": "Allekirjoituksen lähettäminen onnistui",
|
||||
"Signature upload failed": "Allekirjoituksen lähettäminen epäonnistui"
|
||||
}
|
||||
|
|
|
@ -2435,5 +2435,16 @@
|
|||
"QR Code": "Code QR",
|
||||
"Dismiss read marker and jump to bottom": "Ignorer le signet de lecture et aller en bas",
|
||||
"Jump to oldest unread message": "Aller au plus vieux message non lu",
|
||||
"Upload a file": "Envoyer un fichier"
|
||||
"Upload a file": "Envoyer un fichier",
|
||||
"Use IRC layout": "Utiliser la mise en page d’IRC",
|
||||
"IRC display name width": "Largeur du nom affiché IRC",
|
||||
"Create room": "Créer un salon",
|
||||
"Font scaling": "Mise à l’échelle de la police",
|
||||
"Font size": "Taille de la police",
|
||||
"Custom font size": "Taille personnalisée de la police",
|
||||
"Size must be a number": "La taille doit être un nombre",
|
||||
"Custom font size can only be between %(min)s pt and %(max)s pt": "La taille de police personnalisée doit être comprise entre %(min)s pt et %(max)s pt",
|
||||
"Use between %(min)s pt and %(max)s pt": "Utiliser entre %(min)s pt et %(max)s pt",
|
||||
"Appearance": "Apparence",
|
||||
"Use the improved room list (in development - refresh to apply changes)": "Utiliser la liste de salons améliorée (en développement − actualisez pour appliquer les changements)"
|
||||
}
|
||||
|
|
|
@ -264,8 +264,8 @@
|
|||
"Seen by %(userName)s at %(dateTime)s": "Visto por %(userName)s as %(dateTime)s",
|
||||
"No rooms to show": "Sen salas que mostrar",
|
||||
"Unnamed room": "Sala sen nome",
|
||||
"World readable": "Visible por todos",
|
||||
"Guests can join": "Convidados pódense unir",
|
||||
"World readable": "Visible para todas",
|
||||
"Guests can join": "Convidadas pódense unir",
|
||||
"Save": "Gardar",
|
||||
"(~%(count)s results)|other": "(~%(count)s resultados)",
|
||||
"(~%(count)s results)|one": "(~%(count)s resultado)",
|
||||
|
@ -545,7 +545,7 @@
|
|||
"Are you sure you want to leave the room '%(roomName)s'?": "Seguro que desexa saír da sala '%(roomName)s'?",
|
||||
"Failed to leave room": "Algo fallou ao saír da sala",
|
||||
"Signed Out": "Desconectada",
|
||||
"For security, this session has been signed out. Please sign in again.": "Por seguridade, pechouse a sesión. Por favor, conéctese de novo.",
|
||||
"For security, this session has been signed out. Please sign in again.": "Por seguridade, pechouse a sesión. Por favor, conéctate outra vez.",
|
||||
"Old cryptography data detected": "Detectouse o uso de criptografía sobre datos antigos",
|
||||
"Logout": "Desconectar",
|
||||
"Your Communities": "As súas Comunidades",
|
||||
|
@ -621,10 +621,10 @@
|
|||
"A new password must be entered.": "Debe introducir un novo contrasinal.",
|
||||
"New passwords must match each other.": "Os novos contrasinais deben ser coincidentes.",
|
||||
"Data from an older version of Riot has been detected. This will have caused end-to-end cryptography to malfunction in the older version. End-to-end encrypted messages exchanged recently whilst using the older version may not be decryptable in this version. This may also cause messages exchanged with this version to fail. If you experience problems, log out and back in again. To retain message history, export and re-import your keys.": "Detectáronse datos de una versión anterior de Riot. Isto causará un mal funcionamento da criptografía extremo-a-extremo na versión antiga. As mensaxes cifradas extremo-a-extremo intercambiadas mentres utilizaba a versión anterior poderían non ser descifrables en esta versión. Isto tamén podería causar que mensaxes intercambiadas con esta versión tampouco funcionasen. Se ten problemas, desconéctese e conéctese de novo. Para manter o historial de mensaxes, exporte e reimporte as súas chaves.",
|
||||
"An email has been sent to %(emailAddress)s. Once you've followed the link it contains, click below.": "Enviouse un correo a %(emailAddress)s. Unha vez siga a ligazón que contén, pulse abaixo.",
|
||||
"I have verified my email address": "Validei o meu enderezo de correo electrónico",
|
||||
"An email has been sent to %(emailAddress)s. Once you've followed the link it contains, click below.": "Enviouse un correo a %(emailAddress)s. Unha vez sigas a ligazón que contén, preme embaixo.",
|
||||
"I have verified my email address": "Validei o meu enderezo de email",
|
||||
"Return to login screen": "Volver a pantalla de conexión",
|
||||
"Send Reset Email": "Enviar correo electrónico de restablecemento",
|
||||
"Send Reset Email": "Enviar email de restablecemento",
|
||||
"Incorrect username and/or password.": "Nome de usuaria ou contrasinal non válidos.",
|
||||
"Please note you are logging into the %(hs)s server, not matrix.org.": "Teña en conta que se está a conectar ao servidor %(hs)s, non a matrix.org.",
|
||||
"The phone number entered looks invalid": "O número de teléfono introducido non semella ser válido",
|
||||
|
@ -671,7 +671,7 @@
|
|||
"Passphrase must not be empty": "A frase de paso non pode quedar baldeira",
|
||||
"Export room keys": "Exportar chaves da sala",
|
||||
"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.": "Este proceso permítelle exportar a un ficheiro local as chaves para as mensaxes que recibiu en salas cifradas. Posteriormente permitiralle importar as chaves en outro cliente Matrix no futuro, así o cliente poderá descifrar esas mensaxes.",
|
||||
"The exported file will allow anyone who can read it to decrypt any encrypted messages that you can see, so you should be careful to keep it secure. To help with this, you should enter a passphrase below, which will be used to encrypt the exported data. It will only be possible to import the data by using the same passphrase.": "O ficheiro exportado permitiralle a calquera que poida lelo descifrar e cifrar mensaxes que vostede ve, así que debería ter coidado e gardalo de xeito seguro. Para axudarlle, debe introducir unha frase de paso aquí abaixo que será utilizada para cifrar os datos exportados. Só será posible importar os datos utilizando a mesma frase de paso.",
|
||||
"The exported file will allow anyone who can read it to decrypt any encrypted messages that you can see, so you should be careful to keep it secure. To help with this, you should enter a passphrase below, which will be used to encrypt the exported data. It will only be possible to import the data by using the same passphrase.": "O ficheiro exportado permitiralle a calquera que poida lelo descifrar e cifrar mensaxes que ti ves, así que deberías ter coidado e gardalo de xeito seguro. Para axudarche, deberías escribir unha frase de paso aquí abaixo que será usada para cifrar os datos exportados. Só será posible importar os datos utilizando a mesma frase de paso.",
|
||||
"Enter passphrase": "Introduza a frase de paso",
|
||||
"Confirm passphrase": "Confirme a frase de paso",
|
||||
"Export": "Exportar",
|
||||
|
@ -701,8 +701,8 @@
|
|||
"Flair": "Popularidade",
|
||||
"Showing flair for these communities:": "Mostrar a popularidade destas comunidades:",
|
||||
"Display your community flair in rooms configured to show it.": "Mostrar a popularidade da túa comunidade nas salas configuradas para que a mostren.",
|
||||
"Did you know: you can use communities to filter your Riot.im experience!": "Sabía que pode utilizar as comunidades para mellorar a súa experiencia con Riot.im!",
|
||||
"To set up a filter, drag a community avatar over to the filter panel on the far left hand side of the screen. You can click on an avatar in the filter panel at any time to see only the rooms and people associated with that community.": "Para establecer un filtro, arrastre un avatar da comunidade sobre o panel de filtros na parte esquerda da pantalla. Pode pulsar nun avatar no panel de filtrado en calquera momento para ver só salas e xente asociada a esa comunidade.",
|
||||
"Did you know: you can use communities to filter your Riot.im experience!": "Sabías que podes usar as comunidades para filtrar a túa experiencia en Riot.im!",
|
||||
"To set up a filter, drag a community avatar over to the filter panel on the far left hand side of the screen. You can click on an avatar in the filter panel at any time to see only the rooms and people associated with that community.": "Para establecer un filtro, arrastra un avatar da comunidade sobre o panel de filtros na parte esquerda da pantalla. Podes premer nun avatar no panel de filtrado en calquera momento para ver só salas e xente asociada a esa comunidade.",
|
||||
"Deops user with given id": "Degradar o usuario con esa ID",
|
||||
"Seen by %(displayName)s (%(userName)s) at %(dateTime)s": "Visto por %(displayName)s(%(userName)s en %(dateTime)s",
|
||||
"Code": "Código",
|
||||
|
@ -711,7 +711,7 @@
|
|||
"Changes made to your community <bold1>name</bold1> and <bold2>avatar</bold2> might not be seen by other users for up to 30 minutes.": "Os cambios realizados a súa comunidade <bold1>name</bold1> e <bold2>avatar</bold2> poida que non os vexan outros usuarios ate dentro de 30 minutos.",
|
||||
"Join this community": "Únase a esta comunidade",
|
||||
"Leave this community": "Deixar esta comunidade",
|
||||
"If you've submitted a bug via GitHub, debug logs can help us track down the problem. Debug logs contain application usage data including your username, the IDs or aliases of the rooms or groups you have visited and the usernames of other users. They do not contain messages.": "Si enviou un reporte de fallo a través de GitHub, os informes poden axudarnos a examinar o problema. Os informes de fallo conteñen datos do uso do aplicativo incluíndo o seu nome de usuaria, os IDs ou alcumes das salas e grupos que visitou e os nomes de usuaria de outras persoas. Non conteñen mensaxes.",
|
||||
"If you've submitted a bug via GitHub, debug logs can help us track down the problem. Debug logs contain application usage data including your username, the IDs or aliases of the rooms or groups you have visited and the usernames of other users. They do not contain messages.": "Se enviaches un informe de fallo a través de GitHub, os informes poden axudarnos a examinar o problema. Os informes de fallo conteñen datos do uso da aplicación incluíndo o teu nome de usuaria, os IDs ou alcumes das salas e grupos que visitaches e os nomes de usuaria de outras persoas. Non conteñen mensaxes.",
|
||||
"Submit debug logs": "Enviar informes de depuración",
|
||||
"Opens the Developer Tools dialog": "Abre o cadro de Ferramentas de desenvolvemento",
|
||||
"Stickerpack": "Iconas",
|
||||
|
@ -756,7 +756,7 @@
|
|||
"Please set a password!": "Por favor estableza un contrasinal!",
|
||||
"You have successfully set a password!": "Mudou con éxito o seu contrasinal!",
|
||||
"An error occurred whilst saving your email notification preferences.": "Algo fallou mentres se gardaban as súas preferencias de notificación.",
|
||||
"Explore Room State": "Explorar estado da sala",
|
||||
"Explore Room State": "Ollar estado da sala",
|
||||
"Source URL": "URL fonte",
|
||||
"Messages sent by bot": "Mensaxes enviadas por bot",
|
||||
"Filter results": "Filtrar resultados",
|
||||
|
@ -779,7 +779,7 @@
|
|||
"Developer Tools": "Ferramentas para desenvolver",
|
||||
"Preparing to send logs": "Preparándose para enviar informe",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Lembre que sempre poderá poñer un enderezo de correo nos axustes de usuario se cambiase de idea.",
|
||||
"Explore Account Data": "Explorar datos da conta",
|
||||
"Explore Account Data": "Ollar datos da conta",
|
||||
"All messages (noisy)": "Todas as mensaxes (alto)",
|
||||
"Saturday": "Sábado",
|
||||
"I understand the risks and wish to continue": "Entendo os riscos e desexo continuar",
|
||||
|
@ -834,7 +834,7 @@
|
|||
"Off": "Off",
|
||||
"Riot does not know how to join a room on this network": "Riot non sabe como conectar cunha sala nesta rede",
|
||||
"Mentions only": "Só mencións",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "Pode volver a súa contra tras desconectarse, e conectarse en outros dispositivos.",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "Podes voltar a túa conta tras desconectarte, e conectarte noutros dispositivos.",
|
||||
"Enable email notifications": "Activar notificacións de correo",
|
||||
"Event Type": "Tipo de evento",
|
||||
"Download this file": "Descargue este ficheiro",
|
||||
|
@ -860,7 +860,7 @@
|
|||
"Clear Storage and Sign Out": "Limpar o almacenamento e Desconectar",
|
||||
"Refresh": "Actualizar",
|
||||
"We encountered an error trying to restore your previous session.": "Atopamos un fallo intentando restablecer a súa sesión anterior.",
|
||||
"Clearing your browser's storage may fix the problem, but will sign you out and cause any encrypted chat history to become unreadable.": "Limpando o almacenamento do navegador podería resolver o problema, pero desconectarao e non poderá ler o historial cifrado da conversa.",
|
||||
"Clearing your browser's storage may fix the problem, but will sign you out and cause any encrypted chat history to become unreadable.": "Limpando o almacenamento do navegador podería resolver o problema, pero desconectarate e non poderás ler o historial cifrado da conversa.",
|
||||
"Collapse Reply Thread": "Comprimir o fío de respostas",
|
||||
"e.g. %(exampleValue)s": "p.ex. %(exampleValue)s",
|
||||
"Send analytics data": "Enviar datos de análises",
|
||||
|
@ -868,9 +868,9 @@
|
|||
"Share Link to User": "Compartir a ligazón co usuario",
|
||||
"Share room": "Compartir sala",
|
||||
"Muted Users": "Usuarios silenciados",
|
||||
"Please help improve Riot.im by sending <UsageDataLink>anonymous usage data</UsageDataLink>. This will use a cookie (please see our <PolicyLink>Cookie Policy</PolicyLink>).": "Mellore Riot.im enviando <UsageDataLink>os datos anónimos de uso</UsageDataLink>. Iso suporá o emprego dunha cookie (véxase a nosa <PolicyLink>Política de Cookies</PolicyLink>).",
|
||||
"Please help improve Riot.im by sending <UsageDataLink>anonymous usage data</UsageDataLink>. This will use a cookie.": "Mellore Riot.im enviando <UsageDataLink>o uso de datos anónimo</UsageDataLink>. Iso usará unha cookie.",
|
||||
"Yes, I want to help!": "Si, quero axuda",
|
||||
"Please help improve Riot.im by sending <UsageDataLink>anonymous usage data</UsageDataLink>. This will use a cookie (please see our <PolicyLink>Cookie Policy</PolicyLink>).": "Axuda a mellorar Riot.im enviando <UsageDataLink>os datos anónimos de uso</UsageDataLink>. Usaremos unha cookie (le aquí a nosa <PolicyLink>Política de Cookies</PolicyLink>).",
|
||||
"Please help improve Riot.im by sending <UsageDataLink>anonymous usage data</UsageDataLink>. This will use a cookie.": "Axuda a mellorar Riot.im enviando <UsageDataLink>datos anónimos de uso</UsageDataLink>. Esto usará unha cookie.",
|
||||
"Yes, I want to help!": "Si, quero axudar!",
|
||||
"This will make your account permanently unusable. You will not be able to log in, and no one will be able to re-register the same user ID. This will cause your account to leave all rooms it is participating in, and it will remove your account details from your identity server. <b>This action is irreversible.</b>": "Iso fará que a súa deixe de ter uso de xeito permanente. Non poderá acceder e ninguén vai a poder volver a rexistrar esa mesma ID de usuario. Suporá que saía de todas as salas de conversas nas que estaba e eliminará os detalles da súa conta do servidores de identificación.<b>Isto non se poderá desfacer</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.": "Desactivando a súa conta <b>non supón que por defecto esquezamos as súas mensaxes enviadas.</b> Se quere que nos esquezamos das súas mensaxes, prema na caixa de embaixo.",
|
||||
"To continue, please enter your password:": "Para continuar introduza o seu contrasinal:",
|
||||
|
@ -936,6 +936,154 @@
|
|||
"Whether you're using Riot on a device where touch is the primary input mechanism": "Se estás conectada utilizando Riot nun dispositivo maiormente táctil",
|
||||
"Whether you're using Riot as an installed Progressive Web App": "Se estás a usar Riot como unha Progressive Web App instalada",
|
||||
"Your user agent": "User Agent do navegador",
|
||||
"The information being sent to us to help make Riot better includes:": "Información que nos envías para mellorar Riot inclúe:",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Instala <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, ou <safariLink>Safari</safariLink> para ter unha mellor experiencia."
|
||||
"The information being sent to us to help make Riot better includes:": "A información que nos envías para mellorar Riot inclúe:",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Instala <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, ou <safariLink>Safari</safariLink> para ter unha mellor experiencia.",
|
||||
"Sign In or Create Account": "Conéctate ou Crea unha Conta",
|
||||
"Sign In": "Conectar",
|
||||
"Confirm deleting these sessions by using Single Sign On to prove your identity.|other": "Confirma o borrado destas sesións ao usar Single Sign On como proba da túa identidade.",
|
||||
"Confirm deleting these sessions by using Single Sign On to prove your identity.|one": "Confirma o borrado desta sesión ao utilizar Single Sign On como proba da túa identidade.",
|
||||
"Manage the names of and sign out of your sessions below or <a>verify them in your User Profile</a>.": "Xestiona os nomes e pecha as sesións embaixo ou <a>verificaas no teu Perfil de Usuaria</a>.",
|
||||
"Sign Up": "Rexistro",
|
||||
"Sign in with single sign-on": "Conectar usando Single Sign On",
|
||||
"Deleting cross-signing keys is permanent. Anyone you have verified with will see security alerts. You almost certainly don't want to do this, unless you've lost every device you can cross-sign from.": "O eliminación das chaves de sinatura cruzada é permanente. Calquera a quen verificases con elas verá alertas de seguridade. Seguramente non queres facer esto, a menos que perdeses todos os dispositivos nos que podías asinar.",
|
||||
"You've previously used a newer version of Riot on %(host)s. To use this version again with end to end encryption, you will need to sign out and back in again. ": "Usaches anteriormente unha versión máis recente de Riot en %(host)s. Para usar esta versión de novo con cifrado E2E, tes que desconectar e conectar outra vez. ",
|
||||
"Confirm your account deactivation by using Single Sign On to prove your identity.": "Confirma a desactivación da túa conta usando Single Sign On para probar a túa identidade.",
|
||||
"To continue, use Single Sign On to prove your identity.": "Para continuar, usa Single Sign On para probar a túa identidade.",
|
||||
"Are you sure you want to sign out?": "Tes a certeza de querer desconectar?",
|
||||
"If you didn’t sign in to this session, your account may be compromised.": "Se ti non iniciaches esta sesión a túa conta podería estar comprometida.",
|
||||
"Sign out and remove encryption keys?": "Desconectar e eliminar as chaves de cifrado?",
|
||||
"This will allow you to return to your account after signing out, and sign in on other sessions.": "Esto permitirache voltar a túa conta tras desconectar, e conectarte noutras sesións.",
|
||||
"Sign in to your Matrix account on %(serverName)s": "Conecta a túa conta Matrix en %(serverName)s",
|
||||
"Sign in to your Matrix account on <underlinedServerName />": "Conecta a túa conta Matrix en <underlinedServerName />",
|
||||
"Sign in with SSO": "Conecta utilizando SSO",
|
||||
"Sign in instead": "Conectar",
|
||||
"A verification email will be sent to your inbox to confirm setting your new password.": "Ímosche enviar un email para confirmar o teu novo contrasinal.",
|
||||
"Your password has been reset.": "Restableceuse o contrasinal.",
|
||||
"Enter your password to sign in and regain access to your account.": "Escribe o contrasinal para conectarte e retomar o acceso a túa conta.",
|
||||
"Sign in and regain access to your account.": "Conéctate e recupera o acceso a túa conta.",
|
||||
"You cannot sign in to your account. Please contact your homeserver admin for more information.": "Non podes conectar a conta. Contacta coa administración do teu servidor para máis información.",
|
||||
"Warning: Your personal data (including encryption keys) is still stored in this session. Clear it if you're finished using this session, or want to sign in to another account.": "Aviso: os teus datos personais (incluíndo chaves de cifrado) aínda están gardadas nesta sesión. Pechaa se remataches de usar esta sesión, ou se quere conectar con outra conta.",
|
||||
"Unable to load! Check your network connectivity and try again.": "Non cargou! Comproba a conexión a rede e volta a intentalo.",
|
||||
"There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "Hai sesións descoñecidas nesta sala: se continúas sen verificalas será posible para alguén fisgar na túa chamada.",
|
||||
"Review Sessions": "Revisar Sesións",
|
||||
"Call failed due to misconfigured server": "Fallou a chamada porque o servidor está mal configurado",
|
||||
"Please ask the administrator of your homeserver (<code>%(homeserverDomain)s</code>) to configure a TURN server in order for calls to work reliably.": "Contacta coa administración do teu servidor (<code>%(homeserverDomain)s</code>) para configurar un servidor TURN para que as chamadas funcionen de xeito fiable.",
|
||||
"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.": "De xeito alternativo, podes intentar usar o servidor público <code>turn.matrix.org</code>, pero non é tan fiable, e compartirá o teu enderezo IP con ese servidor. Podes xestionar esto en Axustes.",
|
||||
"Try using turn.matrix.org": "Inténtao usando turn.matrix.org",
|
||||
"Replying With Files": "Respondendo con Ficheiros",
|
||||
"At this time it is not possible to reply with a file. Would you like to upload this file without replying?": "Neste intre non é posible responder cun ficheiro. Queres subir este ficheiro sen responder?",
|
||||
"The file '%(fileName)s' failed to upload.": "Fallou a subida do ficheiro '%(fileName)s'.",
|
||||
"The file '%(fileName)s' exceeds this homeserver's size limit for uploads": "O ficheiro '%(fileName)s' supera o tamaño máximo permitido polo servidor",
|
||||
"The server does not support the room version specified.": "O servidor non soporta a versión da sala indicada.",
|
||||
"If you cancel now, you won't complete verifying the other user.": "Se cancelas agora non completarás a verificación da outra usuaria.",
|
||||
"If you cancel now, you won't complete verifying your other session.": "Se cancelas agora non completarás o proceso de verificación da outra sesión.",
|
||||
"If you cancel now, you won't complete your operation.": "Se cancelas agora, non completarás a operación.",
|
||||
"Cancel entering passphrase?": "Cancelar a escrita da frase de paso?",
|
||||
"Setting up keys": "Configurando as chaves",
|
||||
"Verify this session": "Verificar esta sesión",
|
||||
"Encryption upgrade available": "Mellora do cifrado dispoñible",
|
||||
"Set up encryption": "Configurar cifrado",
|
||||
"Review where you’re logged in": "Revisar onde estás conectada",
|
||||
"New login. Was this you?": "Nova conexión. Foches ti?",
|
||||
"Name or Matrix ID": "Nome ou ID Matrix",
|
||||
"Identity server has no terms of service": "O servidor de identidade non ten termos dos servizo",
|
||||
"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.": "Esta acción precisa acceder ao servidor de indentidade <server /> para validar o enderezo de email ou o número de teléfono, pero o servidor non publica os seus termos do servizo.",
|
||||
"Only continue if you trust the owner of the server.": "Continúa se realmente confías no dono do servidor.",
|
||||
"Trust": "Confiar",
|
||||
"%(name)s is requesting verification": "%(name)s está pedindo a verificación",
|
||||
"Use your account or create a new one to continue.": "Usa a túa conta ou crea unha nova para continuar.",
|
||||
"Create Account": "Crear conta",
|
||||
"Custom (%(level)s)": "Personalizado (%(level)s)",
|
||||
"Failed to invite users to the room:": "Fallo a convidar a persoas a sala:",
|
||||
"Messages": "Mensaxes",
|
||||
"Actions": "Accións",
|
||||
"Other": "Outro",
|
||||
"Prepends ¯\\_(ツ)_/¯ to a plain-text message": "Anteponse ¯\\_(ツ)_/¯ a mensaxe en texto plano",
|
||||
"Sends a message as plain text, without interpreting it as markdown": "Envía unha mensaxe como texto plano, sen interpretalo como markdown",
|
||||
"Sends a message as html, without interpreting it as markdown": "Envía unha mensaxe como html, sen interpretalo como markdown",
|
||||
"Upgrades a room to a new version": "Subir a sala de versión",
|
||||
"You do not have the required permissions to use this command.": "Non tes os permisos suficientes para usar este comando.",
|
||||
"Error upgrading room": "Fallo ao actualizar a sala",
|
||||
"Double check that your server supports the room version chosen and try again.": "Comproba ben que o servidor soporta a versión da sala escollida e inténtao outra vez.",
|
||||
"Changes your display nickname in the current room only": "Cambia o teu nome mostrado só para esta esta sala",
|
||||
"Changes the avatar of the current room": "Cambia o avatar da sala actual",
|
||||
"Changes your avatar in this current room only": "Cambia o teu avatar só nesta sala",
|
||||
"Changes your avatar in all rooms": "Cambia o teu avatar en todas as salas",
|
||||
"Gets or sets the room topic": "Obtén ou establece o asunto da sala",
|
||||
"Failed to set topic": "Fallo ao establecer asunto",
|
||||
"This room has no topic.": "Esta sala non ten asunto.",
|
||||
"Sets the room name": "Establecer nome da sala",
|
||||
"Use an identity server": "Usar un servidor de identidade",
|
||||
"Use an identity server to invite by email. Click continue to use the default identity server (%(defaultIdentityServerName)s) or manage in Settings.": "Usar un servidor de identidade para convidar por email. Preme continuar para usar o servidor de identidade por omisión (%(defaultIdentityServerName)s) ou cambiao en Axustes.",
|
||||
"Use an identity server to invite by email. Manage in Settings.": "Usar un servidor de indentidade para convidar por email. Xestionao en Axustes.",
|
||||
"Command failed": "O comando fallou",
|
||||
"Could not find user in room": "Non se atopa a usuaria na sala",
|
||||
"Adds a custom widget by URL to the room": "Engade un widget por URL personalizado a sala",
|
||||
"Please supply a widget URL or embed code": "Proporciona o URL do widget ou incrusta o código",
|
||||
"Please supply a https:// or http:// widget URL": "Escribe un https:// ou http:// como URL do widget",
|
||||
"You cannot modify widgets in this room.": "Non podes modificar os widgets desta sala.",
|
||||
"Unknown (user, session) pair:": "Par descoñecido (usuaria, sesión):",
|
||||
"Session already verified!": "A sesión xa está verificada!",
|
||||
"WARNING: Session already verified, but keys do NOT MATCH!": "AVISO: xa está verificada a sesión, pero as chaves NON CONCORDAN!",
|
||||
"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!": "AVISO: FALLOU A VERIFICACIÓN DAS CHAVES! A chave de firma para %(userId)s na sesión %(deviceId)s é \"%(fprint)s\" que non concordan coa chave proporcionada \"%(fingerprint)s\". Esto podería significar que as túas comunicacións foron interceptadas!",
|
||||
"The signing key you provided matches the signing key you received from %(userId)s's session %(deviceId)s. Session marked as verified.": "A chave de firma proporcionada concorda coa chave de firma recibida desde a sesión %(deviceId)s de %(userId)s. Sesión marcada como verificada.",
|
||||
"Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "Se usas ou non a función 'breadcrumbs ' (avatares enriba da listaxe de salas)",
|
||||
"Unbans user with given ID": "Desbloquea usuaria co ID dado",
|
||||
"Verifies a user, session, and pubkey tuple": "Verifica unha usuaria, sesión e chave pública",
|
||||
"Forces the current outbound group session in an encrypted room to be discarded": "Forza que se descarte a sesión de saída actual nunha sala cifrada",
|
||||
"Sends the given message coloured as a rainbow": "Envía a mensaxe dada colorida como o arco da vella",
|
||||
"Sends the given emote coloured as a rainbow": "Envía o emoji colorido como un arco da vella",
|
||||
"Displays list of commands with usages and descriptions": "Mostra unha listaxe de comandos con usos e descricións",
|
||||
"Displays information about a user": "Mostra información acerca da usuaria",
|
||||
"Send a bug report with logs": "Envía un informe de fallos con rexistros",
|
||||
"Opens chat with the given user": "Abre unha conversa coa usuaria",
|
||||
"Sends a message to the given user": "Envía unha mensaxe a usuaria",
|
||||
"%(senderName)s made no change.": "%(senderName)s non fixo cambios.",
|
||||
"%(senderDisplayName)s changed the room name from %(oldRoomName)s to %(newRoomName)s.": "%(senderDisplayName)s cambiou o nome da sala de %(oldRoomName)s a %(newRoomName)s.",
|
||||
"%(senderDisplayName)s upgraded this room.": "%(senderDisplayName)s actualizou esta sala.",
|
||||
"%(senderDisplayName)s made the room public to whoever knows the link.": "%(senderDisplayName)s converteu en pública a sala para calquera que teña a ligazón.",
|
||||
"%(senderDisplayName)s made the room invite only.": "%(senderDisplayName)s fixo que a sala sexa só por convite.",
|
||||
"%(senderDisplayName)s changed the join rule to %(rule)s": "%(senderDisplayName)s cambiou a regra de participación a %(rule)s",
|
||||
"%(senderDisplayName)s has allowed guests to join the room.": "%(senderDisplayName)s permite que as convidadas se unan a sala.",
|
||||
"%(senderDisplayName)s has prevented guests from joining the room.": "%(senderDisplayName)s non permite que as convidadas se unan a sala.",
|
||||
"%(senderDisplayName)s changed guest access to %(rule)s": "%(senderDisplayName)s cambiou acceso de convidada a %(rule)s",
|
||||
"%(senderDisplayName)s enabled flair for %(groups)s in this room.": "%(senderDisplayName)s activou a popularidade para %(groups)s nesta sala.",
|
||||
"%(senderDisplayName)s disabled flair for %(groups)s in this room.": "%(senderDisplayName)s desactivou a popularidade para %(groups)s nesta sala.",
|
||||
"%(senderDisplayName)s enabled flair for %(newGroups)s and disabled flair for %(oldGroups)s in this room.": "%(senderDisplayName)s activou a popularidade para %(newGroups)s e desactivou a popularidade para %(oldGroups)s nesta sala.",
|
||||
"Capitalization doesn't help very much": "Escribir con maiúsculas non axuda moito",
|
||||
"Predictable substitutions like '@' instead of 'a' don't help very much": "Substitucións predecibles como '@' no lugar de 'a' non son de gran axuda",
|
||||
"Group & filter rooms by custom tags (refresh to apply changes)": "Agrupar e filtrar salas con etiquetas personalizadas (actuliza para aplicar cambios)",
|
||||
"Enable Community Filter Panel": "Activar o panel de Filtro de comunidades",
|
||||
"General": "Xeral",
|
||||
"Discovery": "Descubrir",
|
||||
"Deactivate account": "Desactivar conta",
|
||||
"For help with using Riot, click <a>here</a>.": "Para ter axuda con Riot, preme <a>aquí</a>.",
|
||||
"For help with using Riot, click <a>here</a> or start a chat with our bot using the button below.": "Se precisas axuda usando Riot, preme <a>aquí</a> ou inicia unha conversa co noso bot usando o botón inferior.",
|
||||
"Help & About": "Axuda & Acerca de",
|
||||
"Security & Privacy": "Seguridade & Privacidade",
|
||||
"Where you’re logged in": "Onde estás conectada",
|
||||
"Change room name": "Cambiar nome da sala",
|
||||
"Roles & Permissions": "Roles & Permisos",
|
||||
"Room %(name)s": "Sala %(name)s",
|
||||
"Recent rooms": "Salas recentes",
|
||||
"Direct Messages": "Mensaxes Directas",
|
||||
"Create room": "Crear sala",
|
||||
"You can use <code>/help</code> to list available commands. Did you mean to send this as a message?": "Podes usar <code>axuda</code> para ver os comandos dispoñibles. ¿Querías mellor enviar esto como unha mensaxe?",
|
||||
"Error updating flair": "Fallo ao actualizar popularidade",
|
||||
"There was an error updating the flair for this room. The server may not allow it or a temporary error occurred.": "Algo fallou cando se actualizaba a popularidade da sala. Pode ser un fallo temporal ou que o servidor non o permita.",
|
||||
"Enter the name of a new server you want to explore.": "Escribe o nome do novo servidor que queres explorar.",
|
||||
"If there is additional context that would help in analysing the issue, such as what you were doing at the time, room IDs, user IDs, etc., please include those things here.": "Se hai contexto que cres que axudaría a analizar o problema, como o que estabas a facer, ID da sala, ID da usuaria, etc., por favor inclúeo aquí.",
|
||||
"To help avoid duplicate issues, please <existingIssuesLink>view existing issues</existingIssuesLink> first (and add a +1) or <newIssueLink>create a new issue</newIssueLink> if you can't find it.": "Para evitar informes duplicados, mira <existingIssuesLink>os informes existentes</existingIssuesLink> primeiro (e engade un +1) ou <newIssueLink>crea un novo informe</newIssueLink> se non o atopas.",
|
||||
"Command Help": "Comando Axuda",
|
||||
"To help us prevent this in future, please <a>send us logs</a>.": "Para axudarnos a previr esto no futuro, envíanos <a>o rexistro</a>.",
|
||||
"Help": "Axuda",
|
||||
"Explore Public Rooms": "Explorar Salas Públicas",
|
||||
"Explore": "Explorar",
|
||||
"Filter": "Filtrar",
|
||||
"Filter rooms…": "Filtrar salas…",
|
||||
"%(creator)s created and configured the room.": "%(creator)s creou e configurou a sala.",
|
||||
"Explore rooms": "Explorar salas",
|
||||
"General failure": "Fallo xeral",
|
||||
"This homeserver does not support login using email address.": "Este servidor non soporta a conexión usando enderezos de email.",
|
||||
"Clear room list filter field": "Baleirar o campo do filtro de salas"
|
||||
}
|
||||
|
|
|
@ -2430,5 +2430,16 @@
|
|||
"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",
|
||||
"Upload a file": "Invia un file"
|
||||
"Upload a file": "Invia un file",
|
||||
"Use IRC layout": "Usa il layout IRC",
|
||||
"IRC display name width": "Larghezza nome di IRC",
|
||||
"Create room": "Crea stanza",
|
||||
"Font scaling": "Ridimensionamento carattere",
|
||||
"Font size": "Dimensione carattere",
|
||||
"Custom font size": "Dimensione carattere personalizzata",
|
||||
"Size must be a number": "La dimensione deve essere un numero",
|
||||
"Custom font size can only be between %(min)s pt and %(max)s pt": "La dimensione del carattere personalizzata può solo essere tra %(min)s pt e %(max)s pt",
|
||||
"Use between %(min)s pt and %(max)s pt": "Usa tra %(min)s pt e %(max)s pt",
|
||||
"Appearance": "Aspetto",
|
||||
"Use the improved room list (in development - refresh to apply changes)": "Usa l'elenco stanze migliorato (in sviluppo - ricarica per applicare le modifiche)"
|
||||
}
|
||||
|
|
|
@ -13,9 +13,9 @@
|
|||
"The information being sent to us to help make Riot.im better includes:": "Informacija, siunčiama mums, kad padėtų tobulinti Riot.im, apima:",
|
||||
"Fetching third party location failed": "Nepavyko gauti trečios šalies vietos",
|
||||
"A new version of Riot is available.": "Yra prieinama nauja Riot versija.",
|
||||
"I understand the risks and wish to continue": "Aš suprantu riziką ir noriu tęsti",
|
||||
"I understand the risks and wish to continue": "Suprantu šią riziką ir noriu tęsti",
|
||||
"Send Account Data": "Siųsti paskyros duomenis",
|
||||
"Advanced notification settings": "Sudėtingesni pranešimų nustatymai",
|
||||
"Advanced notification settings": "Išplėstiniai pranešimų nustatymai",
|
||||
"Uploading report": "Išsiunčiama ataskaita",
|
||||
"Sunday": "Sekmadienis",
|
||||
"Guests can join": "Svečiai gali prisijungti",
|
||||
|
@ -41,16 +41,16 @@
|
|||
"Forget": "Pamiršti",
|
||||
"World readable": "Visiems skaitomas",
|
||||
"Mute": "Nutildyti",
|
||||
"You cannot delete this image. (%(code)s)": "Jūs negalite ištrinti šio paveikslėlio. (%(code)s)",
|
||||
"You cannot delete this image. (%(code)s)": "Jūs negalite ištrinti šio vaizdo. (%(code)s)",
|
||||
"Cancel Sending": "Atšaukti siuntimą",
|
||||
"Warning": "Įspėjimas",
|
||||
"This Room": "Šis pokalbių kambarys",
|
||||
"Resend": "Siųsti iš naujo",
|
||||
"Room not found": "Kambarys nerastas",
|
||||
"Downloading update...": "Atsiunčiamas atnaujinimas...",
|
||||
"Messages in one-to-one chats": "Žinutės asmeniniuose pokalbiuose",
|
||||
"Messages in one-to-one chats": "Žinutės privačiuose pokalbiuose",
|
||||
"Unavailable": "Neprieinamas",
|
||||
"Error saving email notification preferences": "Klaida, įrašant pranešimų el. paštu nuostatas",
|
||||
"Error saving email notification preferences": "Klaida išsaugant pranešimų el. paštu nuostatas",
|
||||
"View Decrypted Source": "Peržiūrėti iššifruotą šaltinį",
|
||||
"Failed to update keywords": "Nepavyko atnaujinti raktažodžių",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "Pranešimai šiems raktažodžiams yra uždrausti taisyklėmis:",
|
||||
|
@ -65,28 +65,28 @@
|
|||
"Cancel": "Atšaukti",
|
||||
"Filter results": "Išfiltruoti rezultatus",
|
||||
"Members": "Nariai",
|
||||
"No update available.": "Nėra prieinamų atnaujinimų.",
|
||||
"No update available.": "Nėra galimų atnaujinimų.",
|
||||
"Noisy": "Triukšmingas",
|
||||
"Collecting app version information": "Renkama programėlės versijos informacija",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Ar ištrinti kambarį %(alias)s ir %(name)s kambario pavadinimą iš katalogo?",
|
||||
"Keywords": "Raktažodžiai",
|
||||
"Unpin Message": "Atsegti žinutę",
|
||||
"Enable notifications for this account": "Įjungti pranešimus šiai paskyrai",
|
||||
"Remove": "Šalinti",
|
||||
"Remove": "Pašalinti",
|
||||
"Invite to this community": "Pakviesti į šią bendruomenę",
|
||||
"Messages containing <span>keywords</span>": "Žinutės, kuriose yra <span>raktažodžiai</span>",
|
||||
"When I'm invited to a room": "Kai aš esu pakviestas į pokalbių kambarį",
|
||||
"When I'm invited to a room": "Kai mane pakviečia į kambarį",
|
||||
"Tuesday": "Antradienis",
|
||||
"Enter keywords separated by a comma:": "Įveskite kableliais atskirtus raktažodžius:",
|
||||
"Search…": "Paieška…",
|
||||
"You have successfully set a password and an email address!": "Jūs sėkmingai įrašėte slaptažodį ir el. pašto adresą!",
|
||||
"Remove %(name)s from the directory?": "Ar ištrinti %(name)s iš katalogo?",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot naudoja daug išplėstinių naršyklės funkcionalumų, kai kurie iš jų yra neprieinami ar eksperimentinei Jūsų naršyklėje.",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot naudoja daug išplėstinių naršyklės funkcijų, kai kurios iš jų yra neprieinamos arba eksperimentinės jūsų esamoje naršyklėje.",
|
||||
"Event sent!": "Įvykis išsiųstas!",
|
||||
"Unnamed room": "Kambarys be pavadinimo",
|
||||
"Dismiss": "Atmesti",
|
||||
"Explore Account Data": "Peržiūrėti paskyros duomenis",
|
||||
"Remove from Directory": "Šalinti iš katalogo",
|
||||
"Remove from Directory": "Pašalinti iš katalogo",
|
||||
"Download this file": "Atsisiųsti šį failą",
|
||||
"Saturday": "Šeštadienis",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Nepamirškite, kad jei persigalvosite, tai bet kada galite nustatyti el. pašto adresą vartotojo nustatymuose.",
|
||||
|
@ -103,7 +103,7 @@
|
|||
"Search": "Ieškoti",
|
||||
"You must specify an event type!": "Privalote nurodyti įvykio tipą!",
|
||||
"(HTTP status %(httpStatus)s)": "(HTTP būsena %(httpStatus)s)",
|
||||
"Failed to forget room %(errCode)s": "Nepavyko pašalinti pokalbių kambario %(errCode)s",
|
||||
"Failed to forget room %(errCode)s": "Nepavyko pamiršti kambario %(errCode)s",
|
||||
"What's New": "Kas naujo",
|
||||
"Wednesday": "Trečiadienis",
|
||||
"Send": "Siųsti",
|
||||
|
@ -111,8 +111,8 @@
|
|||
"Send logs": "Siųsti žurnalus",
|
||||
"All messages": "Visos žinutės",
|
||||
"unknown error code": "nežinomas klaidos kodas",
|
||||
"Call invitation": "Pakvietimas skambinant",
|
||||
"Messages containing my display name": "Žinutės, kuriose paminėtas mano vardas",
|
||||
"Call invitation": "Skambučio pakvietimas",
|
||||
"Messages containing my display name": "Žinutės, kuriose yra mano rodomas vardas",
|
||||
"State Key": "Būklės raktas",
|
||||
"Failed to send custom event.": "Nepavyko išsiųsti pasirinktinio įvykio.",
|
||||
"What's new?": "Kas naujo?",
|
||||
|
@ -133,23 +133,23 @@
|
|||
"Reject": "Atmesti",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Jūs turbūt juos sukonfigūravote kitoje programėlėje nei Riot. Negalite jų koreguoti Riot programėlėje, bet jie vistiek yra taikomi",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Atleiskite, jūsų naršyklė <b>negali</b> paleisti Riot.",
|
||||
"Quote": "Citata",
|
||||
"Quote": "Cituoti",
|
||||
"Messages in group chats": "Žinutės grupės pokalbiuose",
|
||||
"Yesterday": "Vakar",
|
||||
"Error encountered (%(errorDetail)s).": "Susidurta su klaida (%(errorDetail)s).",
|
||||
"Low Priority": "Nesvarbūs",
|
||||
"Riot does not know how to join a room on this network": "Riot nežino kaip prisijungti prie kambario šiame tinkle",
|
||||
"Set Password": "Nustatyti slaptažodį",
|
||||
"An error occurred whilst saving your email notification preferences.": "Įrašant pranešimų el. paštu nuostatas, įvyko klaida.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Išsaugant pranešimų el. paštu nuostatas, įvyko klaida.",
|
||||
"Unable to join network": "Nepavyko prisijungti prie tinklo",
|
||||
"Register": "Registruotis",
|
||||
"Off": "Išjungta",
|
||||
"Edit": "Koreguoti",
|
||||
"Mentions only": "Tik paminėjimai",
|
||||
"remove %(name)s from the directory.": "šalinti %(name)s iš katalogo.",
|
||||
"remove %(name)s from the directory.": "pašalinti %(name)s iš katalogo.",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "Po atsijungimo galite grįžti prie savo paskyros ir prisijungti kituose įrenginiuose.",
|
||||
"Continue": "Tęsti",
|
||||
"Enable email notifications": "Įjungti pranešimus el. paštu",
|
||||
"Enable email notifications": "Įjungti el. pašto pranešimus",
|
||||
"Event Type": "Įvykio tipas",
|
||||
"No rooms to show": "Nėra kambarių rodymui",
|
||||
"Add rooms to this community": "Įtraukti kambarius į šią bendruomenę",
|
||||
|
@ -164,7 +164,7 @@
|
|||
"Thank you!": "Ačiū!",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Naudojant šią naršyklę aplikacija gali atrodyti ir reaguoti neteisingai. Kai kurios arba visos funkcijos gali neveikti. Jei vis tiek norite pabandyti gali tęsti, tačiau iškilusios problemos yra jūsų pačių reikalas!",
|
||||
"Checking for an update...": "Tikrinama ar yra atnaujinimų...",
|
||||
"There are advanced notifications which are not shown here": "Yra išplėstinių pranešimų, kurie nėra čia rodomi",
|
||||
"There are advanced notifications which are not shown here": "Yra išplėstinių pranešimų, kurie čia nėra rodomi",
|
||||
"e.g. %(exampleValue)s": "pvz., %(exampleValue)s",
|
||||
"e.g. <CurrentPageURL>": "pvz., <CurrentPageURL>",
|
||||
"Your device resolution": "Jūsų įrenginio raiška",
|
||||
|
@ -216,7 +216,7 @@
|
|||
"Failed to add the following rooms to %(groupId)s:": "Nepavyko pridėti šių kambarių į %(groupId)s:",
|
||||
"Riot does not have permission to send you notifications - please check your browser settings": "Riot neturi leidimo siųsti jums pranešimus - patikrinkite savo naršyklės nustatymus",
|
||||
"Riot was not given permission to send notifications - please try again": "Riot nebuvo suteiktas leidimas siųsti pranešimus - bandykite dar kartą",
|
||||
"Unable to enable Notifications": "Nepavyko įjungti Pranešimus",
|
||||
"Unable to enable Notifications": "Nepavyko įjungti pranešimų",
|
||||
"This email address was not found": "Šis el. pašto adresas nebuvo rastas",
|
||||
"Admin": "Administratorius",
|
||||
"Start a chat": "Pradėti pokalbį",
|
||||
|
@ -239,24 +239,24 @@
|
|||
"Reason": "Priežastis",
|
||||
"%(targetName)s accepted an invitation.": "%(targetName)s priėmė pakvietimą.",
|
||||
"%(senderName)s invited %(targetName)s.": "%(senderName)s pakvietė %(targetName)s.",
|
||||
"%(oldDisplayName)s changed their display name to %(displayName)s.": "%(oldDisplayName)s pakeitė savo vardą į %(displayName)s.",
|
||||
"%(senderName)s set their display name to %(displayName)s.": "%(senderName)s nustatė savo vardą į %(displayName)s.",
|
||||
"%(senderName)s removed their display name (%(oldDisplayName)s).": "%(senderName)s pašalino savo vardą (%(oldDisplayName)s).",
|
||||
"%(oldDisplayName)s changed their display name to %(displayName)s.": "%(oldDisplayName)s pakeitė savo rodomą vardą į %(displayName)s.",
|
||||
"%(senderName)s set their display name to %(displayName)s.": "%(senderName)s nustatė savo rodomą vardą į %(displayName)s.",
|
||||
"%(senderName)s removed their display name (%(oldDisplayName)s).": "%(senderName)s pašalino savo rodomą vardą (%(oldDisplayName)s).",
|
||||
"%(senderName)s removed their profile picture.": "%(senderName)s pašalino savo profilio paveikslą.",
|
||||
"%(senderName)s changed their profile picture.": "%(senderName)s pakeitė savo profilio paveikslą.",
|
||||
"%(senderName)s set a profile picture.": "%(senderName)s nustatė profilio paveikslą.",
|
||||
"%(targetName)s rejected the invitation.": "%(targetName)s atmetė pakvietimą.",
|
||||
"%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s pakeitė temą į \"%(topic)s\".",
|
||||
"%(senderDisplayName)s changed the room name to %(roomName)s.": "%(senderDisplayName)s pakeitė kambario pavadinimą į %(roomName)s.",
|
||||
"%(senderDisplayName)s sent an image.": "%(senderDisplayName)s išsiuntė paveikslą.",
|
||||
"%(senderDisplayName)s sent an image.": "%(senderDisplayName)s išsiuntė vaizdą.",
|
||||
"Someone": "Kažkas",
|
||||
"%(senderName)s answered the call.": "%(senderName)s atsiliepė į skambutį.",
|
||||
"(unknown failure: %(reason)s)": "(nežinoma klaida: %(reason)s)",
|
||||
"%(senderName)s ended the call.": "%(senderName)s užbaigė skambutį.",
|
||||
"Send anyway": "Vis tiek siųsti",
|
||||
"Unnamed Room": "Bevardis kambarys",
|
||||
"Show timestamps in 12 hour format (e.g. 2:30pm)": "Rodyti laiko žymas 12 valandų formatu (pvz., 2:30pm)",
|
||||
"Always show message timestamps": "Visada rodyti žinučių laiko žymas",
|
||||
"Show timestamps in 12 hour format (e.g. 2:30pm)": "Rodyti laiko žymes 12 valandų formatu (pvz. 2:30pm)",
|
||||
"Always show message timestamps": "Visada rodyti žinučių laiko žymes",
|
||||
"Always show encryption icons": "Visada rodyti šifravimo piktogramas",
|
||||
"Room Colour": "Kambario spalva",
|
||||
"Decline": "Atmesti",
|
||||
|
@ -284,17 +284,17 @@
|
|||
"Drop File Here": "Vilkite failą čia",
|
||||
"Drop file here to upload": "Norėdami įkelti, vilkite failą čia",
|
||||
" (unsupported)": " (nepalaikoma)",
|
||||
"%(senderName)s sent an image": "%(senderName)s išsiuntė paveikslą",
|
||||
"%(senderName)s sent an image": "%(senderName)s išsiuntė vaizdą",
|
||||
"%(senderName)s sent a video": "%(senderName)s išsiuntė vaizdo įrašą",
|
||||
"%(senderName)s uploaded a file": "%(senderName)s įkėlė failą",
|
||||
"Options": "Parametrai",
|
||||
"Options": "Parinktys",
|
||||
"Key request sent.": "Rakto užklausa išsiųsta.",
|
||||
"device id: ": "įrenginio id: ",
|
||||
"Failed to mute user": "Nepavyko nutildyti naudotoją",
|
||||
"Are you sure?": "Ar tikrai?",
|
||||
"Ignore": "Ignoruoti",
|
||||
"Invite": "Pakviesti",
|
||||
"User Options": "Naudotojo parametrai",
|
||||
"User Options": "Vartotojo parinktys",
|
||||
"Admin Tools": "Administratoriaus įrankiai",
|
||||
"Attachment": "Priedas",
|
||||
"Voice call": "Balso skambutis",
|
||||
|
@ -309,10 +309,10 @@
|
|||
"Loading...": "Įkeliama...",
|
||||
"Pinned Messages": "Prisegtos žinutės",
|
||||
"Unknown": "Nežinoma",
|
||||
"Save": "Įrašyti",
|
||||
"Save": "Išsaugoti",
|
||||
"(~%(count)s results)|other": "(~%(count)s rezultatų(-ai))",
|
||||
"(~%(count)s results)|one": "(~%(count)s rezultatas)",
|
||||
"Upload avatar": "Įkelti avatarą",
|
||||
"Upload avatar": "Įkelti pseudoportretą",
|
||||
"Settings": "Nustatymai",
|
||||
"Community Invites": "Bendruomenės pakvietimai",
|
||||
"%(roomName)s does not exist.": "%(roomName)s neegzistuoja.",
|
||||
|
@ -324,7 +324,7 @@
|
|||
"Anyone who knows the room's link, including guests": "Bet kas, žinantis kambario nuorodą, įskaitant svečius",
|
||||
"Anyone": "Bet kas",
|
||||
"Permissions": "Leidimai",
|
||||
"Advanced": "Sudėtingesni nustatymai",
|
||||
"Advanced": "Išplėstiniai",
|
||||
"Add a topic": "Pridėti temą",
|
||||
"Local addresses for this room:": "Vietiniai šio kambario adresai:",
|
||||
"This room has no local addresses": "Šis kambarys neturi jokių vietinių adresų",
|
||||
|
@ -337,7 +337,7 @@
|
|||
"Error decrypting attachment": "Klaida iššifruojant priedą",
|
||||
"Decrypt %(text)s": "Iššifruoti %(text)s",
|
||||
"Download %(text)s": "Atsisiųsti %(text)s",
|
||||
"Error decrypting image": "Klaida iššifruojant paveikslą",
|
||||
"Error decrypting image": "Klaida iššifruojant vaizdą",
|
||||
"Error decrypting video": "Klaida iššifruojant vaizdo įrašą",
|
||||
"Copied!": "Nukopijuota!",
|
||||
"Failed to copy": "Nepavyko nukopijuoti",
|
||||
|
@ -353,11 +353,11 @@
|
|||
"The phone number field must not be blank.": "Telefono numerio laukas negali būti tuščias.",
|
||||
"The password field must not be blank.": "Slaptažodžio laukas negali būti tuščias.",
|
||||
"Email address": "El. pašto adresas",
|
||||
"Remove from community": "Šalinti iš bendruomenės",
|
||||
"Remove this user from community?": "Šalinti šį naudotoją iš bendruomenės?",
|
||||
"Failed to remove user from community": "Nepavyko pašalinti naudotoją iš bendruomenės",
|
||||
"Remove from community": "Pašalinti iš bendruomenės",
|
||||
"Remove this user from community?": "Pašalinti šį vartotoją iš bendruomenės?",
|
||||
"Failed to remove user from community": "Nepavyko pašalinti vartotojo iš bendruomenės",
|
||||
"Are you sure you want to remove '%(roomName)s' from %(groupId)s?": "Ar tikrai norite pašalinti \"%(roomName)s\" iš %(groupId)s?",
|
||||
"Failed to remove room from community": "Nepavyko pašalinti kambarį iš bendruomenės",
|
||||
"Failed to remove room from community": "Nepavyko pašalinti kambario iš bendruomenės",
|
||||
"Failed to remove '%(roomName)s' from %(groupId)s": "Nepavyko pašalinti \"%(roomName)s\" iš %(groupId)s",
|
||||
"Something went wrong!": "Kažkas nutiko!",
|
||||
"Visibility in Room List": "Matomumas kambarių sąraše",
|
||||
|
@ -367,7 +367,7 @@
|
|||
"Allow": "Leisti",
|
||||
"Delete Widget": "Ištrinti valdiklį",
|
||||
"Delete widget": "Ištrinti valdiklį",
|
||||
"Failed to remove widget": "Nepavyko pašalinti valdiklį",
|
||||
"Failed to remove widget": "Nepavyko pašalinti valdiklio",
|
||||
"Scroll to bottom of page": "Slinkti į puslapio apačią",
|
||||
"%(count)s of your messages have not been sent.|other": "Kai kurios iš jūsų žinučių nebuvo išsiųstos.",
|
||||
"%(count)s of your messages have not been sent.|one": "Jūsų žinutė nebuvo išsiųsta.",
|
||||
|
@ -375,8 +375,8 @@
|
|||
"Sent messages will be stored until your connection has returned.": "Išsiųstos žinutės bus saugomos tol, kol atsiras ryšys.",
|
||||
"Active call": "Aktyvus skambutis",
|
||||
"There's no one else here! Would you like to <inviteText>invite others</inviteText> or <nowarnText>stop warning about the empty room</nowarnText>?": "Čia daugiau nieko nėra! Ar norėtumėte <inviteText>pakviesti kitus</inviteText> ar <nowarnText>išjungti įspėjimą apie tuščią kambarį</nowarnText>?",
|
||||
"You seem to be uploading files, are you sure you want to quit?": "Atrodo, kad jūs įkelinėjate failus, ar tikrai norite išeiti?",
|
||||
"You seem to be in a call, are you sure you want to quit?": "Atrodo, kad dalyvaujate skambutyje, ar tikrai norite išeiti?",
|
||||
"You seem to be uploading files, are you sure you want to quit?": "Panašu, kad jūs įkelinėjate failus, ar tikrai norite išeiti?",
|
||||
"You seem to be in a call, are you sure you want to quit?": "Panašu, kad jūs dalyvaujate skambutyje, ar tikrai norite išeiti?",
|
||||
"Search failed": "Paieška nepavyko",
|
||||
"Server may be unavailable, overloaded, or search timed out :(": "Gali būti, kad serveris neprieinamas, perkrautas arba pasibaigė paieškai skirtas laikas :(",
|
||||
"No more results": "Daugiau nėra jokių rezultatų",
|
||||
|
@ -395,11 +395,11 @@
|
|||
"Light theme": "Šviesi tema",
|
||||
"Dark theme": "Tamsi tema",
|
||||
"Success": "Pavyko",
|
||||
"Unable to remove contact information": "Nepavyko pašalinti kontaktinę informaciją",
|
||||
"Unable to remove contact information": "Nepavyko pašalinti kontaktinės informacijos",
|
||||
"<not supported>": "<nepalaikoma>",
|
||||
"Check for update": "Tikrinti, ar yra atnaujinimų",
|
||||
"Reject all %(invitedRooms)s invites": "Atmesti visus %(invitedRooms)s pakvietimus",
|
||||
"You may need to manually permit Riot to access your microphone/webcam": "Jums gali tekti rankiniu būdu leisti Riot prieigą prie savo mikrofono/kameros",
|
||||
"You may need to manually permit Riot to access your microphone/webcam": "Jums gali tekti rankiniu būdu duoti leidimą Riot prieigai prie mikrofono/kameros",
|
||||
"No Audio Outputs detected": "Neaptikta jokių garso išvesčių",
|
||||
"No Microphones detected": "Neaptikta jokių mikrofonų",
|
||||
"No Webcams detected": "Neaptikta jokių kamerų",
|
||||
|
@ -418,11 +418,11 @@
|
|||
"A new password must be entered.": "Privalo būti įvestas naujas slaptažodis.",
|
||||
"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 į prisijungimo ekraną",
|
||||
"Return to login screen": "Grįžti į prisijungimą",
|
||||
"Send Reset Email": "Siųsti atstatymo 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.": "Turėkite omenyje, kad jūs prisijungiate prie %(hs)s serverio, o ne matrix.org.",
|
||||
"Failed to fetch avatar URL": "Nepavyko gauti avataro URL",
|
||||
"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",
|
||||
"Commands": "Komandos",
|
||||
"Results from DuckDuckGo": "Rezultatai iš DuckDuckGo",
|
||||
"Notify the whole room": "Pranešti visam kambariui",
|
||||
|
@ -523,13 +523,13 @@
|
|||
"%(senderName)s changed the pinned messages for the room.": "%(senderName)s pakeitė prisegtas kambario žinutes.",
|
||||
"Sorry, your homeserver is too old to participate in this room.": "Atleiskite, jūsų serverio versija yra per sena dalyvauti šiame kambaryje.",
|
||||
"Please contact your homeserver administrator.": "Prašome susisiekti su savo serverio administratoriumi.",
|
||||
"Enable inline URL previews by default": "Įjungti tiesiogines URL nuorodų peržiūras pagal numatymą",
|
||||
"Enable inline URL previews by default": "Įjungti URL nuorodų peržiūras kaip numatytasias",
|
||||
"Enable URL previews for this room (only affects you)": "Įjungti URL nuorodų peržiūras šiame kambaryje (įtakoja tik jus)",
|
||||
"Enable URL previews by default for participants in this room": "Įjungti URL nuorodų peržiūras pagal numatymą dalyviams šiame kambaryje",
|
||||
"Enable URL previews by default for participants in this room": "Įjungti URL nuorodų peržiūras kaip numatytasias šiame kambaryje esantiems dalyviams",
|
||||
"Confirm password": "Patvirtinkite slaptažodį",
|
||||
"Demote yourself?": "Pažeminti save?",
|
||||
"Demote": "Pažeminti",
|
||||
"Share Link to User": "Dalintis nuoroda į naudotoją",
|
||||
"Share Link to User": "Dalintis nuoroda į vartotoją",
|
||||
"Direct chats": "Privatūs pokalbiai",
|
||||
"The conversation continues here.": "Pokalbis tęsiasi čia.",
|
||||
"Jump to message": "Pereiti prie žinutės",
|
||||
|
@ -539,10 +539,10 @@
|
|||
"Who can read history?": "Kas gali skaityti istoriją?",
|
||||
"Only room administrators will see this warning": "Šį įspėjimą matys tik kambario administratoriai",
|
||||
"Remote addresses for this room:": "Nuotoliniai šio kambario adresai:",
|
||||
"You have <a>enabled</a> URL previews by default.": "Jūs esate <a>įjungę</a> URL nuorodų peržiūras pagal numatymą.",
|
||||
"You have <a>disabled</a> URL previews by default.": "Jūs esate <a>išjungę</a> URL nuorodų peržiūras pagal numatymą.",
|
||||
"URL previews are enabled by default for participants in this room.": "URL nuorodų peržiūros yra įjungtos pagal numatymą šio kambario dalyviams.",
|
||||
"URL previews are disabled by default for participants in this room.": "URL nuorodų peržiūros yra išjungtos pagal numatymą šio kambario dalyviams.",
|
||||
"You have <a>enabled</a> URL previews by default.": "Jūs esate <a>įjungę</a> URL nuorodų peržiūras kaip numatytasias.",
|
||||
"You have <a>disabled</a> URL previews by default.": "Jūs esate <a>išjungę</a> URL nuorodų peržiūras kaip numatytasias.",
|
||||
"URL previews are enabled by default for participants in this room.": "URL nuorodų peržiūros yra įjungtos kaip numatytasios šio kambario dalyviams.",
|
||||
"URL previews are disabled by default for participants in this room.": "URL nuorodų peržiūros yra išjungtos kaip numatytosios šio kambario dalyviams.",
|
||||
"Invalid file%(extra)s": "Neteisingas failas %(extra)s",
|
||||
"This room is a continuation of another conversation.": "Šis kambarys yra kito pokalbio pratęsimas.",
|
||||
"Click here to see older messages.": "Spustelėkite čia, norėdami matyti senesnes žinutes.",
|
||||
|
@ -555,8 +555,8 @@
|
|||
"No results": "Jokių rezultatų",
|
||||
"%(nameList)s %(transitionList)s": "%(nameList)s %(transitionList)s",
|
||||
"%(oneUser)schanged their name %(count)s times|one": "%(oneUser)s pasikeitė vardą",
|
||||
"%(severalUsers)schanged their avatar %(count)s times|one": "%(severalUsers)s pasikeitė avatarą",
|
||||
"%(oneUser)schanged their avatar %(count)s times|one": "%(oneUser)s pasikeitė avatarą",
|
||||
"%(severalUsers)schanged their avatar %(count)s times|one": "%(severalUsers)s pasikeitė pseudoportretą",
|
||||
"%(oneUser)schanged their avatar %(count)s times|one": "%(oneUser)s pasikeitė pseudoportretą",
|
||||
"collapse": "suskleisti",
|
||||
"expand": "išskleisti",
|
||||
"Room directory": "Kambarių katalogas",
|
||||
|
@ -599,7 +599,7 @@
|
|||
"This homeserver has hit its Monthly Active User limit.": "Šis serveris pasiekė savo mėnesinį aktyvių naudotojų limitą.",
|
||||
"This homeserver has exceeded one of its resource limits.": "Šis serveris viršijo vieno iš savo išteklių limitą.",
|
||||
"Unable to connect to Homeserver. Retrying...": "Nepavyksta prisijungti prie serverio. Bandoma iš naujo...",
|
||||
"Enable widget screenshots on supported widgets": "Palaikomuose valdikliuose įjungti valdiklių ekrano kopijas",
|
||||
"Enable widget screenshots on supported widgets": "Įjungti valdiklių ekrano kopijas palaikomuose valdikliuose",
|
||||
"Export E2E room keys": "Eksportuoti E2E kambario raktus",
|
||||
"Last seen": "Paskutinį kartą matytas",
|
||||
"Unignore": "Nebeignoruoti",
|
||||
|
@ -611,20 +611,20 @@
|
|||
"System Alerts": "Sistemos įspėjimai",
|
||||
"Failed to unban": "Nepavyko atblokuoti",
|
||||
"not specified": "nenurodyta",
|
||||
"In encrypted rooms, like this one, URL previews are disabled by default to ensure that your homeserver (where the previews are generated) cannot gather information about links you see in this room.": "Šifruotuose kambariuose, tokiuose kaip šis, URL nuorodų peržiūra pagal numatymą yra išjungta, kad būtų užtikrinta, jog jūsų namų serveris (kuriame yra generuojamos peržiūros) negalės rinkti informacijos apie šiame kambaryje matomas nuorodas.",
|
||||
"%(senderDisplayName)s changed the avatar for %(roomName)s": "%(senderDisplayName)s pakeitė %(roomName)s avatarą",
|
||||
"%(senderDisplayName)s removed the room avatar.": "%(senderDisplayName)s pašalino kambario avatarą.",
|
||||
"%(senderDisplayName)s changed the room avatar to <img/>": "%(senderDisplayName)s pakeitė kambario avatarą į <img/>",
|
||||
"In encrypted rooms, like this one, URL previews are disabled by default to ensure that your homeserver (where the previews are generated) cannot gather information about links you see in this room.": "Šifruotuose kambariuose, tokiuose kaip šis, URL nuorodų peržiūros pagal numatymą yra išjungtos, kad būtų užtikrinta, jog jūsų serveris (kur yra generuojamos peržiūros) negali rinkti informacijos apie jūsų šiame kambaryje peržiūrėtas nuorodas.",
|
||||
"%(senderDisplayName)s changed the avatar for %(roomName)s": "%(senderDisplayName)s pakeitė kambario %(roomName)s pseudoportretą",
|
||||
"%(senderDisplayName)s removed the room avatar.": "%(senderDisplayName)s pašalino kambario pseudoportretą.",
|
||||
"%(senderDisplayName)s changed the room avatar to <img/>": "%(senderDisplayName)s pakeitė kambario pseudoportretą į <img/>",
|
||||
"Removed or unknown message type": "Žinutė pašalinta arba yra nežinomo tipo",
|
||||
"Filter community members": "Filtruoti bendruomenės dalyvius",
|
||||
"Removing a room from the community will also remove it from the community page.": "Pašalinus kambarį iš bendruomenės, taip pat pašalins jį iš bendruomenės puslapio.",
|
||||
"Filter community rooms": "Filtruoti bendruomenės kambarius",
|
||||
"Please help improve Riot.im by sending <UsageDataLink>anonymous usage data</UsageDataLink>. This will use a cookie (please see our <PolicyLink>Cookie Policy</PolicyLink>).": "Padėkite patobulinti Riot.im, siųsdami <UsageDataLink>anoniminius naudojimosi duomenis</UsageDataLink>. Tai panaudos slapuką (žiūrėkite mūsų <PolicyLink>Slapukų politiką</PolicyLink>).",
|
||||
"Please help improve Riot.im by sending <UsageDataLink>anonymous usage data</UsageDataLink>. This will use a cookie.": "Padėkite patobulinti Riot.im, siųsdami <UsageDataLink>anoniminius naudojimosi duomenis</UsageDataLink>. Tai panaudos slapuką.",
|
||||
"Please help improve Riot.im by sending <UsageDataLink>anonymous usage data</UsageDataLink>. This will use a cookie.": "Padėkite patobulinti Riot.im, siųsdami <UsageDataLink>anoniminius naudojimosi duomenis</UsageDataLink>. Tai naudos slapuką.",
|
||||
"Please <a>contact your service administrator</a> to get this limit increased.": "Norėdami padidinti šį limitą, <a>susisiekite su savo paslaugų administratoriumi</a>.",
|
||||
"This homeserver has hit its Monthly Active User limit so <b>some users will not be able to log in</b>.": "Šis namų serveris pasiekė savo mėnesinį aktyvių naudotojų limitą, taigi, <b>kai kurie naudotojai negalės prisijungti</b>.",
|
||||
"This homeserver has exceeded one of its resource limits so <b>some users will not be able to log in</b>.": "Šis namų serveris viršijo vieno iš savo išteklių limitą, taigi, <b>kai kurie naudotojai negalės prisijungti</b>.",
|
||||
"An error ocurred whilst trying to remove the widget from the room": "Įvyko klaida, bandant pašalinti valdiklį iš kambario",
|
||||
"An error ocurred whilst trying to remove the widget from the room": "Bandant pašalinti valdiklį iš kambario įvyko klaida",
|
||||
"Blacklist": "Blokuoti",
|
||||
"Unblacklist": "Atblokuoti",
|
||||
"Verify...": "Patvirtinti...",
|
||||
|
@ -636,12 +636,12 @@
|
|||
"%(oneUser)sleft %(count)s times|one": "%(oneUser)s išėjo",
|
||||
"%(severalUsers)schanged their name %(count)s times|one": "%(severalUsers)s pasikeitė vardus",
|
||||
"%(oneUser)schanged their name %(count)s times|other": "%(oneUser)s pasikeitė vardą %(count)s kartų(-us)",
|
||||
"%(severalUsers)schanged their avatar %(count)s times|other": "%(severalUsers)s pasikeitė avatarą %(count)s kartų(-us)",
|
||||
"%(oneUser)schanged their avatar %(count)s times|other": "%(oneUser)s pasikeitė avatarą %(count)s kartų(-us)",
|
||||
"%(severalUsers)schanged their avatar %(count)s times|other": "%(severalUsers)s pasikeitė pseudoportretus %(count)s kartų(-us)",
|
||||
"%(oneUser)schanged their avatar %(count)s times|other": "%(oneUser)s pasikeitė pseudoportretą %(count)s kartų(-us)",
|
||||
"And %(count)s more...|other": "Ir dar %(count)s...",
|
||||
"Existing Call": "Esamas skambutis",
|
||||
"A call is already in progress!": "Skambutis jau vyksta!",
|
||||
"Default": "Numatytasis",
|
||||
"Default": "Numatytas",
|
||||
"Restricted": "Apribotas",
|
||||
"Moderator": "Moderatorius",
|
||||
"Ignores a user, hiding their messages from you": "Ignoruoja vartotoją, slepiant nuo jūsų jo žinutes",
|
||||
|
@ -659,7 +659,7 @@
|
|||
"%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s nustatė pagrindinį šio kambario adresą į %(address)s.",
|
||||
"%(senderName)s removed the main address for this room.": "%(senderName)s pašalino pagrindinį šio kambario adresą.",
|
||||
"Disinvite": "Atšaukti pakvietimą",
|
||||
"Disinvite this user?": "Atšaukti pakvietimą šiam naudotojui?",
|
||||
"Disinvite this user?": "Atšaukti pakvietimą šiam vartotojui?",
|
||||
"Unknown for %(duration)s": "Nežinoma jau %(duration)s",
|
||||
"Unable to load! Check your network connectivity and try again.": "Nepavyko įkelti! Patikrinkite savo tinklo ryšį ir bandykite dar kartą.",
|
||||
"%(targetName)s joined the room.": "%(targetName)s prisijungė prie kambario.",
|
||||
|
@ -700,12 +700,12 @@
|
|||
"Publish this room to the public in %(domain)s's room directory?": "Paskelbti šį kambarį į viešąjį %(domain)s kambarių katalogą?",
|
||||
"Start authentication": "Pradėti tapatybės nustatymą",
|
||||
"Failed to load group members": "Nepavyko įkelti grupės dalyvių",
|
||||
"Manage Integrations": "Tvarkyti integracijas",
|
||||
"Manage Integrations": "Valdyti integracijas",
|
||||
"Matrix Room ID": "Matrix kambario ID",
|
||||
"That doesn't look like a valid email address": "Tai nepanašu į teisingą el. pašto adresą",
|
||||
"Preparing to send logs": "Ruošiamasi išsiųsti žurnalus",
|
||||
"Incompatible Database": "Nesuderinama duomenų bazė",
|
||||
"Deactivate Account": "Pasyvinti paskyrą",
|
||||
"Deactivate Account": "Deaktyvuoti paskyrą",
|
||||
"I verify that the keys match": "Aš patvirtinu, kad raktai sutampa",
|
||||
"Incompatible local cache": "Nesuderinamas vietinis podėlis",
|
||||
"Updating Riot": "Atnaujinama Riot",
|
||||
|
@ -740,7 +740,7 @@
|
|||
"Your Communities": "Jūsų bendruomenės",
|
||||
"Create a new community": "Sukurti naują bendruomenę",
|
||||
"You have no visible notifications": "Jūs neturite matomų pranešimų",
|
||||
"Failed to perform homeserver discovery": "Nepavyko atlikti namų serverio aptikimo",
|
||||
"Failed to perform homeserver discovery": "Nepavyko atlikti serverio radimo",
|
||||
"Error: Problem communicating with the given homeserver.": "Klaida: Problemos susisiekiant su nurodytu namų serveriu.",
|
||||
"This server does not support authentication with a phone number.": "Šis serveris nepalaiko tapatybės nustatymo telefono numeriu.",
|
||||
"Great! This passphrase looks strong enough.": "Puiku! Ši slapta frazė atrodo pakankamai stipri.",
|
||||
|
@ -757,7 +757,7 @@
|
|||
"Your Riot is misconfigured": "Jūsų Riot yra neteisingai sukonfigūruotas",
|
||||
"Sign in to your Matrix account on %(serverName)s": "Prisijunkite prie savo Matrix paskyros %(serverName)s serveryje",
|
||||
"Sign in to your Matrix account on <underlinedServerName />": "Prisijunkite prie savo paskyros <underlinedServerName /> serveryje",
|
||||
"Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "Nepriklausomai nuo to ar jūs naudojate 'duonos trupinių' funkciją (avatarai virš kambarių sąrašo)",
|
||||
"Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "Nepriklausomai nuo to ar jūs naudojate 'duonos trupinių' funkciją (pseudoportretai virš kambarių sąrašo)",
|
||||
"Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Kur šis puslapis įtraukia identifikuojamą informaciją, kaip kambarys, vartotojas ar grupės ID, tie duomenys yra pašalinami prieš siunčiant į serverį.",
|
||||
"The remote side failed to pick up": "Nuotolinėi pusėi nepavyko atsiliepti",
|
||||
"Call failed due to misconfigured server": "Skambutis nepavyko dėl neteisingai sukonfigūruoto serverio",
|
||||
|
@ -775,7 +775,7 @@
|
|||
"Invite new community members": "Pakviesti naujus bendruomenės narius",
|
||||
"Name or Matrix ID": "Vardas arba Matrix ID",
|
||||
"Identity server has no terms of service": "Tapatybės serveris neturi paslaugų teikimo sąlygų",
|
||||
"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.": "Šiam veiksmui reikalinga prieiti numatytąjį tapatybės serverį <server />, kad patvirtinti el. pašto adresą arba telefono numerį, bet serveris neturi jokių paslaugos teikimo sąlygų.",
|
||||
"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.": "Šiam veiksmui reikalinga pasiekti numatytąjį tapatybės serverį <server />, kad patvirtinti el. pašto adresą arba telefono numerį, bet serveris neturi jokių paslaugos teikimo sąlygų.",
|
||||
"Only continue if you trust the owner of the server.": "Tęskite tik tada, jei pasitikite serverio savininku.",
|
||||
"Trust": "Pasitikėti",
|
||||
"Failed to invite users to the room:": "Nepavyko pakviesti vartotojų į kambarį:",
|
||||
|
@ -790,14 +790,14 @@
|
|||
"You do not have the required permissions to use this command.": "Jūs neturite reikalingų leidimų naudoti šią komandą.",
|
||||
"<b>Warning</b>: Upgrading a room will <i>not automatically migrate room members to the new version of the room.</i> We'll post a link to the new room in the old version of the room - room members will have to click this link to join the new room.": "<b>Įspėjimas</b>: Kambario atnaujinimas <i>automatiškai nemigruos kambario dalyvių į naują kambario versiją.</i> Mes paskelbsime nuorodą į naują kambarį senojoje kambario versijoje - kambario dalyviai turės ją paspausti, norėdami prisijungti prie naujo kambario.",
|
||||
"Changes your display nickname in the current room only": "Pakeičia jūsų rodomą slapyvardį tik esamame kambaryje",
|
||||
"Changes the avatar of the current room": "Pakeičia esamo kambario avatarą",
|
||||
"Changes your avatar in this current room only": "Pakeičia jūsų avatarą tik esamame kambaryje",
|
||||
"Changes your avatar in all rooms": "Pakeičia jūsų avatarą visuose kambariuose",
|
||||
"Changes the avatar of the current room": "Pakeičia esamo kambario pseudoportretą",
|
||||
"Changes your avatar in this current room only": "Pakeičia jūsų pseudoportretą tik esamame kambaryje",
|
||||
"Changes your avatar in all rooms": "Pakeičia jūsų pseudoportretą visuose kambariuose",
|
||||
"Gets or sets the room topic": "Gauna arba nustato kambario temą",
|
||||
"This room has no topic.": "Šis kambarys neturi temos.",
|
||||
"Sets the room name": "Nustato kambario pavadinimą",
|
||||
"Use an identity server": "Naudoti tapatybės serverį",
|
||||
"Use an identity server to invite by email. Click continue to use the default identity server (%(defaultIdentityServerName)s) or manage in Settings.": "Norėdami pakviesti nurodydami el. paštą, naudokite tapatybės serverį. Tam, kad būtų naudojamas numatytasis tapatybės serveris %(defaultIdentityServerName)s, spauskite tęsti, arba tvarkykite nustatymuose.",
|
||||
"Use an identity server to invite by email. Click continue to use the default identity server (%(defaultIdentityServerName)s) or manage in Settings.": "Norėdami pakviesti nurodydami el. paštą, naudokite tapatybės serverį. Tam, kad toliau būtų naudojamas numatytasis tapatybės serveris %(defaultIdentityServerName)s, spauskite tęsti, arba tvarkykite nustatymuose.",
|
||||
"Use an identity server to invite by email. Manage in Settings.": "Norėdami pakviesti nurodydami el. paštą, naudokite tapatybės serverį. Tvarkykite nustatymuose.",
|
||||
"Joins room with given alias": "Prisijungia prie kambario su nurodytu slapyvardžiu",
|
||||
"Unbans user with given ID": "Atblokuoja vartotoją su nurodytu id",
|
||||
|
@ -831,8 +831,8 @@
|
|||
"%(senderName)s sent an invitation to %(targetDisplayName)s to join the room.": "%(senderName)s išsiuntė pakvietimą %(targetDisplayName)s prisijungti prie kambario.",
|
||||
"%(senderName)s made future room history visible to all room members, from the point they joined.": "%(senderName)s padarė būsimą kambario istoriją matomą visiems kambario dalyviams, nuo pat jų prisijungimo.",
|
||||
"%(senderName)s made future room history visible to unknown (%(visibility)s).": "%(senderName)s padarė būsimą kambario istoriją matomą nežinomam (%(visibility)s).",
|
||||
"%(userId)s from %(fromPowerLevel)s to %(toPowerLevel)s": "%(userId)s iš %(fromPowerLevel)s į %(toPowerLevel)s",
|
||||
"%(senderName)s changed the power level of %(powerLevelDiffText)s.": "%(senderName)s pakeitė %(powerLevelDiffText)s galios lygį.",
|
||||
"%(userId)s from %(fromPowerLevel)s to %(toPowerLevel)s": "%(userId)s galios lygį iš %(fromPowerLevel)s į %(toPowerLevel)s",
|
||||
"%(senderName)s changed the power level of %(powerLevelDiffText)s.": "%(senderName)s pakeitė %(powerLevelDiffText)s.",
|
||||
"%(displayName)s is typing …": "%(displayName)s rašo …",
|
||||
"%(names)s and %(count)s others are typing …|other": "%(names)s ir %(count)s kiti rašo …",
|
||||
"%(names)s and %(count)s others are typing …|one": "%(names)s ir dar vienas rašo …",
|
||||
|
@ -897,9 +897,9 @@
|
|||
"Filter": "Filtruoti",
|
||||
"Filter rooms…": "Filtruoti kambarius…",
|
||||
"This room is not public. You will not be able to rejoin without an invite.": "Šis kambarys nėra viešas. Jūs negalėsite prie jo vėl prisijungti be pakvietimo.",
|
||||
"Are you sure you want to leave the room '%(roomName)s'?": "Ar tikrai norite palikti kambarį %(roomName)s?",
|
||||
"Are you sure you want to leave the room '%(roomName)s'?": "Ar tikrai norite išeiti iš kambario %(roomName)s?",
|
||||
"%(creator)s created and configured the room.": "%(creator)s sukūrė ir sukonfigūravo kambarį.",
|
||||
"Riot failed to get the public room list.": "Riot nepavyko gauti viešų kambarių sąrašą.",
|
||||
"Riot failed to get the public room list.": "Riot nepavyko gauti viešų kambarių sąrašo.",
|
||||
"General failure": "Bendras triktis",
|
||||
"Messages containing my username": "Žinutės, kuriose yra mano vartotojo vardas",
|
||||
"Set a new account password...": "Nustatyti naują paskyros slaptažodį...",
|
||||
|
@ -925,7 +925,7 @@
|
|||
"Create your account": "Sukurkite savo paskyrą",
|
||||
"Change identity server": "Pakeisti tapatybės serverį",
|
||||
"Change": "Keisti",
|
||||
"Change room avatar": "Keisti kambario avatarą",
|
||||
"Change room avatar": "Keisti kambario pseudoportretą",
|
||||
"Change room name": "Keisti kambario pavadinimą",
|
||||
"Change main address for the room": "Keisti pagrindinį kambario adresą",
|
||||
"Change history visibility": "Keisti istorijos matomumą",
|
||||
|
@ -939,12 +939,12 @@
|
|||
"Are you sure you wish to remove (delete) this event? Note that if you delete a room name or topic change, it could undo the change.": "Ar tikrai norite pašalinti (ištrinti) šį įvykį? Atkreipkite dėmesį į tai, kad jei jūs ištrinsite kambario pavadinimo arba temos keitimo įvykį, tai gali atšaukti patį pakeitimą.",
|
||||
"We recommend you change your password and recovery key in Settings immediately": "Mes rekomenduojame nedelsiant Nustatymuose pasikeisti jūsų slaptažodį ir atgavimo raktą",
|
||||
"Email (optional)": "El. paštas (neprivaloma)",
|
||||
"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.": "Jei jūs nenustatėte naujo paskyros atgavimo metodo, tada gali būti, kad užpuolikas bando patekti į jūsų paskyrą. Nedelsiant Nustatymuose pakeiskite savo paskyros slaptažodį ir nustatykite naują paskyros atgavimo metodą.",
|
||||
"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.": "Jei jūs nepašalinote paskyros atgavimo metodo, tada gali būti, kad užpuolikas bando patekti į jūsų paskyrą. Nedelsiant Nustatymuose pakeiskite savo paskyros slaptažodį ir nustatykite naują paskyros atgavimo metodą.",
|
||||
"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.": "Jei jūs nenustatėte naujo paskyros atgavimo metodo, gali būti, kad užpuolikas bando patekti į jūsų paskyrą. Nedelsiant nustatymuose pakeiskite savo paskyros slaptažodį ir nustatykite naują atgavimo metodą.",
|
||||
"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.": "Jei jūs nepašalinote paskyros atgavimo metodo, gali būti, kad užpuolikas bando patekti į jūsų paskyrą. Nedelsiant nustatymuose pakeiskite savo paskyros slaptažodį ir nustatykite naują atgavimo metodą.",
|
||||
"Help & About": "Pagalba ir Apie",
|
||||
"Direct Messages": "Privačios žinutės",
|
||||
"Set addresses for this room so users can find this room through your homeserver (%(localDomain)s)": "Nustatykite adresus šiam kambariui, kad vartotojai galėtų surasti šį kambarį per jūsų serverį (%(localDomain)s)",
|
||||
"Direct message": "Privati žinutė",
|
||||
"Direct message": "Siųsti tiesioginę žinutę",
|
||||
"%(severalUsers)sjoined %(count)s times|other": "%(severalUsers)s prisijungė %(count)s kartų(-us)",
|
||||
"%(severalUsers)sjoined %(count)s times|one": "%(severalUsers)s prisijungė",
|
||||
"%(oneUser)sjoined %(count)s times|other": "%(oneUser)s prisijungė %(count)s kartų(-us)",
|
||||
|
@ -990,7 +990,7 @@
|
|||
"Custom level": "Pritaikytas lygis",
|
||||
"Can't find this server or its room list": "Negalime rasti šio serverio arba jo kambarių sąrašo",
|
||||
"Matrix rooms": "Matrix kambariai",
|
||||
"Recently Direct Messaged": "Neseniai siųsta privati žinutė",
|
||||
"Recently Direct Messaged": "Neseniai tiesiogiai susirašyta",
|
||||
"Command Help": "Komandų pagalba",
|
||||
"Help": "Pagalba",
|
||||
"Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "Sukurkite bendruomenę, kad kartu sugrupuotumėte vartotojus ir kambarius! Sukurkite pagrindinį puslapį, kad pažymėtumėte savo vietą Matrix visatoje.",
|
||||
|
@ -1002,7 +1002,7 @@
|
|||
"Failed to set direct chat tag": "Nepavyko nustatyti privataus pokalbio žymos",
|
||||
"Navigation": "Navigacija",
|
||||
"Calls": "Skambučiai",
|
||||
"Room List": "Kambarių sąrašas",
|
||||
"Room List": "Kambarių Sąrašas",
|
||||
"Autocomplete": "Autorašymas",
|
||||
"Alt": "Alt",
|
||||
"Alt Gr": "Alt Gr",
|
||||
|
@ -1013,13 +1013,13 @@
|
|||
"If you cancel now, you won't complete verifying your other session.": "Jei atšauksite dabar, neužbaigsite kito seanso patvirtinimo.",
|
||||
"Verify this session": "Patvirtinti šį seansą",
|
||||
"%(senderDisplayName)s changed the room name from %(oldRoomName)s to %(newRoomName)s.": "%(senderDisplayName)s pakeitė kambario pavadinimą iš %(oldRoomName)s į %(newRoomName)s.",
|
||||
"Show display name changes": "Rodyti vardo pakeitimus",
|
||||
"Show display name changes": "Rodyti rodomo vardo pakeitimus",
|
||||
"Show read receipts sent by other users": "Rodyti kitų vartotojų siųstus perskaitymo kvitus",
|
||||
"Order rooms by name": "Rūšiuoti kambarius pagal pavadinimą",
|
||||
"The other party cancelled the verification.": "Kita šalis atšaukė patvirtinimą.",
|
||||
"Public Name": "Viešas Vardas",
|
||||
"Encrypted messages are secured with end-to-end encryption. Only you and the recipient(s) have the keys to read these messages.": "Užšifruotos žinutės yra apsaugotos su \"end-to-end\" šifravimu. Tik jūs ir gavėjas(-ai) turi raktus šioms žinutėms perskaityti.",
|
||||
"Back up your keys before signing out to avoid losing them.": "Prieš atsijungdami sukurkite atsarginę savo raktų kopiją, kad jų neprarastumėte.",
|
||||
"Encrypted messages are secured with end-to-end encryption. Only you and the recipient(s) have the keys to read these messages.": "Užšifruotos žinutės yra apsaugotos visapusiu šifravimu. Tik jūs ir gavėjas(-ai) turi raktus šioms žinutėms perskaityti.",
|
||||
"Back up your keys before signing out to avoid losing them.": "Prieš atsijungdami sukurkite atsarginę savo raktų kopiją, kad išvengtumėte jų praradimo.",
|
||||
"Start using Key Backup": "Pradėti naudoti Atsarginę Raktų Kopiją",
|
||||
"Display Name": "Rodomas Vardas",
|
||||
"Please verify the room ID or alias and try again.": "Prašome patikrinti kambario ID arba slapyvardį ir bandyti dar kartą.",
|
||||
|
@ -1049,8 +1049,8 @@
|
|||
"Create a private room": "Sukurti privatų kambarį",
|
||||
"Name": "Pavadinimas",
|
||||
"Topic (optional)": "Tema (nebūtina)",
|
||||
"Hide advanced": "Paslėpti sudėtingesnius nustatymus",
|
||||
"Show advanced": "Rodyti sudėtingesnius nustatymus",
|
||||
"Hide advanced": "Paslėpti išplėstinius",
|
||||
"Show advanced": "Rodyti išplėstinius",
|
||||
"Block users on other matrix homeservers from joining this room (This setting cannot be changed later!)": "Neleisti kitų matrix serverių vartotojams prisijungti prie šio kambario (Šis nustatymas negali būti vėliau pakeistas!)",
|
||||
"Session name": "Seanso pavadinimas",
|
||||
"Session key": "Seanso raktas",
|
||||
|
@ -1058,13 +1058,13 @@
|
|||
"You'll lose access to your encrypted messages": "Jūs prarasite prieigą prie savo užšifruotų žinučių",
|
||||
"New session": "Naujas seansas",
|
||||
"Enter secret storage passphrase": "Įveskite slaptos saugyklos slaptafrazę",
|
||||
"Enter recovery passphrase": "Įveskite atstatymo slaptafrazę",
|
||||
"Enter recovery passphrase": "Įveskite atgavimo slaptafrazę",
|
||||
"<b>Warning</b>: you should only set up key backup from a trusted computer.": "<b>Įspėjimas</b>: atsarginę raktų kopiją sukurkite tik iš patikimo kompiuterio.",
|
||||
"<b>Warning</b>: You should only set up key backup from a trusted computer.": "<b>Įspėjimas</b>: Atsarginę raktų kopiją sukurkite tik iš patikimo kompiuterio.",
|
||||
"Server Name": "Serverio Pavadinimas",
|
||||
"Other servers": "Kiti serveriai",
|
||||
"Add room": "Sukurti kambarį",
|
||||
"Changing your password will reset any end-to-end encryption keys on all of your sessions, making encrypted chat history unreadable. Set up Key Backup or export your room keys from another session before resetting your password.": "Slaptažodžio keitimas ištrins visų jūsų seansų šifravimo raktus, todėl nebebus galima perskaityti užšifruotos pokalbių istorijos. Nustatykite Raktų Atsarginę Kopiją arba eksportuokite savo kambarių raktus iš kito seanso prieš atstatydami slaptažodį.",
|
||||
"Changing your password will reset any end-to-end encryption keys on all of your sessions, making encrypted chat history unreadable. Set up Key Backup or export your room keys from another session before resetting your password.": "Slaptažodžio keitimas ištrins visų jūsų seansų šifravimo raktus, todėl nebebus galima perskaityti užšifruotos pokalbių istorijos. Sukurkite atsarginę raktų kopiją arba eksportuokite savo kambarių raktus iš kito seanso prieš atstatydami slaptažodį.",
|
||||
"Set a display name:": "Nustatyti rodomą vardą:",
|
||||
"Secure your encryption keys with a passphrase. For maximum security this should be different to your account password:": "Apsaugokite savo šifravimo raktus slaptafraze. Maksimaliam saugumui užtikrinti ji turi skirtis nuo jūsų paskyros slaptažodžio:",
|
||||
"Enter a passphrase": "Įveskite slaptafrazę",
|
||||
|
@ -1073,5 +1073,460 @@
|
|||
"For maximum security, this should be different from your account password.": "Maksimaliam saugumui užtikrinti ji turi skirtis nuo jūsų paskyros slaptažodžio.",
|
||||
"Enter a passphrase...": "Įveskite slaptafrazę...",
|
||||
"Please enter your passphrase a second time to confirm.": "Įveskite slaptafrazę antrą kartą, kad ją patvirtintumėte.",
|
||||
"Secure your backup with a passphrase": "Apsaugokite savo atsarginę kopiją slaptafraze"
|
||||
"Secure your backup with a passphrase": "Apsaugokite savo atsarginę kopiją slaptafraze",
|
||||
"Set up encryption": "Nustatyti šifravimą",
|
||||
"COPY": "Kopijuoti",
|
||||
"Enter recovery key": "Įveskite atgavimo raktą",
|
||||
"Keep going...": "Tęskite...",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Riot geriausiai veikia su <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, arba <safariLink>Safari</safariLink> naršyklėmis.",
|
||||
"Syncing...": "Sinchronizuojama...",
|
||||
"Signing In...": "Prijungiama...",
|
||||
"If you've joined lots of rooms, this might take a while": "Jei esate prisijungę prie daug kambarių, tai gali užtrukti",
|
||||
"Without completing security on this session, it won’t have access to encrypted messages.": "Neužbaigus saugumo šiame seanse, jis neturės prieigos prie šifruotų žinučių.",
|
||||
"Set a recovery passphrase to secure encrypted information and recover it if you log out. This should be different to your account password:": "Nustatykite atgavimo slaptafrazę, kad apsaugotumėte šifruotą informaciją ir atgautumėte ją jei atsijungsite. Ji turi skirtis nuo jūsų paskyros slaptažodžio:",
|
||||
"Enter a recovery passphrase": "Įveskite atgavimo slaptafrazę",
|
||||
"Back up encrypted message keys": "Padaryti atsargines šifruotų žinučių raktų kopijas",
|
||||
"Set up with a recovery key": "Nustatyti su atgavimo raktu",
|
||||
"Enter your recovery passphrase a second time to confirm it.": "Įveskite atgavimo slaptafrazę antrą kartą, kad ją patvirtintumėte.",
|
||||
"Your recovery key is a safety net - you can use it to restore access to your encrypted messages if you forget your recovery passphrase.": "Jūsų atgavimo raktas yra atsarginė saugumo priemonė - jūs galite jį naudoti prieigos prie jūsų šifruotų žinučių atgavimui, jei pamiršite savo atgavimo slaptafrazę.",
|
||||
"Keep a copy of it somewhere secure, like a password manager or even a safe.": "Laikykite šio rakto kopiją saugioje vietoje, pavyzdžiui slaptažodžių tvarkyklėje arba seife.",
|
||||
"Your recovery key": "Jūsų atgavimo raktas",
|
||||
"Copy": "Kopijuoti",
|
||||
"Make a copy of your recovery key": "Padaryti atgavimo rakto kopiją",
|
||||
"Please enter your recovery passphrase a second time to confirm.": "Įveskite atgavimo slaptafrazę antrą kartą, kad patvirtintumėte.",
|
||||
"Later": "Vėliau",
|
||||
"Verify yourself & others to keep your chats safe": "Patvirtinkite save ir kitus, kad jūsų pokalbiai būtų saugūs",
|
||||
"Go back": "Grįžti",
|
||||
"This room is end-to-end encrypted": "Šis kambarys užšifruotas visapusiu šifravimu",
|
||||
"Send a message…": "Siųsti žinutę…",
|
||||
"Never lose encrypted messages": "Niekada nepraraskite šifruotų žinučių",
|
||||
"Messages in this room are secured with end-to-end encryption. Only you and the recipient(s) have the keys to read these messages.": "Žinutės šiame kambaryje yra apsaugotos visapusiu šifravimu. Tik jūs ir gavėjas(-ai) turite raktus šioms žinutėms perskaityti.",
|
||||
"Securely back up your keys to avoid losing them. <a>Learn more.</a>": "Saugiai sukurkite jūsų raktų atsargines kopijas, kad išvengtumėte jų praradimo. <a>Sužinoti daugiau.</a>",
|
||||
"Not now": "Ne dabar",
|
||||
"Don't ask me again": "Daugiau neklausti",
|
||||
"Send as message": "Siųsti kaip žinutę",
|
||||
"Messages in this room are end-to-end encrypted.": "Žinutės šiame kambaryje yra visapusiškai užšifruotos.",
|
||||
"Messages in this room are not end-to-end encrypted.": "Žinutės šiame kambaryje nėra visapusiškai užšifruotos.",
|
||||
"Messages in this room are end-to-end encrypted. Learn more & verify this user in their user profile.": "Žinutės šiame kambaryje yra visapusiškai užšifruotos. Sužinokite daugiau ir patvirtinkite vartotojus jų profilyje.",
|
||||
"Confirm Removal": "Patvirtinkite pašalinimą",
|
||||
"Manually export keys": "Eksportuoti raktus rankiniu būdu",
|
||||
"Send a Direct Message": "Siųsti tiesioginę žinutę",
|
||||
"Go Back": "Grįžti",
|
||||
"Go back to set it again.": "Grįžti atgal, kad nustatyti iš naujo.",
|
||||
"Click the button below to confirm adding this email address.": "Paspauskite mygtuką žemiau, kad patvirtintumėte šio el. pašto pridėjimą.",
|
||||
"Add an email address to configure email notifications": "Pridėkite el. pašto adresą, kad nustatytumėte el. pašto pranešimus",
|
||||
"We recommend that you remove your email addresses and phone numbers from the identity server before disconnecting.": "Rekomenduojame, prieš atsijungiant, iš tapatybės serverio pašalinti savo el. pašto adresus ir telefono numerius.",
|
||||
"Email addresses": "El. pašto adresai",
|
||||
"Account management": "Paskyros valdymas",
|
||||
"Deactivating your account is a permanent action - be careful!": "Paskyros deaktyvavimas yra neatšaukiamas veiksmas - būkite atsargūs!",
|
||||
"Your email address hasn't been verified yet": "Jūsų el. pašto adresas dar nebuvo patvirtintas",
|
||||
"We've sent you an email to verify your address. Please follow the instructions there and then click the button below.": "Išsiuntėme jums el. laišką, kad patvirtintumėme jūsų adresą. Sekite ten esančiais nurodymais ir tada paspauskite žemiau esantį mygtuką.",
|
||||
"Email Address": "El. pašto adresas",
|
||||
"You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use this app with an existing Matrix account on a different homeserver.": "Jūs galite naudoti pasirinktinius serverio nustatymus, kad prisijungtumėte prie kitų Matrix serverių, nurodydami kito serverio URL. Tai leidžia jums naudotis šia programa su kitame serveryje esančia Matrix paskyra.",
|
||||
"Enter your custom homeserver URL <a>What does this mean?</a>": "Įveskite pasirinktinio serverio URL <a>Ką tai reiškia?</a>",
|
||||
"Homeserver URL": "Serverio URL",
|
||||
"Homeserver URL does not appear to be a valid Matrix homeserver": "Serverio adresas neatrodo esantis tinkamas Matrix serveris",
|
||||
"This homeserver does not support login using email address.": "Šis serveris nepalaiko prisijungimo naudojant el. pašto adresą.",
|
||||
"Review Sessions": "Peržiūrėti seansus",
|
||||
"Setting up keys": "Raktų nustatymas",
|
||||
"Review where you’re logged in": "Peržiūrėkite kur esate prisijungę",
|
||||
"Verify all your sessions to ensure your account & messages are safe": "Patvirtinkite visus savo seansus, kad užtikrintumėte savo paskyros ir žinučių saugumą",
|
||||
"Review": "Peržiūrėti",
|
||||
"Message deleted": "Žinutė ištrinta",
|
||||
"Message deleted by %(name)s": "Žinutė, ištrinta %(name)s",
|
||||
"<b>Warning</b>: You should only do this on a trusted computer.": "<b>Įspėjimas</b>: Tai atlikite tik saugiame kompiuteryje.",
|
||||
"Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery passphrase.": "Pasiekite savo saugių žinučių istoriją ir kryžminio pasirašymo tapatybę, naudojamą kitų seansų patvirtinimui, įvesdami savo atgavimo slaptafrazę.",
|
||||
"If you've forgotten your recovery passphrase you can <button1>use your recovery key</button1> or <button2>set up new recovery options</button2>.": "Jei pamiršote savo atgavimo slaptafrazę jūs galite <button1>naudoti savo atgavimo raktą</button1> arba <button2>nustatyti naujus atgavimo nustatymus</button2>.",
|
||||
"If you've forgotten your recovery passphrase you can <button1>use your recovery key</button1> or <button2>set up new recovery options</button2>": "Jei pamiršote savo atgavimo slaptafrazę jūs galite <button1>naudoti savo atgavimo raktą</button1> arba <button2>nustatyti naujus atgavimo nustatymus</button2>",
|
||||
"Confirm your identity by entering your account password below.": "Patvirtinkite savo tapatybę žemiau įvesdami savo paskyros slaptažodį.",
|
||||
"Use an email address to recover your account": "Naudokite el. pašto adresą, kad prireikus galėtumėte atgauti paskyrą",
|
||||
"Passwords don't match": "Slaptažodžiai nesutampa",
|
||||
"Use lowercase letters, numbers, dashes and underscores only": "Naudokite tik mažąsias raides, brūkšnelius ir pabraukimus",
|
||||
"Great! This recovery passphrase looks strong enough.": "Puiku! Ši slaptafrazė atrodo pakankamai stipri.",
|
||||
"That matches!": "Tai sutampa!",
|
||||
"That doesn't match.": "Tai nesutampa.",
|
||||
"Confirm your recovery passphrase": "Patvirtinti atgavimo slaptafrazę",
|
||||
"Your recovery key has been <b>copied to your clipboard</b>, paste it to:": "Jūsų atgavimo raktas buvo <b>nukopijuotas į jūsų iškarpinę</b>, jūs galite:",
|
||||
"Your recovery key is in your <b>Downloads</b> folder.": "Jūsų atgavimo raktas yra <b>Parsisiuntimų</b> kataloge.",
|
||||
"<b>Print it</b> and store it somewhere safe": "<b>Atsispausdinti jį</b> ir laikyti saugioje vietoje",
|
||||
"<b>Save it</b> on a USB key or backup drive": "<b>Išsaugoti jį</b> USB rakte arba atsarginių kopijų diske",
|
||||
"<b>Copy it</b> to your personal cloud storage": "<b>Nukopijuoti jį</b> į savo asmeninę debesų saugyklą",
|
||||
"You can now verify your other devices, and other users to keep your chats safe.": "Jūs dabar galite patvirtinti kitus savo įrenginius ir kitus vartotojus, kad jūsų pokalbiai būtų saugūs.",
|
||||
"Confirm recovery passphrase": "Patvirtinkite atgavimo slaptafrazę",
|
||||
"You're done!": "Atlikta!",
|
||||
"Changing password will currently reset any end-to-end encryption keys on all sessions, making encrypted chat history unreadable, unless you first export your room keys and re-import them afterwards. In future this will be improved.": "Pakeitus slaptažodį šiuo metu, visuose seansuose bus anuliuoti visapusio šifravimo raktai, tad šifruotų pokalbių istorija taps neperskaitoma, nebent jūs eksportuosite savo kambarių raktus ir po to importuosite juos atgal. Ateityje ši funkcija bus pataisyta.",
|
||||
"Your password was successfully changed. You will not receive push notifications on other sessions until you log back in to them": "Jūsų slaptažodis buvo sėkmingai pakeistas. Jūs kituose seansuose negausite pranešimų, kol iš naujo prie jų neprisijungsite",
|
||||
"An email has been sent to %(emailAddress)s. Once you've followed the link it contains, click below.": "El. laiškas buvo išsiųstas į %(emailAddress)s. Kai paspausite jame esančią nuorodą, tada spauskite žemiau.",
|
||||
"Your password has been reset.": "Jūsų slaptažodis buvo iš naujo nustatytas.",
|
||||
"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.": "Jūs buvote atjungtas iš visų seansų ir toliau nebegausite pranešimų. Tam, kad vėl įjungtumėte pranešimus, iš naujo prisijunkite kiekviename įrenginyje.",
|
||||
"Show more": "Rodyti daugiau",
|
||||
"<a>Log in</a> to your new account.": "<a>Prisijunkite</a> prie naujos paskyros.",
|
||||
"Registration Successful": "Registracija sėkminga",
|
||||
"Welcome to %(appName)s": "Sveiki prisijungę į %(appName)s",
|
||||
"Liberate your communication": "Išlaisvinkite savo bendravimą",
|
||||
"Explore Public Rooms": "Žvalgyti viešus kambarius",
|
||||
"Create a Group Chat": "Sukurti grupės pokalbį",
|
||||
"New login. Was this you?": "Naujas prisijungimas. Ar tai jūs?",
|
||||
"%(senderName)s placed a voice call.": "%(senderName)s pradėjo balso skambutį.",
|
||||
"%(senderName)s placed a voice call. (not supported by this browser)": "%(senderName)s pradėjo vaizdo skambutį. (nepalaikoma šios naršyklės)",
|
||||
"%(senderName)s placed a video call.": "%(senderName)s pradėjo vaizdo skambutį.",
|
||||
"%(senderName)s placed a video call. (not supported by this browser)": "%(senderName)s pradėjo vaizdo skambutį. (nepalaikoma šios naršyklės)",
|
||||
"Verify your other session using one of the options below.": "Patvirtinkite savo kitą seansą naudodami vieną iš žemiau esančių parinkčių.",
|
||||
"Messages containing @room": "Žinutės, kuriose yra @kambarys",
|
||||
"Waiting for your other session, %(deviceName)s (%(deviceId)s), to verify…": "Laukiama, kol jūsų kitas seansas, %(deviceName)s (%(deviceId)s), patvirtins…",
|
||||
"Waiting for your other session to verify…": "Laukiama, kol jūsų kitas seansas patvirtins…",
|
||||
"To be secure, do this in person or use a trusted way to communicate.": "Norėdami būti saugūs, darykite tai asmeniškai arba naudodamiesi patikimu bendravimo būdu.",
|
||||
"Verify": "Patvirtinti",
|
||||
"Verify the new login accessing your account: %(name)s": "Patvirtinkite naują prisijungimą prie jūsų paskyros: %(name)s",
|
||||
"Confirm deleting these sessions": "Patvirtinkite šių seansų ištrinimą",
|
||||
"Delete sessions|other": "Ištrinti seansus",
|
||||
"Delete sessions|one": "Ištrinti seansą",
|
||||
"Delete %(count)s sessions|other": "Ištrinti %(count)s seansus(-ų)",
|
||||
"Delete %(count)s sessions|one": "Ištrinti %(count)s seansą",
|
||||
"ID": "ID",
|
||||
"Restore from Backup": "Atkurti iš atsarginės kopijos",
|
||||
"Flair": "Ženkliukai",
|
||||
"Access Token:": "Prieigos talonas:",
|
||||
"Preferences": "Nuostatos",
|
||||
"Cryptography": "Kriptografija",
|
||||
"Security & Privacy": "Saugumas ir Privatumas",
|
||||
"Voice & Video": "Garsas ir Vaizdas",
|
||||
"Enable room encryption": "Įjungti kambario šifravimą",
|
||||
"Enable encryption?": "Įjungti šifravimą?",
|
||||
"Encryption": "Šifravimas",
|
||||
"Once enabled, encryption cannot be disabled.": "Įjungus šifravimą jo nebus galima išjungti.",
|
||||
"Who can access this room?": "Kas turi prieigą prie šio kambario?",
|
||||
"Join as <voiceText>voice</voiceText> or <videoText>video</videoText>.": "Prisijungti kaip <voiceText>balsas</voiceText> arba <videoText>vaizdas</videoText>.",
|
||||
"Deactivate user?": "Deaktyvuoti vartotoją?",
|
||||
"Deactivate user": "Deaktyvuoti vartotoją",
|
||||
"Failed to deactivate user": "Nepavyko deaktyvuoti vartotojo",
|
||||
"Sessions": "Seansai",
|
||||
"Try again later, or ask a room admin to check if you have access.": "Pabandykite vėliau arba paprašykite kambario administratoriaus patikrinti, ar turite prieigą.",
|
||||
"%(errcode)s was returned while trying to access the room. If you think you're seeing this message in error, please <issueLink>submit a bug report</issueLink>.": "Bandant patekti į kambarį buvo gauta klaida: %(errcode)s. Jei manote, kad matote šį pranešimą per klaidą, prašome <issueLink>apie ją pranešti</issueLink>.",
|
||||
"Error updating flair": "Klaida atnaujinant ženkliuką",
|
||||
"There was an error updating the flair for this room. The server may not allow it or a temporary error occurred.": "Įvyko klaida atnaujinant ženkliukus šiam kambariui. Serveris gali jų neleisti arba įvyko laikina klaida.",
|
||||
"Showing flair for these communities:": "Ženkliukai rodomi šioms bendruomenėms:",
|
||||
"This room is not showing flair for any communities": "Šis kambarys nerodo ženkliukų jokioms bendruomenėms",
|
||||
"Waiting for you to accept on your other session…": "Laukiama kol jūs priimsite kitame savo seanse…",
|
||||
"Start Verification": "Pradėti patvirtinimą",
|
||||
"In encrypted rooms, your messages are secured and only you and the recipient have the unique keys to unlock them.": "Šifruotuose kambariuose jūsų žinutės yra apsaugotos ir tik jūs ir gavėjas turite unikalius raktus joms atrakinti.",
|
||||
"Verify User": "Patvirtinti vartotoją",
|
||||
"For extra security, verify this user by checking a one-time code on both of your devices.": "Dėl papildomo saugumo patvirtinkite šį vartotoją patikrindami vienkartinį kodą abiejuose jūsų įrenginiuose.",
|
||||
"%(count)s verified sessions|other": "%(count)s patvirtintų seansų",
|
||||
"Hide verified sessions": "Slėpti patvirtintus seansus",
|
||||
"%(count)s sessions|other": "%(count)s seansai(-ų)",
|
||||
"Hide sessions": "Slėpti seansus",
|
||||
"<strong>%(role)s</strong> in %(roomName)s": "<strong>%(role)s</strong> kambaryje %(roomName)s",
|
||||
"Security": "Saugumas",
|
||||
"Verify by scanning": "Patvirtinti nuskaitant",
|
||||
"Verify all users in a room to ensure it's secure.": "Patvirtinkite visus vartotojus kambaryje, kad užtikrintumėte jo saugumą.",
|
||||
"You cancelled verification on your other session.": "Jūs atšaukėte patvirtinimą kitame savo seanse.",
|
||||
"%(displayName)s cancelled verification.": "%(displayName)s atšaukė patvirtinimą.",
|
||||
"You cancelled verification.": "Jūs atšaukėte patvirtinimą.",
|
||||
"Verification cancelled": "Patvirtinimas atšauktas",
|
||||
"Encryption enabled": "Šifravimas įjungtas",
|
||||
"Encryption not enabled": "Šifravimas neįgalintas",
|
||||
"Display your community flair in rooms configured to show it.": "Rodyti savo bendruomenės ženkliukus kambariuose, kuriuose nustatytas jų rodymas.",
|
||||
"You're not currently a member of any communities.": "Jūs šiuo metu nesate jokios bendruomenės narys.",
|
||||
"More options": "Daugiau parinkčių",
|
||||
"Are you sure you want to remove <b>%(serverName)s</b>": "Ar tikrai norite pašalinti <b>%(serverName)s</b>",
|
||||
"Enable end-to-end encryption": "Įjungti visapusį šifravimą",
|
||||
"You can’t disable this later. Bridges & most bots won’t work yet.": "Jūs negalėsite vėliau to išjungti. Tiltai ir dauguma bot'ų dar nėra palaikomi.",
|
||||
"Are you sure you want to deactivate your account? This is irreversible.": "Ar tikrai norite deaktyvuoti savo paskyrą? Tai yra negrįžtama.",
|
||||
"Verify session": "Patvirtinti seansą",
|
||||
"Verify by comparing a short text string.": "Patvirtinkite palygindami trumpą teksto eilutę.",
|
||||
"To verify that this session can be trusted, please contact its owner using some other means (e.g. in person or a phone call) and ask them whether the key they see in their User Settings for this session matches the key below:": "Norėdami patvirtinti, kad šis seansas yra patikimas, susisiekite su jo savininku kokiu nors kitu būdu (pvz.: asmeniškai arba telefono skambučiu) ir paklauskite ar jų Vartotojo Nustatymuose matomas šio seanso raktas sutampa su raktu esančiu žemiau:",
|
||||
"Start verification": "Pradėti patvirtinimą",
|
||||
"Are you sure you want to sign out?": "Ar tikrai norite atsijungti?",
|
||||
"Use this session to verify your new one, granting it access to encrypted messages:": "Panaudoti šį seansą naujo patvirtinimui, suteikant jam prieigą prie šifruotų žinučių:",
|
||||
"If you didn’t sign in to this session, your account may be compromised.": "Jei jūs nesijungėte prie šios sesijos, jūsų paskyra gali būti sukompromituota.",
|
||||
"This wasn't me": "Tai ne aš",
|
||||
"If you run into any bugs or have feedback you'd like to share, please let us know on GitHub.": "Jei jūs susidūrėte su klaidomis arba norėtumėte palikti atsiliepimą, praneškite mums GitHub'e.",
|
||||
"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.": "Tam, kad būtų išvengta pasikartojančių problemų, pirmiausia <existingIssuesLink>peržiūrėkite esamas problemas</existingIssuesLink> (ir pridėkite +1) arba, jei nerandate, <newIssueLink>sukurkite naują svarstomą problemą</newIssueLink>.",
|
||||
"Report bugs & give feedback": "Pranešti apie klaidas ir palikti atsiliepimą",
|
||||
"Report Content to Your Homeserver Administrator": "Pranešti apie turinį serverio administratoriui",
|
||||
"Reporting this message will send its unique 'event ID' to the administrator of your homeserver. If messages in this room are encrypted, your homeserver administrator will not be able to read the message text or view any files or images.": "Pranešant apie šią netinkamą žinutę, serverio administratoriui bus nusiųstas unikalus 'įvykio ID'. Jei žinutės šiame kambaryje yra šifruotos, serverio administratorius negalės perskaityti žinutės teksto ar peržiūrėti failų arba paveikslėlių.",
|
||||
"Send report": "Siųsti pranešimą",
|
||||
"Unknown sessions": "Nežinomi seansai",
|
||||
"Verify other session": "Patvirtinti kitą seansą",
|
||||
"Are you sure you want to reject the invitation?": "Ar tikrai norite atšaukti pakvietimą?",
|
||||
"Share Permalink": "Dalintis nuoroda",
|
||||
"Report Content": "Pranešti",
|
||||
"Nice, strong password!": "Puiku, stiprus slaptažodis!",
|
||||
"Old cryptography data detected": "Aptikti seni kriptografijos duomenys",
|
||||
"Verify this login": "Patvirtinti šį prisijungimą",
|
||||
"Registration has been disabled on this homeserver.": "Registracija šiame serveryje išjungta.",
|
||||
"You can now close this window or <a>log in</a> to your new account.": "Jūs galite uždaryti šį langą arba <a>prisijungti</a> į savo naują paskyrą.",
|
||||
"Confirm your identity by verifying this login from one of your other sessions, granting it access to encrypted messages.": "Patvirtinkite savo tapatybę verifikuodami šį prisijungimą viename iš kitų jūsų seansų, suteikdami jam prieigą prie šifruotų žinučių.",
|
||||
"This requires the latest Riot on your other devices:": "Tam reikia naujausios Riot versijos kituose jūsų įrenginiuose:",
|
||||
"or another cross-signing capable Matrix client": "arba kitą kryžminį pasirašymą palaikantį Matrix klientą",
|
||||
"Use Recovery Passphrase or Key": "Naudoti atgavimo slaptafrazę arba raktą",
|
||||
"Upgrade this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "Atnaujinkite šį seansą, kad jam būtų leista patvirtinti kitus seansus, suteikiant jiems prieigą prie šifruotų žinučių ir juos pažymint kaip patikimus kitiems vartotojams.",
|
||||
"Use Single Sign On to continue": "Norėdami tęsti naudokite Vieno Prisijungimo sistemą",
|
||||
"Confirm adding this email address by using Single Sign On to prove your identity.": "Patvirtinkite šio el. pašto adreso pridėjimą naudodami Vieno Prisijungimo sistemą, patvirtinančią jūsų tapatybę.",
|
||||
"Single Sign On": "Vieno Prisijungimo sistema",
|
||||
"Confirm adding email": "Patvirtinkite el. pašto pridėjimą",
|
||||
"Confirm adding this phone number by using Single Sign On to prove your identity.": "Patvirtinkite šio telefono numerio pridėjimą naudodami Vieno Prisijungimo sistemą, patvirtinančią jūsų tapatybę.",
|
||||
"Confirm adding phone number": "Patvirtinkite telefono numerio pridėjimą",
|
||||
"Click the button below to confirm adding this phone number.": "Paspauskite žemiau esantį mygtuką, kad patvirtintumėte šio numerio pridėjimą.",
|
||||
"The version of Riot": "Riot versija",
|
||||
"Match system theme": "Suderinti su sistemos tema",
|
||||
"Identity Server URL must be HTTPS": "Tapatybės serverio URL privalo būti HTTPS",
|
||||
"Not a valid Identity Server (status code %(code)s)": "Netinkamas tapatybės serveris (statuso kodas %(code)s)",
|
||||
"Could not connect to Identity Server": "Nepavyko prisijungti prie tapatybės serverio",
|
||||
"Disconnect from the identity server <current /> and connect to <new /> instead?": "Atsijungti nuo <current /> tapatybės serverio ir jo vietoje prisijungti prie <new />?",
|
||||
"Terms of service not accepted or the identity server is invalid.": "Nesutikta su paslaugų teikimo sąlygomis arba tapatybės serveris yra klaidingas.",
|
||||
"The identity server you have chosen does not have any terms of service.": "Jūsų pasirinktas tapatybės serveris neturi jokių paslaugų teikimo sąlygų.",
|
||||
"Disconnect identity server": "Atjungti tapatybės serverį",
|
||||
"Disconnect from the identity server <idserver />?": "Atsijungti nuo tapatybės serverio <idserver />?",
|
||||
"You should <b>remove your personal data</b> from identity server <idserver /> before disconnecting. Unfortunately, identity server <idserver /> is currently offline or cannot be reached.": "Prieš atsijungdami jūs turėtumėte <b>pašalinti savo asmeninius duomenis</b> iš tapatybės serverio <idserver />. Deja, tapatybės serveris <idserver /> šiuo metu yra išjungtas arba nepasiekiamas.",
|
||||
"check your browser plugins for anything that might block the identity server (such as Privacy Badger)": "patikrinkite ar tarp jūsų naršyklės įskiepių nėra nieko kas galėtų blokuoti tapatybės serverį (pavyzdžiui \"Privacy Badger\")",
|
||||
"contact the administrators of identity server <idserver />": "susisiekite su tapatybės serverio <idserver /> administratoriais",
|
||||
"You are still <b>sharing your personal data</b> on the identity server <idserver />.": "Jūs vis dar <b>dalijatės savo asmeniniais duomenimis</b> tapatybės serveryje <idserver />.",
|
||||
"Identity Server (%(server)s)": "Tapatybės serveris (%(server)s)",
|
||||
"Enter a new identity server": "Pridėkite naują tapatybės serverį",
|
||||
"Use an Integration Manager <b>(%(serverName)s)</b> to manage bots, widgets, and sticker packs.": "Naudokite integracijų valdiklį <b>(%(serverName)s)</b> botų, valdiklių ir lipdukų valdymui.",
|
||||
"Use an Integration Manager to manage bots, widgets, and sticker packs.": "Naudokite integracijų valdiklį botų, valdiklių ir lipdukų valdymui.",
|
||||
"Manage integrations": "Valdyti integracijas",
|
||||
"Integration Managers receive configuration data, and can modify widgets, send room invites, and set power levels on your behalf.": "Integracijų valdikliai gauna konfigūracijos duomenis ir jūsų vardu gali keisti valdiklius, siųsti kambario pakvietimus ir nustatyti galios lygius.",
|
||||
"Invalid theme schema.": "Klaidinga temos schema.",
|
||||
"Error downloading theme information.": "Klaida parsisiunčiant temos informaciją.",
|
||||
"Theme added!": "Tema pridėta!",
|
||||
"Custom theme URL": "Pasirinktinės temos URL",
|
||||
"Add theme": "Pridėti temą",
|
||||
"Theme": "Tema",
|
||||
"Phone numbers": "Telefono numeriai",
|
||||
"Language and region": "Kalba ir regionas",
|
||||
"Agree to the identity server (%(serverName)s) Terms of Service to allow yourself to be discoverable by email address or phone number.": "Sutikite su tapatybės serverio (%(serverName)s) paslaugų teikimo sąlygomis, kad leistumėte kitiems rasti jus pagal el. pašto adresą ar telefono numerį.",
|
||||
"Discovery": "Radimas",
|
||||
"Discovery options will appear once you have added an email above.": "Radimo parinktys atsiras jums aukščiau pridėjus el. pašto adresą.",
|
||||
"Unable to revoke sharing for phone number": "Neina atšaukti telefono numerio bendrinimo",
|
||||
"Unable to share phone number": "Neina bendrinti telefono numerio",
|
||||
"Unable to verify phone number.": "Neina patvirtinti telefono numerio.",
|
||||
"Discovery options will appear once you have added a phone number above.": "Radimo parinktys atsiras jums aukščiau pridėjus telefono numerį.",
|
||||
"Phone Number": "Telefono Numeris",
|
||||
"Room Topic": "Kambario Tema",
|
||||
"Your theme": "Jūsų tema",
|
||||
"Deleting a widget removes it for all users in this room. Are you sure you want to delete this widget?": "Valdiklio ištrinimas pašalina jį visiems kambaryje esantiems vartotojams. Ar tikrai norite ištrinti šį valdiklį?",
|
||||
"Enable 'Manage Integrations' in Settings to do this.": "Įjunkite 'Valdyti integracijas' nustatymuose, kad tai atliktumėte.",
|
||||
"Your Riot doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "Jūsų Riot neleidžia jums naudoti integracijų valdiklio tam atlikti. Susisiekite su administratoriumi.",
|
||||
"Enter phone number (required on this homeserver)": "Įveskite telefono numerį (privaloma šiame serveryje)",
|
||||
"Doesn't look like a valid phone number": "Tai nepanašu į veikiantį telefono numerį",
|
||||
"Invalid homeserver discovery response": "Klaidingas serverio radimo atsakas",
|
||||
"Invalid identity server discovery response": "Klaidingas tapatybės serverio radimo atsakas",
|
||||
"The phone number entered looks invalid": "Įvestas telefono numeris atrodo klaidingas",
|
||||
"Double check that your server supports the room version chosen and try again.": "Dar kartą įsitikinkite, kad jūsų serveris palaiko pasirinktą kambario versiją ir bandykite iš naujo.",
|
||||
"Whether you're using Riot on a device where touch is the primary input mechanism": "Nesvarbu, ar naudojate „Riot“ įrenginyje, kuriame pagrindinis įvesties mechanizmas yra lietimas",
|
||||
"Session already verified!": "Seansas jau patvirtintas!",
|
||||
"WARNING: Session already verified, but keys do NOT MATCH!": "ĮSPĖJIMAS: Seansas jau patvirtintas, bet raktai NESUTAMPA!",
|
||||
"Enable cross-signing to verify per-user instead of per-session": "Įjunkite kryžminį pasirašymą, kad patvirtintumėte vartotoją, o ne seansą",
|
||||
"Enable Emoji suggestions while typing": "Įjungti jaustukų pasiūlymus rašant",
|
||||
"Show a reminder to enable Secure Message Recovery in encrypted rooms": "Rodyti priminimą įjungti saugų žinučių atgavimą šifruotuose kambariuose",
|
||||
"Enable automatic language detection for syntax highlighting": "Įjungti automatinį kalbos aptikimą sintaksės paryškinimui",
|
||||
"Enable big emoji in chat": "Įjungti didelius jaustukus pokalbiuose",
|
||||
"Enable Community Filter Panel": "Įjungti bendruomenės filtrų skydelį",
|
||||
"Enable message search in encrypted rooms": "Įjungti žinučių paiešką užšifruotuose kambariuose",
|
||||
"Verified!": "Patvirtinta!",
|
||||
"You've successfully verified this user.": "Jūs sėkmingai patvirtinote šį vartotoją.",
|
||||
"Got It": "Supratau",
|
||||
"Verify this session by completing one of the following:": "Patvirtinkite šį seansą atlikdami vieną iš šių veiksmų:",
|
||||
"Scan this unique code": "Nuskaitykite šį unikalų kodą",
|
||||
"Compare unique emoji": "Palyginkite unikalius jaustukus",
|
||||
"Compare a unique set of emoji if you don't have a camera on either device": "Palyginkite unikalų jaustukų rinkinį, jei neturite fotoaparato nei viename įrenginyje",
|
||||
"Confirm the emoji below are displayed on both sessions, in the same order:": "Patvirtinkite, kad žemiau esantys jaustukai yra rodomi abiejuose seansuose, ta pačia tvarka:",
|
||||
"Waiting for %(displayName)s to verify…": "Laukiama kol %(displayName)s patvirtins…",
|
||||
"Cancelling…": "Atšaukiama…",
|
||||
"They match": "Jie sutampa",
|
||||
"They don't match": "Jie nesutampa",
|
||||
"Dog": "Šuo",
|
||||
"Cat": "Katė",
|
||||
"Lion": "Liūtas",
|
||||
"Horse": "Arklys",
|
||||
"Unicorn": "Vienaragis",
|
||||
"Pig": "Kiaulė",
|
||||
"Elephant": "Dramblys",
|
||||
"Rabbit": "Triušis",
|
||||
"Panda": "Panda",
|
||||
"Rooster": "Gaidys",
|
||||
"Penguin": "Pingvinas",
|
||||
"Turtle": "Vėžlys",
|
||||
"Fish": "Žuvis",
|
||||
"Octopus": "Aštunkojis",
|
||||
"Butterfly": "Drugelis",
|
||||
"Flower": "Gėlė",
|
||||
"Tree": "Medis",
|
||||
"Cactus": "Kaktusas",
|
||||
"Mushroom": "Grybas",
|
||||
"Globe": "Gaublys",
|
||||
"Moon": "Mėnulis",
|
||||
"Cloud": "Debesis",
|
||||
"Fire": "Ugnis",
|
||||
"Banana": "Bananas",
|
||||
"Apple": "Obuolys",
|
||||
"Strawberry": "Braškė",
|
||||
"Corn": "Kukurūzas",
|
||||
"Pizza": "Pica",
|
||||
"Cake": "Tortas",
|
||||
"Heart": "Širdis",
|
||||
"Smiley": "Šypsenėlė",
|
||||
"Robot": "Robotas",
|
||||
"Hat": "Skrybėlė",
|
||||
"Glasses": "Akiniai",
|
||||
"Spanner": "Veržliaraktis",
|
||||
"Santa": "Santa",
|
||||
"Thumbs up": "Liuks",
|
||||
"Umbrella": "Skėtis",
|
||||
"Hourglass": "Smėlio laikrodis",
|
||||
"Clock": "Laikrodis",
|
||||
"Gift": "Dovana",
|
||||
"Light bulb": "Lemputė",
|
||||
"Book": "Knyga",
|
||||
"Pencil": "Pieštukas",
|
||||
"Paperclip": "Sąvaržėlė",
|
||||
"Scissors": "Žirklės",
|
||||
"Lock": "Spyna",
|
||||
"Key": "Raktas",
|
||||
"Hammer": "Plaktukas",
|
||||
"Telephone": "Telefonas",
|
||||
"Flag": "Vėliava",
|
||||
"Train": "Traukinys",
|
||||
"Bicycle": "Dviratis",
|
||||
"Aeroplane": "Lėktuvas",
|
||||
"Rocket": "Raketa",
|
||||
"Trophy": "Trofėjus",
|
||||
"Ball": "Kamuolys",
|
||||
"Guitar": "Gitara",
|
||||
"Trumpet": "Trimitas",
|
||||
"Bell": "Varpas",
|
||||
"Anchor": "Inkaras",
|
||||
"Headphones": "Ausinės",
|
||||
"Folder": "Aplankas",
|
||||
"Pin": "Smeigtukas",
|
||||
"Other users may not trust it": "Kiti vartotojai gali nepasitikėti",
|
||||
"Upgrade": "Atnaujinti",
|
||||
"From %(deviceName)s (%(deviceId)s)": "Iš %(deviceName)s (%(deviceId)s)",
|
||||
"Decline (%(counter)s)": "Atsisakyti (%(counter)s)",
|
||||
"Accept <policyLink /> to continue:": "Sutikite su <policyLink />, kad tęstumėte:",
|
||||
"Upload": "Įkelti",
|
||||
"Your homeserver does not support cross-signing.": "Jūsų serveris nepalaiko kryžminio pasirašymo.",
|
||||
"Cross-signing and secret storage are enabled.": "Kryžminis pasirašymas ir slapta saugykla yra įjungta.",
|
||||
"Your account has a cross-signing identity in secret storage, but it is not yet trusted by this session.": "Jūsų paskyra slaptoje saugykloje turi kryžminio pasirašymo tapatybę, bet šis seansas dar ja nepasitiki.",
|
||||
"Cross-signing and secret storage are not yet set up.": "Kryžminis pasirašymas ir slapta saugykla dar nėra nustatyti.",
|
||||
"Reset cross-signing and secret storage": "Atstatyti kryžminį pasirašymą ir slaptą saugyklą",
|
||||
"Bootstrap cross-signing and secret storage": "Prikabinti kryžminį pasirašymą ir slaptą saugyklą",
|
||||
"Cross-signing public keys:": "Kryžminio pasirašymo vieši raktai:",
|
||||
"Cross-signing private keys:": "Kryžminio pasirašymo privatūs raktai:",
|
||||
"Individually verify each session used by a user to mark it as trusted, not trusting cross-signed devices.": "Individualiai patikrinkite kiekvieną vartotojo naudojamą seansą, kad pažymėtumėte jį kaip patikimą, nepasitikint kryžminiu pasirašymu patvirtintais įrenginiais.",
|
||||
"Enable": "Įjungti",
|
||||
"Backup has a <validity>valid</validity> signature from <verify>verified</verify> session <device></device>": "Atsarginė kopija turi <validity>galiojantį</validity> parašą iš <verify>patikrinto</verify> seanso <device></device>",
|
||||
"Backup has a <validity>valid</validity> signature from <verify>unverified</verify> session <device></device>": "Atsarginė kopija turi <validity>galiojantį</validity> parašą iš <verify>nepatikrinto</verify> seanso <device></device>",
|
||||
"Backup has an <validity>invalid</validity> signature from <verify>verified</verify> session <device></device>": "Atsarginė kopija turi <validity>negaliojantį</validity> parašą iš <verify>patikrinto</verify> seanso <device></device>",
|
||||
"Backup has an <validity>invalid</validity> signature from <verify>unverified</verify> session <device></device>": "Atsarginė kopija turi <validity>negaliojantį</validity> parašą iš <verify>nepatikrinto</verify> seanso <device></device>",
|
||||
"Backup key stored in secret storage, but this feature is not enabled on this session. Please enable cross-signing in Labs to modify key backup state.": "Atsarginė rakto kopija saugoma slaptoje saugykloje, bet ši funkcija nėra įjungta šiame seanse. Įjunkite kryžminį pasirašymą Laboratorijose, kad galėtumėte keisti atsarginės rakto kopijos būseną.",
|
||||
"Enable desktop notifications for this session": "Įjungti darbalaukio pranešimus šiam seansui",
|
||||
"Enable audible notifications for this session": "Įjungti garsinius pranešimus šiam seansui",
|
||||
"wait and try again later": "palaukite ir bandykite vėliau dar kartą",
|
||||
"If you don't want to use <server /> to discover and be discoverable by existing contacts you know, enter another identity server below.": "Jei jūs nenorite naudoti <server /> radimui ir tam, kad būtumėte randamas esamų, jums žinomų kontaktų, žemiau įveskite kitą tapatybės serverį.",
|
||||
"Using an identity server is optional. If you choose not to use an identity server, you won't be discoverable by other users and you won't be able to invite others by email or phone.": "Tapatybės serverio naudojimas yra pasirinktinis. Jei jūs pasirinksite jo nenaudoti, jūs nebūsite randamas kitų vartotojų ir neturėsite galimybės pakviesti kitų nurodydamas el. paštą ar telefoną.",
|
||||
"Do not use an identity server": "Nenaudoti tapatybės serverio",
|
||||
"Cross-signing": "Kryžminis pasirašymas",
|
||||
"Error changing power level requirement": "Klaida keičiant galios lygio reikalavimą",
|
||||
"An error occurred changing the room's power level requirements. Ensure you have sufficient permissions and try again.": "Keičiant kambario galios lygio reikalavimus įvyko klaida. Įsitikinkite, kad turite tam leidimą ir bandykite dar kartą.",
|
||||
"Error changing power level": "Klaida keičiant galios lygį",
|
||||
"An error occurred changing the user's power level. Ensure you have sufficient permissions and try again.": "Keičiant vartotojo galios lygį įvyko klaida. Įsitikinkite, kad turite tam leidimą ir bandykite dar kartą.",
|
||||
"Default role": "Numatytoji rolė",
|
||||
"This user has not verified all of their sessions.": "Šis vartotojas nepatvirtino visų savo seansų.",
|
||||
"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",
|
||||
"Use an identity server in Settings to receive invites directly in Riot.": "Nustatymuose naudokite tapatybės serverį, kad gautumėte pakvietimus tiesiai į Riot.",
|
||||
"%(count)s verified sessions|one": "1 patvirtintas seansas",
|
||||
"If you can't scan the code above, verify by comparing unique emoji.": "Jei nuskaityti aukščiau esančio kodo negalite, patvirtinkite palygindami unikalius jaustukus.",
|
||||
"You've successfully verified your device!": "Jūs sėkmingai patvirtinote savo įrenginį!",
|
||||
"You've successfully verified %(deviceName)s (%(deviceId)s)!": "Jūs sėkmingai patvirtinote %(deviceName)s (%(deviceId)s)!",
|
||||
"You've successfully verified %(displayName)s!": "Jūs sėkmingai patvirtinote %(displayName)s!",
|
||||
"Verified": "Patvirtinta",
|
||||
"Got it": "Supratau",
|
||||
"Start verification again from the notification.": "Pradėkite patvirtinimą iš naujo pranešime.",
|
||||
"Use an identity server to invite by email. <default>Use the default (%(defaultIdentityServerName)s)</default> or manage in <settings>Settings</settings>.": "Norėdami pakviesti nurodydami el. paštą, naudokite tapatybės serverį. <default>Naudokite numatytajį (%(defaultIdentityServerName)s)</default> arba tvarkykite <settings>Nustatymuose</settings>.",
|
||||
"Use an identity server to invite by email. Manage in <settings>Settings</settings>.": "Norėdami pakviesti nurodydami el. paštą, naudokite tapatybės serverį. Tvarkykite <settings>Nustatymuose</settings>.",
|
||||
"Destroy cross-signing keys?": "Sunaikinti kryžminio pasirašymo raktus?",
|
||||
"Deleting cross-signing keys is permanent. Anyone you have verified with will see security alerts. You almost certainly don't want to do this, unless you've lost every device you can cross-sign from.": "Kryžminio pasirašymo raktų ištrinimas yra neatšaukiamas. Visi, kurie buvo jais patvirtinti, matys saugumo įspėjimus. Jūs greičiausiai nenorite to daryti, nebent praradote visus įrenginius, iš kurių galite patvirtinti kryžminiu pasirašymu.",
|
||||
"Clear cross-signing keys": "Valyti kryžminio pasirašymo raktus",
|
||||
"To verify that this session can be trusted, please check that the key you see in User Settings on that device matches the key below:": "Tam, kad patvirtintumėte šio seanso patikimumą, patikrinkite ar raktas, kurį matote Vartotojo Nustatymuose tame įrenginyje, sutampa su raktu esančiu žemiau:",
|
||||
"Verify this device to mark it as trusted. Trusting this device gives you and other users extra peace of mind when using end-to-end encrypted messages.": "Patvirtinkite šį įrenginį, kad pažymėtumėte jį kaip patikimą. Pasitikėjimas šiuo įrenginiu suteikia jums ir kitiems vartotojams papildomos ramybės, kai naudojate visapusiškai užšifruotas žinutes.",
|
||||
"Verifying this device will mark it as trusted, and users who have verified with you will trust this device.": "Šio įrenginio patvirtinimas pažymės jį kaip patikimą ir vartotojai, kurie patvirtino su jumis, pasitikės šiuo įrenginiu.",
|
||||
"a new cross-signing key signature": "naujas kryžminio pasirašymo rakto parašas",
|
||||
"a device cross-signing signature": "įrenginio kryžminio pasirašymo parašas",
|
||||
"Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery key.": "Pasiekite savo saugių žinučių istoriją ir kryžminio pasirašymo tapatybę, naudojamą kitų seansų patvirtinimui, įvesdami savo atgavimo raktą.",
|
||||
"Session verified": "Seansas patvirtintas",
|
||||
"Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or <a>enable unsafe scripts</a>.": "Neįmanoma prisijungti prie serverio per HTTP, kai naršyklės juostoje yra HTTPS URL. Naudokite HTTPS arba <a>įjunkite nesaugias rašmenas</a>.",
|
||||
"Your new session is now verified. It has access to your encrypted messages, and other users will see it as trusted.": "Jūsų naujas seansas dabar yra patvirtintas. Jis turi prieigą prie jūsų šifruotų žinučių ir kiti vartotojai matys jį kaip patikimą.",
|
||||
"Your new session is now verified. Other users will see it as trusted.": "Jūsų naujas seansas dabar yra patvirtintas. Kiti vartotojai matys jį kaip patikimą.",
|
||||
"NOT verified": "Nepatvirtinta",
|
||||
"verified": "patvirtinta",
|
||||
"If you don't want to set this up now, you can later in Settings.": "Jei jūs dabar nenorite to nustatyti, galite padaryti tai vėliau Nustatymuose.",
|
||||
"Done": "Atlikta",
|
||||
"No media permissions": "Nėra medijos leidimų",
|
||||
"The session you are trying to verify doesn't support scanning a QR code or emoji verification, which is what Riot supports. Try with a different client.": "Seansas, kurį jūs bandote patvirtinti, nepalaiko QR kodo nuskaitymo arba jaustukų patvirtinimo, kuriuos palaiko Riot. Bandykite su kitu klientu.",
|
||||
"Almost there! Is your other session showing the same shield?": "Beveik atlikta! Ar jūsų kitas seansas rodo tokį patį skydą?",
|
||||
"Almost there! Is %(displayName)s showing the same shield?": "Beveik atlikta! Ar %(displayName)s rodo tokį patį skydą?",
|
||||
"No": "Ne",
|
||||
"Yes": "Taip",
|
||||
"Interactively verify by Emoji": "Patvirtinti interaktyviai, naudojant jaustukus",
|
||||
"The message you are trying to send is too large.": "Žinutė, kurią jūs bandote siųsti, yra per didelė.",
|
||||
"Use the improved room list (in development - refresh to apply changes)": "Naudoti patobulintą kambarių sąrašą (tobulinama - atnaujinkite, kad pritaikytumėte pakeitimus)",
|
||||
"Show a placeholder for removed messages": "Rodyti pašalintų žinučių žymeklį",
|
||||
"Show join/leave messages (invites/kicks/bans unaffected)": "Rodyti prisijungimo/išėjimo žinutes (pakvietimai/išmetimai/draudimai nepaveikti)",
|
||||
"Show avatar changes": "Rodyti pseudoportretų pakeitimus",
|
||||
"Show avatars in user and room mentions": "Rodyti pseudoportretus vartotojo ir kambario paminėjimuose",
|
||||
"Send typing notifications": "Siųsti spausdinimo pranešimus",
|
||||
"Automatically replace plain text Emoji": "Automatiškai pakeisti paprasto teksto jaustukus",
|
||||
"Mirror local video feed": "Atkartoti lokalų video tiekimą",
|
||||
"Allow Peer-to-Peer for 1:1 calls": "Leisti \"Peer-to-Peer\" 1:1 skambučiams",
|
||||
"Prompt before sending invites to potentially invalid matrix IDs": "Klausti prieš siunčiant pakvietimus galimai netinkamiems matrix ID",
|
||||
"Show rooms with unread notifications first": "Pirmiausia rodyti kambarius su neskaitytais pranešimais",
|
||||
"Show shortcuts to recently viewed rooms above the room list": "Rodyti neseniai peržiūrėtų kambarių nuorodas virš kambarių sąrašo",
|
||||
"Allow fallback call assist server turn.matrix.org when your homeserver does not offer one (your IP address would be shared during a call)": "Leisti atsarginį skambučių pagalbos serverį turn.matrix.org, kai jūsų serveris to neteikia (jūsų IP adresas bus bendrintas pokalbio metu)",
|
||||
"Show previews/thumbnails for images": "Rodyti vaizdų peržiūras/miniatiūras",
|
||||
"IRC display name width": "IRC rodomo vardo plotis",
|
||||
"Encrypted messages in one-to-one chats": "Šifruotos žinutės privačiuose pokalbiuose",
|
||||
"When rooms are upgraded": "Kai atnaujinami kambariai",
|
||||
"My Ban List": "Mano Draudimų Sąrašas",
|
||||
"This is your list of users/servers you have blocked - don't leave the room!": "Tai jūsų užblokuotų vartotojų/serverių sąrašas - nepalikite kambario!",
|
||||
"Verify this user by confirming the following emoji appear on their screen.": "Patvirtinkite šį vartotoją, įsitikindami, kad šie jaustukai rodomi jo ekrane.",
|
||||
"⚠ These settings are meant for advanced users.": "⚠ Šie nustatymai yra skirti pažengusiems vartotojams.",
|
||||
"Your personal ban list holds all the users/servers you personally don't want to see messages from. After ignoring your first user/server, a new room will show up in your room list named 'My Ban List' - stay in this room to keep the ban list in effect.": "Jūsų asmeniniame draudimų sąraše yra visi vartotojai/serveriai, iš kurių jūs asmeniškai nenorite matyti pranešimų. Po pirmojo jūsų vartotojo/serverio ignoravimo, jūsų kambarių sąraše pasirodys naujas kambarys pavadinimu 'Mano Draudimų Sąrašas' - likite šiame kambaryje, kad draudimų sąrašas veiktų.",
|
||||
"Room ID or alias of ban list": "Kambario ID arba draudimų sąrašo slapyvardis",
|
||||
"Room list": "Kambarių sąrašas",
|
||||
"Composer": "Rašymas",
|
||||
"Autocomplete delay (ms)": "Automatinio užbaigimo vėlinimas (ms)",
|
||||
"Read Marker lifetime (ms)": "Skaitymo žymeklio veikimo laikas (ms)",
|
||||
"Read Marker off-screen lifetime (ms)": "Skaitymo žymeklio ne ekraninis veikimo laikas (ms)",
|
||||
"You can use <code>/help</code> to list available commands. Did you mean to send this as a message?": "Jūs galite naudoti <code>/help</code>, kad pamatytumėte galimų komandų sąrašą. Ar norėjote siųsti tai kaip žinutę?",
|
||||
"Room avatar": "Kambario pseudoportretas",
|
||||
"Verify by comparing unique emoji.": "Patvirtinkite palygindami unikalius jaustukus.",
|
||||
"Verify by emoji": "Patvirtinti naudojant jaustukus",
|
||||
"Compare emoji": "Palyginkite jaustukus",
|
||||
"Show image": "Rodyti vaizdą",
|
||||
"Your avatar URL": "Jūsų pseudoportreto URL",
|
||||
"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.": "Jei yra papildomo konteksto, kuris padėtų analizuojant šią problemą, tokio kaip ką jūs darėte tuo metu, kambarių ID, vartotojų ID ir t.t., įtraukite tuos dalykus čia.",
|
||||
"Create a new room with the same name, description and avatar": "Sukurkite naują kambarį su tuo pačiu vardu, aprašymu ir pseudoportretu",
|
||||
"Upgrading a room is an advanced action and is usually recommended when a room is unstable due to bugs, missing features or security vulnerabilities.": "Kambario atnaujinimas yra sudėtingas veiksmas ir paprastai rekomenduojamas, kai kambarys nestabilus dėl klaidų, trūkstamų funkcijų ar saugos spragų.",
|
||||
"To help us prevent this in future, please <a>send us logs</a>.": "Norėdami padėti mums išvengti to ateityje, <a>atsiųskite mums žurnalus</a>.",
|
||||
"Failed to upload image": "Nepavyko įkelti vaizdo",
|
||||
"Changes made to your community <bold1>name</bold1> and <bold2>avatar</bold2> might not be seen by other users for up to 30 minutes.": "Pakeitimai atlikti jūsų bendruomenės <bold1>pavadinimui</bold1> ir <bold2>pseudoportretui</bold2> iki 30 minučių gali būti nematomi kitų vartotojų.",
|
||||
"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.": "Norėdami nustatyti filtrą, vilkite bendruomenės pseudoportretą į filtrų skydelį, esantį kairėje ekrano pusėje. Jūs bet kada galite paspausti ant pseudoportreto filtrų skydelyje, kad pamatytumėte tik su ta bendruomene susijusius kambarius ir žmones.",
|
||||
"Upload an avatar:": "Įkelti pseudoportretą:",
|
||||
"Emoji": "Jaustukai",
|
||||
"Emoji Autocomplete": "Jaustukų automatinis užbaigimas",
|
||||
"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.": "Eksportuotas failas leis visiems, kurie gali jį perskaityti, iššifruoti visas užšifruotas žinutes, kurias jūs galite matyti, todėl turėtumėte būti atsargūs, kad jis būtų saugus. Tam padėti, jūs turėtumėte žemiau įvesti slaptafrazę, kuri bus naudojama eksportuotų duomenų užšifravimui. Duomenis bus galima importuoti tik naudojant tą pačią slaptafrazę.",
|
||||
"Jump to start/end of the composer": "Peršokti į rašymo pradžią/pabaigą",
|
||||
"Navigate composer history": "Naršyti rašymo istoriją",
|
||||
"Navigate up/down in the room list": "Naršyti aukštyn/žemyn kambarių saraše",
|
||||
"Select room from the room list": "Pasirinkite kambarį iš kambarių sąrašo",
|
||||
"Collapse room list section": "Sutraukti kambarių sąrašo skyrių",
|
||||
"Expand room list section": "Išplėsti kambarių sąrašo skyrių",
|
||||
"Clear room list filter field": "Išvalyti kambarių sąrašo filtro lauką"
|
||||
}
|
||||
|
|
|
@ -45,7 +45,7 @@
|
|||
"Continue": "Doorgaan",
|
||||
"Could not connect to the integration server": "Verbinding met de integratieserver is mislukt",
|
||||
"Cancel": "Annuleren",
|
||||
"Accept": "Aanvaarden",
|
||||
"Accept": "Aannemen",
|
||||
"Active call (%(roomName)s)": "Actieve oproep (%(roomName)s)",
|
||||
"Add": "Toevoegen",
|
||||
"Add a topic": "Voeg een onderwerp toe",
|
||||
|
@ -140,7 +140,7 @@
|
|||
"Create Room": "Gesprek aanmaken",
|
||||
"Curve25519 identity key": "Curve25519-identiteitssleutel",
|
||||
"/ddg is not a command": "/ddg is geen opdracht",
|
||||
"Deactivate Account": "Account deactiveren",
|
||||
"Deactivate Account": "Account sluiten",
|
||||
"Decline": "Weigeren",
|
||||
"Decrypt %(text)s": "%(text)s ontsleutelen",
|
||||
"Decryption error": "Ontsleutelingsfout",
|
||||
|
@ -283,7 +283,7 @@
|
|||
"The phone number entered looks invalid": "Het ingevoerde telefoonnummer ziet er ongeldig uit",
|
||||
"This email address is already in use": "Dit e-mailadres is al in gebruik",
|
||||
"This email address was not found": "Dit e-mailadres is niet gevonden",
|
||||
"The email address linked to your account must be entered.": "Het e-mailadres dat met uw account verbonden is moet ingevoerd worden.",
|
||||
"The email address linked to your account must be entered.": "Het aan uw account gekoppelde e-mailadres dient ingevoerd worden.",
|
||||
"The remote side failed to pick up": "De andere kant heeft niet opgenomen",
|
||||
"This room has no local addresses": "Dit gesprek heeft geen lokale adressen",
|
||||
"This room is not recognised.": "Dit gesprek wordt niet herkend.",
|
||||
|
@ -378,7 +378,7 @@
|
|||
"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.": "Hiermee kunt u vanuit een andere Matrix-cliënt weggeschreven versleutelingssleutels inlezen, zodat u alle berichten die de andere cliënt kon ontcijferen ook hier kunt lezen.",
|
||||
"The export file will be protected with a passphrase. You should enter the passphrase here, to decrypt the file.": "Het weggeschreven bestand is beveiligd met een wachtwoord. Voer dat wachtwoord hier in om het bestand te ontsleutelen.",
|
||||
"You must join the room to see its files": "Slechts na toetreding tot het gesprek zult u de bestanden kunnen zien",
|
||||
"Reject all %(invitedRooms)s invites": "Alle %(invitedRooms)s-uitnodigingen weigeren",
|
||||
"Reject all %(invitedRooms)s invites": "Alle %(invitedRooms)s de uitnodigingen weigeren",
|
||||
"Failed to invite": "Uitnodigen is mislukt",
|
||||
"Failed to invite the following users to the %(roomName)s room:": "Kon de volgende gebruikers niet uitnodigen voor gesprek %(roomName)s:",
|
||||
"Confirm Removal": "Verwijdering bevestigen",
|
||||
|
@ -584,11 +584,11 @@
|
|||
"%(severalUsers)sleft and rejoined %(count)s times|one": "%(severalUsers)s zijn weggegaan en weer toegetreden",
|
||||
"%(oneUser)sleft and rejoined %(count)s times|other": "%(oneUser)s is %(count)s keer weggegaan en weer toegetreden",
|
||||
"%(oneUser)sleft and rejoined %(count)s times|one": "%(oneUser)s is weggegaan en weer toegetreden",
|
||||
"%(severalUsers)srejected their invitations %(count)s times|other": "%(severalUsers)s hebben hun uitnodigingen %(count)s keer afgewezen",
|
||||
"%(severalUsers)srejected their invitations %(count)s times|one": "%(severalUsers)s hebben hun uitnodigingen afgewezen",
|
||||
"%(severalUsers)srejected their invitations %(count)s times|other": "%(severalUsers)s hebben hun uitnodigingen %(count)s maal afgeslagen",
|
||||
"%(severalUsers)srejected their invitations %(count)s times|one": "%(severalUsers)s hebben hun uitnodigingen afgeslagen",
|
||||
"%(oneUser)srejected their invitation %(count)s times|other": "%(oneUser)s heeft de uitnodiging %(count)s maal geweigerd",
|
||||
"%(oneUser)srejected their invitation %(count)s times|one": "%(oneUser)s heeft de uitnodiging geweigerd",
|
||||
"%(severalUsers)shad their invitations withdrawn %(count)s times|other": "De uitnodigingen van %(severalUsers)s zijn %(count)s keer ingetrokken",
|
||||
"%(severalUsers)shad their invitations withdrawn %(count)s times|other": "%(severalUsers)s hebben hun uitnodigingen %(count)s maal ingetrokken",
|
||||
"%(severalUsers)shad their invitations withdrawn %(count)s times|one": "De uitnodigingen van %(severalUsers)s zijn ingetrokken",
|
||||
"%(oneUser)shad their invitation withdrawn %(count)s times|other": "De uitnodiging van %(oneUser)s is %(count)s keer ingetrokken",
|
||||
"%(oneUser)shad their invitation withdrawn %(count)s times|one": "De uitnodiging van %(oneUser)s is ingetrokken",
|
||||
|
@ -648,7 +648,7 @@
|
|||
"Failed to remove a user from the summary of %(groupId)s": "Verwijderen van gebruiker uit het overzicht van %(groupId)s is mislukt",
|
||||
"The user '%(displayName)s' could not be removed from the summary.": "De gebruiker ‘%(displayName)s’ kon niet uit het overzicht verwijderd worden.",
|
||||
"Failed to update community": "Bijwerken van gemeenschap is mislukt",
|
||||
"Unable to accept invite": "Kan de uitnodiging niet aanvaarden",
|
||||
"Unable to accept invite": "Kan de uitnodiging niet aannemen",
|
||||
"Unable to reject invite": "Kan de uitnodiging niet weigeren",
|
||||
"Leave Community": "Gemeenschap verlaten",
|
||||
"Leave %(groupName)s?": "%(groupName)s verlaten?",
|
||||
|
@ -741,7 +741,7 @@
|
|||
"Send Custom Event": "Aangepaste gebeurtenis versturen",
|
||||
"Advanced notification settings": "Geavanceerde meldingsinstellingen",
|
||||
"delete the alias.": "verwijder de bijnaam.",
|
||||
"To return to your account in future you need to <u>set a password</u>": "Tenzij u <u>een wachtwoord instelt</u> zult u uw account niet meer kunnen benaderen",
|
||||
"To return to your account in future you need to <u>set a password</u>": "Om uw account te kunnen blijven gebruiken dient u <u>een wachtwoord in te stellen</u>",
|
||||
"Forget": "Vergeten",
|
||||
"You cannot delete this image. (%(code)s)": "U kunt deze afbeelding niet verwijderen. (%(code)s)",
|
||||
"Cancel Sending": "Versturen annuleren",
|
||||
|
@ -830,7 +830,7 @@
|
|||
"Riot does not know how to join a room on this network": "Riot weet niet hoe het moet deelnemen aan een gesprek op dit netwerk",
|
||||
"Mentions only": "Alleen vermeldingen",
|
||||
"Wednesday": "Woensdag",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "U kunt nu terugkeren naar uw account nadat u zich heeft afgemeld, en u aanmelden op andere apparaten.",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "Na afmelding kunt u terugkeren tot uw account, en u op andere apparaten aanmelden.",
|
||||
"Enable email notifications": "E-mailmeldingen inschakelen",
|
||||
"Event Type": "Gebeurtenistype",
|
||||
"Download this file": "Dit bestand downloaden",
|
||||
|
@ -863,10 +863,10 @@
|
|||
"Yes, I want to help!": "Ja, ik wil helpen!",
|
||||
"Popout widget": "Widget in nieuw venster openen",
|
||||
"Unable to load event that was replied to, it either does not exist or you do not have permission to view it.": "Kan de gebeurtenis waarop gereageerd was niet laden. Wellicht bestaat die niet, of heeft u geen toestemming die te bekijken.",
|
||||
"This will make your account permanently unusable. You will not be able to log in, and no one will be able to re-register the same user ID. This will cause your account to leave all rooms it is participating in, and it will remove your account details from your identity server. <b>This action is irreversible.</b>": "Dit zal uw account voorgoed onbruikbaar maken. U zult zich niet meer kunnen aanmelden, en niemand anders zal zich met dezelfde gebruikers-ID kunnen registreren. Hierdoor zal uw account alle gesprekken waaraan deze deelneemt verlaten, en worden de accountgegevens verwijderd van de identiteitsserver. <b>Deze actie is onomkeerbaar.</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.": "Het deactiveren van uw account <b>zal er standaard niet voor zorgen dat de berichten die u heeft verstuurd vergeten worden.</b> Als u wilt dat wij de berichten vergeten, vinkt u het vakje hieronder aan.",
|
||||
"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>": "Dit zal uw account voorgoed onbruikbaar maken. U zult zich niet meer kunnen aanmelden, en niemand anders zal zich met dezelfde gebruikers-ID kunnen registreren. Hierdoor zal uw account alle gesprekken waaraan ze deelneemt verlaten, en worden de accountgegevens verwijderd van de identiteitsserver. <b>Deze stap is onomkeerbaar.</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.": "Het sluiten van uw account <b>maakt op zich niet dat wij de door u verstuurde berichten vergeten.</b> Als u wilt dat wij uw berichten vergeten, vink dan het vakje hieronder aan.",
|
||||
"Message visibility in Matrix is similar to email. Our forgetting your messages means that messages you have sent will not be shared with any new or unregistered users, but registered users who already have access to these messages will still have access to their copy.": "De zichtbaarheid van berichten in Matrix is zoals bij e-mails. Het vergeten van uw berichten betekent dat berichten die u heeft verstuurd niet meer gedeeld worden met nieuwe of ongeregistreerde gebruikers, maar geregistreerde gebruikers die al toegang hebben tot deze berichten zullen alsnog toegang hebben tot hun eigen kopie ervan.",
|
||||
"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)": "Vergeet alle berichten die ik heb verstuurd wanneer mijn account gedeactiveerd is (<b>Let op:</b> dit zal er voor zorgen dat toekomstige gebruikers een onvolledig beeld krijgen van gesprekken)",
|
||||
"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)": "Vergeet bij het sluiten van mijn account alle door mij verstuurde berichten (<b>Let op:</b> hierdoor zullen gebruikers een onvolledig beeld krijgen van gesprekken)",
|
||||
"To continue, please enter your password:": "Voer uw wachtwoord in om verder te gaan:",
|
||||
"Clear Storage and Sign Out": "Opslag wissen en afmelden",
|
||||
"Send Logs": "Logboek versturen",
|
||||
|
@ -877,7 +877,7 @@
|
|||
"Can't leave Server Notices room": "Kan servermeldingsgesprek niet verlaten",
|
||||
"This room is used for important messages from the Homeserver, so you cannot leave it.": "Dit gesprek is bedoeld voor belangrijke berichten van de thuisserver, dus u kunt het niet verlaten.",
|
||||
"Terms and Conditions": "Gebruiksvoorwaarden",
|
||||
"To continue using the %(homeserverDomain)s homeserver you must review and agree to our terms and conditions.": "Om de %(homeserverDomain)s-thuisserver te blijven gebruiken, zult u de gebruiksvoorwaarden moeten lezen en aanvaarden.",
|
||||
"To continue using the %(homeserverDomain)s homeserver you must review and agree to our terms and conditions.": "Om de %(homeserverDomain)s-thuisserver te blijven gebruiken, zult u de gebruiksvoorwaarden moeten bestuderen en aanvaarden.",
|
||||
"Review terms and conditions": "Gebruiksvoorwaarden lezen",
|
||||
"Call in Progress": "Lopend gesprek",
|
||||
"A call is currently being placed!": "Er wordt al een oproep gemaakt!",
|
||||
|
@ -989,7 +989,7 @@
|
|||
"Render simple counters in room header": "Eenvoudige tellers bovenaan het gesprek tonen",
|
||||
"Enable Emoji suggestions while typing": "Emoticons voorstellen tijdens het typen",
|
||||
"Show a placeholder for removed messages": "Vulling tonen voor verwijderde berichten",
|
||||
"Show join/leave messages (invites/kicks/bans unaffected)": "Berichten over deelnamen en verlatingen tonen (dit heeft geen effect op uitnodigingen, berispingen of verbanningen)",
|
||||
"Show join/leave messages (invites/kicks/bans unaffected)": "Berichten over toe- en uittredingen tonen (dit heeft geen effect op uitnodigingen, berispingen of verbanningen)",
|
||||
"Show avatar changes": "Veranderingen van avatar tonen",
|
||||
"Show display name changes": "Veranderingen van weergavenamen tonen",
|
||||
"Show read receipts sent by other users": "Door andere gebruikers verstuurde leesbevestigingen tonen",
|
||||
|
@ -1107,7 +1107,7 @@
|
|||
"Language and region": "Taal en regio",
|
||||
"Theme": "Thema",
|
||||
"Account management": "Accountbeheer",
|
||||
"Deactivating your account is a permanent action - be careful!": "Het deactiveren van uw account kan niet ongedaan gemaakt worden - wees voorzichtig!",
|
||||
"Deactivating your account is a permanent action - be careful!": "Pas op! Het sluiten van uw account kan niet ongedaan gemaakt worden!",
|
||||
"General": "Algemeen",
|
||||
"Legal": "Wettelijk",
|
||||
"Credits": "Met dank aan",
|
||||
|
@ -1122,7 +1122,7 @@
|
|||
"Timeline": "Tijdslijn",
|
||||
"Room list": "Gesprekslijst",
|
||||
"Autocomplete delay (ms)": "Vertraging voor automatisch aanvullen (ms)",
|
||||
"Accept all %(invitedRooms)s invites": "Alle %(invitedRooms)s-uitnodigingen aanvaarden",
|
||||
"Accept all %(invitedRooms)s invites": "Alle %(invitedRooms)s de uitnodigingen aannemen",
|
||||
"Key backup": "Sleutelback-up",
|
||||
"Security & Privacy": "Veiligheid & privacy",
|
||||
"Missing media permissions, click the button below to request.": "Mediatoestemmingen ontbreken, klik op de knop hieronder om deze aan te vragen.",
|
||||
|
@ -1210,7 +1210,7 @@
|
|||
"Verify this user to mark them as trusted. Trusting users gives you extra peace of mind when using end-to-end encrypted messages.": "Verifieer deze gebruiker om hem/haar als vertrouwd te markeren. Gebruikers vertrouwen geeft u extra gemoedsrust bij het gebruik van eind-tot-eind-versleutelde berichten.",
|
||||
"Waiting for partner to confirm...": "Wachten op bevestiging van partner…",
|
||||
"Incoming Verification Request": "Inkomend verificatieverzoek",
|
||||
"You've previously used Riot on %(host)s with lazy loading of members enabled. In this version lazy loading is disabled. As the local cache is not compatible between these two settings, Riot needs to resync your account.": "U heeft voorheen Riot op %(host)s gebruikt met lui laden van leden ingeschakeld. In deze versie is lui laden uitgeschakeld. Omdat de lokale cache niet compatibel is tussen deze twee instellingen, moet Riot uw account opnieuw synchroniseren.",
|
||||
"You've previously used Riot on %(host)s with lazy loading of members enabled. In this version lazy loading is disabled. As the local cache is not compatible between these two settings, Riot needs to resync your account.": "U heeft voorheen Riot op %(host)s gebruikt met lui laden van leden ingeschakeld. In deze versie is lui laden uitgeschakeld. De lokale cache is niet compatibel tussen deze twee instellingen, zodat Riot uw account moet hersynchroniseren.",
|
||||
"If the other version of Riot is still open in another tab, please close it as using Riot on the same host with both lazy loading enabled and disabled simultaneously will cause issues.": "Indien de andere versie van Riot nog open staat in een ander tabblad kunt u dat beter sluiten, want het geeft problemen als Riot op dezelfde host gelijktijdig met lui laden ingeschakeld en uitgeschakeld draait.",
|
||||
"Incompatible local cache": "Incompatibele lokale cache",
|
||||
"Clear cache and resync": "Cache wissen en hersynchroniseren",
|
||||
|
@ -1261,18 +1261,18 @@
|
|||
"Set a new status...": "Stel een nieuwe status in…",
|
||||
"Hide": "Verbergen",
|
||||
"This homeserver would like to make sure you are not a robot.": "Deze thuisserver wil graag weten of u geen robot bent.",
|
||||
"You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use this app with an existing Matrix account on a different homeserver.": "U kunt de aangepaste serveropties gebruiken om u aan te melden bij andere Matrix-servers, door een andere thuisserver-URL op te geven. Dit biedt u de mogelijkheid om deze toepassing te gebruiken met een bestaande Matrix-account op een andere thuisserver.",
|
||||
"Please review and accept all of the homeserver's policies": "Gelieve het beleid van de thuisserver te doornemen en aanvaarden",
|
||||
"Please review and accept the policies of this homeserver:": "Gelieve het beleid van deze thuisserver te doornemen en aanvaarden:",
|
||||
"You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use this app with an existing Matrix account on a different homeserver.": "Middels de aangepaste serveropties kunt u zich aanmelden bij andere Matrix-servers, door een andere thuisserver-URL op te geven. Zo kunt u deze toepassing met een bestaande Matrix-account op een andere thuisserver gebruiken.",
|
||||
"Please review and accept all of the homeserver's policies": "Gelieve het beleid van de thuisserver door te nemen en te aanvaarden",
|
||||
"Please review and accept the policies of this homeserver:": "Gelieve het beleid van deze thuisserver door te nemen en te aanvaarden:",
|
||||
"Your Modular server": "Uw Modular-server",
|
||||
"Enter the location of your Modular homeserver. It may use your own domain name or be a subdomain of <a>modular.im</a>.": "Voer de locatie van uw Modular-thuisserver in. Deze kan uw eigen domeinnaam gebruiken, of een subdomein van <a>modular.im</a> zijn.",
|
||||
"Server Name": "Servernaam",
|
||||
"The username field must not be blank.": "Het gebruikersnaamveld mag niet leeg zijn.",
|
||||
"Username": "Gebruikersnaam",
|
||||
"Not sure of your password? <a>Set a new one</a>": "Onzeker over uw wachtwoord? <a>Stel er een nieuw in</a>",
|
||||
"Not sure of your password? <a>Set a new one</a>": "Onzeker over uw wachtwoord? <a>Stel een nieuw in</a>",
|
||||
"Sign in to your Matrix account on %(serverName)s": "Aanmelden met uw Matrix-account op %(serverName)s",
|
||||
"Change": "Wijzigen",
|
||||
"Create your Matrix account on %(serverName)s": "Maak uw Matrix-account aan op %(serverName)s",
|
||||
"Create your Matrix account on %(serverName)s": "Maak uw Matrix-account op %(serverName)s aan",
|
||||
"Email (optional)": "E-mailadres (optioneel)",
|
||||
"Phone (optional)": "Telefoonnummer (optioneel)",
|
||||
"Confirm": "Bevestigen",
|
||||
|
@ -1444,7 +1444,7 @@
|
|||
"Edit message": "Bericht bewerken",
|
||||
"View Servers in Room": "Servers in gesprek bekijken",
|
||||
"Unable to validate homeserver/identity server": "Kan thuis-/identiteitsserver niet valideren",
|
||||
"Sign in to your Matrix account on <underlinedServerName />": "Meld u aan met uw Matrix-account op <underlinedServerName />",
|
||||
"Sign in to your Matrix account on <underlinedServerName />": "Meld u met uw Matrix-account op <underlinedServerName /> aan",
|
||||
"Use an email address to recover your account": "Gebruik een e-mailadres om uw account te herstellen",
|
||||
"Enter email address (required on this homeserver)": "Voer een e-mailadres in (vereist op deze thuisserver)",
|
||||
"Doesn't look like a valid email address": "Dit lijkt geen geldig e-mailadres",
|
||||
|
@ -1457,7 +1457,7 @@
|
|||
"Doesn't look like a valid phone number": "Dit lijkt geen geldig telefoonnummer",
|
||||
"Enter username": "Voer gebruikersnaam in",
|
||||
"Some characters not allowed": "Sommige tekens zijn niet toegestaan",
|
||||
"Create your Matrix account on <underlinedServerName />": "Maak uw Matrix-account aan op <underlinedServerName />",
|
||||
"Create your Matrix account on <underlinedServerName />": "Maak uw Matrix-account op <underlinedServerName /> aan",
|
||||
"Add room": "Gesprek toevoegen",
|
||||
"Your profile": "Uw profiel",
|
||||
"Your Matrix account on <underlinedServerName />": "Uw Matrix-account op <underlinedServerName />",
|
||||
|
@ -1485,7 +1485,7 @@
|
|||
"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.": "U kunt uw wachtwoord opnieuw instellen, maar sommige functies zullen pas beschikbaar komen wanneer de identiteitsserver weer online is. Als u deze waarschuwing blijft zien, controleer dan uw configuratie of neem contact op met een serverbeheerder.",
|
||||
"You can log in, but some features will be unavailable until the identity server is back online. If you keep seeing this warning, check your configuration or contact a server admin.": "U kunt zich aanmelden, maar sommige functies zullen pas beschikbaar zijn wanneer de identiteitsserver weer online is. Als u deze waarschuwing blijft zien, controleer dan uw configuratie of neem contact op met een systeembeheerder.",
|
||||
"<a>Log in</a> to your new account.": "<a>Meld u aan</a> met uw nieuwe account.",
|
||||
"You can now close this window or <a>log in</a> to your new account.": "U kunt dit venster nu sluiten, of <a>u aanmelden</a> met uw nieuwe account.",
|
||||
"You can now close this window or <a>log in</a> to your new account.": "U kunt dit venster nu sluiten, of u met uw nieuwe account <a>aanmelden</a>.",
|
||||
"Registration Successful": "Registratie geslaagd",
|
||||
"Upload all": "Alles versturen",
|
||||
"Your new account (%(newAccountId)s) is registered, but you're already logged into a different account (%(loggedInUserId)s).": "Uw nieuwe account (%(newAccountId)s) is geregistreerd, maar u bent reeds aangemeld met een andere account (%(loggedInUserId)s).",
|
||||
|
@ -1509,7 +1509,7 @@
|
|||
"Resend removal": "Verwijdering opnieuw versturen",
|
||||
"Failed to re-authenticate due to a homeserver problem": "Opnieuw aanmelden is mislukt wegens een probleem met de thuisserver",
|
||||
"Failed to re-authenticate": "Opnieuw aanmelden is mislukt",
|
||||
"Enter your password to sign in and regain access to your account.": "Voer uw wachtwoord in om u aan te melden en opnieuw toegang te verkrijgen tot uw account.",
|
||||
"Enter your password to sign in and regain access to your account.": "Voer uw wachtwoord in om u aan te melden en toegang tot uw account te herkrijgen.",
|
||||
"Forgotten your password?": "Wachtwoord vergeten?",
|
||||
"You're signed out": "U bent afgemeld",
|
||||
"Clear personal data": "Persoonlijke gegevens wissen",
|
||||
|
@ -1521,9 +1521,9 @@
|
|||
"Terms of Service": "Gebruiksvoorwaarden",
|
||||
"Service": "Dienst",
|
||||
"Summary": "Samenvatting",
|
||||
"Sign in and regain access to your account.": "Meld u aan en verkrijg opnieuw toegang tot uw account.",
|
||||
"You cannot sign in to your account. Please contact your homeserver admin for more information.": "U kunt zich niet aanmelden met uw account. Neem contact op met de beheerder van uw thuisserver voor meer informatie.",
|
||||
"This account has been deactivated.": "Deze account is gedeactiveerd.",
|
||||
"Sign in and regain access to your account.": "Meld u aan en herkrijg toegang tot uw account.",
|
||||
"You cannot sign in to your account. Please contact your homeserver admin for more information.": "U kunt zich niet aanmelden met uw account. Neem voor meer informatie contact op met de beheerder van uw thuisserver.",
|
||||
"This account has been deactivated.": "Deze account is gesloten.",
|
||||
"Messages": "Berichten",
|
||||
"Actions": "Acties",
|
||||
"Displays list of commands with usages and descriptions": "Toont een lijst van beschikbare opdrachten, met hun gebruiken en beschrijvingen",
|
||||
|
@ -1539,7 +1539,7 @@
|
|||
"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.": "De verbinding met uw identiteitsserver verbreken zal ertoe leiden dat u niet door andere gebruikers gevonden zal kunnen worden, en dat u anderen niet via e-mail of telefoon zal kunnen uitnodigen.",
|
||||
"Integration Manager": "Integratiebeheerder",
|
||||
"Discovery": "Ontdekking",
|
||||
"Deactivate account": "Account deactiveren",
|
||||
"Deactivate account": "Account sluiten",
|
||||
"Always show the window menu bar": "De venstermenubalk altijd tonen",
|
||||
"Unable to revoke sharing for email address": "Kan delen voor dit e-mailadres niet intrekken",
|
||||
"Unable to share email address": "Kan e-mailadres niet delen",
|
||||
|
@ -1611,11 +1611,11 @@
|
|||
"Strikethrough": "Doorstreept",
|
||||
"Code block": "Codeblok",
|
||||
"An error (%(errcode)s) was returned while trying to validate your invite. You could try to pass this information on to a room admin.": "Er is een fout opgetreden (%(errcode)s) bij het valideren van uw uitnodiging. U kunt deze informatie doorgeven aan een gespreksbeheerder.",
|
||||
"This invite to %(roomName)s was sent to %(email)s which is not associated with your account": "Deze uitnodiging tot %(roomName)s was verstuurd naar %(email)s, wat niet aan uw account gekoppeld is",
|
||||
"Link this email with your account in Settings to receive invites directly in Riot.": "Koppel dit e-mailadres aan uw account in de instellingen om uitnodigingen automatisch te ontvangen in Riot.",
|
||||
"This invite to %(roomName)s was sent to %(email)s which is not associated with your account": "Deze uitnodiging tot %(roomName)s was verstuurd naar %(email)s, dat niet aan uw account gekoppeld is",
|
||||
"Link this email with your account in Settings to receive invites directly in Riot.": "Koppel in de instellingen dit e-mailadres aan uw account om uitnodigingen direct in Riot te ontvangen.",
|
||||
"This invite to %(roomName)s was sent to %(email)s": "Deze uitnodiging tot %(roomName)s was verstuurd naar %(email)s",
|
||||
"Use an identity server in Settings to receive invites directly in Riot.": "Gebruik een identiteitsserver in de instellingen om uitnodigingen automatisch te ontvangen in Riot.",
|
||||
"Share this email in Settings to receive invites directly in Riot.": "Deel dit e-mailadres in de instellingen om uitnodigingen automatisch te ontvangen in Riot.",
|
||||
"Use an identity server in Settings to receive invites directly in Riot.": "Gebruik in de instellingen een identiteitsserver om uitnodigingen direct in Riot te ontvangen.",
|
||||
"Share this email in Settings to receive invites directly in Riot.": "Deel in de instellingen dit e-mailadres om uitnodigingen direct in Riot te ontvangen.",
|
||||
"Use an identity server to invite by email. <default>Use the default (%(defaultIdentityServerName)s)</default> or manage in <settings>Settings</settings>.": "Gebruik een identiteitsserver om uit te nodigen op e-mailadres. <default>Gebruik de standaardserver (%(defaultIdentityServerName)s)</default> of beheer de server in de <settings>Instellingen</settings>.",
|
||||
"Use an identity server to invite by email. Manage in <settings>Settings</settings>.": "Gebruik een identiteitsserver om anderen uit te nodigen via e-mail. Beheer de server in de <settings>Instellingen</settings>.",
|
||||
"Please fill why you're reporting.": "Gelieve aan te geven waarom u deze melding indient.",
|
||||
|
@ -1623,8 +1623,8 @@
|
|||
"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.": "Dit bericht melden zal zijn unieke ‘gebeurtenis-ID’ versturen naar de beheerder van uw thuisserver. Als de berichten in dit gesprek versleuteld zijn, zal de beheerder van uw thuisserver het bericht niet kunnen lezen, noch enige bestanden of afbeeldingen zien.",
|
||||
"Send report": "Rapport versturen",
|
||||
"Report Content": "Inhoud melden",
|
||||
"Set an email for account recovery. Use email or phone to optionally be discoverable by existing contacts.": "Stel een e-mailadres in voor accountherstel. Gebruik optioneel een e-mailadres of telefoonnummer om vindbaar te zijn voor bestaande contacten.",
|
||||
"Set an email for account recovery. Use email to optionally be discoverable by existing contacts.": "Stel een e-mailadres in voor accountherstel. Gebruik optioneel een e-mailadres om vindbaar te zijn voor bestaande contacten.",
|
||||
"Set an email for account recovery. Use email or phone to optionally be discoverable by existing contacts.": "Stel een e-mailadres voor accountherstel in. Gebruik eventueel een e-mailadres of telefoonnummer om vindbaar te zijn voor bestaande contacten.",
|
||||
"Set an email for account recovery. Use email to optionally be discoverable by existing contacts.": "Stel een e-mailadres voor accountherstel in. Gebruik eventueel een e-mailadres om vindbaar te zijn voor bestaande contacten.",
|
||||
"Enter your custom homeserver URL <a>What does this mean?</a>": "Voer uw aangepaste thuisserver-URL in <a>Wat betekent dit?</a>",
|
||||
"Enter your custom identity server URL <a>What does this mean?</a>": "Voer uw aangepaste identiteitsserver-URL in <a>Wat betekent dit?</a>",
|
||||
"Explore": "Ontdekken",
|
||||
|
@ -1864,7 +1864,7 @@
|
|||
"If disabled, messages from encrypted rooms won't appear in search results.": "Dit moet aan staan om te kunnen zoeken in versleutelde gesprekken.",
|
||||
"Indexed rooms:": "Geïndexeerde gesprekken:",
|
||||
"Cross-signing and secret storage are enabled.": "Kruiselings ondertekenen en sleutelopslag zijn ingeschakeld.",
|
||||
"Your account has a cross-signing identity in secret storage, but it is not yet trusted by this session.": "Uw account heeft een identiteit voor kruiselings ondertekenen in de sleutelopslag, maar deze is nog niet vertrouwd door de huidige sessie.",
|
||||
"Your account has a cross-signing identity in secret storage, but it is not yet trusted by this session.": "Uw account heeft een identiteit voor kruiselings ondertekenen in de sleutelopslag, maar die wordt nog niet vertrouwd door de huidige sessie.",
|
||||
"Cross-signing and secret storage are not yet set up.": "Kruiselings ondertekenen en sleutelopslag zijn nog niet ingesteld.",
|
||||
"Bootstrap cross-signing and secret storage": "Kruiselings ondertekenen en sleutelopslag instellen",
|
||||
"Reset cross-signing and secret storage": "Kruiselings ondertekenen en sleutelopslag opnieuw instellen",
|
||||
|
@ -1898,7 +1898,7 @@
|
|||
"Homeserver feature support:": "Functies ondersteund door thuisserver:",
|
||||
"exists": "bestaat",
|
||||
"Sign In or Create Account": "Meld u aan of maak een account aan",
|
||||
"Use your account or create a new one to continue.": "Gebruik uw bestaande account of maak er een nieuwe aan om verder te gaan.",
|
||||
"Use your account or create a new one to continue.": "Gebruik uw bestaande account of maak een nieuwe aan om verder te gaan.",
|
||||
"Create Account": "Account aanmaken",
|
||||
"Displays information about a user": "Geeft informatie weer over een gebruiker",
|
||||
"Order rooms by name": "Gesprekken sorteren op naam",
|
||||
|
@ -1938,7 +1938,7 @@
|
|||
"Send as message": "Versturen als bericht",
|
||||
"Failed to connect to integration manager": "Verbinding met integratiebeheerder is mislukt",
|
||||
"Waiting for %(displayName)s to accept…": "Wachten tot %(displayName)s aanvaardt…",
|
||||
"Accepting…": "Aanvaarden…",
|
||||
"Accepting…": "Toestaan…",
|
||||
"Start Verification": "Verificatie beginnen",
|
||||
"Messages in this room are end-to-end encrypted.": "De berichten in dit gesprek worden eind-tot-eind-versleuteld.",
|
||||
"Your messages are secured and only you and the recipient have the unique keys to unlock them.": "Uw berichten zijn beveiligd, en enkel de ontvanger en u hebben de unieke sleutels om ze te ontsleutelen.",
|
||||
|
@ -1995,7 +1995,7 @@
|
|||
"You cancelled": "U heeft geannuleerd",
|
||||
"%(name)s declined": "%(name)s heeft geweigerd",
|
||||
"%(name)s cancelled": "%(name)s heeft geannuleerd",
|
||||
"Accepting …": "Aanvaarden…",
|
||||
"Accepting …": "Toestaan…",
|
||||
"Declining …": "Weigeren…",
|
||||
"%(name)s wants to verify": "%(name)s wil verifiëren",
|
||||
"You sent a verification request": "U heeft een verificatieverzoek verstuurd",
|
||||
|
@ -2061,14 +2061,14 @@
|
|||
"You added a new session '%(displayName)s', which is requesting encryption keys.": "U heeft een nieuwe sessie ‘%(displayName)s’ toegevoegd, die om versleutelingssleutels vraagt.",
|
||||
"Your unverified session '%(displayName)s' is requesting encryption keys.": "Uw ongeverifieerde sessie ‘%(displayName)s’ vraagt om versleutelingssleutels.",
|
||||
"Loading session info...": "Sessie-info wordt geladen…",
|
||||
"Your account is not secure": "Uw account is niet veilig",
|
||||
"Your account is not secure": "Uw account is onveilig",
|
||||
"Your password": "Uw wachtwoord",
|
||||
"This session, or the other session": "Deze sessie, of de andere sessie",
|
||||
"The internet connection either session is using": "De internetverbinding gebruikt door een van de sessies",
|
||||
"We recommend you change your password and recovery key in Settings immediately": "We raden u aan onmiddellijk uw wachtwoord en herstelsleutel te wijzigen in de instellingen",
|
||||
"New session": "Nieuwe sessie",
|
||||
"Use this session to verify your new one, granting it access to encrypted messages:": "Gebruik deze sessie om uw nieuwe sessie te verifiëren, waardoor deze laatste toegang verkrijgt tot versleutelde berichten:",
|
||||
"If you didn’t sign in to this session, your account may be compromised.": "Als u zich niet heeft aangemeld bij deze sessie, is uw account mogelijk gecompromitteerd.",
|
||||
"If you didn’t sign in to this session, your account may be compromised.": "Als u zich niet heeft aangemeld bij deze sessie, is uw account wellicht geschonden.",
|
||||
"This wasn't me": "Dat was ik niet",
|
||||
"Automatically invite users": "Gebruikers automatisch uitnodigen",
|
||||
"Upgrade private room": "Privégesprek bijwerken",
|
||||
|
@ -2076,7 +2076,7 @@
|
|||
"Upgrading a room is an advanced action and is usually recommended when a room is unstable due to bugs, missing features or security vulnerabilities.": "Het bijwerken van een gesprek is een gevorderde actie en wordt meestal aanbevolen wanneer een gesprek onstabiel is door fouten, ontbrekende functies of problemen met de beveiliging.",
|
||||
"This usually only affects how the room is processed on the server. If you're having problems with your Riot, please <a>report a bug</a>.": "Dit heeft meestal enkel een invloed op de manier waarop het gesprek door de server verwerkt wordt. Als u problemen met uw Riot ondervindt, <a>dien dan een foutmelding in</a>.",
|
||||
"You'll upgrade this room from <oldVersion /> to <newVersion />.": "U werkt dit gesprek bij van <oldVersion /> naar <newVersion />.",
|
||||
"This will allow you to return to your account after signing out, and sign in on other sessions.": "Dit biedt u de mogelijkheid om terug te keren naar uw account nadat u zich heeft afgemeld, en om u aan te melden bij andere sessies.",
|
||||
"This will allow you to return to your account after signing out, and sign in on other sessions.": "Daardoor kunt u na afmelding terugkeren tot uw account, en u bij andere sessies aanmelden.",
|
||||
"You are currently blacklisting unverified sessions; to send messages to these sessions you must verify them.": "U blokkeert momenteel niet-geverifieerde sessies; om berichten te sturen naar deze sessies moet u ze verifiëren.",
|
||||
"We recommend you go through the verification process for each session to confirm they belong to their legitimate owner, but you can resend the message without verifying if you prefer.": "We raden u aan om het verificatieproces voor elke sessie te doorlopen om te bevestigen dat ze aan hun rechtmatige eigenaar toebehoren, maar u kunt het bericht ook opnieuw versturen zonder verificatie indien u dit wenst.",
|
||||
"Room contains unknown sessions": "Gesprek bevat onbekende sessies",
|
||||
|
@ -2122,8 +2122,8 @@
|
|||
"Go Back": "Terugkeren",
|
||||
"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.": "Door uw wachtwoord te wijzigen stelt u alle eind-tot-eind-versleutelingssleutels op al uw sessies opnieuw in, waardoor uw versleutelde gespreksgeschiedenis onleesbaar wordt. Stel sleutelback-up in of schrijf uw gesprekssleutels van een andere sessie weg vooraleer u een nieuw wachtwoord instelt.",
|
||||
"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.": "U bent afgemeld bij al uw sessies en zult geen pushberichten meer ontvangen. Meld u op elk apparaat opnieuw aan om meldingen opnieuw in te schakelen.",
|
||||
"Regain access to your account and recover encryption keys stored in this session. Without them, you won’t be able to read all of your secure messages in any session.": "Verkrijg opnieuw de toegang tot uw account en herstel de versleutelingssleutels die in deze sessie opgeslagen zijn. Hierzonder zult u niet al uw beveiligde berichten in al uw sessies kunnen lezen.",
|
||||
"Warning: Your personal data (including encryption keys) is still stored in this session. Clear it if you're finished using this session, or want to sign in to another account.": "Let op: uw persoonlijke gegevens (versleutelingssleutels inbegrepen) worden nog steeds opgeslagen in deze sessie. Wis ze wanneer u klaar bent met deze sessie, of wanneer u zich wilt aanmelden met een andere account.",
|
||||
"Regain access to your account and recover encryption keys stored in this session. Without them, you won’t be able to read all of your secure messages in any session.": "Herwin toegang tot uw account en herstel de tijdens deze sessie opgeslagen versleutelingssleutels, zonder welke sommige van uw beveiligde berichten in al uw sessies onleesbaar zijn.",
|
||||
"Warning: Your personal data (including encryption keys) is still stored in this session. Clear it if you're finished using this session, or want to sign in to another account.": "Let op: uw persoonlijke gegevens (waaronder versleutelingssleutels) zijn nog steeds opgeslagen in deze sessie. Wis ze wanneer u klaar bent met deze sessie, of wanneer u zich wilt aanmelden met een andere account.",
|
||||
"Command Autocomplete": "Opdrachten automatisch aanvullen",
|
||||
"DuckDuckGo Results": "DuckDuckGo-resultaten",
|
||||
"Sender session information": "Sessie-informatie van afzender",
|
||||
|
@ -2177,7 +2177,7 @@
|
|||
"Confirm adding this phone number by using Single Sign On to prove your identity.": "Bevestig uw identiteit met Eenmalige Aanmelding om dit telefoonnummer toe te voegen.",
|
||||
"Confirm adding phone number": "Bevestig toevoegen van het telefoonnummer",
|
||||
"Click the button below to confirm adding this phone number.": "Klik op de knop hieronder om het toevoegen van dit telefoonnummer te bevestigen.",
|
||||
"Review Sessions": "Sessieverificatie",
|
||||
"Review Sessions": "Sessies nazien",
|
||||
"If you cancel now, you won't complete your operation.": "Als u de operatie afbreekt kunt u haar niet voltooien.",
|
||||
"Review where you’re logged in": "Kijk na waar u aangemeld bent",
|
||||
"New login. Was this you?": "Nieuwe aanmelding - was u dat?",
|
||||
|
@ -2200,5 +2200,14 @@
|
|||
"Verify your other session using one of the options below.": "Verifieer uw andere sessie op een van onderstaande wijzen.",
|
||||
"Manually Verify by Text": "Handmatig middels een tekst",
|
||||
"Interactively verify by Emoji": "Interactief middels emojis",
|
||||
"Support adding custom themes": "Sta maatwerkthema's toe"
|
||||
"Support adding custom themes": "Sta maatwerkthema's toe",
|
||||
"Opens chat with the given user": "Start een tweegesprek met die gebruiker",
|
||||
"Sends a message to the given user": "Zendt die gebruiker een bericht",
|
||||
"Font scaling": "Lettergrootte",
|
||||
"Use the improved room list (in development - refresh to apply changes)": "Gebruik de verbeterde gesprekslijst (in ontwikkeling - ververs om veranderingen te zien)",
|
||||
"Verify all your sessions to ensure your account & messages are safe": "Controleer al uw sessies om zeker te zijn dat uw account & berichten veilig zijn",
|
||||
"Verify the new login accessing your account: %(name)s": "Verifieer de nieuwe aanmelding op uw account: %(name)s",
|
||||
"Confirm your account deactivation by using Single Sign On to prove your identity.": "Bevestig uw intentie deze account te sluiten door met Single Sign On uw identiteit te bewijzen.",
|
||||
"Are you sure you want to deactivate your account? This is irreversible.": "Weet u zeker dat u uw account wil sluiten? Dit is onomkeerbaar.",
|
||||
"Confirm account deactivation": "Bevestig accountsluiting"
|
||||
}
|
||||
|
|
|
@ -97,13 +97,13 @@
|
|||
"Who can read history?": "Кто может читать историю?",
|
||||
"You do not have permission to post to this room": "Вы не можете писать в эту комнату",
|
||||
"You have no visible notifications": "Нет видимых уведомлений",
|
||||
"%(targetName)s accepted an invitation.": "%(targetName)s принял приглашение.",
|
||||
"%(targetName)s accepted the invitation for %(displayName)s.": "%(targetName)s принял приглашение от %(displayName)s.",
|
||||
"%(targetName)s accepted an invitation.": "%(targetName)s принимает приглашение.",
|
||||
"%(targetName)s accepted the invitation for %(displayName)s.": "%(targetName)s принимает приглашение от %(displayName)s.",
|
||||
"Active call": "Активный вызов",
|
||||
"%(senderName)s answered the call.": "%(senderName)s ответил(а) на звонок.",
|
||||
"%(senderName)s banned %(targetName)s.": "%(senderName)s заблокировал(а) %(targetName)s.",
|
||||
"%(senderName)s banned %(targetName)s.": "%(senderName)s забанил(а) %(targetName)s.",
|
||||
"Call Timeout": "Нет ответа",
|
||||
"%(senderName)s changed their profile picture.": "%(senderName)s изменил(а) свой аватар.",
|
||||
"%(senderName)s changed their profile picture.": "%(senderName)s изменяет свой аватар.",
|
||||
"%(senderName)s changed the power level of %(powerLevelDiffText)s.": "%(senderName)s изменил(а) уровни прав %(powerLevelDiffText)s.",
|
||||
"%(senderDisplayName)s changed the room name to %(roomName)s.": "%(senderDisplayName)s изменил(а) название комнаты на %(roomName)s.",
|
||||
"%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s изменил(а) тему комнаты на \"%(topic)s\".",
|
||||
|
@ -223,8 +223,8 @@
|
|||
"Reason": "Причина",
|
||||
"%(targetName)s rejected the invitation.": "%(targetName)s отклонил(а) приглашение.",
|
||||
"Reject invitation": "Отклонить приглашение",
|
||||
"%(senderName)s removed their display name (%(oldDisplayName)s).": "%(senderName)s удалил(а) свое отображаемое имя (%(oldDisplayName)s).",
|
||||
"%(senderName)s removed their profile picture.": "%(senderName)s удалил(а) свой аватар.",
|
||||
"%(senderName)s removed their display name (%(oldDisplayName)s).": "%(senderName)s удаляет своё отображаемое имя (%(oldDisplayName)s).",
|
||||
"%(senderName)s removed their profile picture.": "%(senderName)s удаляет свой аватар.",
|
||||
"%(senderName)s requested a VoIP conference.": "%(senderName)s хочет начать конференц-звонок.",
|
||||
"Riot does not have permission to send you notifications - please check your browser settings": "У Riot нет разрешения на отправку уведомлений — проверьте настройки браузера",
|
||||
"Riot was not given permission to send notifications - please try again": "Riot не получил разрешение на отправку уведомлений, пожалуйста, попробуйте снова",
|
||||
|
@ -302,8 +302,8 @@
|
|||
"Server may be unavailable, overloaded, or you hit a bug.": "Возможно, сервер недоступен, перегружен или случилась ошибка.",
|
||||
"Server unavailable, overloaded, or something else went wrong.": "Возможно, сервер недоступен, перегружен или что-то еще пошло не так.",
|
||||
"Session ID": "ID сессии",
|
||||
"%(senderName)s set a profile picture.": "%(senderName)s установил(а) себе аватар.",
|
||||
"%(senderName)s set their display name to %(displayName)s.": "%(senderName)s изменил(а) отображаемое имя на %(displayName)s.",
|
||||
"%(senderName)s set a profile picture.": "%(senderName)s устанавливает себе аватар.",
|
||||
"%(senderName)s set their display name to %(displayName)s.": "%(senderName)s меняет отображаемое имя на %(displayName)s.",
|
||||
"Signed Out": "Выполнен выход",
|
||||
"This room is not accessible by remote Matrix servers": "Это комната недоступна из других серверов Matrix",
|
||||
"Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "Попытка загрузить выбранный интервал истории чата этой комнаты не удалась, так как у вас нет разрешений на просмотр.",
|
||||
|
@ -696,7 +696,7 @@
|
|||
"This room is not public. You will not be able to rejoin without an invite.": "Эта комната не является публичной. Вы не сможете войти без приглашения.",
|
||||
"Community IDs cannot be empty.": "ID сообществ не могут быть пустыми.",
|
||||
"<a>In reply to</a> <pill>": "<a>В ответ на</a> <pill>",
|
||||
"%(oldDisplayName)s changed their display name to %(displayName)s.": "%(oldDisplayName)s изменил(а) отображаемое имя на %(displayName)s.",
|
||||
"%(oldDisplayName)s changed their display name to %(displayName)s.": "%(oldDisplayName)s меняет отображаемое имя на %(displayName)s.",
|
||||
"Failed to set direct chat tag": "Не удалось установить тег прямого чата",
|
||||
"Failed to remove tag %(tagName)s from room": "Не удалось удалить тег %(tagName)s из комнаты",
|
||||
"Failed to add tag %(tagName)s to room": "Не удалось добавить тег %(tagName)s в комнату",
|
||||
|
@ -977,7 +977,7 @@
|
|||
"Render simple counters in room header": "Отображать простые счетчики в заголовке комнаты",
|
||||
"Enable Emoji suggestions while typing": "Включить предложения смайликов при наборе",
|
||||
"Show a placeholder for removed messages": "Показывать плашки вместо удалённых сообщений",
|
||||
"Show join/leave messages (invites/kicks/bans unaffected)": "Показывать сообщения о вступлении | выходе (не влияет на приглашения, исключения и запреты)",
|
||||
"Show join/leave messages (invites/kicks/bans unaffected)": "Показывать сообщения о входе/выходе (не влияет на приглашения, кики и баны)",
|
||||
"Show avatar changes": "Показывать изменения аватара",
|
||||
"Show display name changes": "Показывать изменения отображаемого имени",
|
||||
"Show a reminder to enable Secure Message Recovery in encrypted rooms": "Напоминать включить Безопасное Восстановление Сообщений в зашифрованных комнатах",
|
||||
|
@ -1639,7 +1639,7 @@
|
|||
"This alias is already in use": "Этот псевдоним уже используется",
|
||||
"Close dialog": "Закрыть диалог",
|
||||
"Please enter a name for the room": "Пожалуйста, введите название комнаты",
|
||||
"This room is private, and can only be joined by invitation.": "Эта комната приватная и может быть присоединена только по приглашению.",
|
||||
"This room is private, and can only be joined by invitation.": "Эта комната приватная, в неё можно войти только по приглашению.",
|
||||
"Hide advanced": "Скрыть расширения",
|
||||
"Show advanced": "Показать расширения",
|
||||
"Please fill why you're reporting.": "Пожалуйста, заполните, почему вы сообщаете.",
|
||||
|
|
|
@ -540,7 +540,7 @@
|
|||
"Show timestamps in 12 hour format (e.g. 2:30pm)": "Pri zobrazovaní časových značiek používať 12 hodinový formát (napr. 2:30pm)",
|
||||
"Use compact timeline layout": "Použiť kompaktné rozloženie časovej osy",
|
||||
"Enable automatic language detection for syntax highlighting": "Povoliť automatickú detegciu jazyka pre zvýrazňovanie syntaxe",
|
||||
"Automatically replace plain text Emoji": "Automaticky nahrádzať textové Emoji",
|
||||
"Automatically replace plain text Emoji": "Automaticky nahrádzať textové emotikony modernými emoji",
|
||||
"Mirror local video feed": "Zrkadliť lokálne video",
|
||||
"Light theme": "Svetlý vzhľad",
|
||||
"Dark theme": "Tmavý vzhľad",
|
||||
|
@ -627,7 +627,7 @@
|
|||
"Passphrase must not be empty": "Heslo nesmie byť prázdne",
|
||||
"Export room keys": "Exportovať kľúče miestností",
|
||||
"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.": "Tento proces vás prevedie exportom kľúčov určených na dešifrovanie správ, ktoré ste dostali v šifrovaných miestnostiach do lokálneho súboru. Tieto kľúče zo súboru môžete neskôr importovať do iného Matrix klienta, aby ste v ňom mohli dešifrovať vaše šifrované správy.",
|
||||
"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.": "Tento súbor umožní komukoľvek, k to má ku nemu prístup dešifrovať všetky vami viditeľné šifrované správy, mali by ste teda byť opatrní a tento súbor si bezpečne uchovať. Aby bolo toto pre vás jednoduchšie, nižšie zadajte heslo, ktorým budú údaje v súbore zašifrované. Importovať údaje zo súboru bude možné len po zadaní tohoto istého hesla.",
|
||||
"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.": "Tento súbor umožní komukoľvek, kto má ku nemu prístup, dešifrovať všetky vami viditeľné šifrované správy, mali by ste teda byť opatrní a tento súbor si bezpečne uchovať. Aby bolo toto pre vás jednoduchšie, nižšie zadajte heslo, ktorým budú údaje v súbore zašifrované. Importovať údaje zo súboru bude možné len po zadaní tohoto istého hesla.",
|
||||
"Enter passphrase": "Zadajte (dlhé) heslo",
|
||||
"Confirm passphrase": "Potvrďte heslo",
|
||||
"Export": "Exportovať",
|
||||
|
@ -814,7 +814,7 @@
|
|||
"Invite to this room": "Pozvať do tejto miestnosti",
|
||||
"You cannot delete this message. (%(code)s)": "Nemôžete vymazať túto správu. (%(code)s)",
|
||||
"Thursday": "Štvrtok",
|
||||
"I understand the risks and wish to continue": "Rozumiem rizikám a želám si pokračovať",
|
||||
"I understand the risks and wish to continue": "Rozumiem riziku a chcem pokračovať",
|
||||
"Logs sent": "Záznamy boli odoslané",
|
||||
"Back": "Naspäť",
|
||||
"Reply": "Odpovedať",
|
||||
|
@ -1018,7 +1018,7 @@
|
|||
"Failed to decrypt %(failedCount)s sessions!": "Nepodarilo sa dešifrovať %(failedCount)s relácií!",
|
||||
"Restored %(sessionCount)s session keys": "Obnovených %(sessionCount)s kľúčov relácií",
|
||||
"Enter Recovery Passphrase": "Zadajte heslo bezpečného obnovenia",
|
||||
"Access your secure message history and set up secure messaging by entering your recovery passphrase.": "Zabezpečte svoju komunikáciu a prístup k šifrovanej histórii konverzácií zadaním hesla obnovenia.",
|
||||
"Access your secure message history and set up secure messaging by entering your recovery passphrase.": "Získajte prístup k šifrovanej histórií správ a nastavte šiforvanú komunikáciu zadaním vášho (dlhého) hesla obnovenia.",
|
||||
"Waiting for %(userId)s to confirm...": "Čakanie na potvrdenie od používateľa %(userId)s…",
|
||||
"Prompt before sending invites to potentially invalid matrix IDs": "Upozorniť pred odoslaním pozvaní na potenciálne neexistujúce Matrix ID",
|
||||
"Unable to find profiles for the Matrix IDs listed below - would you like to invite them anyway?": "Nie je možné nájsť používateľský profil pre Matrix ID zobrazené nižšie. Chcete ich napriek tomu pozvať?",
|
||||
|
@ -1029,7 +1029,7 @@
|
|||
"Enter Recovery Key": "Zadajte kľúč obnovenia",
|
||||
"This looks like a valid recovery key!": "Zdá sa, že toto je platný kľúč obnovenia!",
|
||||
"Not a valid recovery key": "Neplatný kľúč obnovenia",
|
||||
"Access your secure message history and set up secure messaging by entering your recovery key.": "Zabezpečte svoju komunikáciu a prístup k šifrovanej histórii konverzácií zadaním kľúča obnovenia.",
|
||||
"Access your secure message history and set up secure messaging by entering your recovery key.": "Získajte prístup k šifrovanej histórií správ a nastavte šiforvanú komunikáciu zadaním vášho kľúča obnovenia.",
|
||||
"Set a new status...": "Nastaviť nový stav…",
|
||||
"Clear status": "Zrušiť stav",
|
||||
"You are an administrator of this community. You will not be able to rejoin without an invite from another administrator.": "Ste správcom tejto komunity. Nebudete môcť znovu vstúpiť bez pozvania od iného správcu.",
|
||||
|
@ -1041,8 +1041,8 @@
|
|||
"Great! This passphrase looks strong enough.": "Výborne! Toto je dostatočne silné heslo.",
|
||||
"Enter a passphrase...": "Zadajte heslo…",
|
||||
"That matches!": "Zhoda!",
|
||||
"That doesn't match.": "Nezhodujú sa.",
|
||||
"Go back to set it again.": "Vráťte sa späť a nastavte znovu.",
|
||||
"That doesn't match.": "To sa nezhoduje.",
|
||||
"Go back to set it again.": "Vráťte sa späť a nastavte to znovu.",
|
||||
"Repeat your passphrase...": "Zopakujte heslo…",
|
||||
"As a safety net, you can use it to restore your encrypted message history if you forget your Recovery Passphrase.": "Ak zabudnete svoje heslo obnovenia, tento kľúč môžete použiť ako ďalší bezpečnostný prvok na obnovenie histórii šifrovaných konverzácií.",
|
||||
"As a safety net, you can use it to restore your encrypted message history.": "Tento kľúč môžete použiť ako ďalší bezpečnostný prvok na obnovenie histórii šifrovaných konverzácií.",
|
||||
|
@ -1059,8 +1059,8 @@
|
|||
"Retry": "Skúsiť znovu",
|
||||
"Without setting up Secure Message Recovery, you'll lose your secure message history when you log out.": "Ak si nenastavíte Bezpečné obnovenie správ, po odhlásení stratíte prístup k histórii šifrovaných konverzácií.",
|
||||
"If you don't want to set this up now, you can later in Settings.": "Ak nechcete pokračovať v nastavení teraz, môžete sa k tomu vrátiť neskôr v časti nastavenia.",
|
||||
"New Recovery Method": "Nový spôsob obnovi",
|
||||
"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.": "Ak ste si nenastavili nový spôsob obnovenia útočníci sa môžu pokúsiť dostať k vášmu účtu. Ihneď si v nastaveniach zmeňte heslo a znovu si nastavte možnosti obnovenia.",
|
||||
"New Recovery Method": "Nový spôsob obnovy",
|
||||
"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.": "Ak ste si nenastavili nový spôsob obnovenia, je možné, že útočník sa pokúša dostať k vášmu účtu. Radšej si ihneď zmeňte vaše heslo a nastavte si nový spôsob obnovenia v Nastaveniach.",
|
||||
"Set up Secure Messages": "Nastaviť bezpečné obnovenie správ",
|
||||
"Go to Settings": "Otvoriť nastavenia",
|
||||
"Whether or not you're logged in (we don't record your username)": "Či ste alebo nie ste prihlásení (nezaznamenávame vaše meno používateľa)",
|
||||
|
@ -1089,14 +1089,14 @@
|
|||
"The user must be unbanned before they can be invited.": "Tomuto používateľovi musíte pred odoslaním pozvania povoliť vstup.",
|
||||
"Group & filter rooms by custom tags (refresh to apply changes)": "Zoskupiť a filtrovať miestnosti podľa vlastných značiek (zmeny sa prejavia po obnovení stránky)",
|
||||
"Render simple counters in room header": "Zobraziť jednoduchú štatistiku v záhlaví miestnosti",
|
||||
"Enable Emoji suggestions while typing": "Umožniť automatické návrhy Emoji počas písania",
|
||||
"Enable Emoji suggestions while typing": "Umožniť automatické návrhy emoji počas písania",
|
||||
"Show a placeholder for removed messages": "Zobrazovať náhrady za odstránené správy",
|
||||
"Show join/leave messages (invites/kicks/bans unaffected)": "Zobrazovať správy o vstupe a opustení miestnosti (Nemá vplyv na pozvania/vykázania/zákazy vstupu)",
|
||||
"Show avatar changes": "Zobrazovať zmeny obrázka v profile",
|
||||
"Show display name changes": "Zobrazovať zmeny zobrazovaného mena",
|
||||
"Show read receipts sent by other users": "Zobrazovať potvrdenia o prečítaní od ostatných používateľov",
|
||||
"Show avatars in user and room mentions": "Pri zmienkach používateľov a miestností zobrazovať aj obrázok",
|
||||
"Enable big emoji in chat": "Povoliť veľké Emoji v konverzáciách",
|
||||
"Enable big emoji in chat": "Povoliť veľké emoji v konverzáciách",
|
||||
"Send typing notifications": "Posielať oznámenia, keď píšete",
|
||||
"Enable Community Filter Panel": "Povoliť panel filter komunít",
|
||||
"Allow Peer-to-Peer for 1:1 calls": "Povoliť P2P počas priamych audio/video hovorov",
|
||||
|
@ -1107,7 +1107,7 @@
|
|||
"You've successfully verified this user.": "Úspešne ste overili tohoto používateľa.",
|
||||
"Secure messages with this user are end-to-end encrypted and not able to be read by third parties.": "Zabezpečené správi s týmto používateľom sú E2E šifrované, čo znamená, že čítanie tretími stranami nie je možné.",
|
||||
"Got It": "Rozumiem",
|
||||
"Verify this user by confirming the following emoji appear on their screen.": "Overte tohoto používateľa tým, že zistíte, či sa na jeho obrazovke objaví nasledujúci emoji.",
|
||||
"Verify this user by confirming the following emoji appear on their screen.": "Overte tohto používateľa tak, že zistíte, či sa na jeho obrazovke objaví nasledujúci emoji.",
|
||||
"Verify this user by confirming the following number appears on their screen.": "Overte tohoto používateľa tým, že zistíte, či sa na jeho obrazovke objaví nasledujúce číslo.",
|
||||
"Unable to find a supported verification method.": "Nie je možné nájsť podporovanú metódu overenia.",
|
||||
"Dog": "Hlava psa",
|
||||
|
@ -1321,7 +1321,7 @@
|
|||
"Premium hosting for organisations <a>Learn more</a>": "Platený hosting pre organizácie <a>Zistiť viac</a>",
|
||||
"Other": "Ďalšie",
|
||||
"Find other public servers or use a custom server": "Nájdite ďalšie verejné domovské servery alebo nastavte pripojenie k serveru ručne",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Pre najlepší zážitok si prosím nainštalujte <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink> alebo <safariLink>Safari</safariLink>.",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Prosím, nainštalujte si <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink> alebo <safariLink>Safari</safariLink> pre najlepší zážitok.",
|
||||
"Couldn't load page": "Nie je možné načítať stránku",
|
||||
"Want more than a community? <a>Get your own server</a>": "Chceli by ste viac než komunitu? <a>Získajte vlastný server</a>",
|
||||
"This homeserver does not support communities": "Tento domovský server nepodporuje komunity",
|
||||
|
@ -1336,10 +1336,10 @@
|
|||
"Create account": "Vytvoriť účet",
|
||||
"Registration has been disabled on this homeserver.": "Na tomto domovskom servery nie je povolená registrácia.",
|
||||
"Unable to query for supported registration methods.": "Nie je možné požiadať o podporované metódy registrácie.",
|
||||
"Create your account": "Vytvoriť váš účet",
|
||||
"Create your account": "Vytvorte si váš účet",
|
||||
"Keep going...": "Pokračujte…",
|
||||
"We'll store an encrypted copy of your keys on our server. Protect your backup with a passphrase to keep it secure.": "Zašifrovanú kópiu vašich šifrovacích kľúčov uchováme na domovskom servery. Zabezpečte si zálohovanie zadaním hesla obnovenia, čo posilní ochranu vašich údajov.",
|
||||
"For maximum security, this should be different from your account password.": "Aby ste zachovali maximálnu mieru zabezpečenia, heslo obnovenia by malo byť odlišné ako heslo, ktorým sa prihlasujete do Matrix účtu.",
|
||||
"For maximum security, this should be different from your account password.": "Aby ste zachovali maximálnu mieru zabezpečenia, (dlhé) heslo by malo byť odlišné od hesla, ktorým sa prihlasujete do vášho účtu.",
|
||||
"Set up with a Recovery Key": "Nastaviť použitím kľúča obnovenia",
|
||||
"Please enter your passphrase a second time to confirm.": "Prosím zadajte heslo obnovenia ešte raz pre potvrdenie.",
|
||||
"Your recovery key is a safety net - you can use it to restore access to your encrypted messages if you forget your passphrase.": "Kľúč obnovenia je bezpečnostný mechanizmus - môžete ho použiť na prístup k šifrovacím kľúčom v prípade, ak zabudnete vaše heslo obnovenia.",
|
||||
|
@ -1348,10 +1348,10 @@
|
|||
"Confirm your passphrase": "Potvrdiť heslo obnovenia",
|
||||
"Recovery key": "Kľúč obnovenia",
|
||||
"Starting backup...": "Začína sa zálohovanie…",
|
||||
"Success!": "Hotovo!",
|
||||
"A new recovery passphrase and key for Secure Messages have been detected.": "Boli zistené nový kľúč a nové heslo obnovenia zálohovania šifrovacích kľúčov.",
|
||||
"Success!": "Úspech!",
|
||||
"A new recovery passphrase and key for Secure Messages have been detected.": "Nové (dlhé) heslo na obnovu zálohy a kľúč pre bezpečné správy boli spozorované.",
|
||||
"Recovery Method Removed": "Odstránený spôsob obnovenia",
|
||||
"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.": "Ak ste spôsob obnovenia neodstránili vy, útočník sa pravdepodobne usiluje dostať k vašemu účtu. Zmente si prosím heslo na prihlásenie do Matrix účtu a znovu si ihneď nastavte možnosti obnovenia.",
|
||||
"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.": "Ak ste neodstránili spôsob obnovenia vy, je možné, že útočník sa pokúša dostať k vášmu účtu. Radšej si ihneď zmeňte vaše heslo a nastavte si nový spôsob obnovenia v Nastaveniach.",
|
||||
"Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "Či používate alebo nie funkcionalitu známu ako „omrvinky“ (obrázky nad zoznamom miestností)",
|
||||
"Call failed due to misconfigured server": "Hovor zlyhal kvôli nesprávne nakonfigurovanému serveru",
|
||||
"Please ask the administrator of your homeserver (<code>%(homeserverDomain)s</code>) to configure a TURN server in order for calls to work reliably.": "Prosím, požiadajte správcu vášho domovského servera (<code>%(homeserverDomain)s</code>) aby nakonfiguroval Turn server, čo zlepší spoľahlivosť audio / video hovorov.",
|
||||
|
@ -1408,9 +1408,9 @@
|
|||
"Add Email Address": "Pridať emailovú adresu",
|
||||
"Add Phone Number": "Pridať telefónne číslo",
|
||||
"Send cross-signing keys to homeserver": "Poslať kľúče pre podpisovanie naprieč zariadeniami na domovský server",
|
||||
"This action requires accessing the default identity server <server /> to validate an email address or phone number, but the server does not have any terms of service.": "Táto akcia si vyžaduje mať overenú emailovú adresu alebo telefónne číslo cez predvolený server totožností <server />, ale server nezverejnil podmienky používania.",
|
||||
"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.": "Táto akcia vyžaduje prístup k predvolenému serveru totožností <server /> na overenie emailovej adresy alebo telefónneho čísla, ale server nemá žiadne podmienky používania.",
|
||||
"Trust": "Dôverovať",
|
||||
"Custom (%(level)s)": "Vlastná (%(level)s)",
|
||||
"Custom (%(level)s)": "Vlastný (%(level)s)",
|
||||
"Sends a message as plain text, without interpreting it as markdown": "Odošle správu vo formáte obyčajný text, bez prekladu markdown",
|
||||
"You do not have the required permissions to use this command.": "Na použitie tohoto príkazu nemáte dostatočné povolenia.",
|
||||
"Error upgrading room": "Chyba pri aktualizácii miestnosti",
|
||||
|
@ -1441,7 +1441,7 @@
|
|||
"%(senderName)s changed a rule that was banning servers matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s zmenil pravidlo zakázať vstúpiť z domovských serverov pôvodne sa zhodujúcich s %(oldGlob)s na servery zhodujúce sa s %(newGlob)s, dôvod: %(reason)s",
|
||||
"%(senderName)s updated a ban rule that was matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s aktualizoval pravidlo zakázať vstúpiť pôvodne sa zhodujúce s %(oldGlob)s na %(newGlob)s, dôvod: %(reason)s",
|
||||
"%(name)s (%(userId)s)": "%(name)s (%(userId)s)",
|
||||
"Multiple integration managers": "Viacej integračných serverov",
|
||||
"Multiple integration managers": "Viac integračných serverov",
|
||||
"Try out new ways to ignore people (experimental)": "Vyskúšajte si nový spôsob ignorovania používateľov (experiment)",
|
||||
"Enable local event indexing and E2EE search (requires restart)": "Povoliť lokálne indexovanie udalostí a vyhľadávanie v šifrovaných miestnostiach",
|
||||
"Match system theme": "Prispôsobiť sa vzhľadu systému",
|
||||
|
@ -1452,12 +1452,12 @@
|
|||
"The message you are trying to send is too large.": "Správa, ktorú sa usilujete odoslať, je príliš veľká.",
|
||||
"This is your list of users/servers you have blocked - don't leave the room!": "Toto je zoznam používateľov / serverov, ktorých ste zablokovali - neopúšťajte miestnosť!",
|
||||
"Upload": "Nahrať",
|
||||
"Cross-signing and secret storage are enabled.": "Podpisovanie naprieč zariadeniami a bezpečné úložisko sú aktívne.",
|
||||
"Cross-signing and secret storage are not yet set up.": "Podpisovanie naprieč zariadeniami a bezpečné úložisko zatiaľ nie sú nastavené.",
|
||||
"Cross-signing and secret storage are enabled.": "Krížové podpisovanie a bezpečné úložisko sú zapnuté.",
|
||||
"Cross-signing and secret storage are not yet set up.": "Krížové podpisovanie a bezpečné úložisko zatiaľ nie sú nastavené.",
|
||||
"Bootstrap cross-signing and secret storage": "Zaviesť podpisovanie naprieč zariadeniami a bezpečné úložisko",
|
||||
"Cross-signing public keys:": "Verejné kľúče podpisovania naprieč zariadeniami:",
|
||||
"Cross-signing public keys:": "Verejné kľúče krížového podpisovania:",
|
||||
"not found": "nenájdené",
|
||||
"Cross-signing private keys:": "Súkromné kľúče podpisovania naprieč zariadeniami:",
|
||||
"Cross-signing private keys:": "Súkromné kľúče krížového podpisovania:",
|
||||
"in secret storage": "na bezpečnom úložisku",
|
||||
"Secret storage public key:": "Verejný kľúč bezpečného úložiska:",
|
||||
"in account data": "v údajoch účtu",
|
||||
|
@ -1475,13 +1475,13 @@
|
|||
"Disconnect identity server": "Odpojiť server totožností",
|
||||
"Disconnect from the identity server <idserver />?": "Naozaj sa chcete odpojiť od servera totožností <idserver />?",
|
||||
"Disconnect": "Odpojiť",
|
||||
"You should <b>remove your personal data</b> from identity server <idserver /> before disconnecting. Unfortunately, identity server <idserver /> is currently offline or cannot be reached.": "Pred odpojením zo servera totožností <idserver /> by ste mali z neho <b>odstrániť vaše osobné údaje</b>. Žiaľ, server <idserver /> momentálne nie je dostupný a nie je možné sa k nemu pripojiť.",
|
||||
"You should <b>remove your personal data</b> from identity server <idserver /> before disconnecting. Unfortunately, identity server <idserver /> is currently offline or cannot be reached.": "Pred odpojením by ste mali <b>odstrániť vaše osobné údaje</b> zo servera totožností <idserver />. Žiaľ, server totožnosti <idserver /> momentálne nie je dostupný a nie je možné sa k nemu pripojiť.",
|
||||
"You should:": "Mali by ste:",
|
||||
"check your browser plugins for anything that might block the identity server (such as Privacy Badger)": "Skontrolovať rozšírenia inštalované vo webovom prehliadači, ktoré by mohli blokovať prístup k serveru totožností (napr. rozšírenie Privacy Badger)",
|
||||
"contact the administrators of identity server <idserver />": "Kontaktovať správcu servera totožností <idserver />",
|
||||
"wait and try again later": "Počkať a skúsiť znovu neskôr",
|
||||
"Disconnect anyway": "Napriek tomu sa odpojiť",
|
||||
"You are still <b>sharing your personal data</b> on the identity server <idserver />.": "na servery <idserver /> <b>máte stále uložené vaše osobné údaje</b>.",
|
||||
"You are still <b>sharing your personal data</b> on the identity server <idserver />.": "Stále <b>zdielate vaše osobné údaje</b> so serverom totožnosti <idserver />.",
|
||||
"We recommend that you remove your email addresses and phone numbers from the identity server before disconnecting.": "Odporúčame, aby ste ešte pred odpojením sa zo servera totožností odstránili vašu emailovú adresu a telefónne číslo.",
|
||||
"Identity Server (%(server)s)": "Server totožností (%(server)s)",
|
||||
"You are currently using <server></server> to discover and be discoverable by existing contacts you know. You can change your identity server below.": "Momentálne na vyhľadávanie kontaktov a na možnosť byť nájdení kontaktmi ktorých poznáte používate <server></server>. Zmeniť server totožností môžete nižšie.",
|
||||
|
@ -1496,7 +1496,7 @@
|
|||
"Use an Integration Manager to manage bots, widgets, and sticker packs.": "Použiť integračný server na správu botov, widgetov a balíčkov s nálepkami.",
|
||||
"Manage integrations": "Spravovať integrácie",
|
||||
"Integration Managers receive configuration data, and can modify widgets, send room invites, and set power levels on your behalf.": "Integračné servery zhromažďujú údaje nastavení, môžu spravovať widgety, odosielať vo vašom mene pozvánky alebo meniť úroveň moci.",
|
||||
"Agree to the identity server (%(serverName)s) Terms of Service to allow yourself to be discoverable by email address or phone number.": "Súhlas s podmienkami používania servera totožností (%(serverName)s), aby ste mohli byť nájdení zadaním emailovej adresy alebo telefónneho čísla.",
|
||||
"Agree to the identity server (%(serverName)s) Terms of Service to allow yourself to be discoverable by email address or phone number.": "Súhlaste s podmienkami používania servera totožností (%(serverName)s), aby ste mohli byť nájdení zadaním emailovej adresy alebo telefónneho čísla.",
|
||||
"Discovery": "Objaviť",
|
||||
"Deactivate account": "Deaktivovať účet",
|
||||
"Clear cache and reload": "Vymazať vyrovnávaciu pamäť a načítať znovu",
|
||||
|
@ -1531,5 +1531,138 @@
|
|||
"Keep recovery passphrase in memory for this session": "Ponechať (dlhé) heslo pre obnovu zálohy v pamäti pre túto reláciu",
|
||||
"Enter recovery passphrase": "Zadajte (dlhé) heslo pre obnovu zálohy",
|
||||
"Unable to access secret storage. Please verify that you entered the correct recovery passphrase.": "Nemožno sa dostať do tajného úložiska. Prosím, overte, že ste zadali správne (dlhé) heslo pre obnovu zálohy.",
|
||||
"Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery passphrase.": "Získajte prístup k vašej zabezpečenej histórií správ a vašemu krížom-podpísanej identite na potvrdenie iných relácií zadaním vášho (dlhého) hesla na obnovu zálohy."
|
||||
"Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery passphrase.": "Získajte prístup k vašej šifrovanej histórií správ a vašej krížom podpísanej identite na potvrdenie iných relácií zadaním vášho (dlhého) hesla na obnovu zálohy.",
|
||||
"Encryption upgrade available": "Je dostupná aktualizácia šifrovania",
|
||||
"Set up encryption": "Nastaviť šifrovanie",
|
||||
"Review where you’re logged in": "Zobraziť, kde ste prihlásený",
|
||||
"New login. Was this you?": "Nové pihlásenie. Ste to vy?",
|
||||
"%(name)s is requesting verification": "%(name) žiada o overenie",
|
||||
"Sign In or Create Account": "Prihlásiť sa alebo vytvoriť nový účet",
|
||||
"Use your account or create a new one to continue.": "Použite váš existujúci účet alebo si vytvorte nový, aby ste mohli pokračovať.",
|
||||
"Create Account": "Vytvoriť účet",
|
||||
"Sign In": "Prihlásiť sa",
|
||||
"Sends a message as html, without interpreting it as markdown": "Pošlite správu ako HTML, bez interpretácie v Markdowne",
|
||||
"Failed to set topic": "Nastavenie témy zlyhalo",
|
||||
"Command failed": "Príkaz zlyhal",
|
||||
"Could not find user in room": "Nepodarilo sa nájsť používateľa v miestnosti",
|
||||
"Please supply a widget URL or embed code": "Prosím, zadajte URL widgetu alebo vložte kód",
|
||||
"Verifies a user, session, and pubkey tuple": "Overí používateľa, reláciu a verejné kľúče",
|
||||
"Unknown (user, session) pair:": "Neznámy pár (používateľ, relácia):",
|
||||
"Session already verified!": "Relácia je už overená!",
|
||||
"WARNING: Session already verified, but keys do NOT MATCH!": "VAROVANIE: Relácia je už overená, ale kľúče sa NEZHODUJÚ!",
|
||||
"If you've forgotten your recovery passphrase you can <button1>use your recovery key</button1> or <button2>set up new recovery options</button2>.": "Pokiaľ ste zabudli vaše (dlhé) heslo na obnovu zálohy, môžete <button1>použiť váš kľúč na obnovu zálohy</button1> alebo <button2>nastaviť nové spôsoby obnovy zálohy</button2>.",
|
||||
"Incorrect recovery passphrase": "Nesprávne (dlhé) heslo pre obnovu zálohy",
|
||||
"Backup could not be decrypted with this recovery passphrase: please verify that you entered the correct recovery passphrase.": "Záloha nemohla byť rozšifrovaná pomocou tohto (dlhého) helsa na obnovu zálohy: prosím, overte, či ste zadali správne (dlhé) helso na obnovu zálohy.",
|
||||
"WARNING: KEY VERIFICATION FAILED! The signing key for %(userId)s and session %(deviceId)s is \"%(fprint)s\" which does not match the provided key \"%(fingerprint)s\". This could mean your communications are being intercepted!": "VAROVANIE: OVERENIE KĽÚČOV ZLYHALO! Podpisovaný kľúč používateľa %(userId)s a relácia %(deviceId)s je \"%(fprint)s\" čo nezodpovedá zadanému kľúču \"%(fingerprint)s\". Môže to znamenať, že vaša komunikácia je infiltrovaná!",
|
||||
"The signing key you provided matches the signing key you received from %(userId)s's session %(deviceId)s. Session marked as verified.": "Zadaný podpísaný kľúč sa zhoduje s podpísaným kľúčom od relácie %(deviceId)s používateľa %(userId)s. Relácia je označená ako overená.",
|
||||
"Displays information about a user": "Zobrazuje informácie o používateľovi",
|
||||
"Send a bug report with logs": "Zaslať chybové hlásenie so záznamami",
|
||||
"Opens chat with the given user": "Otvorí konverzáciu s daným používateľom",
|
||||
"Sends a message to the given user": "Pošle správu danému používateľovi",
|
||||
"%(senderDisplayName)s changed the room name from %(oldRoomName)s to %(newRoomName)s.": "%(senderDisplayName)s zmenil/a meno miestnosti z %(oldRoomName)s na %(newRoomName)s.",
|
||||
"%(senderName)s added the alternative addresses %(addresses)s for this room.|other": "%(senderName)s pridal/a alternatívne adresy %(addresses)s pre túto miestnosť.",
|
||||
"%(senderName)s added the alternative addresses %(addresses)s for this room.|one": "%(senderName)s pridal/a alternatívnu adresu %(addresses)s pre túto miestnosť.",
|
||||
"%(senderName)s removed the alternative addresses %(addresses)s for this room.|other": "%(senderName)s odstránil/a alternatívne adresy %(addresses)s pre túto miestnosť.",
|
||||
"%(senderName)s removed the alternative addresses %(addresses)s for this room.|one": "%(senderName)s odstránil/a alternatívnu adresu %(addresses)s pre túto miestnosť.",
|
||||
"%(senderName)s changed the alternative addresses for this room.": "%(senderName)s zmenil/a alternatívne adresy pre túto miestnosť.",
|
||||
"%(senderName)s changed the main and alternative addresses for this room.": "%(senderName)s zmenil hlavnú a alternatívne adresy pre túto miestnosť.",
|
||||
"%(senderName)s changed the addresses for this room.": "%(senderName)s zmenil/a adresy pre túto miestnosť.",
|
||||
"You signed in to a new session without verifying it:": "Prihlásili ste sa do novej relácie bez jej overenia:",
|
||||
"Verify your other session using one of the options below.": "Overte svoje ostatné relácie pomocou jednej z nižšie uvedených možností.",
|
||||
"%(name)s (%(userId)s) signed in to a new session without verifying it:": "%(name)s (%(userId)s) sa prihlásil do novej relácie bez jej overenia:",
|
||||
"Ask this user to verify their session, or manually verify it below.": "Poproste tohto používateľa, aby si overil svoju reláciu alebo ju nižšie manuálne overte.",
|
||||
"Not Trusted": "Nedôveryhodné",
|
||||
"Manually Verify by Text": "Manuálne overte pomocou textu",
|
||||
"Interactively verify by Emoji": "Interaktívne overte pomocou emoji",
|
||||
"Done": "Hotovo",
|
||||
"a few seconds ago": "pred pár sekundami",
|
||||
"about a minute ago": "približne pred minutou",
|
||||
"about an hour ago": "približne pred hodinou",
|
||||
"about a day ago": "približne deň dozadu",
|
||||
"a few seconds from now": "o pár sekúnd",
|
||||
"about a minute from now": "približne o minutu",
|
||||
"about an hour from now": "približne o hodinu",
|
||||
"about a day from now": "približne o deň",
|
||||
"Support adding custom themes": "Umožniť pridávať vlastný vzhľad",
|
||||
"Enable cross-signing to verify per-user instead of per-session": "Povoliť krížové podpisovanie na overovanie používateľa namiesto overovania jednotlivých relácií",
|
||||
"Your homeserver does not support cross-signing.": "Váš domovský server nepodporuje krížové podpisovanie.",
|
||||
"Your account has a cross-signing identity in secret storage, but it is not yet trusted by this session.": "Váš účet má krížovo podpísanú identitu v bezpečnom úložisku, ale zatiaľ nie je nedôveryhodná pre túto reláciu.",
|
||||
"Reset cross-signing and secret storage": "Obnoviť krížové podpisovanie a bezpečné úložisko",
|
||||
"Individually verify each session used by a user to mark it as trusted, not trusting cross-signed devices.": "Individuálne overte každú používateľskú reláciu a označte ju za dôveryhodnú, bez dôvery krížovo podpísaných zariadení.",
|
||||
"Backup key stored in secret storage, but this feature is not enabled on this session. Please enable cross-signing in Labs to modify key backup state.": "Zálohovací kľúč je uložený v bezpečnom úložisku, ale jeho načítanie nie je povolené v tejto relácií. Prosím, zapnite krížové podpisovanie v Experimentoch, aby ste mohli modifikovať stav zálohy.",
|
||||
"Cross-signing": "Krížové podpisovanie",
|
||||
"Destroy cross-signing keys?": "Zmazať kľúče pre krížové podpisovanie?",
|
||||
"Deleting cross-signing keys is permanent. Anyone you have verified with will see security alerts. You almost certainly don't want to do this, unless you've lost every device you can cross-sign from.": "Zmazanie kľúčov pre krížové podpisovanie je nenávratné. Každý, s kým ste sa overili, bude vidieť bezpečnostné upozornenia. Toto určite nechcete robiť, dokiaľ ste nestratili všetky zariadenia, s ktorými by ste mohli krížovo podpisovať.",
|
||||
"Clear cross-signing keys": "Zmazať kľúče pre krížové podpisovanie",
|
||||
"a new cross-signing key signature": "nový podpis kľúča pre krížové podpisovanie",
|
||||
"a device cross-signing signature": "podpis krížovo podpísaného zariadenia",
|
||||
"Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery key.": "Získajte prístup k vašej šifrovanej histórií správ a vašej krížom podpísanej identite pre overenie iných relácií zadaním vášho kľúču obnovy.",
|
||||
"or another cross-signing capable Matrix client": "alebo iný Matrixový klient podporujúci krížové podpisovanie",
|
||||
"Removing…": "Odstraňovanie…",
|
||||
"Your new account (%(newAccountId)s) is registered, but you're already logged into a different account (%(loggedInUserId)s).": "Váš nový účet (%(newAccountId)s) je registrovaný, ale už ste prihlásený pod iným účtom (%(loggedInUserId)s).",
|
||||
"Continue with previous account": "Pokračovať s predošlým účtom",
|
||||
"<a>Log in</a> to your new account.": "<a>Prihláste sa</a> do vášho nového účtu.",
|
||||
"You can now close this window or <a>log in</a> to your new account.": "Teraz môžete toto okno zavrieť alebo sa <a>prihlásiť</a> do vášho nového účtu.",
|
||||
"Registration Successful": "Úspešná registrácia",
|
||||
"Confirm your identity by verifying this login from one of your other sessions, granting it access to encrypted messages.": "Potvrďte svoju identitu overením tohto účtu z jednej z vašich iných relácií, čím mu povolíte prístup k šifrovaným správam.",
|
||||
"This requires the latest Riot on your other devices:": "Toto vyžaduje najnovší Riot na vašich ostatných zariadeniach:",
|
||||
"Use Recovery Passphrase or Key": "Použite (dlhé) heslo pre obnovu zálohy alebo kľúč",
|
||||
"Your new session is now verified. It has access to your encrypted messages, and other users will see it as trusted.": "Vaša nová relácia je teraz overená. Má prístup k vašim šifrovaným správam a ostatný používatelia ju uvidia ako dôveryhodnú.",
|
||||
"Your new session is now verified. Other users will see it as trusted.": "Vaša nová relácia je teraz overená. Ostatný používatelia ju uvidia ako dôveryhodnú.",
|
||||
"Without completing security on this session, it won’t have access to encrypted messages.": "Bez dokončenia overenia nebude mať táto relácia prístup k šifrovaným správam.",
|
||||
"Go Back": "Späť",
|
||||
"Failed to re-authenticate due to a homeserver problem": "Opätovná autentifikácia zlyhala kvôli problému domovského servera",
|
||||
"Failed to re-authenticate": "Opätovná autentifikácia zlyhala",
|
||||
"Regain access to your account and recover encryption keys stored in this session. Without them, you won’t be able to read all of your secure messages in any session.": "Znovuzískajte prístup k vášmu účtu a obnovte šifrovacie kľúče uložené v tejto relácií. Bez nich nebudete môcť čítať všetky vaše šifrované správy vo všetkých reláciach.",
|
||||
"Font scaling": "Škálovanie písma",
|
||||
"Use IRC layout": "Použiť IRC rozloženie",
|
||||
"Show info about bridges in room settings": "Zobraziť informácie o mostoch v Nastaveniach miestnosti",
|
||||
"Font size": "Veľkosť písma",
|
||||
"Custom font size": "Vlastná veľkosť písma",
|
||||
"Show typing notifications": "Posielať oznámenia, keď píšete",
|
||||
"Never send encrypted messages to unverified sessions from this session": "Nikdy neposielať šifrované správy neovereným reláciam z tejto relácie",
|
||||
"Never send encrypted messages to unverified sessions in this room from this session": "Nikdy neposielať šifrované správy neovereným reláciam v tejto miestnosti z tejto relácie",
|
||||
"Order rooms by name": "Zoradiť miestnosti podľa názvu",
|
||||
"Show rooms with unread notifications first": "Zobraziť miestnosti s neprečítanými oznámeniami navrchu",
|
||||
"Show shortcuts to recently viewed rooms above the room list": "Zobraziť skratky nedávno zobrazených miestnosti nad zoznamom miestností",
|
||||
"Enable message search in encrypted rooms": "Povoliť vyhľadávanie správ v šifrovaných miestnostiach",
|
||||
"How fast should messages be downloaded.": "Ako rýchlo sa majú správy sťahovať.",
|
||||
"Manually verify all remote sessions": "Manuálne overiť všetky relácie",
|
||||
"IRC display name width": "Šírka zobrazovaného mena IRC",
|
||||
"Verify this session by completing one of the following:": "Overte túto reláciu dokončením jedného z nasledujúcich:",
|
||||
"Scan this unique code": "Naskenujte tento jedinečný kód",
|
||||
"or": "alebo",
|
||||
"Compare unique emoji": "Porovnajte jedinečnú kombináciu emoji",
|
||||
"Compare a unique set of emoji if you don't have a camera on either device": "Pokiaľ nemáte na svojich zariadeniach kameru, porovnajte jedinečnú kombináciu emoji",
|
||||
"Confirm the emoji below are displayed on both sessions, in the same order:": "Potvrďte, že nasledujúce emoji sú zobrazené na oboch reláciach v rovnakom poradí:",
|
||||
"The session you are trying to verify doesn't support scanning a QR code or emoji verification, which is what Riot supports. Try with a different client.": "Relácia, ktorú sa snažíte overiť, nepodporuje overovanie QR kódom a ani pomocou emoji, čo sú funkcie, ktoré Riot podporuje. Skúste použiť iného klienta.",
|
||||
"QR Code": "QR kód",
|
||||
"Enter your password to sign in and regain access to your account.": "Prihláste sa zadaním hesla a znovuzískajte prístup k vášmu účtu.",
|
||||
"Forgotten your password?": "Zabudli ste heslo?",
|
||||
"Sign in and regain access to your account.": "Prihláste sa a znovuzískajte prístup k vášmu účtu.",
|
||||
"You cannot sign in to your account. Please contact your homeserver admin for more information.": "Nemôžete sa prihlásiť do vášho účtu. Kontaktujte prosím vášho správcu domovského servera pre viac informácií.",
|
||||
"You're signed out": "Ste odhlásený",
|
||||
"Clear personal data": "Zmazať osobné dáta",
|
||||
"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.": "Varovanie: Vaše osobné údaje (vrátane šifrovacích kľúčov) sú stále uložené v tejto relácií. Zmažte ich, ak chcete túto reláciu zahodiť alebo sa chcete prihlásiť cez iný účet.",
|
||||
"Command Autocomplete": "Automatické dopĺňanie príkazov",
|
||||
"Community Autocomplete": "Automatické dopĺňanie skupín",
|
||||
"DuckDuckGo Results": "Výsledky hľadania DuckDuckGo",
|
||||
"Emoji Autocomplete": "Automatické dopĺňanie emoji",
|
||||
"Notification Autocomplete": "Automatické dopĺňanie oznámení",
|
||||
"Room Autocomplete": "Automatické dopĺňanie miestností",
|
||||
"User Autocomplete": "Automatické dopĺňanie používateľov",
|
||||
"Start": "Začať",
|
||||
"Verify this session by confirming the following number appears on its screen.": "Overte túto reláciu tým, že zistíte, či sa na jeho obrazovke objaví nasledujúce číslo.",
|
||||
"Waiting for your other session, %(deviceName)s (%(deviceId)s), to verify…": "Čakám na overenie od relácie %(deviceName)s (%(deviceId)s)…",
|
||||
"Waiting for your other session to verify…": "Čakám na overenie od vašej druhej relácie…",
|
||||
"Waiting for %(displayName)s to verify…": "Čakám na %(displayName)s, kým nás overí…",
|
||||
"Cancelling…": "Rušenie…",
|
||||
"They match": "Zhodujú sa",
|
||||
"They don't match": "Nezhodujú sa",
|
||||
"To be secure, do this in person or use a trusted way to communicate.": "Aby ste si boli istý, urobte to osobne alebo použite dôveryhodný spôsob komunikácie.",
|
||||
"Lock": "Zámok",
|
||||
"If you can't scan the code above, verify by comparing unique emoji.": "Pokiaľ nemôžete kód vyššie skenovať, overte sa porovnaním jedinečnej kombinácie emoji.",
|
||||
"Verify by comparing unique emoji.": "Overenie porovnaním jedinečnej kombinácie emoji",
|
||||
"Verify by emoji": "Overte pomocou emoji",
|
||||
"Compare emoji": "Porovnajte emoji"
|
||||
}
|
||||
|
|
|
@ -2424,5 +2424,15 @@
|
|||
"Click the button below to confirm setting up encryption.": "Klikoni mbi butonin më poshtë që të ripohoni ujdisjen e fshehtëzimit.",
|
||||
"Dismiss read marker and jump to bottom": "Mos merr parasysh piketë leximi dhe hidhu te fundi",
|
||||
"Jump to oldest unread message": "Hidhu te mesazhi më i vjetër i palexuar",
|
||||
"Upload a file": "Ngarkoni një kartelë"
|
||||
"Upload a file": "Ngarkoni një kartelë",
|
||||
"Font scaling": "Përshkallëzim shkronjash",
|
||||
"Use IRC layout": "Përdor skemë IRC-je",
|
||||
"Font size": "Madhësi shkronjash",
|
||||
"Custom font size": "Madhësi vetjake shkronjash",
|
||||
"IRC display name width": "Gjerësi shfaqjeje emrash IRC",
|
||||
"Size must be a number": "Madhësia duhet të jetë një numër",
|
||||
"Custom font size can only be between %(min)s pt and %(max)s pt": "Madhësia vetjake për shkronjat mund të jetë vetëm mes vlerave %(min)s pt dhe %(max)s pt",
|
||||
"Use between %(min)s pt and %(max)s pt": "Përdor me %(min)s pt dhe %(max)s pt",
|
||||
"Appearance": "Dukje",
|
||||
"Create room": "Krijo dhomë"
|
||||
}
|
||||
|
|
|
@ -77,7 +77,7 @@
|
|||
"Email": "е-пошта",
|
||||
"Email address": "Адреса е-пошти",
|
||||
"Failed to send email": "Помилка відправки е-почти",
|
||||
"Edit": "Редактувати",
|
||||
"Edit": "Редагувати",
|
||||
"Unpin Message": "Відкріпити повідомлення",
|
||||
"Register": "Зареєструватися",
|
||||
"Rooms": "Кімнати",
|
||||
|
|
|
@ -2434,5 +2434,16 @@
|
|||
"QR Code": "QR Code",
|
||||
"Dismiss read marker and jump to bottom": "取消讀取標記並跳至底部",
|
||||
"Jump to oldest unread message": "跳至最舊的未讀訊息",
|
||||
"Upload a file": "上傳檔案"
|
||||
"Upload a file": "上傳檔案",
|
||||
"Use IRC layout": "使用 IRC 佈局",
|
||||
"IRC display name width": "IRC 顯示名稱寬度",
|
||||
"Create room": "建立聊天室",
|
||||
"Font scaling": "字型縮放",
|
||||
"Font size": "字型大小",
|
||||
"Custom font size": "自訂字型大小",
|
||||
"Size must be a number": "大小必須為數字",
|
||||
"Custom font size can only be between %(min)s pt and %(max)s pt": "自訂字型大小僅能為 %(min)s 點至 %(max)s 點間",
|
||||
"Use between %(min)s pt and %(max)s pt": "使用 %(min)s 點至 %(max)s 點間",
|
||||
"Appearance": "外觀",
|
||||
"Use the improved room list (in development - refresh to apply changes)": "使用改進的聊天室清單(開發中 - 重新整理以套用變更)"
|
||||
}
|
||||
|
|
|
@ -405,7 +405,7 @@ export default class EventIndex extends EventEmitter {
|
|||
continue;
|
||||
}
|
||||
|
||||
console.log("EventIndex: Error crawling events:", e);
|
||||
console.log("EventIndex: Error crawling using checkpoint:", checkpoint, ",", e);
|
||||
this.crawlerCheckpoints.push(checkpoint);
|
||||
continue;
|
||||
}
|
||||
|
@ -507,7 +507,13 @@ export default class EventIndex extends EventEmitter {
|
|||
try {
|
||||
for (let i = 0; i < redactionEvents.length; i++) {
|
||||
const ev = redactionEvents[i];
|
||||
await indexManager.deleteEvent(ev.getAssociatedId());
|
||||
const eventId = ev.getAssociatedId();
|
||||
|
||||
if (eventId) {
|
||||
await indexManager.deleteEvent(eventId);
|
||||
} else {
|
||||
console.warn("EventIndex: Redaction event doesn't contain a valid associated event id", ev);
|
||||
}
|
||||
}
|
||||
|
||||
const eventsAlreadyAdded = await indexManager.addHistoricEvents(
|
||||
|
|
|
@ -180,7 +180,7 @@ export const SETTINGS = {
|
|||
"fontSize": {
|
||||
displayName: _td("Font size"),
|
||||
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
|
||||
default: 16,
|
||||
default: 15,
|
||||
controller: new FontSizeController(),
|
||||
},
|
||||
"useCustomFontSize": {
|
||||
|
|
|
@ -272,9 +272,8 @@ class RoomViewStore extends Store {
|
|||
err: err,
|
||||
});
|
||||
let msg = err.message ? err.message : JSON.stringify(err);
|
||||
// XXX: We are relying on the error message returned by browsers here.
|
||||
// This isn't great, but it does generalize the error being shown to users.
|
||||
if (msg && msg.startsWith("CORS request rejected")) {
|
||||
console.log("Failed to join room:", msg);
|
||||
if (err.name === "ConnectionError") {
|
||||
msg = _t("There was an error joining the room");
|
||||
}
|
||||
if (err.errcode === 'M_INCOMPATIBLE_ROOM_VERSION') {
|
||||
|
|
|
@ -32,6 +32,9 @@ export interface IToast<C extends keyof JSX.IntrinsicElements | JSXElementConstr
|
|||
*/
|
||||
export default class ToastStore extends EventEmitter {
|
||||
private toasts: IToast<any>[] = [];
|
||||
// The count of toasts which have been seen & dealt with in this stack
|
||||
// where the count resets when the stack of toasts clears.
|
||||
private countSeen = 0;
|
||||
|
||||
static sharedInstance() {
|
||||
if (!window.mx_ToastStore) window.mx_ToastStore = new ToastStore();
|
||||
|
@ -40,6 +43,7 @@ export default class ToastStore extends EventEmitter {
|
|||
|
||||
reset() {
|
||||
this.toasts = [];
|
||||
this.countSeen = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -67,6 +71,12 @@ export default class ToastStore extends EventEmitter {
|
|||
const length = this.toasts.length;
|
||||
this.toasts = this.toasts.filter(t => t.key !== key);
|
||||
if (length !== this.toasts.length) {
|
||||
if (this.toasts.length === 0) {
|
||||
this.countSeen = 0;
|
||||
} else {
|
||||
this.countSeen++;
|
||||
}
|
||||
|
||||
this.emit('update');
|
||||
}
|
||||
}
|
||||
|
@ -74,4 +84,8 @@ export default class ToastStore extends EventEmitter {
|
|||
getToasts() {
|
||||
return this.toasts;
|
||||
}
|
||||
|
||||
getCountSeen() {
|
||||
return this.countSeen;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,6 +26,7 @@ import { ITagMap, ITagSortingMap, ListAlgorithm, SortAlgorithm } from "./algorit
|
|||
import { getListAlgorithmInstance } from "./algorithms/list-ordering";
|
||||
import { ActionPayload } from "../../dispatcher/payloads";
|
||||
import defaultDispatcher from "../../dispatcher/dispatcher";
|
||||
import { readReceiptChangeIsFor } from "../../utils/read-receipts";
|
||||
|
||||
interface IState {
|
||||
tagsEnabled?: boolean;
|
||||
|
@ -135,16 +136,11 @@ class _RoomListStore extends AsyncStore<ActionPayload> {
|
|||
if (payload.action === 'MatrixActions.Room.receipt') {
|
||||
// First see if the receipt event is for our own user. If it was, trigger
|
||||
// a room update (we probably read the room on a different device).
|
||||
// noinspection JSObjectNullOrUndefined - this.matrixClient can't be null by this point in the lifecycle
|
||||
const myUserId = this.matrixClient.getUserId();
|
||||
for (const eventId of Object.keys(payload.event.getContent())) {
|
||||
const receiptUsers = Object.keys(payload.event.getContent()[eventId]['m.read'] || {});
|
||||
if (receiptUsers.includes(myUserId)) {
|
||||
if (readReceiptChangeIsFor(payload.event, this.matrixClient)) {
|
||||
// TODO: Update room now that it's been read
|
||||
console.log(payload);
|
||||
return;
|
||||
}
|
||||
}
|
||||
} else if (payload.action === 'MatrixActions.Room.tags') {
|
||||
// TODO: Update room from tags
|
||||
console.log(payload);
|
||||
|
|
|
@ -31,7 +31,7 @@ export function isContentActionable(mxEvent) {
|
|||
// status is SENT before remote-echo, null after
|
||||
const isSent = !eventStatus || eventStatus === EventStatus.SENT;
|
||||
|
||||
if (isSent) {
|
||||
if (isSent && !mxEvent.isRedacted()) {
|
||||
if (mxEvent.getType() === 'm.room.message') {
|
||||
const content = mxEvent.getContent();
|
||||
if (content.msgtype && content.msgtype !== 'm.bad.encrypted' && content.hasOwnProperty('body')) {
|
||||
|
|
34
src/utils/read-receipts.ts
Normal file
34
src/utils/read-receipts.ts
Normal file
|
@ -0,0 +1,34 @@
|
|||
/*
|
||||
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 { MatrixEvent } from "matrix-js-sdk/src/models/event";
|
||||
import { MatrixClient } from "matrix-js-sdk/src/client";
|
||||
|
||||
/**
|
||||
* Determines if a read receipt update event includes the client's own user.
|
||||
* @param event The event to check.
|
||||
* @param client The client to check against.
|
||||
* @returns True if the read receipt update includes the client, false otherwise.
|
||||
*/
|
||||
export function readReceiptChangeIsFor(event: MatrixEvent, client: MatrixClient): boolean {
|
||||
const myUserId = client.getUserId();
|
||||
for (const eventId of Object.keys(event.getContent())) {
|
||||
const receiptUsers = Object.keys(event.getContent()[eventId]['m.read'] || {});
|
||||
if (receiptUsers.includes(myUserId)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -206,8 +206,7 @@ describe("<TextualBody />", () => {
|
|||
'Hey <span>' +
|
||||
'<a class="mx_Pill mx_UserPill" title="@user:server">' +
|
||||
'<img class="mx_BaseAvatar mx_BaseAvatar_image" src="mxc://avatar.url/image.png" ' +
|
||||
'style="width: 16px; height: 16px;" ' +
|
||||
'title="@member:domain.bla" alt="" aria-hidden="true">Member</a>' +
|
||||
'style="width: 16px; height: 16px;" title="@member:domain.bla" alt="" aria-hidden="true">Member</a>' +
|
||||
'</span></span>');
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Reference in a new issue