Merge branch 'develop' into improve-image-view

This commit is contained in:
Šimon Brandner 2021-02-23 20:42:16 +01:00
commit 87d5d73025
No known key found for this signature in database
GPG key ID: 9760693FDD98A790
175 changed files with 9502 additions and 5453 deletions

View file

@ -37,6 +37,7 @@ import CountlyAnalytics from "../CountlyAnalytics";
import UserActivity from "../UserActivity";
import {ModalWidgetStore} from "../stores/ModalWidgetStore";
import { WidgetLayoutStore } from "../stores/widgets/WidgetLayoutStore";
import VoipUserMapper from "../VoipUserMapper";
declare global {
interface Window {
@ -66,6 +67,7 @@ declare global {
mxCountlyAnalytics: typeof CountlyAnalytics;
mxUserActivity: UserActivity;
mxModalWidgetStore: ModalWidgetStore;
mxVoipUserMapper: VoipUserMapper;
}
interface Document {

View file

@ -30,6 +30,7 @@ import {idbLoad, idbSave, idbDelete} from "./utils/StorageManager";
export const SSO_HOMESERVER_URL_KEY = "mx_sso_hs_url";
export const SSO_ID_SERVER_URL_KEY = "mx_sso_is_url";
export const SSO_IDP_ID_KEY = "mx_sso_idp_id";
export enum UpdateCheckStatus {
Checking = "CHECKING",
@ -56,7 +57,7 @@ export default abstract class BasePlatform {
this.startUpdateCheck = this.startUpdateCheck.bind(this);
}
abstract async getConfig(): Promise<{}>;
abstract getConfig(): Promise<{}>;
abstract getDefaultDeviceDisplayName(): string;
@ -258,6 +259,9 @@ export default abstract class BasePlatform {
if (mxClient.getIdentityServerUrl()) {
localStorage.setItem(SSO_ID_SERVER_URL_KEY, mxClient.getIdentityServerUrl());
}
if (idpId) {
localStorage.setItem(SSO_IDP_ID_KEY, idpId);
}
const callbackUrl = this.getSSOCallbackUrl(fragmentAfterLogin);
window.location.href = mxClient.getSsoLoginUrl(callbackUrl.toString(), loginType, idpId); // redirect to SSO
}

View file

@ -64,7 +64,6 @@ import dis from './dispatcher/dispatcher';
import WidgetUtils from './utils/WidgetUtils';
import WidgetEchoStore from './stores/WidgetEchoStore';
import SettingsStore from './settings/SettingsStore';
import {generateHumanReadableId} from "./utils/NamingUtils";
import {Jitsi} from "./widgets/Jitsi";
import {WidgetType} from "./widgets/WidgetType";
import {SettingLevel} from "./settings/SettingLevel";
@ -82,10 +81,21 @@ import CountlyAnalytics from "./CountlyAnalytics";
import {UIFeature} from "./settings/UIFeature";
import { CallError } from "matrix-js-sdk/src/webrtc/call";
import { logger } from 'matrix-js-sdk/src/logger';
import DesktopCapturerSourcePicker from "./components/views/elements/DesktopCapturerSourcePicker"
import { Action } from './dispatcher/actions';
import { roomForVirtualRoom, getOrCreateVirtualRoomForRoom } from './VoipUserMapper';
import VoipUserMapper from './VoipUserMapper';
import { addManagedHybridWidget, isManagedHybridWidgetEnabled } from './widgets/ManagedHybrid';
import { randomString } from "matrix-js-sdk/src/randomstring";
const CHECK_PSTN_SUPPORT_ATTEMPTS = 3;
export const PROTOCOL_PSTN = 'm.protocol.pstn';
export const PROTOCOL_PSTN_PREFIXED = 'im.vector.protocol.pstn';
export const PROTOCOL_SIP_NATIVE = 'im.vector.protocol.sip_native';
export const PROTOCOL_SIP_VIRTUAL = 'im.vector.protocol.sip_virtual';
const CHECK_PROTOCOLS_ATTEMPTS = 3;
// Event type for room account data and room creation content used to mark rooms as virtual rooms
// (and store the ID of their native room)
export const VIRTUAL_ROOM_EVENT_TYPE = 'im.vector.is_virtual_room';
enum AudioID {
Ring = 'ringAudio',
@ -94,6 +104,29 @@ enum AudioID {
Busy = 'busyAudio',
}
interface ThirdpartyLookupResponseFields {
/* eslint-disable camelcase */
// im.vector.sip_native
virtual_mxid?: string;
is_virtual?: boolean;
// im.vector.sip_virtual
native_mxid?: string;
is_native?: boolean;
// common
lookup_success?: boolean;
/* eslint-enable camelcase */
}
interface ThirdpartyLookupResponse {
userid: string,
protocol: string,
fields: ThirdpartyLookupResponseFields,
}
// Unlike 'CallType' in js-sdk, this one includes screen sharing
// (because a screen sharing call is only a screen sharing call to the caller,
// to the callee it's just a video call, at least as far as the current impl
@ -124,7 +157,12 @@ export default class CallHandler {
private audioPromises = new Map<AudioID, Promise<void>>();
private dispatcherRef: string = null;
private supportsPstnProtocol = null;
private pstnSupportPrefixed = null; // True if the server only support the prefixed pstn protocol
private supportsSipNativeVirtual = null; // im.vector.protocol.sip_virtual and im.vector.protocol.sip_native
private pstnSupportCheckTimer: NodeJS.Timeout; // number actually because we're in the browser
// For rooms we've been invited to, true if they're from virtual user, false if we've checked and they aren't.
private invitedRoomsAreVirtual = new Map<string, boolean>();
private invitedRoomCheckInProgress = false;
static sharedInstance() {
if (!window.mxCallHandler) {
@ -138,9 +176,9 @@ export default class CallHandler {
* Gets the user-facing room associated with a call (call.roomId may be the call "virtual room"
* if a voip_mxid_translate_pattern is set in the config)
*/
public static roomIdForCall(call: MatrixCall) {
public static roomIdForCall(call: MatrixCall): string {
if (!call) return null;
return roomForVirtualRoom(call.roomId) || call.roomId;
return VoipUserMapper.sharedInstance().nativeRoomForVirtualRoom(call.roomId) || call.roomId;
}
start() {
@ -161,7 +199,7 @@ export default class CallHandler {
MatrixClientPeg.get().on('Call.incoming', this.onCallIncoming);
}
this.checkForPstnSupport(CHECK_PSTN_SUPPORT_ATTEMPTS);
this.checkProtocols(CHECK_PROTOCOLS_ATTEMPTS);
}
stop() {
@ -175,33 +213,73 @@ export default class CallHandler {
}
}
private async checkForPstnSupport(maxTries) {
private async checkProtocols(maxTries) {
try {
const protocols = await MatrixClientPeg.get().getThirdpartyProtocols();
if (protocols['im.vector.protocol.pstn'] !== undefined) {
this.supportsPstnProtocol = protocols['im.vector.protocol.pstn'];
} else if (protocols['m.protocol.pstn'] !== undefined) {
this.supportsPstnProtocol = protocols['m.protocol.pstn'];
if (protocols[PROTOCOL_PSTN] !== undefined) {
this.supportsPstnProtocol = Boolean(protocols[PROTOCOL_PSTN]);
if (this.supportsPstnProtocol) this.pstnSupportPrefixed = false;
} else if (protocols[PROTOCOL_PSTN_PREFIXED] !== undefined) {
this.supportsPstnProtocol = Boolean(protocols[PROTOCOL_PSTN_PREFIXED]);
if (this.supportsPstnProtocol) this.pstnSupportPrefixed = true;
} else {
this.supportsPstnProtocol = null;
}
dis.dispatch({action: Action.PstnSupportUpdated});
if (protocols[PROTOCOL_SIP_NATIVE] !== undefined && protocols[PROTOCOL_SIP_VIRTUAL] !== undefined) {
this.supportsSipNativeVirtual = Boolean(
protocols[PROTOCOL_SIP_NATIVE] && protocols[PROTOCOL_SIP_VIRTUAL],
);
}
dis.dispatch({action: Action.VirtualRoomSupportUpdated});
} catch (e) {
if (maxTries === 1) {
console.log("Failed to check for pstn protocol support and no retries remain: assuming no support", e);
console.log("Failed to check for protocol support and no retries remain: assuming no support", e);
} else {
console.log("Failed to check for pstn protocol support: will retry", e);
console.log("Failed to check for protocol support: will retry", e);
this.pstnSupportCheckTimer = setTimeout(() => {
this.checkForPstnSupport(maxTries - 1);
this.checkProtocols(maxTries - 1);
}, 10000);
}
}
}
getSupportsPstnProtocol() {
public getSupportsPstnProtocol() {
return this.supportsPstnProtocol;
}
public getSupportsVirtualRooms() {
return this.supportsPstnProtocol;
}
public pstnLookup(phoneNumber: string): Promise<ThirdpartyLookupResponse[]> {
return MatrixClientPeg.get().getThirdpartyUser(
this.pstnSupportPrefixed ? PROTOCOL_PSTN_PREFIXED : PROTOCOL_PSTN, {
'm.id.phone': phoneNumber,
},
);
}
public sipVirtualLookup(nativeMxid: string): Promise<ThirdpartyLookupResponse[]> {
return MatrixClientPeg.get().getThirdpartyUser(
PROTOCOL_SIP_VIRTUAL, {
'native_mxid': nativeMxid,
},
);
}
public sipNativeLookup(virtualMxid: string): Promise<ThirdpartyLookupResponse[]> {
return MatrixClientPeg.get().getThirdpartyUser(
PROTOCOL_SIP_NATIVE, {
'virtual_mxid': virtualMxid,
},
);
}
private onCallIncoming = (call) => {
// we dispatch this synchronously to make sure that the event
// handlers on the call are set up immediately (so that if
@ -356,6 +434,7 @@ export default class CallHandler {
this.play(AudioID.Ringback);
break;
case CallState.Ended:
{
Analytics.trackEvent('voip', 'callEnded', 'hangupReason', call.hangupReason);
this.removeCallForRoom(mappedRoomId);
if (oldState === CallState.InviteSent && (
@ -389,10 +468,14 @@ export default class CallHandler {
title: _t("Answered Elsewhere"),
description: _t("The call was answered on another device."),
});
} else if (oldState !== CallState.Fledgling) {
} else if (oldState !== CallState.Fledgling && oldState !== CallState.Ringing) {
// don't play the end-call sound for calls that never got off the ground
this.play(AudioID.CallEnd);
}
this.logCallStats(call, mappedRoomId);
break;
}
}
});
call.on(CallEvent.Replaced, (newCall: MatrixCall) => {
@ -412,6 +495,49 @@ export default class CallHandler {
});
}
private async logCallStats(call: MatrixCall, mappedRoomId: string) {
const stats = await call.getCurrentCallStats();
logger.debug(
`Call completed. Call ID: ${call.callId}, virtual room ID: ${call.roomId}, ` +
`user-facing room ID: ${mappedRoomId}, direction: ${call.direction}, ` +
`our Party ID: ${call.ourPartyId}, hangup party: ${call.hangupParty}, ` +
`hangup reason: ${call.hangupReason}`,
);
if (!stats) {
logger.debug(
"Call statistics are undefined. The call has " +
"probably failed before a peerConn was established",
);
return;
}
logger.debug("Local candidates:");
for (const cand of stats.filter(item => item.type === 'local-candidate')) {
const address = cand.address || cand.ip; // firefox uses 'address', chrome uses 'ip'
logger.debug(
`${cand.id} - type: ${cand.candidateType}, address: ${address}, port: ${cand.port}, ` +
`protocol: ${cand.protocol}, relay protocol: ${cand.relayProtocol}, network type: ${cand.networkType}`,
);
}
logger.debug("Remote candidates:");
for (const cand of stats.filter(item => item.type === 'remote-candidate')) {
const address = cand.address || cand.ip; // firefox uses 'address', chrome uses 'ip'
logger.debug(
`${cand.id} - type: ${cand.candidateType}, address: ${address}, port: ${cand.port}, ` +
`protocol: ${cand.protocol}`,
);
}
logger.debug("Candidate pairs:");
for (const pair of stats.filter(item => item.type === 'candidate-pair')) {
logger.debug(
`${pair.localCandidateId} / ${pair.remoteCandidateId} - state: ${pair.state}, ` +
`nominated: ${pair.nominated}, ` +
`requests sent ${pair.requestsSent}, requests received ${pair.requestsReceived}, ` +
`responses received: ${pair.responsesReceived}, responses sent: ${pair.responsesSent}, ` +
`bytes received: ${pair.bytesReceived}, bytes sent: ${pair.bytesSent}, `,
);
}
}
private setCallAudioElement(call: MatrixCall) {
const audioElement = getRemoteAudioElement();
if (audioElement) call.setRemoteAudioElement(audioElement);
@ -500,7 +626,7 @@ export default class CallHandler {
Analytics.trackEvent('voip', 'placeCall', 'type', type);
CountlyAnalytics.instance.trackStartCall(roomId, type === PlaceCallType.Video, false);
const mappedRoomId = (await getOrCreateVirtualRoomForRoom(roomId)) || roomId;
const mappedRoomId = (await VoipUserMapper.sharedInstance().getOrCreateVirtualRoomForRoom(roomId)) || roomId;
logger.debug("Mapped real room " + roomId + " to room ID " + mappedRoomId);
const call = createNewMatrixCall(MatrixClientPeg.get(), mappedRoomId);
@ -530,9 +656,17 @@ export default class CallHandler {
});
return;
}
call.placeScreenSharingCall(remoteElement, localElement);
call.placeScreenSharingCall(
remoteElement,
localElement,
async () : Promise<DesktopCapturerSource> => {
const {finished} = Modal.createDialog(DesktopCapturerSourcePicker);
const [source] = await finished;
return source;
});
} else {
console.error("Unknown conf call type: %s", type);
console.error("Unknown conf call type: " + type);
}
}
@ -540,6 +674,12 @@ export default class CallHandler {
switch (payload.action) {
case 'place_call':
{
// We might be using managed hybrid widgets
if (isManagedHybridWidgetEnabled()) {
addManagedHybridWidget(payload.room_id);
return;
}
// if the runtime env doesn't do VoIP, whine.
if (!MatrixClientPeg.get().supportsVoip()) {
Modal.createTrackedDialog('Call Handler', 'VoIP is unsupported', ErrorDialog, {
@ -560,7 +700,7 @@ export default class CallHandler {
const room = MatrixClientPeg.get().getRoom(payload.room_id);
if (!room) {
console.error("Room %s does not exist.", payload.room_id);
console.error(`Room ${payload.room_id} does not exist.`);
return;
}
@ -571,7 +711,7 @@ export default class CallHandler {
});
return;
} else if (members.length === 2) {
console.info("Place %s call in %s", payload.type, payload.room_id);
console.info(`Place ${payload.type} call in ${payload.room_id}`);
this.placeCall(payload.room_id, payload.type, payload.local_element, payload.remote_element);
} else { // > 2
@ -586,17 +726,17 @@ export default class CallHandler {
}
break;
case 'place_conference_call':
console.info("Place conference call in %s", payload.room_id);
console.info("Place conference call in " + payload.room_id);
Analytics.trackEvent('voip', 'placeConferenceCall');
CountlyAnalytics.instance.trackStartCall(payload.room_id, payload.type === PlaceCallType.Video, true);
this.startCallApp(payload.room_id, payload.type);
break;
case 'end_conference':
console.info("Terminating conference call in %s", payload.room_id);
console.info("Terminating conference call in " + payload.room_id);
this.terminateCallApp(payload.room_id);
break;
case 'hangup_conference':
console.info("Leaving conference call in %s", payload.room_id);
console.info("Leaving conference call in "+ payload.room_id);
this.hangupCallApp(payload.room_id);
break;
case 'incoming_call':
@ -617,6 +757,12 @@ export default class CallHandler {
Analytics.trackEvent('voip', 'receiveCall', 'type', call.type);
this.calls.set(mappedRoomId, call)
this.setCallListeners(call);
// get ready to send encrypted events in the room, so if the user does answer
// the call, we'll be ready to send. NB. This is the protocol-level room ID not
// the mapped one: that's where we'll send the events.
const cli = MatrixClientPeg.get();
cli.prepareToEncrypt(cli.getRoom(call.roomId));
}
break;
case 'hangup':
@ -716,7 +862,7 @@ export default class CallHandler {
confId = base32.stringify(Buffer.from(roomId), { pad: false });
} else {
// Create a random human readable conference ID
confId = `JitsiConference${generateHumanReadableId()}`;
confId = `JitsiConference${randomString(32)}`;
}
let widgetUrl = WidgetUtils.getLocalJitsiWrapperUrl({auth: jitsiAuth});
@ -732,6 +878,7 @@ export default class CallHandler {
isAudioOnly: type === 'voice',
domain: jitsiDomain,
auth: jitsiAuth,
roomName: room.name,
};
const widgetId = (

View file

@ -497,7 +497,7 @@ export default class ContentMessages {
content.info.mimetype = file.type;
}
const prom = new Promise((resolve) => {
const prom = new Promise<void>((resolve) => {
if (file.type.indexOf('image/') === 0) {
content.msgtype = 'm.image';
infoForImageFile(matrixClient, roomId, file).then((imageInfo) => {

View file

@ -840,7 +840,7 @@ export default class CountlyAnalytics {
let endTime = CountlyAnalytics.getTimestamp();
const cli = MatrixClientPeg.get();
if (!cli.getRoom(roomId)) {
await new Promise(resolve => {
await new Promise<void>(resolve => {
const handler = (room) => {
if (room.roomId === roomId) {
cli.off("Room", handler);
@ -880,7 +880,7 @@ export default class CountlyAnalytics {
let endTime = CountlyAnalytics.getTimestamp();
if (!room.findEventById(eventId)) {
await new Promise(resolve => {
await new Promise<void>(resolve => {
const handler = (ev) => {
if (ev.getId() === eventId) {
room.off("Room.localEchoUpdated", handler);

View file

@ -422,6 +422,8 @@ export function bodyToHtml(content: IContent, highlights: string[], opts: IOpts
if (SettingsStore.getValue("feature_latex_maths")) {
const phtml = cheerio.load(safeBody,
{ _useHtmlParser2: true, decodeEntities: false })
// @ts-ignore - The types for `replaceWith` wrongly expect
// Cheerio instance to be returned.
phtml('div, span[data-mx-maths!=""]').replaceWith(function(i, e) {
return katex.renderToString(
AllHtmlEntities.decode(phtml(e).attr('data-mx-maths')),

View file

@ -165,6 +165,7 @@ export default class IdentityAuthClient {
});
const [confirmed] = await finished;
if (confirmed) {
// eslint-disable-next-line react-hooks/rules-of-hooks
useDefaultIdentityServer();
} else {
throw new AbortedIdentityActionError(

View file

@ -46,11 +46,13 @@ import {IntegrationManagers} from "./integrations/IntegrationManagers";
import {Mjolnir} from "./mjolnir/Mjolnir";
import DeviceListener from "./DeviceListener";
import {Jitsi} from "./widgets/Jitsi";
import {SSO_HOMESERVER_URL_KEY, SSO_ID_SERVER_URL_KEY} from "./BasePlatform";
import {SSO_HOMESERVER_URL_KEY, SSO_ID_SERVER_URL_KEY, SSO_IDP_ID_KEY} from "./BasePlatform";
import ThreepidInviteStore from "./stores/ThreepidInviteStore";
import CountlyAnalytics from "./CountlyAnalytics";
import CallHandler from './CallHandler';
import LifecycleCustomisations from "./customisations/Lifecycle";
import ErrorDialog from "./components/views/dialogs/ErrorDialog";
import {_t} from "./languageHandler";
const HOMESERVER_URL_KEY = "mx_hs_url";
const ID_SERVER_URL_KEY = "mx_is_url";
@ -162,7 +164,8 @@ export async function getStoredSessionOwner(): Promise<[string, boolean]> {
* query-parameters extracted from the real query-string of the starting
* URI.
*
* @param {String} defaultDeviceDisplayName
* @param {string} defaultDeviceDisplayName
* @param {string} fragmentAfterLogin path to go to after a successful login, only used for "Try again"
*
* @returns {Promise} promise which resolves to true if we completed the token
* login, else false
@ -170,6 +173,7 @@ export async function getStoredSessionOwner(): Promise<[string, boolean]> {
export function attemptTokenLogin(
queryParams: Record<string, string>,
defaultDeviceDisplayName?: string,
fragmentAfterLogin?: string,
): Promise<boolean> {
if (!queryParams.loginToken) {
return Promise.resolve(false);
@ -179,6 +183,12 @@ export function attemptTokenLogin(
const identityServer = localStorage.getItem(SSO_ID_SERVER_URL_KEY);
if (!homeserver) {
console.warn("Cannot log in with token: can't determine HS URL to use");
Modal.createTrackedDialog("SSO", "Unknown HS", ErrorDialog, {
title: _t("We couldn't log you in"),
description: _t("We asked the browser to remember which homeserver you use to let you sign in, " +
"but unfortunately your browser has forgotten it. Go to the sign in page and try again."),
button: _t("Try again"),
});
return Promise.resolve(false);
}
@ -198,8 +208,28 @@ export function attemptTokenLogin(
return true;
});
}).catch((err) => {
console.error("Failed to log in with login token: " + err + " " +
err.data);
Modal.createTrackedDialog("SSO", "Token Rejected", ErrorDialog, {
title: _t("We couldn't log you in"),
description: err.name === "ConnectionError"
? _t("Your homeserver was unreachable and was not able to log you in. Please try again. " +
"If this continues, please contact your homeserver administrator.")
: _t("Your homeserver rejected your log in attempt. " +
"This could be due to things just taking too long. Please try again. " +
"If this continues, please contact your homeserver administrator."),
button: _t("Try again"),
onFinished: tryAgain => {
if (tryAgain) {
const cli = Matrix.createClient({
baseUrl: homeserver,
idBaseUrl: identityServer,
});
const idpId = localStorage.getItem(SSO_IDP_ID_KEY) || undefined;
PlatformPeg.get().startSingleSignOn(cli, "sso", fragmentAfterLogin, idpId);
}
},
});
console.error("Failed to log in with login token:");
console.error(err);
return false;
});
}
@ -366,7 +396,7 @@ async function abortLogin() {
// The plan is to gradually move the localStorage access done here into
// SessionStore to avoid bugs where the view becomes out-of-sync with
// localStorage (e.g. isGuest etc.)
async function restoreFromLocalStorage(opts?: { ignoreGuest?: boolean }): Promise<boolean> {
export async function restoreFromLocalStorage(opts?: { ignoreGuest?: boolean }): Promise<boolean> {
const ignoreGuest = opts?.ignoreGuest;
if (!localStorage) {

View file

@ -33,10 +33,20 @@ interface IPasswordFlow {
type: "m.login.password";
}
export enum IdentityProviderBrand {
Gitlab = "org.matrix.gitlab",
Github = "org.matrix.github",
Apple = "org.matrix.apple",
Google = "org.matrix.google",
Facebook = "org.matrix.facebook",
Twitter = "org.matrix.twitter",
}
export interface IIdentityProvider {
id: string;
name: string;
icon?: string;
brand?: IdentityProviderBrand | string;
}
export interface ISSOFlow {

View file

@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
import commonmark from 'commonmark';
import * as commonmark from 'commonmark';
import {escape} from "lodash";
const ALLOWED_HTML_TAGS = ['sub', 'sup', 'del', 'u'];

View file

@ -279,6 +279,10 @@ class _MatrixClientPeg implements IMatrixClientPeg {
timelineSupport: true,
forceTURN: !SettingsStore.getValue('webRtcAllowPeerToPeer'),
fallbackICEServerAllowed: !!SettingsStore.getValue('fallbackICEServerAllowed'),
// Gather up to 20 ICE candidates when a call arrives: this should be more than we'd
// ever normally need, so effectively this should make all the gathering happen when
// the call arrives.
iceCandidatePoolSize: 20,
verificationMethods: [
verificationMethods.SAS,
SHOW_QR_CODE_METHOD,

View file

@ -202,12 +202,13 @@ function setRoomNotifsStateUnmuted(roomId, newState) {
}
function findOverrideMuteRule(roomId) {
if (!MatrixClientPeg.get().pushRules ||
!MatrixClientPeg.get().pushRules['global'] ||
!MatrixClientPeg.get().pushRules['global'].override) {
const cli = MatrixClientPeg.get();
if (!cli.pushRules ||
!cli.pushRules['global'] ||
!cli.pushRules['global'].override) {
return null;
}
for (const rule of MatrixClientPeg.get().pushRules['global'].override) {
for (const rule of cli.pushRules['global'].override) {
if (isRuleForRoom(roomId, rule)) {
if (isMuteRule(rule) && rule.enabled) {
return rule;

View file

@ -48,6 +48,7 @@ import SettingsStore from "./settings/SettingsStore";
import {UIFeature} from "./settings/UIFeature";
import {CHAT_EFFECTS} from "./effects"
import CallHandler from "./CallHandler";
import {guessAndSetDMRoom} from "./Rooms";
// XXX: workaround for https://github.com/microsoft/TypeScript/issues/31816
interface HTMLInputEvent extends Event {
@ -1039,9 +1040,7 @@ export const Commands = [
return success((async () => {
if (isPhoneNumber) {
const results = await MatrixClientPeg.get().getThirdpartyUser('im.vector.protocol.pstn', {
'm.id.phone': userId,
});
const results = await CallHandler.sharedInstance().pstnLookup(this.state.value);
if (!results || results.length === 0 || !results[0].userid) {
throw new Error("Unable to find Matrix ID for phone number");
}
@ -1112,6 +1111,24 @@ export const Commands = [
return success();
},
}),
new Command({
command: "converttodm",
description: _td("Converts the room to a DM"),
category: CommandCategories.other,
runFn: function(roomId, args) {
const room = MatrixClientPeg.get().getRoom(roomId);
return success(guessAndSetDMRoom(room, true));
},
}),
new Command({
command: "converttoroom",
description: _td("Converts the DM to a room"),
category: CommandCategories.other,
runFn: function(roomId, args) {
const room = MatrixClientPeg.get().getRoom(roomId);
return success(guessAndSetDMRoom(room, false));
},
}),
// Command definitions for autocompletion ONLY:
// /me is special because its not handled by SlashCommands.js and is instead done inside the Composer classes
@ -1163,7 +1180,7 @@ export function parseCommandString(input: string) {
input = input.replace(/\s+$/, '');
if (input[0] !== '/') return {}; // not a command
const bits = input.match(/^(\S+?)(?: +((.|\n)*))?$/);
const bits = input.match(/^(\S+?)(?:[ \n]+((.|\n)*))?$/);
let cmd;
let args;
if (bits) {

View file

@ -14,66 +14,97 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
import { ensureDMExists, findDMForUser } from './createRoom';
import { ensureVirtualRoomExists, findDMForUser } from './createRoom';
import { MatrixClientPeg } from "./MatrixClientPeg";
import DMRoomMap from "./utils/DMRoomMap";
import SdkConfig from "./SdkConfig";
import CallHandler, { VIRTUAL_ROOM_EVENT_TYPE } from './CallHandler';
import { Room } from 'matrix-js-sdk/src/models/room';
// Functions for mapping users & rooms for the voip_mxid_translate_pattern
// config option
// Functions for mapping virtual users & rooms. Currently the only lookup
// is sip virtual: there could be others in the future.
export function voipUserMapperEnabled(): boolean {
return SdkConfig.get()['voip_mxid_translate_pattern'] !== undefined;
}
export default class VoipUserMapper {
private virtualRoomIdCache = new Set<string>();
// only exported for tests
export function userToVirtualUser(userId: string, templateString?: string): string {
if (templateString === undefined) templateString = SdkConfig.get()['voip_mxid_translate_pattern'];
if (!templateString) return null;
return templateString.replace('${mxid}', encodeURIComponent(userId).replace(/%/g, '=').toLowerCase());
}
public static sharedInstance(): VoipUserMapper {
if (window.mxVoipUserMapper === undefined) window.mxVoipUserMapper = new VoipUserMapper();
return window.mxVoipUserMapper;
}
// only exported for tests
export function virtualUserToUser(userId: string, templateString?: string): string {
if (templateString === undefined) templateString = SdkConfig.get()['voip_mxid_translate_pattern'];
if (!templateString) return null;
private async userToVirtualUser(userId: string): Promise<string> {
const results = await CallHandler.sharedInstance().sipVirtualLookup(userId);
if (results.length === 0) return null;
return results[0].userid;
}
const regexString = templateString.replace('${mxid}', '(.+)');
public async getOrCreateVirtualRoomForRoom(roomId: string):Promise<string> {
const userId = DMRoomMap.shared().getUserIdForRoomId(roomId);
if (!userId) return null;
const match = userId.match('^' + regexString + '$');
if (!match) return null;
const virtualUser = await this.userToVirtualUser(userId);
if (!virtualUser) return null;
return decodeURIComponent(match[1].replace(/=/g, '%'));
}
const virtualRoomId = await ensureVirtualRoomExists(MatrixClientPeg.get(), virtualUser, roomId);
MatrixClientPeg.get().setRoomAccountData(virtualRoomId, VIRTUAL_ROOM_EVENT_TYPE, {
native_room: roomId,
});
async function getOrCreateVirtualRoomForUser(userId: string):Promise<string> {
const virtualUser = userToVirtualUser(userId);
if (!virtualUser) return null;
return virtualRoomId;
}
return await ensureDMExists(MatrixClientPeg.get(), virtualUser);
}
public nativeRoomForVirtualRoom(roomId: string):string {
const virtualRoom = MatrixClientPeg.get().getRoom(roomId);
if (!virtualRoom) return null;
const virtualRoomEvent = virtualRoom.getAccountData(VIRTUAL_ROOM_EVENT_TYPE);
if (!virtualRoomEvent || !virtualRoomEvent.getContent()) return null;
return virtualRoomEvent.getContent()['native_room'] || null;
}
export async function getOrCreateVirtualRoomForRoom(roomId: string):Promise<string> {
const user = DMRoomMap.shared().getUserIdForRoomId(roomId);
if (!user) return null;
return getOrCreateVirtualRoomForUser(user);
}
public isVirtualRoom(room: Room):boolean {
if (this.nativeRoomForVirtualRoom(room.roomId)) return true;
export function roomForVirtualRoom(roomId: string):string {
const virtualUser = DMRoomMap.shared().getUserIdForRoomId(roomId);
if (!virtualUser) return null;
const realUser = virtualUserToUser(virtualUser);
const room = findDMForUser(MatrixClientPeg.get(), realUser);
if (room) {
return room.roomId;
} else {
return null;
if (this.virtualRoomIdCache.has(room.roomId)) return true;
// also look in the create event for the claimed native room ID, which is the only
// way we can recognise a virtual room we've created when it first arrives down
// our stream. We don't trust this in general though, as it could be faked by an
// inviter: our main source of truth is the DM state.
const roomCreateEvent = room.currentState.getStateEvents("m.room.create", "");
if (!roomCreateEvent || !roomCreateEvent.getContent()) return false;
// we only look at this for rooms we created (so inviters can't just cause rooms
// to be invisible)
if (roomCreateEvent.getSender() !== MatrixClientPeg.get().getUserId()) return false;
const claimedNativeRoomId = roomCreateEvent.getContent()[VIRTUAL_ROOM_EVENT_TYPE];
return Boolean(claimedNativeRoomId);
}
public async onNewInvitedRoom(invitedRoom: Room) {
const inviterId = invitedRoom.getDMInviter();
console.log(`Checking virtual-ness of room ID ${invitedRoom.roomId}, invited by ${inviterId}`);
const result = await CallHandler.sharedInstance().sipNativeLookup(inviterId);
if (result.length === 0) {
return true;
}
if (result[0].fields.is_virtual) {
const nativeUser = result[0].userid;
const nativeRoom = findDMForUser(MatrixClientPeg.get(), nativeUser);
if (nativeRoom) {
// It's a virtual room with a matching native room, so set the room account data. This
// will make sure we know where how to map calls and also allow us know not to display
// it in the future.
MatrixClientPeg.get().setRoomAccountData(invitedRoom.roomId, VIRTUAL_ROOM_EVENT_TYPE, {
native_room: nativeRoom.roomId,
});
// also auto-join the virtual room if we have a matching native room
// (possibly we should only join if we've also joined the native room, then we'd also have
// to make sure we joined virtual rooms on joining a native one)
MatrixClientPeg.get().joinRoom(invitedRoom.roomId);
}
// also put this room in the virtual room ID cache so isVirtualRoom return the right answer
// in however long it takes for the echo of setAccountData to come down the sync
this.virtualRoomIdCache.add(invitedRoom.roomId);
}
}
}
export function isVirtualRoom(roomId: string):boolean {
const virtualUser = DMRoomMap.shared().getUserIdForRoomId(roomId);
if (!virtualUser) return null;
const realUser = virtualUserToUser(virtualUser);
return Boolean(realUser);
}

View file

@ -168,6 +168,12 @@ const shortcuts: Record<Categories, IShortcut[]> = {
key: Key.U,
}],
description: _td("Upload a file"),
}, {
keybinds: [{
modifiers: [CMD_OR_CTRL],
key: Key.F,
}],
description: _td("Search (must be enabled)"),
},
],

View file

@ -45,7 +45,7 @@ class FilePanel extends React.Component {
};
onRoomTimeline = (ev, room, toStartOfTimeline, removed, data) => {
if (room.roomId !== this.props.roomId) return;
if (room?.roomId !== this.props?.roomId) return;
if (toStartOfTimeline || !data || !data.liveEvent || ev.isRedacted()) return;
if (ev.isBeingDecrypted()) {

View file

@ -0,0 +1,56 @@
/*
Copyright 2021 The Matrix.org Foundation C.I.C.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import React from "react";
import {
IconizedContextMenuOption,
IconizedContextMenuOptionList,
} from "../views/context_menus/IconizedContextMenu";
import { _t } from "../../languageHandler";
import { HostSignupStore } from "../../stores/HostSignupStore";
import SdkConfig from "../../SdkConfig";
interface IProps {}
interface IState {}
export default class HostSignupAction extends React.PureComponent<IProps, IState> {
private openDialog = async () => {
await HostSignupStore.instance.setHostSignupActive(true);
}
public render(): React.ReactNode {
const hostSignupConfig = SdkConfig.get().hostSignup;
if (!hostSignupConfig?.brand) {
return null;
}
return (
<IconizedContextMenuOptionList>
<IconizedContextMenuOption
iconClassName="mx_UserMenu_iconHosting"
label={_t(
"Upgrade to %(hostSignupBrand)s",
{
hostSignupBrand: hostSignupConfig.brand,
},
)}
onClick={this.openDialog}
/>
</IconizedContextMenuOptionList>
);
}
}

View file

@ -177,7 +177,14 @@ export default class InteractiveAuthComponent extends React.Component {
stageState: stageState,
errorText: stageState.error,
}, () => {
if (oldStage != stageType) this._setFocus();
if (oldStage !== stageType) {
this._setFocus();
} else if (
!stageState.error && this._stageComponent.current &&
this._stageComponent.current.attemptFailed
) {
this._stageComponent.current.attemptFailed();
}
});
};

View file

@ -56,7 +56,7 @@ const LeftPanelWidget: React.FC<IProps> = ({ onResize }) => {
const [height, setHeight] = useLocalStorageState("left-panel-widget-height", INITIAL_HEIGHT);
const [expanded, setExpanded] = useLocalStorageState("left-panel-widget-expanded", true);
useEffect(onResize, [expanded]);
useEffect(onResize, [expanded, onResize]);
const [onFocus, isActive, ref] = useRovingTabIndex();
const tabIndex = isActive ? 0 : -1;

View file

@ -54,6 +54,7 @@ import { ToggleRightPanelPayload } from "../../dispatcher/payloads/ToggleRightPa
import { IThreepidInvite } from "../../stores/ThreepidInviteStore";
import Modal from "../../Modal";
import { ICollapseConfig } from "../../resizer/distributors/collapse";
import HostSignupContainer from '../views/host_signup/HostSignupContainer';
// We need to fetch each pinned message individually (if we don't already have it)
// so each pinned message may trigger a request. Limit the number per room for sanity.
@ -215,10 +216,12 @@ class LoggedInView extends React.Component<IProps, IState> {
_createResizer() {
let size;
let collapsed;
const collapseConfig: ICollapseConfig = {
toggleSize: 260 - 50,
onCollapsed: (collapsed) => {
if (collapsed) {
onCollapsed: (_collapsed) => {
collapsed = _collapsed;
if (_collapsed) {
dis.dispatch({action: "hide_left_panel"}, true);
window.localStorage.setItem("mx_lhs_size", '0');
} else {
@ -233,7 +236,7 @@ class LoggedInView extends React.Component<IProps, IState> {
this.props.resizeNotifier.startResizing();
},
onResizeStop: () => {
window.localStorage.setItem("mx_lhs_size", '' + size);
if (!collapsed) window.localStorage.setItem("mx_lhs_size", '' + size);
this.props.resizeNotifier.stopResizing();
},
};
@ -425,6 +428,14 @@ class LoggedInView extends React.Component<IProps, IState> {
handled = true;
}
break;
case Key.F:
if (ctrlCmdOnly && SettingsStore.getValue("ctrlFForSearch")) {
dis.dispatch({
action: 'focus_search',
});
handled = true;
}
break;
case Key.BACKTICK:
// Ideally this would be CTRL+P for "Profile", but that's
// taken by the print dialog. CTRL+I for "Information"
@ -638,6 +649,7 @@ class LoggedInView extends React.Component<IProps, IState> {
</div>
<CallContainer />
<NonUrgentToastContainer />
<HostSignupContainer />
</MatrixClientContext.Provider>
);
}

View file

@ -81,6 +81,7 @@ import ThreepidInviteStore, { IThreepidInvite, IThreepidInviteWireFormat } from
import {UIFeature} from "../../settings/UIFeature";
import { CommunityPrototypeStore } from "../../stores/CommunityPrototypeStore";
import DialPadModal from "../views/voip/DialPadModal";
import { showToast as showMobileGuideToast } from '../../toasts/MobileGuideToast';
/** constants for MatrixChat.state.view */
export enum Views {
@ -218,6 +219,7 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
private screenAfterLogin?: IScreen;
private windowWidth: number;
private pageChanging: boolean;
private tokenLogin?: boolean;
private accountPassword?: string;
private accountPasswordTimer?: NodeJS.Timeout;
private focusComposer: boolean;
@ -323,13 +325,21 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
Lifecycle.attemptTokenLogin(
this.props.realQueryParams,
this.props.defaultDeviceDisplayName,
).then((loggedIn) => {
if (loggedIn) {
this.getFragmentAfterLogin(),
).then(async (loggedIn) => {
if (this.props.realQueryParams?.loginToken) {
// remove the loginToken from the URL regardless
this.props.onTokenLoginCompleted();
}
// don't do anything else until the page reloads - just stay in
// the 'loading' state.
return;
if (loggedIn) {
this.tokenLogin = true;
// Create and start the client
await Lifecycle.restoreFromLocalStorage({
ignoreGuest: true,
});
return this.postLoginSetup();
}
// if the user has followed a login or register link, don't reanimate
@ -353,6 +363,42 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
CountlyAnalytics.instance.enable(/* anonymous = */ true);
}
private async postLoginSetup() {
const cli = MatrixClientPeg.get();
const cryptoEnabled = cli.isCryptoEnabled();
if (!cryptoEnabled) {
this.onLoggedIn();
}
const promisesList = [this.firstSyncPromise.promise];
if (cryptoEnabled) {
// wait for the client to finish downloading cross-signing keys for us so we
// know whether or not we have keys set up on this account
promisesList.push(cli.downloadKeys([cli.getUserId()]));
}
// Now update the state to say we're waiting for the first sync to complete rather
// than for the login to finish.
this.setState({ pendingInitialSync: true });
await Promise.all(promisesList);
if (!cryptoEnabled) {
this.setState({ pendingInitialSync: false });
return;
}
const crossSigningIsSetUp = cli.getStoredCrossSigningForUser(cli.getUserId());
if (crossSigningIsSetUp) {
this.setStateForNewView({ view: Views.COMPLETE_SECURITY });
} else if (await cli.doesServerSupportUnstableFeature("org.matrix.e2e_cross_signing")) {
this.setStateForNewView({ view: Views.E2E_SETUP });
} else {
this.onLoggedIn();
}
this.setState({ pendingInitialSync: false });
}
// TODO: [REACT-WARNING] Replace with appropriate lifecycle stage
// eslint-disable-next-line camelcase
UNSAFE_componentWillUpdate(props, state) {
@ -709,6 +755,8 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
break;
case 'on_logged_in':
if (
// Skip this handling for token login as that always calls onLoggedIn itself
!this.tokenLogin &&
!Lifecycle.isSoftLogout() &&
this.state.view !== Views.LOGIN &&
this.state.view !== Views.REGISTER &&
@ -1186,6 +1234,11 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
) {
showAnalyticsToast(this.props.config.piwik?.policyUrl);
}
if (SdkConfig.get().mobileGuideToast) {
// The toast contains further logic to detect mobile platforms,
// check if it has been dismissed before, etc.
showMobileGuideToast();
}
}
private showScreenAfterLogin() {
@ -1322,6 +1375,9 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
cli.on('Session.logged_out', function(errObj) {
if (Lifecycle.isLoggingOut()) return;
// A modal might have been open when we were logged out by the server
Modal.closeCurrentModal('Session.logged_out');
if (errObj.httpStatus === 401 && errObj.data && errObj.data['soft_logout']) {
console.warn("Soft logout issued by server - avoiding data deletion");
Lifecycle.softLogout();
@ -1332,6 +1388,7 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
title: _t('Signed Out'),
description: _t('For security, this session has been signed out. Please sign in again.'),
});
dis.dispatch({
action: 'logout',
});
@ -1601,10 +1658,16 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
// TODO: Handle encoded room/event IDs: https://github.com/vector-im/element-web/issues/9149
let threepidInvite: IThreepidInvite;
// if we landed here from a 3PID invite, persist it
if (params.signurl && params.email) {
threepidInvite = ThreepidInviteStore.instance
.storeInvite(roomString, params as IThreepidInviteWireFormat);
}
// otherwise check that this room doesn't already have a known invite
if (!threepidInvite) {
const invites = ThreepidInviteStore.instance.getInvites();
threepidInvite = invites.find(invite => invite.roomId === roomString);
}
// on our URLs there might be a ?via=matrix.org or similar to help
// joins to the room succeed. We'll pass these through as an array
@ -1833,40 +1896,7 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
// Create and start the client
await Lifecycle.setLoggedIn(credentials);
const cli = MatrixClientPeg.get();
const cryptoEnabled = cli.isCryptoEnabled();
if (!cryptoEnabled) {
this.onLoggedIn();
}
const promisesList = [this.firstSyncPromise.promise];
if (cryptoEnabled) {
// wait for the client to finish downloading cross-signing keys for us so we
// know whether or not we have keys set up on this account
promisesList.push(cli.downloadKeys([cli.getUserId()]));
}
// Now update the state to say we're waiting for the first sync to complete rather
// than for the login to finish.
this.setState({ pendingInitialSync: true });
await Promise.all(promisesList);
if (!cryptoEnabled) {
this.setState({ pendingInitialSync: false });
return;
}
const crossSigningIsSetUp = cli.getStoredCrossSigningForUser(cli.getUserId());
if (crossSigningIsSetUp) {
this.setStateForNewView({ view: Views.COMPLETE_SECURITY });
} else if (await cli.doesServerSupportUnstableFeature("org.matrix.e2e_cross_signing")) {
this.setStateForNewView({ view: Views.E2E_SETUP });
} else {
this.onLoggedIn();
}
this.setState({ pendingInitialSync: false });
await this.postLoginSetup();
};
// complete security / e2e setup has finished
@ -1910,6 +1940,7 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
<E2eSetup
onFinished={this.onCompleteSecurityE2eSetupFinished}
accountPassword={this.accountPassword}
tokenLogin={!!this.tokenLogin}
/>
);
} else if (this.state.view === Views.LOGGED_IN) {

View file

@ -23,9 +23,11 @@ import classNames from 'classnames';
import shouldHideEvent from '../../shouldHideEvent';
import {wantsDateSeparator} from '../../DateUtils';
import * as sdk from '../../index';
import dis from "../../dispatcher/dispatcher";
import {MatrixClientPeg} from '../../MatrixClientPeg';
import SettingsStore from '../../settings/SettingsStore';
import {Layout, LayoutPropType} from "../../settings/Layout";
import {_t} from "../../languageHandler";
import {haveTileForEvent} from "../views/rooms/EventTile";
import {textForEvent} from "../../TextForEvent";
@ -135,14 +137,13 @@ export default class MessagePanel extends React.Component {
// whether to show reactions for an event
showReactions: PropTypes.bool,
// whether to use the irc layout
useIRCLayout: PropTypes.bool,
// which layout to use
layout: LayoutPropType,
// whether or not to show flair at all
enableFlair: PropTypes.bool,
};
// Force props to be loaded for useIRCLayout
constructor(props) {
super(props);
@ -207,11 +208,13 @@ export default class MessagePanel extends React.Component {
componentDidMount() {
this._isMounted = true;
this.dispatcherRef = dis.register(this.onAction);
}
componentWillUnmount() {
this._isMounted = false;
SettingsStore.unwatchSetting(this._showTypingNotificationsWatcherRef);
dis.unregister(this.dispatcherRef);
}
componentDidUpdate(prevProps, prevState) {
@ -224,6 +227,14 @@ export default class MessagePanel extends React.Component {
}
}
onAction = (payload) => {
switch (payload.action) {
case "scroll_to_bottom":
this.scrollToBottom();
break;
}
}
onShowTypingNotificationsChange = () => {
this.setState({
showTypingNotifications: SettingsStore.getValue("showTypingNotifications"),
@ -612,7 +623,7 @@ export default class MessagePanel extends React.Component {
isSelectedEvent={highlight}
getRelationsForEvent={this.props.getRelationsForEvent}
showReactions={this.props.showReactions}
useIRCLayout={this.props.useIRCLayout}
layout={this.props.layout}
enableFlair={this.props.enableFlair}
/>
</TileErrorBoundary>
@ -810,7 +821,7 @@ export default class MessagePanel extends React.Component {
}
let ircResizer = null;
if (this.props.useIRCLayout) {
if (this.props.layout == Layout.IRC) {
ircResizer = <IRCTimelineProfileResizer
minWidth={20}
maxWidth={600}

View file

@ -30,7 +30,6 @@ import MatrixClientContext from "../../contexts/MatrixClientContext";
import {Action} from "../../dispatcher/actions";
import RoomSummaryCard from "../views/right_panel/RoomSummaryCard";
import WidgetCard from "../views/right_panel/WidgetCard";
import defaultDispatcher from "../../dispatcher/dispatcher";
export default class RightPanel extends React.Component {
static get propTypes() {
@ -186,7 +185,7 @@ export default class RightPanel extends React.Component {
}
}
onCloseUserInfo = () => {
onClose = () => {
// XXX: There are three different ways of 'closing' this panel depending on what state
// things are in... this knows far more than it should do about the state of the rest
// of the app and is generally a bit silly.
@ -198,31 +197,21 @@ export default class RightPanel extends React.Component {
dis.dispatch({
action: "view_home_page",
});
} else if (this.state.phase === RightPanelPhases.EncryptionPanel &&
} else if (
this.state.phase === RightPanelPhases.EncryptionPanel &&
this.state.verificationRequest && this.state.verificationRequest.pending
) {
// When the user clicks close on the encryption panel cancel the pending request first if any
this.state.verificationRequest.cancel();
} else {
// Otherwise we have got our user from RoomViewStore which means we're being shown
// within a room/group, so go back to the member panel if we were in the encryption panel,
// or the member list if we were in the member panel... phew.
const isEncryptionPhase = this.state.phase === RightPanelPhases.EncryptionPanel;
// the RightPanelStore has no way of knowing which mode room/group it is in, so we handle closing here
dis.dispatch({
action: Action.ViewUser,
member: isEncryptionPhase ? this.state.member : null,
action: Action.ToggleRightPanel,
type: this.props.groupId ? "group" : "room",
});
}
};
onClose = () => {
// the RightPanelStore has no way of knowing which mode room/group it is in, so we handle closing here
defaultDispatcher.dispatch({
action: Action.ToggleRightPanel,
type: this.props.groupId ? "group" : "room",
});
};
render() {
const MemberList = sdk.getComponent('rooms.MemberList');
const UserInfo = sdk.getComponent('right_panel.UserInfo');
@ -260,7 +249,7 @@ export default class RightPanel extends React.Component {
user={this.state.member}
room={this.props.room}
key={roomId || this.state.member.userId}
onClose={this.onCloseUserInfo}
onClose={this.onClose}
phase={this.state.phase}
verificationRequest={this.state.verificationRequest}
verificationRequestPromise={this.state.verificationRequestPromise}
@ -276,7 +265,7 @@ export default class RightPanel extends React.Component {
user={this.state.member}
groupId={this.props.groupId}
key={this.state.member.userId}
onClose={this.onCloseUserInfo} />;
onClose={this.onClose} />;
break;
case RightPanelPhases.GroupRoomInfo:

View file

@ -477,7 +477,7 @@ export default class RoomDirectory extends React.Component {
dis.dispatch(payload);
}
getRow(room) {
createRoomCells(room) {
const client = MatrixClientPeg.get();
const clientRoom = client.getRoom(room.room_id);
const hasJoinedRoom = clientRoom && clientRoom.getMyMembership() === "join";
@ -523,31 +523,56 @@ export default class RoomDirectory extends React.Component {
MatrixClientPeg.get().getHomeserverUrl(),
room.avatar_url, 32, 32, "crop",
);
return (
<tr key={ room.room_id }
return [
<div key={ `${room.room_id}_avatar` }
onClick={(ev) => this.onRoomClicked(room, ev)}
// cancel onMouseDown otherwise shift-clicking highlights text
onMouseDown={(ev) => {ev.preventDefault();}}
className="mx_RoomDirectory_roomAvatar"
>
<td className="mx_RoomDirectory_roomAvatar">
<BaseAvatar width={32} height={32} resizeMethod='crop'
name={ name } idName={ name }
url={ avatarUrl } />
</td>
<td className="mx_RoomDirectory_roomDescription">
<div className="mx_RoomDirectory_name">{ name }</div>&nbsp;
<div className="mx_RoomDirectory_topic"
onClick={ (ev) => { ev.stopPropagation(); } }
dangerouslySetInnerHTML={{ __html: topic }} />
<div className="mx_RoomDirectory_alias">{ get_display_alias_for_room(room) }</div>
</td>
<td className="mx_RoomDirectory_roomMemberCount">
{ room.num_joined_members }
</td>
<td className="mx_RoomDirectory_preview">{previewButton}</td>
<td className="mx_RoomDirectory_join">{joinOrViewButton}</td>
</tr>
);
<BaseAvatar width={32} height={32} resizeMethod='crop'
name={ name } idName={ name }
url={ avatarUrl }
/>
</div>,
<div key={ `${room.room_id}_description` }
onClick={(ev) => this.onRoomClicked(room, ev)}
// cancel onMouseDown otherwise shift-clicking highlights text
onMouseDown={(ev) => {ev.preventDefault();}}
className="mx_RoomDirectory_roomDescription"
>
<div className="mx_RoomDirectory_name">{ name }</div>&nbsp;
<div className="mx_RoomDirectory_topic"
onClick={ (ev) => { ev.stopPropagation(); } }
dangerouslySetInnerHTML={{ __html: topic }}
/>
<div className="mx_RoomDirectory_alias">{ get_display_alias_for_room(room) }</div>
</div>,
<div key={ `${room.room_id}_memberCount` }
onClick={(ev) => this.onRoomClicked(room, ev)}
// cancel onMouseDown otherwise shift-clicking highlights text
onMouseDown={(ev) => {ev.preventDefault();}}
className="mx_RoomDirectory_roomMemberCount"
>
{ room.num_joined_members }
</div>,
<div key={ `${room.room_id}_preview` }
onClick={(ev) => this.onRoomClicked(room, ev)}
// cancel onMouseDown otherwise shift-clicking highlights text
onMouseDown={(ev) => {ev.preventDefault();}}
className="mx_RoomDirectory_preview"
>
{previewButton}
</div>,
<div key={ `${room.room_id}_join` }
onClick={(ev) => this.onRoomClicked(room, ev)}
// cancel onMouseDown otherwise shift-clicking highlights text
onMouseDown={(ev) => {ev.preventDefault();}}
className="mx_RoomDirectory_join"
>
{joinOrViewButton}
</div>,
];
}
collectScrollPanel = (element) => {
@ -606,7 +631,8 @@ export default class RoomDirectory extends React.Component {
} else if (this.state.protocolsLoading) {
content = <Loader />;
} else {
const rows = (this.state.publicRooms || []).map(room => this.getRow(room));
const cells = (this.state.publicRooms || [])
.reduce((cells, room) => cells.concat(this.createRoomCells(room)), [],);
// we still show the scrollpanel, at least for now, because
// otherwise we don't fetch more because we don't get a fill
// request from the scrollpanel because there isn't one
@ -617,14 +643,12 @@ export default class RoomDirectory extends React.Component {
}
let scrollpanel_content;
if (rows.length === 0 && !this.state.loading) {
if (cells.length === 0 && !this.state.loading) {
scrollpanel_content = <i>{ _t('No rooms to show') }</i>;
} else {
scrollpanel_content = <table className="mx_RoomDirectory_table">
<tbody>
{ rows }
</tbody>
</table>;
scrollpanel_content = <div className="mx_RoomDirectory_table">
{ cells }
</div>;
}
const ScrollPanel = sdk.getComponent("structures.ScrollPanel");
content = <ScrollPanel ref={this.collectScrollPanel}

View file

@ -48,6 +48,7 @@ import RoomViewStore from '../../stores/RoomViewStore';
import RoomScrollStateStore from '../../stores/RoomScrollStateStore';
import WidgetEchoStore from '../../stores/WidgetEchoStore';
import SettingsStore from "../../settings/SettingsStore";
import {Layout} from "../../settings/Layout";
import AccessibleButton from "../views/elements/AccessibleButton";
import RightPanelStore from "../../stores/RightPanelStore";
import { haveTileForEvent } from "../views/rooms/EventTile";
@ -181,7 +182,7 @@ export interface IState {
};
canReact: boolean;
canReply: boolean;
useIRCLayout: boolean;
layout: Layout;
matrixClientIsReady: boolean;
showUrlPreview?: boolean;
e2eStatus?: E2EStatus;
@ -236,7 +237,7 @@ export default class RoomView extends React.Component<IProps, IState> {
statusBarVisible: false,
canReact: false,
canReply: false,
useIRCLayout: SettingsStore.getValue("useIRCLayout"),
layout: SettingsStore.getValue("layout"),
matrixClientIsReady: this.context && this.context.isInitialSyncComplete(),
};
@ -264,13 +265,7 @@ export default class RoomView extends React.Component<IProps, IState> {
this.showReadReceiptsWatchRef = SettingsStore.watchSetting("showReadReceipts", null,
this.onReadReceiptsChange);
this.layoutWatcherRef = SettingsStore.watchSetting("useIRCLayout", null, this.onLayoutChange);
}
// TODO: [REACT-WARNING] Move into constructor
// eslint-disable-next-line camelcase
UNSAFE_componentWillMount() {
this.onRoomViewStoreUpdate(true);
this.layoutWatcherRef = SettingsStore.watchSetting("layout", null, this.onLayoutChange);
}
private onWidgetStoreUpdate = () => {
@ -512,6 +507,8 @@ export default class RoomView extends React.Component<IProps, IState> {
}
componentDidMount() {
this.onRoomViewStoreUpdate(true);
const call = this.getCallForRoom();
const callState = call ? call.state : null;
this.setState({
@ -642,7 +639,7 @@ export default class RoomView extends React.Component<IProps, IState> {
private onLayoutChange = () => {
this.setState({
useIRCLayout: SettingsStore.getValue("useIRCLayout"),
layout: SettingsStore.getValue("layout"),
});
};
@ -766,6 +763,9 @@ export default class RoomView extends React.Component<IProps, IState> {
});
}
break;
case 'focus_search':
this.onSearchClick();
break;
}
};
@ -1946,8 +1946,8 @@ export default class RoomView extends React.Component<IProps, IState> {
const messagePanelClassNames = classNames(
"mx_RoomView_messagePanel",
{
"mx_IRCLayout": this.state.useIRCLayout,
"mx_GroupLayout": !this.state.useIRCLayout,
"mx_IRCLayout": this.state.layout == Layout.IRC,
"mx_GroupLayout": this.state.layout == Layout.Group,
});
// console.info("ShowUrlPreview for %s is %s", this.state.room.roomId, this.state.showUrlPreview);
@ -1970,7 +1970,7 @@ export default class RoomView extends React.Component<IProps, IState> {
permalinkCreator={this.getPermalinkCreatorForRoom(this.state.room)}
resizeNotifier={this.props.resizeNotifier}
showReactions={true}
useIRCLayout={this.state.useIRCLayout}
layout={this.state.layout}
/>);
let topUnreadMessagesBar = null;

View file

@ -20,7 +20,6 @@ import * as React from "react";
import {_t} from '../../languageHandler';
import * as sdk from "../../index";
import AutoHideScrollbar from './AutoHideScrollbar';
import { ReactNode } from "react";
/**
* Represents a tab for the TabbedView.

View file

@ -18,6 +18,7 @@ limitations under the License.
*/
import SettingsStore from "../../settings/SettingsStore";
import {LayoutPropType} from "../../settings/Layout";
import React, {createRef} from 'react';
import ReactDOM from "react-dom";
import PropTypes from 'prop-types';
@ -111,8 +112,8 @@ class TimelinePanel extends React.Component {
// whether to show reactions for an event
showReactions: PropTypes.bool,
// whether to use the irc layout
useIRCLayout: PropTypes.bool,
// which layout to use
layout: LayoutPropType,
}
// a map from room id to read marker event timestamp
@ -1442,7 +1443,7 @@ class TimelinePanel extends React.Component {
getRelationsForEvent={this.getRelationsForEvent}
editState={this.state.editState}
showReactions={this.props.showReactions}
useIRCLayout={this.props.useIRCLayout}
layout={this.props.layout}
enableFlair={SettingsStore.getValue(UIFeature.Flair)}
/>
);

View file

@ -1,5 +1,5 @@
/*
Copyright 2020 The Matrix.org Foundation C.I.C.
Copyright 2020, 2021 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.
@ -28,7 +28,6 @@ import Modal from "../../Modal";
import LogoutDialog from "../views/dialogs/LogoutDialog";
import SettingsStore from "../../settings/SettingsStore";
import {getCustomTheme} from "../../theme";
import {getHostingLink} from "../../utils/HostingLink";
import AccessibleButton, {ButtonEvent} from "../views/elements/AccessibleButton";
import SdkConfig from "../../SdkConfig";
import {getHomePageUrl} from "../../utils/pages";
@ -51,6 +50,8 @@ import { RightPanelPhases } from "../../stores/RightPanelStorePhases";
import ErrorDialog from "../views/dialogs/ErrorDialog";
import EditCommunityPrototypeDialog from "../views/dialogs/EditCommunityPrototypeDialog";
import {UIFeature} from "../../settings/UIFeature";
import HostSignupAction from "./HostSignupAction";
import {IHostSignupConfig} from "../views/dialogs/HostSignupDialogTypes";
interface IProps {
isMinimized: boolean;
@ -272,7 +273,7 @@ export default class UserMenu extends React.Component<IProps, IState> {
const prototypeCommunityName = CommunityPrototypeStore.instance.getSelectedCommunityName();
let topSection;
const signupLink = getHostingLink("user-context-menu");
const hostSignupConfig: IHostSignupConfig = SdkConfig.get().hostSignup;
if (MatrixClientPeg.get().isGuest()) {
topSection = (
<div className="mx_UserMenu_contextMenu_header mx_UserMenu_contextMenu_guestPrompts">
@ -292,24 +293,19 @@ export default class UserMenu extends React.Component<IProps, IState> {
})}
</div>
)
} else if (signupLink) {
topSection = (
<div className="mx_UserMenu_contextMenu_header mx_UserMenu_contextMenu_hostingLink">
{_t(
"<a>Upgrade</a> to your own domain", {},
{
a: sub => (
<a
href={signupLink}
target="_blank"
rel="noreferrer noopener"
tabIndex={-1}
>{sub}</a>
),
},
)}
</div>
);
} else if (hostSignupConfig) {
if (hostSignupConfig && hostSignupConfig.url) {
// If hostSignup.domains is set to a non-empty array, only show
// dialog if the user is on the domain or a subdomain.
const hostSignupDomains = hostSignupConfig.domains || [];
const mxDomain = MatrixClientPeg.get().getDomain();
const validDomains = hostSignupDomains.filter(d => (d === mxDomain || mxDomain.endsWith(`.${d}`)));
if (!hostSignupConfig.domains || validDomains.length > 0) {
topSection = <div onClick={this.onCloseMenu}>
<HostSignupAction />
</div>;
}
}
}
let homeButton = null;

View file

@ -24,6 +24,7 @@ export default class E2eSetup extends React.Component {
static propTypes = {
onFinished: PropTypes.func.isRequired,
accountPassword: PropTypes.string,
tokenLogin: PropTypes.bool,
};
render() {
@ -33,6 +34,7 @@ export default class E2eSetup extends React.Component {
<CreateCrossSigningDialog
onFinished={this.props.onFinished}
accountPassword={this.props.accountPassword}
tokenLogin={this.props.tokenLogin}
/>
</CompleteSecurityBody>
</AuthPage>

View file

@ -340,8 +340,8 @@ export default class LoginComponent extends React.PureComponent<IProps, IState>
};
onTryRegisterClick = ev => {
const hasPasswordFlow = this.state.flows.find(flow => flow.type === "m.login.password");
const ssoFlow = this.state.flows.find(flow => flow.type === "m.login.sso" || flow.type === "m.login.cas");
const hasPasswordFlow = this.state.flows?.find(flow => flow.type === "m.login.password");
const ssoFlow = this.state.flows?.find(flow => flow.type === "m.login.sso" || flow.type === "m.login.cas");
// If has no password flow but an SSO flow guess that the user wants to register with SSO.
// TODO: instead hide the Register button if registration is disabled by checking with the server,
// has no specific errCode currently and uses M_FORBIDDEN.

View file

@ -609,8 +609,12 @@ export class SSOAuthEntry extends React.Component {
this.props.authSessionId,
);
this._popupWindow = null;
window.addEventListener("message", this._onReceiveMessage);
this.state = {
phase: SSOAuthEntry.PHASE_PREAUTH,
attemptFailed: false,
};
}
@ -618,12 +622,35 @@ export class SSOAuthEntry extends React.Component {
this.props.onPhaseChange(SSOAuthEntry.PHASE_PREAUTH);
}
componentWillUnmount() {
window.removeEventListener("message", this._onReceiveMessage);
if (this._popupWindow) {
this._popupWindow.close();
this._popupWindow = null;
}
}
attemptFailed = () => {
this.setState({
attemptFailed: true,
});
};
_onReceiveMessage = event => {
if (event.data === "authDone" && event.origin === this.props.matrixClient.getHomeserverUrl()) {
if (this._popupWindow) {
this._popupWindow.close();
this._popupWindow = null;
}
}
};
onStartAuthClick = () => {
// Note: We don't use PlatformPeg's startSsoAuth functions because we almost
// certainly will need to open the thing in a new tab to avoid losing application
// context.
window.open(this._ssoUrl, '_blank');
this._popupWindow = window.open(this._ssoUrl, "_blank");
this.setState({phase: SSOAuthEntry.PHASE_POSTAUTH});
this.props.onPhaseChange(SSOAuthEntry.PHASE_POSTAUTH);
};
@ -656,10 +683,28 @@ export class SSOAuthEntry extends React.Component {
);
}
return <div className='mx_InteractiveAuthEntryComponents_sso_buttons'>
{cancelButton}
{continueButton}
</div>;
let errorSection;
if (this.props.errorText) {
errorSection = (
<div className="error" role="alert">
{ this.props.errorText }
</div>
);
} else if (this.state.attemptFailed) {
errorSection = (
<div className="error" role="alert">
{ _t("Something went wrong in confirming your identity. Cancel and try again.") }
</div>
);
}
return <React.Fragment>
{ errorSection }
<div className="mx_InteractiveAuthEntryComponents_sso_buttons">
{cancelButton}
{continueButton}
</div>
</React.Fragment>;
}
}
@ -710,8 +755,7 @@ export class FallbackAuthEntry extends React.Component {
this.props.loginType,
this.props.authSessionId,
);
this._popupWindow = window.open(url);
this._popupWindow.opener = null;
this._popupWindow = window.open(url, "_blank");
};
_onReceiveMessage = event => {

View file

@ -196,7 +196,7 @@ export default class PasswordLogin extends React.PureComponent<IProps, IState> {
// Validation and state updates are async, so we need to wait for them to complete
// first. Queue a `setState` callback and wait for it to resolve.
await new Promise(resolve => this.setState({}, resolve));
await new Promise<void>(resolve => this.setState({}, resolve));
if (this.allFieldsValid()) {
return true;

View file

@ -194,7 +194,7 @@ export default class RegistrationForm extends React.PureComponent<IProps, IState
// Validation and state updates are async, so we need to wait for them to complete
// first. Queue a `setState` callback and wait for it to resolve.
await new Promise(resolve => this.setState({}, resolve));
await new Promise<void>(resolve => this.setState({}, resolve));
if (this.allFieldsValid()) {
return true;

View file

@ -50,6 +50,10 @@ export default class ErrorDialog extends React.Component {
button: null,
};
onClick = () => {
this.props.onFinished(true);
};
render() {
const BaseDialog = sdk.getComponent('views.dialogs.BaseDialog');
return (
@ -64,7 +68,7 @@ export default class ErrorDialog extends React.Component {
{ this.props.description || _t('An error has occurred.') }
</div>
<div className="mx_Dialog_buttons">
<button className="mx_Dialog_primary" onClick={this.props.onFinished} autoFocus={this.props.focus}>
<button className="mx_Dialog_primary" onClick={this.onClick} autoFocus={this.props.focus}>
{ this.props.button || _t('OK') }
</button>
</div>

View file

@ -0,0 +1,291 @@
/*
Copyright 2021 The Matrix.org Foundation C.I.C.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import React from "react";
import AccessibleButton from "../elements/AccessibleButton";
import Modal from "../../../Modal";
import PersistedElement from "../elements/PersistedElement";
import QuestionDialog from './QuestionDialog';
import SdkConfig from "../../../SdkConfig";
import classNames from "classnames";
import { _t } from "../../../languageHandler";
import { MatrixClientPeg } from "../../../MatrixClientPeg";
import { HostSignupStore } from "../../../stores/HostSignupStore";
import { OwnProfileStore } from "../../../stores/OwnProfileStore";
import {
IHostSignupConfig,
IPostmessage,
IPostmessageResponseData,
PostmessageAction,
} from "./HostSignupDialogTypes";
const HOST_SIGNUP_KEY = "host_signup";
interface IProps {}
interface IState {
completed: boolean;
error: string;
minimized: boolean;
}
export default class HostSignupDialog extends React.PureComponent<IProps, IState> {
private iframeRef: React.RefObject<HTMLIFrameElement> = React.createRef();
private readonly config: IHostSignupConfig;
constructor(props: IProps) {
super(props);
this.state = {
completed: false,
error: null,
minimized: false,
};
this.config = SdkConfig.get().hostSignup;
}
private messageHandler = async (message: IPostmessage) => {
if (!this.config.url.startsWith(message.origin)) {
return;
}
switch (message.data.action) {
case PostmessageAction.HostSignupAccountDetailsRequest:
this.onAccountDetailsRequest();
break;
case PostmessageAction.Maximize:
this.setState({
minimized: false,
});
break;
case PostmessageAction.Minimize:
this.setState({
minimized: true,
});
break;
case PostmessageAction.SetupComplete:
this.setState({
completed: true,
});
break;
case PostmessageAction.CloseDialog:
return this.closeDialog();
}
}
private maximizeDialog = () => {
this.setState({
minimized: false,
});
// Send this action to the iframe so it can act accordingly
this.sendMessage({
action: PostmessageAction.Maximize,
});
}
private minimizeDialog = () => {
this.setState({
minimized: true,
});
// Send this action to the iframe so it can act accordingly
this.sendMessage({
action: PostmessageAction.Minimize,
});
}
private closeDialog = async () => {
window.removeEventListener("message", this.messageHandler);
// Ensure we destroy the host signup persisted element
PersistedElement.destroyElement("host_signup");
// Finally clear the flag in
return HostSignupStore.instance.setHostSignupActive(false);
}
private onCloseClick = async () => {
if (this.state.completed) {
// We're done, close
return this.closeDialog();
} else {
Modal.createDialog(
QuestionDialog,
{
title: _t("Confirm abort of host creation"),
description: _t(
"Are you sure you wish to abort creation of the host? The process cannot be continued.",
),
button: _t("Abort"),
onFinished: result => {
if (result) {
return this.closeDialog();
}
},
},
);
}
}
private sendMessage = (message: IPostmessageResponseData) => {
this.iframeRef.current.contentWindow.postMessage(message, this.config.url);
}
private async sendAccountDetails() {
const openIdToken = await MatrixClientPeg.get().getOpenIdToken();
if (!openIdToken || !openIdToken.access_token) {
console.warn("Failed to connect to homeserver for OpenID token.")
this.setState({
completed: true,
error: _t("Failed to connect to your homeserver. Please close this dialog and try again."),
});
return;
}
this.sendMessage({
action: PostmessageAction.HostSignupAccountDetails,
account: {
accessToken: await MatrixClientPeg.get().getAccessToken(),
name: OwnProfileStore.instance.displayName,
openIdToken: openIdToken.access_token,
serverName: await MatrixClientPeg.get().getDomain(),
userLocalpart: await MatrixClientPeg.get().getUserIdLocalpart(),
termsAccepted: true,
},
});
}
private onAccountDetailsDialogFinished = async (result) => {
if (result) {
return this.sendAccountDetails();
}
return this.closeDialog();
}
private onAccountDetailsRequest = () => {
const textComponent = (
<>
<p>
{_t("Continuing temporarily allows the %(hostSignupBrand)s setup process to access your " +
"account to fetch verified email addresses. This data is not stored.", {
hostSignupBrand: this.config.brand,
})}
</p>
<p>
{_t("Learn more in our <privacyPolicyLink />, <termsOfServiceLink /> and <cookiePolicyLink />.",
{},
{
cookiePolicyLink: () => (
<a href={this.config.cookiePolicyUrl} target="_blank" rel="noreferrer noopener">
{_t("Cookie Policy")}
</a>
),
privacyPolicyLink: () => (
<a href={this.config.privacyPolicyUrl} target="_blank" rel="noreferrer noopener">
{_t("Privacy Policy")}
</a>
),
termsOfServiceLink: () => (
<a href={this.config.termsOfServiceUrl} target="_blank" rel="noreferrer noopener">
{_t("Terms of Service")}
</a>
),
},
)}
</p>
</>
);
Modal.createDialog(
QuestionDialog,
{
title: _t("You should know"),
description: textComponent,
button: _t("Continue"),
onFinished: this.onAccountDetailsDialogFinished,
},
);
}
public componentDidMount() {
window.addEventListener("message", this.messageHandler);
}
public componentWillUnmount() {
if (HostSignupStore.instance.isHostSignupActive) {
// Run the close dialog actions if we're still active, otherwise good to go
return this.closeDialog();
}
}
public render(): React.ReactNode {
return (
<div className="mx_HostSignup_persisted">
<PersistedElement key={HOST_SIGNUP_KEY} persistKey={HOST_SIGNUP_KEY}>
<div className={classNames({ "mx_Dialog_wrapper": !this.state.minimized })}>
<div
className={classNames("mx_Dialog",
{
"mx_HostSignupDialog_minimized": this.state.minimized,
"mx_HostSignupDialog": !this.state.minimized,
},
)}
>
{this.state.minimized &&
<div className="mx_Dialog_header mx_Dialog_headerWithButton">
<div className="mx_Dialog_title">
{_t("%(hostSignupBrand)s Setup", {
hostSignupBrand: this.config.brand,
})}
</div>
<AccessibleButton
className="mx_HostSignup_maximize_button"
onClick={this.maximizeDialog}
aria-label={_t("Maximize dialog")}
title={_t("Maximize dialog")}
/>
</div>
}
{!this.state.minimized &&
<div className="mx_Dialog_header mx_Dialog_headerWithCancel">
<AccessibleButton
onClick={this.minimizeDialog}
className="mx_HostSignup_minimize_button"
aria-label={_t("Minimize dialog")}
title={_t("Minimize dialog")}
/>
<AccessibleButton
onClick={this.onCloseClick}
className="mx_Dialog_cancelButton"
aria-label={_t("Close dialog")}
title={_t("Close dialog")}
/>
</div>
}
{this.state.error &&
<div>
{this.state.error}
</div>
}
{!this.state.error &&
<iframe
src={this.config.url}
ref={this.iframeRef}
sandbox="allow-forms allow-scripts allow-same-origin allow-popups"
/>
}
</div>
</div>
</PersistedElement>
</div>
);
}
}

View file

@ -0,0 +1,56 @@
/*
Copyright 2021 The Matrix.org Foundation C.I.C.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
export enum PostmessageAction {
CloseDialog = "close_dialog",
HostSignupAccountDetails = "host_signup_account_details",
HostSignupAccountDetailsRequest = "host_signup_account_details_request",
Minimize = "host_signup_minimize",
Maximize = "host_signup_maximize",
SetupComplete = "setup_complete",
}
interface IAccountData {
accessToken: string;
name: string;
openIdToken: string;
serverName: string;
userLocalpart: string;
termsAccepted: boolean;
}
export interface IPostmessageRequestData {
action: PostmessageAction;
}
export interface IPostmessageResponseData {
action: PostmessageAction;
account?: IAccountData;
}
export interface IPostmessage {
data: IPostmessageRequestData;
origin: string;
}
export interface IHostSignupConfig {
brand: string;
cookiePolicyUrl: string;
domains: Array<string>;
privacyPolicyUrl: string;
termsOfServiceUrl: string;
url: string;
}

View file

@ -35,13 +35,13 @@ import {
} from "matrix-widget-api";
import {StopGapWidgetDriver} from "../../../stores/widgets/StopGapWidgetDriver";
import {MatrixClientPeg} from "../../../MatrixClientPeg";
import RoomViewStore from "../../../stores/RoomViewStore";
import {OwnProfileStore} from "../../../stores/OwnProfileStore";
import { arrayFastClone } from "../../../utils/arrays";
import { ElementWidget } from "../../../stores/widgets/StopGapWidget";
interface IProps {
widgetDefinition: IModalWidgetOpenRequestData;
widgetRoomId?: string;
sourceWidgetId: string;
onFinished(success: boolean, data?: IModalWidgetReturnData): void;
}
@ -123,7 +123,7 @@ export default class ModalWidgetDialog extends React.PureComponent<IProps, IStat
public render() {
const templated = this.widget.getCompleteUrl({
currentRoomId: RoomViewStore.getRoomId(),
widgetRoomId: this.props.widgetRoomId,
currentUserId: MatrixClientPeg.get().getUserId(),
userDisplayName: OwnProfileStore.instance.displayName,
userHttpAvatarUrl: OwnProfileStore.instance.getHttpAvatarUrl(),

View file

@ -44,7 +44,8 @@ const RegistrationEmailPromptDialog: React.FC<IProps> = ({onFinished}) => {
const [email, setEmail] = useState("");
const fieldRef = useRef<Field>();
const onSubmit = async () => {
const onSubmit = async (e) => {
e.preventDefault();
if (email) {
const valid = await fieldRef.current.validate({ allowEmpty: false });
@ -73,6 +74,7 @@ const RegistrationEmailPromptDialog: React.FC<IProps> = ({onFinished}) => {
<form onSubmit={onSubmit}>
<Field
ref={fieldRef}
autoFocus={true}
type="text"
label={_t("Email (optional)")}
value={email}

View file

@ -18,6 +18,7 @@ import React, {createRef} from 'react';
import PropTypes from 'prop-types';
import * as sdk from '../../../index';
import Field from "../elements/Field";
import { _t, _td } from '../../../languageHandler';
export default class TextInputDialog extends React.Component {
static propTypes = {
@ -29,6 +30,7 @@ export default class TextInputDialog extends React.Component {
value: PropTypes.string,
placeholder: PropTypes.string,
button: PropTypes.string,
busyMessage: PropTypes.string, // pass _td string
focus: PropTypes.bool,
onFinished: PropTypes.func.isRequired,
hasCancel: PropTypes.bool,
@ -40,6 +42,7 @@ export default class TextInputDialog extends React.Component {
title: "",
value: "",
description: "",
busyMessage: _td("Loading..."),
focus: true,
hasCancel: true,
};
@ -51,6 +54,7 @@ export default class TextInputDialog extends React.Component {
this.state = {
value: this.props.value,
busy: false,
valid: false,
};
}
@ -66,11 +70,13 @@ export default class TextInputDialog extends React.Component {
onOk = async ev => {
ev.preventDefault();
if (this.props.validator) {
this.setState({ busy: true });
await this._field.current.validate({ allowEmpty: false });
if (!this._field.current.state.valid) {
this._field.current.focus();
this._field.current.validate({ allowEmpty: false, focused: true });
this.setState({ busy: false });
return;
}
}
@ -125,7 +131,8 @@ export default class TextInputDialog extends React.Component {
</div>
</form>
<DialogButtons
primaryButton={this.props.button}
primaryButton={this.state.busy ? _t(this.props.busyMessage) : this.props.button}
disabled={this.state.busy}
onPrimaryButtonClick={this.onOk}
onCancel={this.onCancel}
hasCancel={this.props.hasCancel}

View file

@ -70,26 +70,26 @@ export default class WidgetOpenIDPermissionsDialog extends React.Component {
return (
<BaseDialog className='mx_WidgetOpenIDPermissionsDialog' hasCancel={true}
onFinished={this.props.onFinished}
title={_t("A widget would like to verify your identity")}>
title={_t("Allow this widget to verify your identity")}>
<div className='mx_WidgetOpenIDPermissionsDialog_content'>
<p>
{_t(
"A widget located at %(widgetUrl)s would like to verify your identity. " +
"By allowing this, the widget will be able to verify your user ID, but not " +
"perform actions as you.", {
widgetUrl: this.props.widget.templateUrl.split("?")[0],
},
)}
{_t("The widget will verify your user ID, but won't be able to perform actions for you:")}
</p>
<p className="text-muted">
{/* cheap trim to just get the path */}
{this.props.widget.templateUrl.split("?")[0].split("#")[0]}
</p>
<LabelledToggleSwitch value={this.state.rememberSelection} toggleInFront={true}
onChange={this._onRememberSelectionChange}
label={_t("Remember my selection for this widget")} />
</div>
<DialogButtons
primaryButton={_t("Allow")}
primaryButton={_t("Continue")}
onPrimaryButtonClick={this._onAllow}
cancelButton={_t("Deny")}
onCancel={this._onDeny}
additive={
<LabelledToggleSwitch
value={this.state.rememberSelection}
toggleInFront={true}
onChange={this._onRememberSelectionChange}
label={_t("Remember this")} />}
/>
</BaseDialog>
);

View file

@ -34,6 +34,7 @@ import InteractiveAuthDialog from '../InteractiveAuthDialog';
export default class CreateCrossSigningDialog extends React.PureComponent {
static propTypes = {
accountPassword: PropTypes.string,
tokenLogin: PropTypes.bool,
};
constructor(props) {
@ -96,6 +97,9 @@ export default class CreateCrossSigningDialog extends React.PureComponent {
user: MatrixClientPeg.get().getUserId(),
password: this.state.accountPassword,
});
} else if (this.props.tokenLogin) {
// We are hoping the grace period is active
await makeRequest({});
} else {
const dialogAesthetics = {
[SSOAuthEntry.PHASE_PREAUTH]: {
@ -144,6 +148,12 @@ export default class CreateCrossSigningDialog extends React.PureComponent {
});
this.props.onFinished(true);
} catch (e) {
if (this.props.tokenLogin) {
// ignore any failures, we are relying on grace period here
this.props.onFinished();
return;
}
this.setState({ error: e });
console.error("Error bootstrapping cross-signing", e);
}

View file

@ -0,0 +1,173 @@
/*
Copyright 2021 Šimon Brandner <simon.bra.ag@gmail.com>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import React from 'react';
import { _t } from '../../../languageHandler';
import BaseDialog from "..//dialogs/BaseDialog"
import AccessibleButton from './AccessibleButton';
import {getDesktopCapturerSources} from "matrix-js-sdk/src/webrtc/call";
export interface DesktopCapturerSource {
id: string;
name: string;
thumbnailURL;
}
export enum Tabs {
Screens = "screens",
Windows = "windows",
}
export interface DesktopCapturerSourceIProps {
source: DesktopCapturerSource;
onSelect(source: DesktopCapturerSource): void;
}
export class ExistingSource extends React.Component<DesktopCapturerSourceIProps> {
constructor(props) {
super(props);
}
onClick = (ev) => {
this.props.onSelect(this.props.source);
}
render() {
return (
<AccessibleButton
className="mx_desktopCapturerSourcePicker_stream_button"
title={this.props.source.name}
onClick={this.onClick} >
<img
className="mx_desktopCapturerSourcePicker_stream_thumbnail"
src={this.props.source.thumbnailURL}
/>
<span className="mx_desktopCapturerSourcePicker_stream_name">{this.props.source.name}</span>
</AccessibleButton>
);
}
}
export interface DesktopCapturerSourcePickerIState {
selectedTab: Tabs;
sources: Array<DesktopCapturerSource>;
}
export interface DesktopCapturerSourcePickerIProps {
onFinished(source: DesktopCapturerSource): void;
}
export default class DesktopCapturerSourcePicker extends React.Component<
DesktopCapturerSourcePickerIProps,
DesktopCapturerSourcePickerIState
> {
interval;
constructor(props) {
super(props);
this.state = {
selectedTab: Tabs.Screens,
sources: [],
};
}
async componentDidMount() {
// setInterval() first waits and then executes, therefore
// we call getDesktopCapturerSources() here without any delay.
// Otherwise the dialog would be left empty for some time.
this.setState({
sources: await getDesktopCapturerSources(),
});
// We update the sources every 500ms to get newer thumbnails
this.interval = setInterval(async () => {
this.setState({
sources: await getDesktopCapturerSources(),
});
}, 500);
}
componentWillUnmount() {
clearInterval(this.interval);
}
onSelect = (source) => {
this.props.onFinished(source);
}
onScreensClick = (ev) => {
this.setState({selectedTab: Tabs.Screens});
}
onWindowsClick = (ev) => {
this.setState({selectedTab: Tabs.Windows});
}
onCloseClick = (ev) => {
this.props.onFinished(null);
}
render() {
let sources;
if (this.state.selectedTab === Tabs.Screens) {
sources = this.state.sources
.filter((source) => {
return source.id.startsWith("screen");
})
.map((source) => {
return <ExistingSource source={source} onSelect={this.onSelect} key={source.id} />;
});
} else {
sources = this.state.sources
.filter((source) => {
return source.id.startsWith("window");
})
.map((source) => {
return <ExistingSource source={source} onSelect={this.onSelect} key={source.id} />;
});
}
const buttonStyle = "mx_desktopCapturerSourcePicker_tabLabel";
const screensButtonStyle = buttonStyle + ((this.state.selectedTab === Tabs.Screens) ? "_selected" : "");
const windowsButtonStyle = buttonStyle + ((this.state.selectedTab === Tabs.Windows) ? "_selected" : "");
return (
<BaseDialog
className="mx_desktopCapturerSourcePicker"
onFinished={this.onCloseClick}
title={_t("Share your screen")}
>
<div className="mx_desktopCapturerSourcePicker_tabLabels">
<AccessibleButton
className={screensButtonStyle}
onClick={this.onScreensClick}
>
{_t("Screens")}
</AccessibleButton>
<AccessibleButton
className={windowsButtonStyle}
onClick={this.onWindowsClick}
>
{_t("Windows")}
</AccessibleButton>
</div>
<div className="mx_desktopCapturerSourcePicker_panel">
{ sources }
</div>
</BaseDialog>
);
}
}

View file

@ -22,6 +22,7 @@ import * as Avatar from '../../../Avatar';
import { MatrixClientPeg } from '../../../MatrixClientPeg';
import EventTile from '../rooms/EventTile';
import SettingsStore from "../../../settings/SettingsStore";
import {Layout} from "../../../settings/Layout";
import {UIFeature} from "../../../settings/UIFeature";
interface IProps {
@ -33,7 +34,7 @@ interface IProps {
/**
* Whether to use the irc layout or not
*/
useIRCLayout: boolean;
layout: Layout;
/**
* classnames to apply to the wrapper of the preview
@ -121,14 +122,14 @@ export default class EventTilePreview extends React.Component<IProps, IState> {
const event = this.fakeEvent(this.state);
const className = classnames(this.props.className, {
"mx_IRCLayout": this.props.useIRCLayout,
"mx_GroupLayout": !this.props.useIRCLayout,
"mx_IRCLayout": this.props.layout == Layout.IRC,
"mx_GroupLayout": this.props.layout == Layout.Group,
});
return <div className={className}>
<EventTile
mxEvent={event}
useIRCLayout={this.props.useIRCLayout}
layout={this.props.layout}
enableFlair={SettingsStore.getValue(UIFeature.Flair)}
/>
</div>;

View file

@ -23,6 +23,7 @@ import ResizeObserver from 'resize-observer-polyfill';
import dis from '../../../dispatcher/dispatcher';
import MatrixClientContext from "../../../contexts/MatrixClientContext";
import {MatrixClientPeg} from "../../../MatrixClientPeg";
import {isNullOrUndefined} from "matrix-js-sdk/src/utils";
// Shamelessly ripped off Modal.js. There's probably a better way
// of doing reusable widgets like dialog boxes & menus where we go and
@ -61,6 +62,9 @@ export default class PersistedElement extends React.Component {
// Any PersistedElements with the same persistKey will use
// the same DOM container.
persistKey: PropTypes.string.isRequired,
// z-index for the element. Defaults to 9.
zIndex: PropTypes.number,
};
constructor() {
@ -165,6 +169,7 @@ export default class PersistedElement extends React.Component {
const parentRect = parent.getBoundingClientRect();
Object.assign(child.style, {
zIndex: isNullOrUndefined(this.props.zIndex) ? 9 : this.props.zIndex,
position: 'absolute',
top: parentRect.top + 'px',
left: parentRect.left + 'px',

View file

@ -1,7 +1,7 @@
/*
Copyright 2017 Vector Creations Ltd
Copyright 2018 New Vector Ltd
Copyright 2019 The Matrix.org Foundation C.I.C.
Copyright 2019, 2021 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.
@ -23,23 +23,11 @@ import { Room, RoomMember } from 'matrix-js-sdk';
import PropTypes from 'prop-types';
import {MatrixClientPeg} from '../../../MatrixClientPeg';
import FlairStore from "../../../stores/FlairStore";
import {getPrimaryPermalinkEntity} from "../../../utils/permalinks/Permalinks";
import {getPrimaryPermalinkEntity, parseAppLocalLink} from "../../../utils/permalinks/Permalinks";
import MatrixClientContext from "../../../contexts/MatrixClientContext";
import {Action} from "../../../dispatcher/actions";
// For URLs of matrix.to links in the timeline which have been reformatted by
// HttpUtils transformTags to relative links. This excludes event URLs (with `[^\/]*`)
const REGEX_LOCAL_PERMALINK = /^#\/(?:user|room|group)\/(([#!@+]).*?)(?=\/|\?|$)/;
class Pill extends React.Component {
static isPillUrl(url) {
return !!getPrimaryPermalinkEntity(url);
}
static isMessagePillUrl(url) {
return !!REGEX_LOCAL_PERMALINK.exec(url);
}
static roomNotifPos(text) {
return text.indexOf("@room");
}
@ -56,7 +44,7 @@ class Pill extends React.Component {
static propTypes = {
// The Type of this Pill. If url is given, this is auto-detected.
type: PropTypes.string,
// The URL to pillify (no validation is done, see isPillUrl and isMessagePillUrl)
// The URL to pillify (no validation is done)
url: PropTypes.string,
// Whether the pill is in a message
inMessage: PropTypes.bool,
@ -90,12 +78,9 @@ class Pill extends React.Component {
if (nextProps.url) {
if (nextProps.inMessage) {
// Default to the empty array if no match for simplicity
// resource and prefix will be undefined instead of throwing
const matrixToMatch = REGEX_LOCAL_PERMALINK.exec(nextProps.url) || [];
resourceId = matrixToMatch[1]; // The room/user ID
prefix = matrixToMatch[2]; // The first character of prefix
const parts = parseAppLocalLink(nextProps.url);
resourceId = parts.primaryEntityId; // The room/user ID
prefix = parts.sigil; // The first character of prefix
} else {
resourceId = getPrimaryPermalinkEntity(nextProps.url);
prefix = resourceId ? resourceId[0] : undefined;

View file

@ -24,6 +24,7 @@ import {wantsDateSeparator} from '../../../DateUtils';
import {MatrixEvent} from 'matrix-js-sdk';
import {makeUserPermalink, RoomPermalinkCreator} from "../../../utils/permalinks/Permalinks";
import SettingsStore from "../../../settings/SettingsStore";
import {LayoutPropType} from "../../../settings/Layout";
import escapeHtml from "escape-html";
import MatrixClientContext from "../../../contexts/MatrixClientContext";
import {Action} from "../../../dispatcher/actions";
@ -42,7 +43,7 @@ export default class ReplyThread extends React.Component {
onHeightChanged: PropTypes.func.isRequired,
permalinkCreator: PropTypes.instanceOf(RoomPermalinkCreator).isRequired,
// Specifies which layout to use.
useIRCLayout: PropTypes.bool,
layout: LayoutPropType,
};
static contextType = MatrixClientContext;
@ -209,7 +210,7 @@ export default class ReplyThread extends React.Component {
};
}
static makeThread(parentEv, onHeightChanged, permalinkCreator, ref, useIRCLayout) {
static makeThread(parentEv, onHeightChanged, permalinkCreator, ref, layout) {
if (!ReplyThread.getParentEventId(parentEv)) {
return <div className="mx_ReplyThread_wrapper_empty" />;
}
@ -218,7 +219,7 @@ export default class ReplyThread extends React.Component {
onHeightChanged={onHeightChanged}
ref={ref}
permalinkCreator={permalinkCreator}
useIRCLayout={useIRCLayout}
layout={layout}
/>;
}
@ -386,7 +387,7 @@ export default class ReplyThread extends React.Component {
permalinkCreator={this.props.permalinkCreator}
isRedacted={ev.isRedacted()}
isTwelveHour={SettingsStore.getValue("showTwelveHourTimestamps")}
useIRCLayout={this.props.useIRCLayout}
layout={this.props.layout}
enableFlair={SettingsStore.getValue(UIFeature.Flair)}
replacingEventId={ev.replacingEventId()}
/>

View file

@ -22,13 +22,33 @@ import {MatrixClient} from "matrix-js-sdk/src/client";
import PlatformPeg from "../../../PlatformPeg";
import AccessibleButton from "./AccessibleButton";
import {_t} from "../../../languageHandler";
import {IIdentityProvider, ISSOFlow} from "../../../Login";
import {IdentityProviderBrand, IIdentityProvider, ISSOFlow} from "../../../Login";
import AccessibleTooltipButton from "./AccessibleTooltipButton";
interface ISSOButtonProps extends Omit<IProps, "flow"> {
idp: IIdentityProvider;
mini?: boolean;
}
const getIcon = (brand: IdentityProviderBrand | string) => {
switch (brand) {
case IdentityProviderBrand.Apple:
return require(`../../../../res/img/element-icons/brands/apple.svg`);
case IdentityProviderBrand.Facebook:
return require(`../../../../res/img/element-icons/brands/facebook.svg`);
case IdentityProviderBrand.Github:
return require(`../../../../res/img/element-icons/brands/github.svg`);
case IdentityProviderBrand.Gitlab:
return require(`../../../../res/img/element-icons/brands/gitlab.svg`);
case IdentityProviderBrand.Google:
return require(`../../../../res/img/element-icons/brands/google.svg`);
case IdentityProviderBrand.Twitter:
return require(`../../../../res/img/element-icons/brands/twitter.svg`);
default:
return null;
}
}
const SSOButton: React.FC<ISSOButtonProps> = ({
matrixClient,
loginType,
@ -38,7 +58,6 @@ const SSOButton: React.FC<ISSOButtonProps> = ({
mini,
...props
}) => {
const kind = primary ? "primary" : "primary_outline";
const label = idp ? _t("Continue with %(provider)s", { provider: idp.name }) : _t("Sign in with single sign-on");
const onClick = () => {
@ -46,30 +65,35 @@ const SSOButton: React.FC<ISSOButtonProps> = ({
};
let icon;
if (typeof idp?.icon === "string" && (idp.icon.startsWith("mxc://") || idp.icon.startsWith("https://"))) {
icon = <img
src={matrixClient.mxcUrlToHttp(idp.icon, 24, 24, "crop", true)}
height="24"
width="24"
alt={label}
/>;
let brandClass;
const brandIcon = idp ? getIcon(idp.brand) : null;
if (brandIcon) {
const brandName = idp.brand.split(".").pop();
brandClass = `mx_SSOButton_brand_${brandName}`;
icon = <img src={brandIcon} height="24" width="24" alt={brandName} />;
} else if (typeof idp?.icon === "string" && idp.icon.startsWith("mxc://")) {
const src = matrixClient.mxcUrlToHttp(idp.icon, 24, 24, "crop", true);
icon = <img src={src} height="24" width="24" alt={idp.name} />;
}
const classes = classNames("mx_SSOButton", {
[brandClass]: brandClass,
mx_SSOButton_mini: mini,
mx_SSOButton_default: !idp,
mx_SSOButton_primary: primary,
});
if (mini) {
// TODO fallback icon
return (
<AccessibleButton {...props} className={classes} kind={kind} onClick={onClick}>
<AccessibleTooltipButton {...props} title={label} className={classes} onClick={onClick}>
{ icon }
</AccessibleButton>
</AccessibleTooltipButton>
);
}
return (
<AccessibleButton {...props} className={classes} kind={kind} onClick={onClick}>
<AccessibleButton {...props} className={classes} onClick={onClick}>
{ icon }
{ label }
</AccessibleButton>

View file

@ -0,0 +1,36 @@
/*
Copyright 2021 The Matrix.org Foundation C.I.C.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import React, { useState } from 'react';
import HostSignupDialog from "../dialogs/HostSignupDialog";
import { HostSignupStore } from "../../../stores/HostSignupStore";
import { useEventEmitter } from "../../../hooks/useEventEmitter";
import { UPDATE_EVENT } from "../../../stores/AsyncStore";
const HostSignupContainer = () => {
const [isActive, setIsActive] = useState(HostSignupStore.instance.isHostSignupActive);
useEventEmitter(HostSignupStore.instance, UPDATE_EVENT, () => {
setIsActive(HostSignupStore.instance.isHostSignupActive);
});
return <div className="mx_HostSignupContainer">
{isActive &&
<HostSignupDialog />
}
</div>;
};
export default HostSignupContainer

View file

@ -288,7 +288,7 @@ export default class MFileBody extends React.Component {
<a ref={this._dummyLink} />
</div>
<iframe
src={`${url}?origin=${encodeURIComponent(window.location.origin)}`}
src={url}
onLoad={onIframeLoad}
ref={this._iframe}
sandbox="allow-scripts allow-downloads allow-downloads-without-user-activation" />

View file

@ -362,7 +362,7 @@ export default class MImageBody extends React.Component {
}
// The maximum height of the thumbnail as it is rendered as an <img>
const maxHeight = Math.min(this.props.maxImageHeight || 600, infoHeight);
const maxHeight = Math.min(this.props.maxImageHeight || 240, infoHeight);
// The maximum width of the thumbnail, as dictated by its natural
// maximum height.
const maxWidth = infoWidth * maxHeight / infoHeight;

View file

@ -37,11 +37,13 @@ export default class MJitsiWidgetEvent extends React.PureComponent<IProps> {
const senderName = this.props.mxEvent.sender?.name || this.props.mxEvent.getSender();
const room = MatrixClientPeg.get().getRoom(this.props.mxEvent.getRoomId());
const widgetId = this.props.mxEvent.getStateKey();
const widget = WidgetStore.instance.getRoom(room.roomId).widgets.find(w => w.id === widgetId);
const widget = WidgetStore.instance.getRoom(room.roomId, true).widgets.find(w => w.id === widgetId);
let joinCopy = _t('Join the conference at the top of this room');
if (widget && WidgetLayoutStore.instance.isInContainer(room, widget, Container.Right)) {
joinCopy = _t('Join the conference from the room information card on the right');
} else if (!widget) {
joinCopy = null;
}
if (!url) {

View file

@ -81,6 +81,7 @@ export default class TextualBody extends React.Component {
}
_applyFormatting() {
const showLineNumbers = SettingsStore.getValue("showCodeLineNumbers");
this.activateSpoilers([this._content.current]);
// pillifyLinks BEFORE linkifyElement because plain room/user URLs in the composer
@ -91,29 +92,140 @@ export default class TextualBody extends React.Component {
this.calculateUrlPreview();
if (this.props.mxEvent.getContent().format === "org.matrix.custom.html") {
const blocks = ReactDOM.findDOMNode(this).getElementsByTagName("code");
if (blocks.length > 0) {
// Handle expansion and add buttons
const pres = ReactDOM.findDOMNode(this).getElementsByTagName("pre");
if (pres.length > 0) {
for (let i = 0; i < pres.length; i++) {
// If there already is a div wrapping the codeblock we want to skip this.
// This happens after the codeblock was edited.
if (pres[i].parentNode.className == "mx_EventTile_pre_container") continue;
// Wrap a div around <pre> so that the copy button can be correctly positioned
// when the <pre> overflows and is scrolled horizontally.
const div = this._wrapInDiv(pres[i]);
this._handleCodeBlockExpansion(pres[i]);
this._addCodeExpansionButton(div, pres[i]);
this._addCodeCopyButton(div);
if (showLineNumbers) {
this._addLineNumbers(pres[i]);
}
}
}
// Highlight code
const codes = ReactDOM.findDOMNode(this).getElementsByTagName("code");
if (codes.length > 0) {
// Do this asynchronously: parsing code takes time and we don't
// need to block the DOM update on it.
setTimeout(() => {
if (this._unmounted) return;
for (let i = 0; i < blocks.length; i++) {
if (SettingsStore.getValue("enableSyntaxHighlightLanguageDetection")) {
highlight.highlightBlock(blocks[i]);
} else {
// Only syntax highlight if there's a class starting with language-
const classes = blocks[i].className.split(/\s+/).filter(function(cl) {
return cl.startsWith('language-') && !cl.startsWith('language-_');
});
if (classes.length != 0) {
highlight.highlightBlock(blocks[i]);
}
}
for (let i = 0; i < codes.length; i++) {
// If the code already has the hljs class we want to skip this.
// This happens after the codeblock was edited.
if (codes[i].className.includes("hljs")) continue;
this._highlightCode(codes[i]);
}
}, 10);
}
this._addCodeCopyButton();
}
}
_addCodeExpansionButton(div, pre) {
// Calculate how many percent does the pre element take up.
// If it's less than 30% we don't add the expansion button.
const percentageOfViewport = pre.offsetHeight / window.innerHeight * 100;
if (percentageOfViewport < 30) return;
const button = document.createElement("span");
button.className = "mx_EventTile_button ";
if (pre.className == "mx_EventTile_collapsedCodeBlock") {
button.className += "mx_EventTile_expandButton";
} else {
button.className += "mx_EventTile_collapseButton";
}
button.onclick = async () => {
button.className = "mx_EventTile_button ";
if (pre.className == "mx_EventTile_collapsedCodeBlock") {
pre.className = "";
button.className += "mx_EventTile_collapseButton";
} else {
pre.className = "mx_EventTile_collapsedCodeBlock";
button.className += "mx_EventTile_expandButton";
}
// By expanding/collapsing we changed
// the height, therefore we call this
this.props.onHeightChanged();
};
div.appendChild(button);
}
_addCodeCopyButton(div) {
const button = document.createElement("span");
button.className = "mx_EventTile_button mx_EventTile_copyButton ";
// Check if expansion button exists. If so
// we put the copy button to the bottom
const expansionButtonExists = div.getElementsByClassName("mx_EventTile_button");
if (expansionButtonExists.length > 0) button.className += "mx_EventTile_buttonBottom";
button.onclick = async () => {
const copyCode = button.parentNode.getElementsByTagName("code")[0];
const successful = await copyPlaintext(copyCode.textContent);
const buttonRect = button.getBoundingClientRect();
const GenericTextContextMenu = sdk.getComponent('context_menus.GenericTextContextMenu');
const {close} = ContextMenu.createMenu(GenericTextContextMenu, {
...toRightOf(buttonRect, 2),
message: successful ? _t('Copied!') : _t('Failed to copy'),
});
button.onmouseleave = close;
};
div.appendChild(button);
}
_wrapInDiv(pre) {
const div = document.createElement("div");
div.className = "mx_EventTile_pre_container";
// Insert containing div in place of <pre> block
pre.parentNode.replaceChild(div, pre);
// Append <pre> block and copy button to container
div.appendChild(pre);
return div;
}
_handleCodeBlockExpansion(pre) {
if (!SettingsStore.getValue("expandCodeByDefault")) {
pre.className = "mx_EventTile_collapsedCodeBlock";
}
}
_addLineNumbers(pre) {
pre.innerHTML = '<span class="mx_EventTile_lineNumbers"></span>' + pre.innerHTML + '<span></span>';
const lineNumbers = pre.getElementsByClassName("mx_EventTile_lineNumbers")[0];
// Calculate number of lines in pre
const number = pre.innerHTML.split(/\n/).length;
// Iterate through lines starting with 1 (number of the first line is 1)
for (let i = 1; i < number; i++) {
lineNumbers.innerHTML += '<span class="mx_EventTile_lineNumber">' + i + '</span>';
}
}
_highlightCode(code) {
if (SettingsStore.getValue("enableSyntaxHighlightLanguageDetection")) {
highlight.highlightBlock(code);
} else {
// Only syntax highlight if there's a class starting with language-
const classes = code.className.split(/\s+/).filter(function(cl) {
return cl.startsWith('language-') && !cl.startsWith('language-_');
});
if (classes.length != 0) {
highlight.highlightBlock(code);
}
}
}
@ -254,38 +366,6 @@ export default class TextualBody extends React.Component {
}
}
_addCodeCopyButton() {
// Add 'copy' buttons to pre blocks
Array.from(ReactDOM.findDOMNode(this).querySelectorAll('.mx_EventTile_body pre')).forEach((p) => {
const button = document.createElement("span");
button.className = "mx_EventTile_copyButton";
button.onclick = async () => {
const copyCode = button.parentNode.getElementsByTagName("pre")[0];
const successful = await copyPlaintext(copyCode.textContent);
const buttonRect = button.getBoundingClientRect();
const GenericTextContextMenu = sdk.getComponent('context_menus.GenericTextContextMenu');
const {close} = ContextMenu.createMenu(GenericTextContextMenu, {
...toRightOf(buttonRect, 2),
message: successful ? _t('Copied!') : _t('Failed to copy'),
});
button.onmouseleave = close;
};
// Wrap a div around <pre> so that the copy button can be correctly positioned
// when the <pre> overflows and is scrolled horizontally.
const div = document.createElement("div");
div.className = "mx_EventTile_pre_container";
// Insert containing div in place of <pre> block
p.parentNode.replaceChild(div, p);
// Append <pre> block and copy button to container
div.appendChild(p);
div.appendChild(button);
});
}
onCancelClick = event => {
this.setState({ widgetHidden: true });
// FIXME: persist this somewhere smarter than local storage

View file

@ -33,6 +33,7 @@ interface IProps {
previousPhase?: RightPanelPhases;
closeLabel?: string;
onClose?(): void;
refireParams?;
}
interface IGroupProps {
@ -56,6 +57,7 @@ const BaseCard: React.FC<IProps> = ({
withoutScrollContainer,
previousPhase,
children,
refireParams,
}) => {
let backButton;
if (previousPhase) {
@ -63,6 +65,7 @@ const BaseCard: React.FC<IProps> = ({
defaultDispatcher.dispatch<SetRightPanelPhasePayload>({
action: Action.SetRightPanelPhase,
phase: previousPhase,
refireParams: refireParams,
});
};
backButton = <AccessibleButton className="mx_BaseCard_back" onClick={onBackClick} title={_t("Back")} />;

View file

@ -77,7 +77,7 @@ export const useWidgets = (room: Room) => {
setApps([...WidgetStore.instance.getApps(room.roomId)]);
}, [room]);
useEffect(updateApps, [room]);
useEffect(updateApps, [room, updateApps]);
useEventEmitter(WidgetStore.instance, room.roomId, updateApps);
useEventEmitter(WidgetLayoutStore.instance, WidgetLayoutStore.emissionForRoom(room), updateApps);

View file

@ -60,6 +60,7 @@ import QuestionDialog from "../dialogs/QuestionDialog";
import ConfirmUserActionDialog from "../dialogs/ConfirmUserActionDialog";
import InfoDialog from "../dialogs/InfoDialog";
import { EventType } from "matrix-js-sdk/src/@types/event";
import {SetRightPanelPhasePayload} from "../../../dispatcher/payloads/SetRightPanelPhasePayload";
interface IDevice {
deviceId: string;
@ -1534,6 +1535,24 @@ const UserInfo: React.FC<Props> = ({
const classes = ["mx_UserInfo"];
let refireParams;
let previousPhase: RightPanelPhases;
// We have no previousPhase for when viewing a UserInfo from a Group or without a Room at this time
if (room && phase === RightPanelPhases.EncryptionPanel) {
previousPhase = RightPanelPhases.RoomMemberInfo;
refireParams = {member: member};
} else if (room) {
previousPhase = RightPanelPhases.RoomMemberList;
}
const onEncryptionPanelClose = () => {
dis.dispatch<SetRightPanelPhasePayload>({
action: Action.SetRightPanelPhase,
phase: previousPhase,
refireParams: refireParams,
});
}
let content;
switch (phase) {
case RightPanelPhases.RoomMemberInfo:
@ -1553,19 +1572,13 @@ const UserInfo: React.FC<Props> = ({
<EncryptionPanel
{...props as React.ComponentProps<typeof EncryptionPanel>}
member={member}
onClose={onClose}
onClose={onEncryptionPanelClose}
isRoomEncrypted={isRoomEncrypted}
/>
);
break;
}
let previousPhase: RightPanelPhases;
// We have no previousPhase for when viewing a UserInfo from a Group or without a Room at this time
if (room) {
previousPhase = RightPanelPhases.RoomMemberList;
}
let closeLabel = undefined;
if (phase === RightPanelPhases.EncryptionPanel) {
const verificationRequest = (props as React.ComponentProps<typeof EncryptionPanel>).verificationRequest;
@ -1581,6 +1594,7 @@ const UserInfo: React.FC<Props> = ({
onClose={onClose}
closeLabel={closeLabel}
previousPhase={previousPhase}
refireParams={refireParams}
>
{ content }
</BaseCard>;

View file

@ -69,19 +69,24 @@ export default class RoomProfileSettings extends React.Component {
// clear file upload field so same file can be selected
this._avatarUpload.current.value = "";
this.setState({
avatarUrl: undefined,
avatarFile: undefined,
avatarUrl: null,
avatarFile: null,
enableProfileSave: true,
});
};
_clearProfile = async (e) => {
_cancelProfileChanges = async (e) => {
e.stopPropagation();
e.preventDefault();
if (!this.state.enableProfileSave) return;
this._removeAvatar();
this.setState({enableProfileSave: false, displayName: this.state.originalDisplayName});
this.setState({
enableProfileSave: false,
displayName: this.state.originalDisplayName,
topic: this.state.originalTopic,
avatarUrl: this.state.originalAvatarUrl,
avatarFile: null,
});
};
_saveProfile = async (e) => {
@ -108,7 +113,7 @@ export default class RoomProfileSettings extends React.Component {
newState.originalAvatarUrl = newState.avatarUrl;
newState.avatarFile = null;
} else if (this.state.originalAvatarUrl !== this.state.avatarUrl) {
await client.sendStateEvent(this.props.roomId, 'm.room.avatar', {url: undefined}, '');
await client.sendStateEvent(this.props.roomId, 'm.room.avatar', {}, '');
}
if (this.state.originalTopic !== this.state.topic) {
@ -164,11 +169,15 @@ export default class RoomProfileSettings extends React.Component {
const AvatarSetting = sdk.getComponent('settings.AvatarSetting');
let profileSettingsButtons;
if (this.state.canSetTopic && this.state.canSetName) {
if (
this.state.canSetName ||
this.state.canSetTopic ||
this.state.canSetAvatar
) {
profileSettingsButtons = (
<div className="mx_ProfileSettings_buttons">
<AccessibleButton
onClick={this._clearProfile}
onClick={this._cancelProfileChanges}
kind="link"
disabled={!this.state.enableProfileSave}
>

View file

@ -519,7 +519,7 @@ export default class BasicMessageEditor extends React.Component<IProps, IState>
private async tabCompleteName(event: React.KeyboardEvent) {
try {
await new Promise(resolve => this.setState({showVisualBell: false}, resolve));
await new Promise<void>(resolve => this.setState({showVisualBell: false}, resolve));
const {model} = this.props;
const caret = this.getCaret();
const position = model.positionForOffset(caret.offset, caret.atNodeEnd);

View file

@ -27,6 +27,7 @@ import * as TextForEvent from "../../../TextForEvent";
import * as sdk from "../../../index";
import dis from '../../../dispatcher/dispatcher';
import SettingsStore from "../../../settings/SettingsStore";
import {Layout, LayoutPropType} from "../../../settings/Layout";
import {EventStatus} from 'matrix-js-sdk';
import {formatTime} from "../../../DateUtils";
import {MatrixClientPeg} from '../../../MatrixClientPeg';
@ -227,8 +228,8 @@ export default class EventTile extends React.Component {
// whether to show reactions for this event
showReactions: PropTypes.bool,
// whether to use the irc layout
useIRCLayout: PropTypes.bool,
// which layout to use
layout: LayoutPropType,
// whether or not to show flair at all
enableFlair: PropTypes.bool,
@ -734,7 +735,7 @@ export default class EventTile extends React.Component {
// joins/parts/etc
avatarSize = 14;
needsSenderProfile = false;
} else if (this.props.useIRCLayout) {
} else if (this.props.layout == Layout.IRC) {
avatarSize = 14;
needsSenderProfile = true;
} else if (this.props.continuation && this.props.tileShape !== "file_grid") {
@ -845,10 +846,11 @@ export default class EventTile extends React.Component {
{ timestamp }
</a>;
const groupTimestamp = !this.props.useIRCLayout ? linkedTimestamp : null;
const ircTimestamp = this.props.useIRCLayout ? linkedTimestamp : null;
const groupPadlock = !this.props.useIRCLayout && !isBubbleMessage && this._renderE2EPadlock();
const ircPadlock = this.props.useIRCLayout && !isBubbleMessage && this._renderE2EPadlock();
const useIRCLayout = this.props.layout == Layout.IRC;
const groupTimestamp = !useIRCLayout ? linkedTimestamp : null;
const ircTimestamp = useIRCLayout ? linkedTimestamp : null;
const groupPadlock = !useIRCLayout && !isBubbleMessage && this._renderE2EPadlock();
const ircPadlock = useIRCLayout && !isBubbleMessage && this._renderE2EPadlock();
switch (this.props.tileShape) {
case 'notif': {
@ -943,7 +945,7 @@ export default class EventTile extends React.Component {
this.props.onHeightChanged,
this.props.permalinkCreator,
this._replyThread,
this.props.useIRCLayout,
this.props.layout,
);
// tab-index=-1 to allow it to be focusable but do not add tab stop for it, primarily for screen readers

View file

@ -107,7 +107,7 @@ export default class LinkPreviewWidget extends React.Component {
if (!SettingsStore.getValue("showImages")) {
image = null; // Don't render a button to show the image, just hide it outright
}
const imageMaxWidth = 100; const imageMaxHeight = 100;
const imageMaxWidth = 320; const imageMaxHeight = 240;
if (image && image.startsWith("mxc://")) {
image = MatrixClientPeg.get().mxcUrlToHttp(image, imageMaxWidth, imageMaxHeight);
}
@ -134,6 +134,10 @@ export default class LinkPreviewWidget extends React.Component {
const AccessibleButton = sdk.getComponent('elements.AccessibleButton');
return (
<div className="mx_LinkPreviewWidget">
<AccessibleButton className="mx_LinkPreviewWidget_cancel" onClick={this.props.onCancelClick} aria-label={_t("Close preview")}>
<img className="mx_filterFlipColor" alt="" role="presentation"
src={require("../../../../res/img/cancel.svg")} width="18" height="18" />
</AccessibleButton>
{ img }
<div className="mx_LinkPreviewWidget_caption">
<div className="mx_LinkPreviewWidget_title"><a href={this.props.link} target="_blank" rel="noreferrer noopener">{ p["og:title"] }</a></div>
@ -142,10 +146,6 @@ export default class LinkPreviewWidget extends React.Component {
{ description }
</div>
</div>
<AccessibleButton className="mx_LinkPreviewWidget_cancel" onClick={this.props.onCancelClick} aria-label={_t("Close preview")}>
<img className="mx_filterFlipColor" alt="" role="presentation"
src={require("../../../../res/img/cancel.svg")} width="18" height="18" />
</AccessibleButton>
</div>
);
}

View file

@ -426,7 +426,8 @@ export default class MessageComposer extends React.Component {
<EmojiButton key="emoji_button" addEmoji={this.addEmoji} />,
);
if (SettingsStore.getValue(UIFeature.Widgets)) {
if (SettingsStore.getValue(UIFeature.Widgets) &&
SettingsStore.getValue("MessageComposerInput.showStickersButton")) {
controls.push(<Stickerpicker key="stickerpicker_controls_button" room={this.props.room} />);
}

View file

@ -111,7 +111,7 @@ export default class RoomBreadcrumbs extends React.PureComponent<IProps, IState>
appear={true} in={this.state.doAnimation} timeout={640}
classNames='mx_RoomBreadcrumbs'
>
<Toolbar className='mx_RoomBreadcrumbs'>
<Toolbar className='mx_RoomBreadcrumbs' aria-label={_t("Recently visited rooms")}>
{tiles.slice(this.state.skipFirst ? 1 : 0)}
</Toolbar>
</CSSTransition>

View file

@ -455,8 +455,9 @@ export default class RoomList extends React.PureComponent<IProps, IState> {
const unfilteredLists = RoomListStore.instance.unfilteredLists
const unfilteredRooms = unfilteredLists[DefaultTagID.Untagged] || [];
const unfilteredHistorical = unfilteredLists[DefaultTagID.Archived] || [];
const unfilteredFavourite = unfilteredLists[DefaultTagID.Favourite] || [];
// show a prompt to join/create rooms if the user is in 0 rooms and no historical
if (unfilteredRooms.length < 1 && unfilteredHistorical < 1) {
if (unfilteredRooms.length < 1 && unfilteredHistorical < 1 && unfilteredFavourite < 1) {
explorePrompt = <div className="mx_RoomList_explorePrompt">
<div>{_t("Use the + to make a new room or explore existing ones below")}</div>
<AccessibleButton

View file

@ -110,6 +110,11 @@ export default class RoomTile extends React.PureComponent<IProps, IState> {
CommunityPrototypeStore.getUpdateEventName(this.props.room.roomId),
this.onCommunityUpdate,
);
this.props.room.on("Room.name", this.onRoomNameUpdate);
}
private onRoomNameUpdate = (room) => {
this.forceUpdate();
}
private onNotificationUpdate = () => {
@ -150,6 +155,8 @@ export default class RoomTile extends React.PureComponent<IProps, IState> {
CommunityPrototypeStore.getUpdateEventName(this.props.room?.roomId),
this.onCommunityUpdate,
);
prevProps.room?.off("Room.name", this.onRoomNameUpdate);
this.props.room?.on("Room.name", this.onRoomNameUpdate);
}
}
@ -171,6 +178,7 @@ export default class RoomTile extends React.PureComponent<IProps, IState> {
CommunityPrototypeStore.getUpdateEventName(this.props.room.roomId),
this.onCommunityUpdate,
);
this.props.room.off("Room.name", this.onRoomNameUpdate);
}
defaultDispatcher.unregister(this.dispatcherRef);
this.notificationState.off(NOTIFICATION_STATE_UPDATE, this.onNotificationUpdate);

View file

@ -156,13 +156,14 @@ export default class SendMessageComposer extends React.Component {
this.onVerticalArrow(event, true);
} else if (event.key === Key.ARROW_DOWN) {
this.onVerticalArrow(event, false);
} else if (this._prepareToEncrypt) {
this._prepareToEncrypt();
} else if (event.key === Key.ESCAPE) {
dis.dispatch({
action: 'reply_to_event',
event: null,
});
} else if (this._prepareToEncrypt) {
// This needs to be last!
this._prepareToEncrypt();
}
};
@ -402,6 +403,7 @@ export default class SendMessageComposer extends React.Component {
this._editorRef.clearUndoHistory();
this._editorRef.focus();
this._clearStoredEditorState();
dis.dispatch({action: "scroll_to_bottom"});
}
componentWillUnmount() {

View file

@ -264,7 +264,7 @@ export default class Stickerpicker extends React.Component {
width: this.popoverWidth,
}}
>
<PersistedElement persistKey={PERSISTED_ELEMENT_KEY} style={{zIndex: STICKERPICKER_Z_INDEX}}>
<PersistedElement persistKey={PERSISTED_ELEMENT_KEY} zIndex={STICKERPICKER_Z_INDEX}>
<AppTile
app={stickerApp}
room={this.props.room}

View file

@ -81,7 +81,7 @@ export default class WhoIsTypingTile extends React.Component {
};
onRoomTimeline = (event, room) => {
if (room && room.roomId === this.props.room.roomId) {
if (room?.roomId === this.props.room?.roomId) {
const userId = event.getSender();
// remove user from usersTyping
const usersTyping = this.state.usersTyping.filter((m) => m.userId !== userId);

View file

@ -52,19 +52,23 @@ export default class ProfileSettings extends React.Component {
// clear file upload field so same file can be selected
this._avatarUpload.current.value = "";
this.setState({
avatarUrl: undefined,
avatarFile: undefined,
avatarUrl: null,
avatarFile: null,
enableProfileSave: true,
});
};
_clearProfile = async (e) => {
_cancelProfileChanges = async (e) => {
e.stopPropagation();
e.preventDefault();
if (!this.state.enableProfileSave) return;
this._removeAvatar();
this.setState({enableProfileSave: false, displayName: this.state.originalDisplayName});
this.setState({
enableProfileSave: false,
displayName: this.state.originalDisplayName,
avatarUrl: this.state.originalAvatarUrl,
avatarFile: null,
});
};
_saveProfile = async (e) => {
@ -186,7 +190,7 @@ export default class ProfileSettings extends React.Component {
</div>
<div className="mx_ProfileSettings_buttons">
<AccessibleButton
onClick={this._clearProfile}
onClick={this._cancelProfileChanges}
kind="link"
disabled={!this.state.enableProfileSave}
>

View file

@ -28,15 +28,14 @@ import { FontWatcher } from "../../../../../settings/watchers/FontWatcher";
import { RecheckThemePayload } from '../../../../../dispatcher/payloads/RecheckThemePayload';
import { Action } from '../../../../../dispatcher/actions';
import { IValidationResult, IFieldState } from '../../../elements/Validation';
import StyledRadioButton from '../../../elements/StyledRadioButton';
import StyledCheckbox from '../../../elements/StyledCheckbox';
import SettingsFlag from '../../../elements/SettingsFlag';
import Field from '../../../elements/Field';
import EventTilePreview from '../../../elements/EventTilePreview';
import StyledRadioGroup from "../../../elements/StyledRadioGroup";
import classNames from 'classnames';
import { SettingLevel } from "../../../../../settings/SettingLevel";
import {UIFeature} from "../../../../../settings/UIFeature";
import {Layout} from "../../../../../settings/Layout";
interface IProps {
}
@ -62,7 +61,7 @@ interface IState extends IThemeState {
useSystemFont: boolean;
systemFont: string;
showAdvanced: boolean;
useIRCLayout: boolean;
layout: Layout;
}
@ -83,7 +82,7 @@ export default class AppearanceUserSettingsTab extends React.Component<IProps, I
useSystemFont: SettingsStore.getValue("useSystemFont"),
systemFont: SettingsStore.getValue("systemFont"),
showAdvanced: false,
useIRCLayout: SettingsStore.getValue("useIRCLayout"),
layout: SettingsStore.getValue("layout"),
};
}
@ -213,15 +212,15 @@ export default class AppearanceUserSettingsTab extends React.Component<IProps, I
this.setState({customThemeUrl: e.target.value});
};
private onLayoutChange = (e: React.ChangeEvent<HTMLInputElement>): void => {
const val = e.target.value === "true";
this.setState({
useIRCLayout: val,
});
SettingsStore.setValue("useIRCLayout", null, SettingLevel.DEVICE, val);
};
private onIRCLayoutChange = (enabled: boolean) => {
if (enabled) {
this.setState({layout: Layout.IRC});
SettingsStore.setValue("layout", null, SettingLevel.DEVICE, Layout.IRC);
} else {
this.setState({layout: Layout.Group});
SettingsStore.setValue("layout", null, SettingLevel.DEVICE, Layout.Group);
}
}
private renderThemeSection() {
const themeWatcher = new ThemeWatcher();
@ -306,7 +305,7 @@ export default class AppearanceUserSettingsTab extends React.Component<IProps, I
<EventTilePreview
className="mx_AppearanceUserSettingsTab_fontSlider_preview"
message={this.MESSAGE_PREVIEW_TEXT}
useIRCLayout={this.state.useIRCLayout}
layout={this.state.layout}
/>
<div className="mx_AppearanceUserSettingsTab_fontSlider">
<div className="mx_AppearanceUserSettingsTab_fontSlider_smallText">Aa</div>
@ -342,50 +341,6 @@ export default class AppearanceUserSettingsTab extends React.Component<IProps, I
</div>;
}
private renderLayoutSection = () => {
return <div className="mx_SettingsTab_section mx_AppearanceUserSettingsTab_Layout">
<span className="mx_SettingsTab_subheading">{_t("Message layout")}</span>
<div className="mx_AppearanceUserSettingsTab_Layout_RadioButtons">
<div className={classNames("mx_AppearanceUserSettingsTab_Layout_RadioButton", {
mx_AppearanceUserSettingsTab_Layout_RadioButton_selected: this.state.useIRCLayout,
})}>
<EventTilePreview
className="mx_AppearanceUserSettingsTab_Layout_RadioButton_preview"
message={this.MESSAGE_PREVIEW_TEXT}
useIRCLayout={true}
/>
<StyledRadioButton
name="layout"
value="true"
checked={this.state.useIRCLayout}
onChange={this.onLayoutChange}
>
{_t("Compact")}
</StyledRadioButton>
</div>
<div className="mx_AppearanceUserSettingsTab_spacer" />
<div className={classNames("mx_AppearanceUserSettingsTab_Layout_RadioButton", {
mx_AppearanceUserSettingsTab_Layout_RadioButton_selected: !this.state.useIRCLayout,
})}>
<EventTilePreview
className="mx_AppearanceUserSettingsTab_Layout_RadioButton_preview"
message={this.MESSAGE_PREVIEW_TEXT}
useIRCLayout={false}
/>
<StyledRadioButton
name="layout"
value="false"
checked={!this.state.useIRCLayout}
onChange={this.onLayoutChange}
>
{_t("Modern")}
</StyledRadioButton>
</div>
</div>
</div>;
};
private renderAdvancedSection() {
if (!SettingsStore.getValue(UIFeature.AdvancedSettings)) return null;
@ -409,14 +364,15 @@ export default class AppearanceUserSettingsTab extends React.Component<IProps, I
name="useCompactLayout"
level={SettingLevel.DEVICE}
useCheckbox={true}
disabled={this.state.useIRCLayout}
/>
<SettingsFlag
name="useIRCLayout"
level={SettingLevel.DEVICE}
useCheckbox={true}
onChange={(checked) => this.setState({useIRCLayout: checked})}
disabled={this.state.layout == Layout.IRC}
/>
<StyledCheckbox
checked={this.state.layout == Layout.IRC}
onChange={(ev) => this.onIRCLayoutChange(ev.target.checked)}
>
{_t("Enable experimental, compact IRC style layout")}
</StyledCheckbox>
<SettingsFlag
name="useSystemFont"
level={SettingLevel.DEVICE}

View file

@ -34,6 +34,7 @@ export default class PreferencesUserSettingsTab extends React.Component {
'MessageComposerInput.suggestEmoji',
'sendTypingNotifications',
'MessageComposerInput.ctrlEnterToSend',
'MessageComposerInput.showStickersButton',
];
static TIMELINE_SETTINGS = [
@ -46,12 +47,15 @@ export default class PreferencesUserSettingsTab extends React.Component {
'alwaysShowTimestamps',
'showRedactions',
'enableSyntaxHighlightLanguageDetection',
'expandCodeByDefault',
'showCodeLineNumbers',
'showJoinLeaves',
'showAvatarChanges',
'showDisplaynameChanges',
'showImages',
'showChatEffects',
'Pill.shouldShowPillAvatar',
'ctrlFForSearch',
];
static GENERAL_SETTINGS = [

View file

@ -15,7 +15,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
import React, { createRef, CSSProperties, ReactNode } from 'react';
import React, { createRef, CSSProperties } from 'react';
import dis from '../../../dispatcher/dispatcher';
import CallHandler from '../../../CallHandler';
import {MatrixClientPeg} from '../../../MatrixClientPeg';
@ -494,6 +494,7 @@ export default class CallView extends React.Component<IProps, IState> {
}
if (this.props.call.type === CallType.Video) {
let localVideoFeed = null;
let onHoldContent = null;
let onHoldBackground = null;
const backgroundStyle: CSSProperties = {};
@ -512,6 +513,9 @@ export default class CallView extends React.Component<IProps, IState> {
backgroundStyle.backgroundImage = 'url(' + backgroundAvatarUrl + ')';
onHoldBackground = <div className="mx_CallView_video_holdBackground" style={backgroundStyle} />;
}
if (!this.state.vidMuted) {
localVideoFeed = <VideoFeed type={VideoFeedType.Local} call={this.props.call} />;
}
// if we're fullscreen, we don't want to set a maxHeight on the video element.
const maxVideoHeight = getFullScreenElement() ? null : (
@ -527,7 +531,7 @@ export default class CallView extends React.Component<IProps, IState> {
<VideoFeed type={VideoFeedType.Remote} call={this.props.call} onResize={this.props.onResize}
maxHeight={maxVideoHeight}
/>
<VideoFeed type={VideoFeedType.Local} call={this.props.call} />
{localVideoFeed}
{onHoldContent}
{callControls}
</div>;

View file

@ -24,6 +24,7 @@ import DialPad from './DialPad';
import dis from '../../../dispatcher/dispatcher';
import Modal from "../../../Modal";
import ErrorDialog from "../../views/dialogs/ErrorDialog";
import CallHandler from "../../../CallHandler";
interface IProps {
onFinished: (boolean) => void;
@ -64,9 +65,7 @@ export default class DialpadModal extends React.PureComponent<IProps, IState> {
}
onDialPress = async () => {
const results = await MatrixClientPeg.get().getThirdpartyUser('im.vector.protocol.pstn', {
'm.id.phone': this.state.value,
});
const results = await CallHandler.sharedInstance().pstnLookup(this.state.value);
if (!results || results.length === 0 || !results[0].userid) {
Modal.createTrackedDialog('', '', ErrorDialog, {
title: _t("Unable to look up phone number"),

View file

@ -17,6 +17,7 @@ limitations under the License.
import { createContext } from "react";
import {IState} from "../components/structures/RoomView";
import {Layout} from "../settings/Layout";
const RoomContext = createContext<IState>({
roomLoading: true,
@ -40,7 +41,7 @@ const RoomContext = createContext<IState>({
statusBarVisible: false,
canReact: false,
canReply: false,
useIRCLayout: false,
layout: Layout.Group,
matrixClientIsReady: false,
});
RoomContext.displayName = "RoomContext";

View file

@ -30,6 +30,7 @@ import { getE2EEWellKnown } from "./utils/WellKnownUtils";
import GroupStore from "./stores/GroupStore";
import CountlyAnalytics from "./CountlyAnalytics";
import { isJoinedOrNearlyJoined } from "./utils/membership";
import { VIRTUAL_ROOM_EVENT_TYPE } from "./CallHandler";
// we define a number of interfaces which take their names from the js-sdk
/* eslint-disable camelcase */
@ -300,6 +301,34 @@ export async function canEncryptToAllUsers(client: MatrixClient, userIds: string
}
}
// Similar to ensureDMExists but also adds creation content
// without polluting ensureDMExists with unrelated stuff (also
// they're never encrypted).
export async function ensureVirtualRoomExists(
client: MatrixClient, userId: string, nativeRoomId: string,
): Promise<string> {
const existingDMRoom = findDMForUser(client, userId);
let roomId;
if (existingDMRoom) {
roomId = existingDMRoom.roomId;
} else {
roomId = await createRoom({
dmUserId: userId,
spinner: false,
andView: false,
createOpts: {
creation_content: {
// This allows us to recognise that the room is a virtual room
// when it comes down our sync stream (we also put the ID of the
// respective native room in there because why not?)
[VIRTUAL_ROOM_EVENT_TYPE]: nativeRoomId,
},
},
});
}
return roomId;
}
export async function ensureDMExists(client: MatrixClient, userId: string): Promise<string> {
const existingDMRoom = findDMForUser(client, userId);
let roomId;
@ -310,6 +339,7 @@ export async function ensureDMExists(client: MatrixClient, userId: string): Prom
if (privateShouldBeEncrypted()) {
encryption = await canEncryptToAllUsers(client, [userId]);
}
roomId = await createRoom({encryption, dmUserId: userId, spinner: false, andView: false});
await _waitForMember(client, roomId, userId);
}

View file

@ -106,4 +106,11 @@ export enum Action {
* XXX: Is an action the right thing for this?
*/
PstnSupportUpdated = "pstn_support_updated",
/**
* Similar to PstnSupportUpdated, fired when CallHandler has checked for virtual room support
* payload: none
* XXX: Ditto
*/
VirtualRoomSupportUpdated = "virtual_room_support_updated",
}

View file

@ -948,5 +948,7 @@
"Confirm adding phone number": "Confirma l'addició del número de telèfon",
"Add Email Address": "Afegeix una adreça de correu electrònic",
"Confirm": "Confirma",
"Click the button below to confirm adding this email address.": "Fes clic al botó de sota per confirmar l'addició d'aquesta adreça de correu electrònic."
"Click the button below to confirm adding this email address.": "Fes clic al botó de sota per confirmar l'addició d'aquesta adreça de correu electrònic.",
"Unable to access webcam / microphone": "No s'ha pogut accedir a la càmera web / micròfon",
"Unable to access microphone": "No s'ha pogut accedir al micròfon"
}

View file

@ -55,7 +55,7 @@
"Custom Server Options": "Vlastní nastavení serveru",
"Add a widget": "Přidat widget",
"Accept": "Přijmout",
"%(targetName)s accepted an invitation.": "Uživatel %(targetName)s přijal pozvání.",
"%(targetName)s accepted an invitation.": "%(targetName)s přijal/a pozvání.",
"Account": "Účet",
"Access Token:": "Přístupový token:",
"Add": "Přidat",
@ -86,10 +86,10 @@
"Bans user with given id": "Vykáže uživatele s daným id",
"Cannot add any more widgets": "Nelze přidat žádné další widgety",
"Change Password": "Změnit heslo",
"%(senderName)s changed their profile picture.": "Uživatel %(senderName)s změnil svůj profilový obrázek.",
"%(senderDisplayName)s changed the room name to %(roomName)s.": "Uživatel %(senderDisplayName)s změnil název místnosti na %(roomName)s.",
"%(senderDisplayName)s removed the room name.": "Uživatel %(senderDisplayName)s odstranil název místnosti.",
"%(senderDisplayName)s changed the topic to \"%(topic)s\".": "Uživatel %(senderDisplayName)s změnil téma na „%(topic)s“.",
"%(senderName)s changed their profile picture.": "%(senderName)s změnil/a svůj profilový obrázek.",
"%(senderDisplayName)s changed the room name to %(roomName)s.": "%(senderDisplayName)s změnil/a název místnosti na %(roomName)s.",
"%(senderDisplayName)s removed the room name.": "%(senderDisplayName)s odstranil/a název místnosti.",
"%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s změnil/a téma na „%(topic)s“.",
"Changes your display nickname": "Změní vaši zobrazovanou přezdívku",
"Command error": "Chyba příkazu",
"Commands": "Příkazy",
@ -113,7 +113,7 @@
"Email address": "E-mailová adresa",
"Emoji": "Emoji",
"Enable automatic language detection for syntax highlighting": "Zapnout automatické rozpoznávání jazyků pro zvýrazňování syntaxe",
"%(senderName)s ended the call.": "Uživatel %(senderName)s ukončil hovor.",
"%(senderName)s ended the call.": "%(senderName)s ukončil/a hovor.",
"Enter passphrase": "Zadejte heslo",
"Error decrypting attachment": "Chyba při dešifrování přílohy",
"Error: Problem communicating with the given homeserver.": "Chyba: problém v komunikaci s daným domovským serverem.",
@ -136,12 +136,12 @@
"Forget room": "Zapomenout místnost",
"For security, this session has been signed out. Please sign in again.": "Z bezpečnostních důvodů bylo toto přihlášení ukončeno. Přihlašte se prosím znovu.",
"and %(count)s others...|other": "a %(count)s další...",
"%(widgetName)s widget modified by %(senderName)s": "Uživatel %(senderName)s upravil widget %(widgetName)s",
"%(widgetName)s widget removed by %(senderName)s": "Uživatel %(senderName)s odstranil widget %(widgetName)s",
"%(widgetName)s widget added by %(senderName)s": "Uživatel %(senderName)s přidal widget %(widgetName)s",
"%(widgetName)s widget modified by %(senderName)s": "%(senderName)s upravil/a widget %(widgetName)s",
"%(widgetName)s widget removed by %(senderName)s": "%(senderName)s odstranil/a widget %(widgetName)s",
"%(widgetName)s widget added by %(senderName)s": "%(senderName)s přidal/a widget %(widgetName)s",
"Automatically replace plain text Emoji": "Automaticky nahrazovat textové emoji",
"Failed to upload image": "Obrázek se nepodařilo nahrát",
"%(senderName)s answered the call.": "Uživatel %(senderName)s přijal hovor.",
"%(senderName)s answered the call.": "%(senderName)s přijal/a hovor.",
"Click to mute audio": "Klepněte pro vypnutí zvuku",
"Failed to verify email address: make sure you clicked the link in the email": "E-mailovou adresu se nepodařilo ověřit. Přesvědčte se, že jste klepli na odkaz v e-mailové zprávě",
"Guests cannot join this room even if explicitly invited.": "Hosté nemohou vstoupit do této místnosti, i když jsou přímo pozváni.",
@ -156,12 +156,12 @@
"Incorrect username and/or password.": "Nesprávné uživatelské jméno nebo heslo.",
"Incorrect verification code": "Nesprávný ověřovací kód",
"Invalid Email Address": "Neplatná e-mailová adresa",
"%(senderName)s invited %(targetName)s.": "Uživatel %(senderName)s pozval uživatele %(targetName)s.",
"%(senderName)s invited %(targetName)s.": "%(senderName)s pozval/a uživatele %(targetName)s.",
"Invites": "Pozvánky",
"Invites user with given id to current room": "Pozve do aktuální místnosti uživatele s daným id",
"Join Room": "Vstoupit do místnosti",
"%(targetName)s joined the room.": "Uživatel %(targetName)s vstoupil do místnosti.",
"%(senderName)s kicked %(targetName)s.": "Uživatel %(senderName)s vykopl uživatele %(targetName)s.",
"%(targetName)s joined the room.": "%(targetName)s vstoupil/a do místnosti.",
"%(senderName)s kicked %(targetName)s.": "%(senderName)s vykopl/a uživatele %(targetName)s.",
"Kick": "Vykopnout",
"Kicks user with given id": "Vykopne uživatele s daným id",
"Last seen": "Naposledy aktivní",
@ -184,7 +184,7 @@
"Passwords can't be empty": "Hesla nemohou být prázdná",
"Permissions": "Oprávnění",
"Phone": "Telefon",
"%(senderName)s changed the power level of %(powerLevelDiffText)s.": "Uživatel %(senderName)s změnil úroveň oprávnění o %(powerLevelDiffText)s.",
"%(senderName)s changed the power level of %(powerLevelDiffText)s.": "%(senderName)s změnil/a úroveň oprávnění o %(powerLevelDiffText)s.",
"Define the power level of a user": "Stanovte úroveň oprávnění uživatele",
"Failed to change power level": "Nepodařilo se změnit úroveň oprávnění",
"Power level must be positive integer.": "Úroveň oprávnění musí být kladné celé číslo.",
@ -201,15 +201,15 @@
"%(roomName)s is not accessible at this time.": "Místnost %(roomName)s není v tuto chvíli dostupná.",
"Save": "Uložit",
"Send Reset Email": "Poslat resetovací e-mail",
"%(senderDisplayName)s sent an image.": "Uživatel %(senderDisplayName)s poslal obrázek.",
"%(senderName)s sent an invitation to %(targetDisplayName)s to join the room.": "Uživatel %(senderName)s pozval uživatele %(targetDisplayName)s ke vstupu do místnosti.",
"%(senderDisplayName)s sent an image.": "%(senderDisplayName)s poslal/a obrázek.",
"%(senderName)s sent an invitation to %(targetDisplayName)s to join the room.": "%(senderName)s pozval/a uživatele %(targetDisplayName)s ke vstupu do místnosti.",
"Server error": "Chyba serveru",
"Server may be unavailable, overloaded, or search timed out :(": "Server může být nedostupný, přetížený nebo vyhledávání vypršelo :(",
"Server may be unavailable, overloaded, or you hit a bug.": "Server může být nedostupný, přetížený nebo jste narazili na chybu.",
"Server unavailable, overloaded, or something else went wrong.": "Server je nedostupný, přetížený nebo se něco pokazilo.",
"Session ID": "ID sezení",
"%(senderName)s set a profile picture.": "Uživatel %(senderName)s si nastavil profilový obrázek.",
"%(senderName)s set their display name to %(displayName)s.": "Uživatel %(senderName)s si změnil zobrazované jméno na %(displayName)s.",
"%(senderName)s set a profile picture.": "%(senderName)s si nastavil/a profilový obrázek.",
"%(senderName)s set their display name to %(displayName)s.": "%(senderName)s si změnil/a zobrazované jméno na %(displayName)s.",
"Show timestamps in 12 hour format (e.g. 2:30pm)": "Zobrazovat čas v 12hodinovém formátu (např. 2:30 odp.)",
"Sign in": "Přihlásit",
"Sign out": "Odhlásit",
@ -235,9 +235,9 @@
"Online": "Online",
"Offline": "Offline",
"Check for update": "Zkontrolovat aktualizace",
"%(targetName)s accepted the invitation for %(displayName)s.": "Uživatel %(targetName)s přijal pozvání pro %(displayName)s.",
"%(targetName)s accepted the invitation for %(displayName)s.": "%(targetName)s přijal/a pozvání pro %(displayName)s.",
"Active call (%(roomName)s)": "Probíhající hovor (%(roomName)s)",
"%(senderName)s banned %(targetName)s.": "Uživatel %(senderName)s vykázal uživatele %(targetName)s.",
"%(senderName)s banned %(targetName)s.": "%(senderName)s vykázal/a uživatele %(targetName)s.",
"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>.": "Nelze se připojit k domovskému serveru přes HTTP, pokud je v adresním řádku HTTPS. Buď použijte HTTPS, nebo <a>povolte nezabezpečené skripty</a>.",
"Click here to fix": "Pro opravu klepněte zde",
"Click to mute video": "Klepněte pro zakázání videa",
@ -258,7 +258,7 @@
"Unable to remove contact information": "Nepodařilo se smazat kontaktní údaje",
"Unable to verify email address.": "Nepodařilo se ověřit e-mailovou adresu.",
"Unban": "Přijmout zpět",
"%(senderName)s unbanned %(targetName)s.": "Uživatel %(senderName)s přijal zpět uživatele %(targetName)s.",
"%(senderName)s unbanned %(targetName)s.": "%(senderName)s přijal/a zpět uživatele %(targetName)s.",
"Unable to capture screen": "Nepodařilo se zachytit obrazovku",
"Unable to enable Notifications": "Nepodařilo se povolit oznámení",
"unknown caller": "neznámý volající",
@ -305,11 +305,11 @@
"Reason": "Důvod",
"VoIP conference started.": "VoIP konference započata.",
"VoIP conference finished.": "VoIP konference ukončena.",
"%(targetName)s left the room.": "Uživatel %(targetName)s opustil místnost.",
"%(targetName)s left the room.": "%(targetName)s opustil/a místnost.",
"You are already in a call.": "Již máte probíhající hovor.",
"%(senderName)s requested a VoIP conference.": "Uživatel %(senderName)s požádal o VoIP konferenci.",
"%(senderName)s removed their profile picture.": "Uživatel %(senderName)s odstranil svůj profilový obrázek.",
"%(targetName)s rejected the invitation.": "Uživatel %(targetName)s odmítl pozvání.",
"%(senderName)s removed their profile picture.": "%(senderName)s odstranil/a svůj profilový obrázek.",
"%(targetName)s rejected the invitation.": "%(targetName)s odmítl/a pozvání.",
"Communities": "Skupiny",
"Message Pinning": "Připíchnutí zprávy",
"Your browser does not support the required cryptography extensions": "Váš prohlížeč nepodporuje požadovaná kryptografická rozšíření",
@ -320,20 +320,20 @@
"Admin Tools": "Nástroje pro správce",
"No pinned messages.": "Žádné připíchnuté zprávy.",
"Pinned Messages": "Připíchnuté zprávy",
"%(senderName)s removed their display name (%(oldDisplayName)s).": "Uživatel %(senderName)s odstranil své zobrazované jméno (%(oldDisplayName)s).",
"%(senderName)s withdrew %(targetName)s's invitation.": "Uživatel %(senderName)s zrušil pozvání pro uživatele %(targetName)s.",
"%(senderName)s made future room history visible to all room members, from the point they are invited.": "Uživatel %(senderName)s nastavil viditelnost budoucích zpráv v této místnosti pro všechny její členy, a to od chvíle jejich pozvání.",
"%(senderName)s made future room history visible to all room members, from the point they joined.": "Uživatel %(senderName)s nastavil viditelnost budoucích zpráv v této místnosti pro všechny její členy, a to od chvíle jejich vstupu.",
"%(senderName)s made future room history visible to all room members.": "Uživatel %(senderName)s nastavil viditelnost budoucích zpráv v této místnosti pro všechny její členy.",
"%(senderName)s made future room history visible to anyone.": "Uživatel %(senderName)s nastavil viditelnost budoucích zpráv pro kohokoliv.",
"%(senderName)s changed the pinned messages for the room.": "Uživatel %(senderName)s změnil připíchnuté zprávy této místnosti.",
"%(senderName)s removed their display name (%(oldDisplayName)s).": "%(senderName)s odstranil/a své zobrazované jméno (%(oldDisplayName)s).",
"%(senderName)s withdrew %(targetName)s's invitation.": "%(senderName)s zrušil/a pozvání pro uživatele %(targetName)s.",
"%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s nastavil/a viditelnost budoucích zpráv v této místnosti pro všechny její členy, a to od chvíle jejich pozvání.",
"%(senderName)s made future room history visible to all room members, from the point they joined.": "%(senderName)s nastavil/a viditelnost budoucích zpráv v této místnosti pro všechny její členy, a to od chvíle jejich vstupu.",
"%(senderName)s made future room history visible to all room members.": "%(senderName)s nastavil/a viditelnost budoucích zpráv v této místnosti pro všechny její členy.",
"%(senderName)s made future room history visible to anyone.": "%(senderName)s nastavil/a viditelnost budoucích zpráv pro kohokoliv.",
"%(senderName)s changed the pinned messages for the room.": "%(senderName)s změnil/a připíchnuté zprávy této místnosti.",
"Authentication check failed: incorrect password?": "Kontrola ověření selhala: špatné heslo?",
"You need to be able to invite users to do that.": "Pro tuto akci musíte mít právo zvát uživatele.",
"Delete Widget": "Smazat widget",
"Error decrypting image": "Chyba při dešifrování obrázku",
"Error decrypting video": "Chyba při dešifrování videa",
"%(senderDisplayName)s removed the room avatar.": "Uživatel %(senderDisplayName)s odstranil avatar místnosti.",
"%(senderDisplayName)s changed the room avatar to <img/>": "Uživatel %(senderDisplayName)s změnil avatar místnosti na <img/>",
"%(senderDisplayName)s removed the room avatar.": "%(senderDisplayName)s odstranil/a avatar místnosti.",
"%(senderDisplayName)s changed the room avatar to <img/>": "%(senderDisplayName)s změnil/a avatar místnosti na <img/>",
"Copied!": "Zkopírováno!",
"Failed to copy": "Nepodařilo se zkopírovat",
"Deleting a widget removes it for all users in this room. Are you sure you want to delete this widget?": "Smazáním widgetu ho odstraníte všem uživatelům v této místnosti. Opravdu chcete tento widget smazat?",
@ -384,9 +384,9 @@
"Invalid community ID": "Neplatné ID skupiny",
"'%(groupId)s' is not a valid community ID": "'%(groupId)s' není platné ID skupiny",
"New community ID (e.g. +foo:%(localDomain)s)": "Nové ID skupiny (např. +neco:%(localDomain)s)",
"%(senderName)s sent an image": "Uživatel %(senderName)s poslal obrázek",
"%(senderName)s sent a video": "Uživatel %(senderName)s poslal video",
"%(senderName)s uploaded a file": "Uživatel %(senderName)s nahrál soubor",
"%(senderName)s sent an image": "%(senderName)s poslal/a obrázek",
"%(senderName)s sent a video": "%(senderName)s poslal/a video",
"%(senderName)s uploaded a file": "%(senderName)s nahrál/a soubor",
"Disinvite this user?": "Odvolat pozvání tohoto uživatele?",
"Kick this user?": "Vykopnout tohoto uživatele?",
"Unban this user?": "Přijmout zpět tohoto uživatele?",
@ -398,7 +398,7 @@
"You have <a>disabled</a> URL previews by default.": "<a>Vypnuli</a> jste automatické náhledy webových adres.",
"You have <a>enabled</a> URL previews by default.": "<a>Zapnuli</a> jste automatické náhledy webových adres.",
"URL Previews": "Náhledy webových adres",
"%(senderDisplayName)s changed the avatar for %(roomName)s": "Uživatel %(senderDisplayName)s změnil avatar místnosti %(roomName)s",
"%(senderDisplayName)s changed the avatar for %(roomName)s": "%(senderDisplayName)s změnil/a avatar místnosti %(roomName)s",
"Add an Integration": "Přidat začlenění",
"An email has been sent to %(emailAddress)s": "Na adresu %(emailAddress)s jsme poslali e-mail",
"File to import": "Soubor k importu",
@ -466,18 +466,18 @@
"%(nameList)s %(transitionList)s": "%(nameList)s %(transitionList)s",
"%(severalUsers)sjoined %(count)s times|other": "%(severalUsers)s%(count)s krát vstoupili",
"%(severalUsers)sjoined %(count)s times|one": "%(severalUsers)svstoupili",
"%(oneUser)sjoined %(count)s times|one": "%(oneUser)svstoupil",
"%(oneUser)sjoined %(count)s times|one": "%(oneUser)svstoupil/a",
"%(severalUsers)sleft %(count)s times|other": "%(severalUsers)s %(count)s krát opustili",
"%(severalUsers)sleft %(count)s times|one": "%(severalUsers)sopustili",
"%(oneUser)sleft %(count)s times|other": "%(oneUser)s %(count)s krát opustil",
"%(oneUser)sleft %(count)s times|one": "%(oneUser)sopustil",
"%(severalUsers)sjoined and left %(count)s times|other": "%(severalUsers)s %(count)s krát vstoupili a opustili",
"%(severalUsers)sjoined and left %(count)s times|one": "%(severalUsers)svstoupili a opustili",
"%(oneUser)sjoined and left %(count)s times|other": "%(oneUser)s %(count)s krát vstoupil a opustil",
"%(oneUser)sjoined and left %(count)s times|one": "%(oneUser)svstoupil a opustil",
"%(oneUser)sjoined and left %(count)s times|other": "%(oneUser)s %(count)s krát vstoupil/a a opustil/a",
"%(oneUser)sjoined and left %(count)s times|one": "%(oneUser)svstoupil/a a opustil/a",
"%(severalUsers)sleft and rejoined %(count)s times|other": "%(severalUsers)s %(count)s krát opustili a znovu vstoupili",
"%(severalUsers)sleft and rejoined %(count)s times|one": "%(severalUsers)sopustili a znovu vstoupili",
"%(oneUser)sleft and rejoined %(count)s times|other": "%(oneUser)s %(count)s krát opustil a znovu vstoupil",
"%(oneUser)sleft and rejoined %(count)s times|other": "%(oneUser)s %(count)s krát opustil/a a znovu vstoupil/a",
"%(oneUser)sleft and rejoined %(count)s times|one": "%(oneUser)sopustil a znovu vstoupil",
"%(severalUsers)srejected their invitations %(count)s times|other": "%(severalUsers)s %(count)s krát odmítli pozvání",
"%(severalUsers)srejected their invitations %(count)s times|one": "%(severalUsers)sodmítli pozvání",
@ -487,10 +487,10 @@
"%(severalUsers)shad their invitations withdrawn %(count)s times|one": "%(severalUsers)smeli stažené pozvání",
"%(oneUser)shad their invitation withdrawn %(count)s times|other": "%(oneUser)směl %(count)s krát stažené pozvání",
"%(oneUser)shad their invitation withdrawn %(count)s times|one": "%(oneUser)směl stažené pozvání",
"were invited %(count)s times|other": "byli %(count)s krát pozvaní",
"were invited %(count)s times|one": "byli pozvaní",
"was invited %(count)s times|other": "byl %(count)s krát pozvaný",
"was invited %(count)s times|one": "byl pozvaný",
"were invited %(count)s times|other": "byli %(count)s krát pozváni",
"were invited %(count)s times|one": "byli pozváni",
"was invited %(count)s times|other": "byl %(count)s krát pozván",
"was invited %(count)s times|one": "byl pozván",
"were banned %(count)s times|other": "mělid %(count)s krát zakázaný vstup",
"were banned %(count)s times|one": "měli zakázaný vstup",
"was banned %(count)s times|other": "měl %(count)s krát zakázaný vstup",
@ -503,14 +503,14 @@
"were kicked %(count)s times|one": "byli vyhozeni",
"was kicked %(count)s times|other": "byl %(count)s krát vyhozen",
"was kicked %(count)s times|one": "byl vyhozen",
"%(severalUsers)schanged their name %(count)s times|other": "Uživatelé %(severalUsers)s si %(count)s krát změnili jméno",
"%(severalUsers)schanged their name %(count)s times|one": "Uživatelé %(severalUsers)s si změnili jméno",
"%(oneUser)schanged their name %(count)s times|other": "Uživatel %(oneUser)s si %(count)s krát změnil jméno",
"%(oneUser)schanged their name %(count)s times|one": "Uživatel %(oneUser)s si změnil jméno",
"%(severalUsers)schanged their name %(count)s times|other": "%(severalUsers)s si %(count)s krát změnili jméno",
"%(severalUsers)schanged their name %(count)s times|one": "%(severalUsers)s si změnili jméno",
"%(oneUser)schanged their name %(count)s times|other": "%(oneUser)s si %(count)s krát změnil/a jméno",
"%(oneUser)schanged their name %(count)s times|one": "%(oneUser)s si změnil/ jméno",
"%(severalUsers)schanged their avatar %(count)s times|other": "%(severalUsers)ssi %(count)s krát změnili avatary",
"%(severalUsers)schanged their avatar %(count)s times|one": "%(severalUsers)ssi změnili avatary",
"%(oneUser)schanged their avatar %(count)s times|other": "%(oneUser)ssi %(count)s krát změnil avatar",
"%(oneUser)schanged their avatar %(count)s times|one": "%(oneUser)ssi změnil avatar",
"%(oneUser)schanged their avatar %(count)s times|other": "%(oneUser)s si %(count)s krát změnil/a avatar",
"%(oneUser)schanged their avatar %(count)s times|one": "%(oneUser)s si změnil/a avatar",
"%(items)s and %(count)s others|other": "%(items)s a %(count)s další",
"%(items)s and %(count)s others|one": "%(items)s a jeden další",
"%(items)s and %(lastItem)s": "%(items)s a také %(lastItem)s",
@ -539,7 +539,7 @@
"To get started, please pick a username!": "Začněte tím, že si zvolíte uživatelské jméno!",
"This will be your account name on the <span></span> homeserver, or you can pick a <a>different server</a>.": "Toto bude název vašeho účtu na domovském serveru <span></span>, anebo si můžete zvolit <a>jiný server</a>.",
"If you already have a Matrix account you can <a>log in</a> instead.": "Pokud už účet v síti Matrix máte, můžete se ihned <a>Přihlásit</a>.",
"%(oneUser)sjoined %(count)s times|other": "%(oneUser)s %(count)s krát vstoupil",
"%(oneUser)sjoined %(count)s times|other": "%(oneUser)s %(count)s krát vstoupil/a",
"Private Chat": "Soukromá konverzace",
"Public Chat": "Veřejná konverzace",
"You must <a>register</a> to use this functionality": "Pro využívání této funkce se <a>zaregistrujte</a>",
@ -564,7 +564,7 @@
"These rooms are displayed to community members on the community page. Community members can join the rooms by clicking on them.": "Tyto místnosti se zobrazují všem členům na stránce skupiny. Členové skupiny mohou vstoupit do místnosti klepnutím.",
"Featured Rooms:": "Hlavní místnosti:",
"Featured Users:": "Významní uživatelé:",
"%(inviter)s has invited you to join this community": "Uživatel %(inviter)s vás pozval do této skupiny",
"%(inviter)s has invited you to join this community": "%(inviter)s vás pozval/a do této skupiny",
"You are an administrator of this community": "Jste správcem této skupiny",
"You are a member of this community": "Jste členem této skupiny",
"Your community hasn't got a Long Description, a HTML page to show to community members.<br />Click here to open settings and give it one!": "Vaše skupina nemá vyplněný dlouhý popis, který je součástí HTML stránky skupiny a která se zobrazuje jejím členům.<br />Klepnutím zde otevřete nastavení, kde ho můžete doplnit!",
@ -753,7 +753,7 @@
"%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(weekDayName)s, %(day)s %(monthName)s %(fullYear)s",
"Missing roomId.": "Chybějící ID místnosti.",
"Opens the Developer Tools dialog": "Otevře dialog nástrojů pro vývojáře",
"%(oldDisplayName)s changed their display name to %(displayName)s.": "%(oldDisplayName)s si změnil zobrazované jméno na %(displayName)s.",
"%(oldDisplayName)s changed their display name to %(displayName)s.": "%(oldDisplayName)s si změnil/a zobrazované jméno na %(displayName)s.",
"Always show encryption icons": "Vždy zobrazovat ikonu stavu šifrovaní",
"Send analytics data": "Odesílat analytická data",
"Enable widget screenshots on supported widgets": "Povolit screenshot widgetu pro podporované widgety",
@ -860,7 +860,7 @@
"Security & Privacy": "Zabezpečení",
"Encryption": "Šifrování",
"Once enabled, encryption cannot be disabled.": "Po zapnutí, už nepůjde šifrování vypnout.",
"Encrypted": "Šifrování",
"Encrypted": "Šifrováno",
"General": "Obecné",
"General failure": "Nějaká chyba",
"This homeserver does not support login using email address.": "Tento domovský serveru neumožňuje přihlášení pomocí e-mailu.",
@ -943,14 +943,14 @@
"Upgrades a room to a new version": "Upgraduje místnost na novou verzi",
"This room has no topic.": "Tato místnost nemá žádné specifické téma.",
"Sets the room name": "Nastaví název místnosti",
"%(senderDisplayName)s upgraded this room.": "Uživatel %(senderDisplayName)s upgradoval místnost.",
"%(senderDisplayName)s made the room public to whoever knows the link.": "Uživatel %(senderDisplayName)s zveřejnil místnost pro všechny s odkazem.",
"%(senderDisplayName)s made the room invite only.": "Uživatel %(senderDisplayName)s zpřístupnil místnost pouze na pozvání.",
"%(senderDisplayName)s changed the join rule to %(rule)s": "Uživatel %(senderDisplayName)s změnil pravidlo k připojení na %(rule)s",
"%(senderDisplayName)s has allowed guests to join the room.": "Uživatel %(senderDisplayName)s povolil přístup hostům.",
"%(senderDisplayName)s has prevented guests from joining the room.": "Uživatel %(senderDisplayName)s zakázal přístup hostům.",
"%(senderDisplayName)s changed guest access to %(rule)s": "Uživatel %(senderDisplayName)s změnil pravidlo pro přístup hostů na %(rule)s",
"%(senderName)s set the main address for this room to %(address)s.": "Uživatel %(senderName)s hlavní adresu této místnosti na %(address)s.",
"%(senderDisplayName)s upgraded this room.": "%(senderDisplayName)s upgradoval/a místnost.",
"%(senderDisplayName)s made the room public to whoever knows the link.": "%(senderDisplayName)s zveřejnil/a místnost pro všechny s odkazem.",
"%(senderDisplayName)s made the room invite only.": "%(senderDisplayName)s zpřístupnil/a místnost pouze na pozvání.",
"%(senderDisplayName)s changed the join rule to %(rule)s": "%(senderDisplayName)s změnil/a pravidlo k připojení na %(rule)s",
"%(senderDisplayName)s has allowed guests to join the room.": "%(senderDisplayName)s povolil/a přístup hostům.",
"%(senderDisplayName)s has prevented guests from joining the room.": "%(senderDisplayName)s zakázal/a přístup hostům.",
"%(senderDisplayName)s changed guest access to %(rule)s": "%(senderDisplayName)s změnil/a pravidlo pro přístup hostů na %(rule)s",
"%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s nastavil/a hlavní adresu této místnosti na %(address)s.",
"%(senderName)s removed the main address for this room.": "%(senderName)s zrušil hlavní adresu této místnosti.",
"%(displayName)s is typing …": "%(displayName)s píše …",
"%(names)s and %(count)s others are typing …|other": "%(names)s a %(count)s dalších píše …",
@ -1136,7 +1136,7 @@
"Render simple counters in room header": "Zobrazovat stavová počítadla v hlavičce místnosti",
"Enable Community Filter Panel": "Povolit panel Filtr skupiny",
"Show developer tools": "Zobrazit nástroje pro vývojáře",
"Encrypted messages in group chats": "Šifrované zprávy ve skupinových konverzacích",
"Encrypted messages in group chats": "Šifrované zprávy ve skupinách",
"Open Devtools": "Otevřít nástroje pro vývojáře",
"Credits": "Poděkování",
"You've previously used %(brand)s on %(host)s with lazy loading of members enabled. In this version lazy loading is disabled. As the local cache is not compatible between these two settings, %(brand)s needs to resync your account.": "Na adrese %(host)s už jste použili %(brand)s se zapnutou volbou načítání členů místností až při prvním zobrazení. V této verzi je načítání členů až při prvním zobrazení vypnuté. Protože je s tímto nastavením lokální vyrovnávací paměť nekompatibilní, %(brand)s potřebuje znovu synchronizovat údaje z vašeho účtu.",
@ -1231,10 +1231,10 @@
"You cannot modify widgets in this room.": "V této místnosti nemůžete manipulovat s widgety.",
"Sends the given message coloured as a rainbow": "Pošle zprávu v barvách duhy",
"Sends the given emote coloured as a rainbow": "Pošle reakci v barvách duhy",
"%(senderDisplayName)s enabled flair for %(groups)s in this room.": "Uživatel %(senderDisplayName)s přidal této místnosti příslušnost ke skupině %(groups)s.",
"%(senderDisplayName)s disabled flair for %(groups)s in this room.": "Uživatel %(senderDisplayName)s odebral této místnosti příslušnost ke skupině %(groups)s.",
"%(senderDisplayName)s enabled flair for %(newGroups)s and disabled flair for %(oldGroups)s in this room.": "Uživatel %(senderDisplayName)s přidal této místnosti příslušnost ke skupině %(newGroups)s a odebral k %(oldGroups)s.",
"%(senderName)s revoked the invitation for %(targetDisplayName)s to join the room.": "%(senderName)s zrušil pozvání do této místnosti pro uživatele %(targetDisplayName)s.",
"%(senderDisplayName)s enabled flair for %(groups)s in this room.": "%(senderDisplayName)s přidal/a této místnosti příslušnost ke skupině %(groups)s.",
"%(senderDisplayName)s disabled flair for %(groups)s in this room.": "%(senderDisplayName)s odebral/a této místnosti příslušnost ke skupině %(groups)s.",
"%(senderDisplayName)s enabled flair for %(newGroups)s and disabled flair for %(oldGroups)s in this room.": "%(senderDisplayName)s přidal/a této místnosti příslušnost ke skupině %(newGroups)s a odebral/a k %(oldGroups)s.",
"%(senderName)s revoked the invitation for %(targetDisplayName)s to join the room.": "%(senderName)s zrušil/a pozvání do této místnosti pro uživatele %(targetDisplayName)s.",
"No homeserver URL provided": "Nebyla zadána URL adresa domovského server",
"Unexpected error resolving homeserver configuration": "Chyba při zjišťování konfigurace domovského serveru",
"The user's homeserver does not support the version of the room.": "Uživatelův domovský server nepodporuje verzi této místnosti.",
@ -1253,11 +1253,11 @@
"Join the conversation with an account": "Připojte se ke konverzaci s účtem",
"Sign Up": "Zaregistrovat se",
"Sign In": "Přihlásit se",
"You were kicked from %(roomName)s by %(memberName)s": "Uživatel %(memberName)s vás vykopl z místnosti %(roomName)s",
"You were kicked from %(roomName)s by %(memberName)s": "%(memberName)s vás vykopl/a z místnosti %(roomName)s",
"Reason: %(reason)s": "Důvod: %(reason)s",
"Forget this room": "Zapomenout na tuto místnost",
"Re-join": "Znovu vstoupit",
"You were banned from %(roomName)s by %(memberName)s": "Uživatel %(memberName)s vás vykázal z místnosti %(roomName)s",
"You were banned from %(roomName)s by %(memberName)s": "%(memberName)s vás vykázal/a z místnosti %(roomName)s",
"Something went wrong with your invite to %(roomName)s": "S vaší pozvánkou do místnosti %(roomName)s se něco pokazilo",
"You can only join it with a working invite.": "Vstoupit můžete jen s funkční pozvánkou.",
"You can still join it because this is a public room.": "I přesto můžete vstoupit, protože tato místnost je veřejná.",
@ -1265,7 +1265,7 @@
"Try to join anyway": "Stejně se pokusit vstoupit",
"Do you want to chat with %(user)s?": "Chcete si povídat s %(user)s?",
"Do you want to join %(roomName)s?": "Chcete vstoupit do místnosti %(roomName)s?",
"<userName/> invited you": "Uživatel <userName/> vás pozval",
"<userName/> invited you": "<userName/> vás pozval/a",
"You're previewing %(roomName)s. Want to join it?": "Nahlížíte do místnosti %(roomName)s. Chcete do ní vstoupit?",
"%(roomName)s can't be previewed. Do you want to join it?": "%(roomName)s si nelze jen tak prohlížet. Chcete do ní vstoupit?",
"This room doesn't exist. Are you sure you're at the right place?": "Tato místnost neexistuje. Jste si jistí, že jste na správném místě?",
@ -1280,7 +1280,7 @@
"Invited by %(sender)s": "Pozván od uživatele %(sender)s",
"Error updating flair": "Nepovedlo se změnit příslušnost ke skupině",
"There was an error updating the flair for this room. The server may not allow it or a temporary error occurred.": "Pro tuto místnost se nepovedlo změnit příslušnost ke skupině. Možná to server neumožňuje, nebo došlo k dočasné chybě.",
"<reactors/><reactedWith>reacted with %(shortName)s</reactedWith>": "Uživatel <reactors/><reactedWith>reagoval s %(shortName)s</reactedWith>",
"<reactors/><reactedWith>reacted with %(shortName)s</reactedWith>": "<reactors/><reactedWith> reagoval/a s %(shortName)s</reactedWith>",
"edited": "upraveno",
"Maximize apps": "Maximalizovat aplikace",
"Rotate Left": "Otočit doleva",
@ -1509,11 +1509,11 @@
"Show image": "Zobrazit obrázek",
"You verified %(name)s": "Ověřili jste %(name)s",
"You cancelled verifying %(name)s": "Zrušili jste ověření %(name)s",
"%(name)s cancelled verifying": "Uživatel %(name)s zrušil ověření",
"%(name)s cancelled verifying": "%(name)s zrušil/a ověření",
"You accepted": "Přijali jste",
"%(name)s accepted": "Uživatel %(name)s přijal",
"%(name)s accepted": "%(name)s přijal/a",
"You cancelled": "Zrušili jste",
"%(name)s cancelled": "Uživatel %(name)s zrušil",
"%(name)s cancelled": "%(name)s zrušil/a",
"%(name)s wants to verify": "%(name)s chce ověřit",
"You sent a verification request": "Poslali jste požadavek na ověření",
"Show all": "Zobrazit vše",
@ -1530,10 +1530,10 @@
"Quick Reactions": "Rychlé reakce",
"Cancel search": "Zrušit hledání",
"Please <newIssueLink>create a new issue</newIssueLink> on GitHub so that we can investigate this bug.": "Vyrobte prosím <newIssueLink>nové issue</newIssueLink> na GitHubu abychom mohli chybu opravit.",
"%(severalUsers)smade no changes %(count)s times|other": "Uživatelé %(severalUsers)s neudělali %(count)s krát žádnou změnu",
"%(severalUsers)smade no changes %(count)s times|one": "Uživatelé %(severalUsers)s neudělali žádnou změnu",
"%(oneUser)smade no changes %(count)s times|other": "Uživatel %(oneUser)s neudělal %(count)s krát žádnou změnu",
"%(oneUser)smade no changes %(count)s times|one": "Uživatel %(oneUser)s neudělal žádnou změnu",
"%(severalUsers)smade no changes %(count)s times|other": "%(severalUsers)s neudělali %(count)s krát žádnou změnu",
"%(severalUsers)smade no changes %(count)s times|one": "%(severalUsers)s neudělali žádnou změnu",
"%(oneUser)smade no changes %(count)s times|other": "%(oneUser)s neudělal/a %(count)s krát žádnou změnu",
"%(oneUser)smade no changes %(count)s times|one": "%(oneUser)s neudělal/a žádnou změnu",
"e.g. my-room": "např. moje-mistnost",
"Use bots, bridges, widgets and sticker packs": "Použít roboty, propojení, widgety a balíky samolepek",
"Terms of Service": "Podmínky použití",
@ -1555,7 +1555,7 @@
"Explore": "Procházet",
"Filter": "Filtr místností",
"Filter rooms…": "Najít místnost…",
"%(creator)s created and configured the room.": "%(creator)s vytvořil a nakonfiguroval místnost.",
"%(creator)s created and configured the room.": "%(creator)s vytvořil/a a nakonfiguroval/a místnost.",
"Preview": "Náhled",
"View": "Zobrazit",
"Find a room…": "Najít místnost…",
@ -1593,23 +1593,23 @@
"%(senderName)s placed a voice call. (not supported by this browser)": "%(senderName)s spustil hovor. (není podporováno tímto prohlížečem)",
"%(senderName)s placed a video call.": "%(senderName)s spustil videohovor.",
"%(senderName)s placed a video call. (not supported by this browser)": "%(senderName)s spustil videohovor. (není podporováno tímto prohlížečem)",
"%(senderName)s removed the rule banning users matching %(glob)s": "%(senderName)s odstranit pravidlo blokující uživatele odpovídající %(glob)s",
"%(senderName)s removed the rule banning users matching %(glob)s": "%(senderName)s odstranil/a pravidlo blokující uživatele odpovídající %(glob)s",
"%(senderName)s removed the rule banning rooms matching %(glob)s": "%(senderName)s odstranil pravidlo blokující místnosti odpovídající %(glob)s",
"%(senderName)s removed the rule banning servers matching %(glob)s": "%(senderName)s odstranil pravidlo blokující servery odpovídající %(glob)s",
"%(senderName)s removed a ban rule matching %(glob)s": "%(senderName)s odstranil blokující pravidlo %(glob)s",
"%(senderName)s updated an invalid ban rule": "%(senderName)s aktualizoval neplatné pravidlo blokování",
"%(senderName)s updated the rule banning users matching %(glob)s for %(reason)s": "%(senderName)s aktualizoval pravidlo blokující uživatele odpovídající %(glob)s z důvodu %(reason)s",
"%(senderName)s updated the rule banning users matching %(glob)s for %(reason)s": "%(senderName)s aktualizoval/a pravidlo blokující uživatele odpovídající %(glob)s z důvodu %(reason)s",
"%(senderName)s updated the rule banning rooms matching %(glob)s for %(reason)s": "%(senderName)s aktualizoval pravidlo blokující místnosti odpovídající %(glob)s z důvodu %(reason)s",
"%(senderName)s updated the rule banning servers matching %(glob)s for %(reason)s": "%(senderName)s aktualizoval pravidlo blokující servery odpovídající %(glob)s z důvodu %(reason)s",
"%(senderName)s updated a ban rule matching %(glob)s for %(reason)s": "%(senderName)s aktualizoval blokovací pravidlo odpovídající %(glob)s z důvodu %(reason)s",
"%(senderName)s created a rule banning users matching %(glob)s for %(reason)s": "%(senderName)s vytvořil pravidlo blokující uživatele odpovídající %(glob)s z důvodu %(reason)s",
"%(senderName)s created a rule banning users matching %(glob)s for %(reason)s": "%(senderName)s vytvořil/a pravidlo blokující uživatele odpovídající %(glob)s z důvodu %(reason)s",
"%(senderName)s created a rule banning rooms matching %(glob)s for %(reason)s": "%(senderName)s vytvořil pravidlo blokující místnosti odpovídající %(glob)s z důvodu %(reason)s",
"%(senderName)s created a rule banning servers matching %(glob)s for %(reason)s": "%(senderName)s vytvořil pravidlo blokující servery odpovídající %(glob)s z důvodu %(reason)s",
"%(senderName)s created a ban rule matching %(glob)s for %(reason)s": "%(senderName)s vytvořil blokovací pravidlo odpovídající %(glob)s z důvodu %(reason)s",
"%(senderName)s changed a rule that was banning users matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s změnil pravidlo blokující uživatele odpovídající %(oldGlob)s na uživatele odpovídající %(newGlob)s z důvodu %(reason)s",
"%(senderName)s changed a rule that was banning rooms matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s změnil pravidlo blokující místnosti odpovídající %(oldGlob)s na místnosti odpovídající %(newGlob)s z důvodu %(reason)s",
"%(senderName)s changed a rule that was banning servers matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s změnil pravidlo blokující servery odpovídající %(oldGlob)s na servery odpovídající %(newGlob)s z důvodu %(reason)s",
"%(senderName)s updated a ban rule that was matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s změnil blokovací pravidlo odpovídající %(oldGlob)s na odpovídající %(newGlob)s z důvodu %(reason)s",
"%(senderName)s changed a rule that was banning users matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s změnil/a pravidlo blokující uživatele odpovídající %(oldGlob)s na uživatele odpovídající %(newGlob)s z důvodu %(reason)s",
"%(senderName)s changed a rule that was banning rooms matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s změnil/a pravidlo blokující místnosti odpovídající %(oldGlob)s na místnosti odpovídající %(newGlob)s z důvodu %(reason)s",
"%(senderName)s changed a rule that was banning servers matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s změnil/a pravidlo blokující servery odpovídající %(oldGlob)s na servery odpovídající %(newGlob)s z důvodu %(reason)s",
"%(senderName)s updated a ban rule that was matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s změnil/a blokovací pravidlo odpovídající %(oldGlob)s na odpovídající %(newGlob)s z důvodu %(reason)s",
"Try out new ways to ignore people (experimental)": "Vyzkoušejte nové metody ignorování lidí (experimentální)",
"Match system theme": "Nastavit podle vzhledu systému",
"My Ban List": "Můj seznam zablokovaných",
@ -1650,7 +1650,7 @@
"Subscribed lists": "Odebírané seznamy",
"Subscribe": "Odebírat",
"This message cannot be decrypted": "Zprávu nelze rozšifrovat",
"Unencrypted": "Nešifrované",
"Unencrypted": "Nezašifrované",
"<userName/> wants to chat": "<userName/> si chce psát",
"Start chatting": "Zahájit konverzaci",
"Failed to connect to integration manager": "Nepovedlo se připojit ke správci integrací",
@ -1745,7 +1745,7 @@
"Waiting for %(displayName)s to verify…": "Čekám až nás %(displayName)s ověří…",
"They match": "Odpovídají",
"They don't match": "Neodpovídají",
"To be secure, do this in person or use a trusted way to communicate.": "Aby to bylo bezpečné, udělejte to osobně nebo použijte důvěryhodný komunikační prostředek.",
"To be secure, do this in person or use a trusted way to communicate.": "Aby bylo ověření bezpečné, proveďte ho osobně nebo použijte důvěryhodný komunikační prostředek.",
"Lock": "Zámek",
"Verify yourself & others to keep your chats safe": "Ověřte sebe a ostatní, aby byla vaše komunikace bezpečná",
"Other users may not trust it": "Ostatní uživatelé této relaci nemusí věřit",
@ -1806,7 +1806,7 @@
"This room isnt bridging messages to any platforms. <a>Learn more.</a>": "Tato místnost není propojená s žádnými dalšími platformami. <a>Více informací.</a>",
"Bridges": "Propojení",
"This user has not verified all of their sessions.": "Tento uživatel zatím neověřil všechny své relace.",
"You have not verified this user.": "Tohoto uživatele jste neověřil.",
"You have not verified this user.": "Tohoto uživatele jste neověřili.",
"You have verified this user. This user has verified all of their sessions.": "Tohoto uživatele jste ověřili a on ověřil všechny své relace.",
"Someone is using an unknown session": "Někdo používá neznámou relaci",
"This room is end-to-end encrypted": "Místnost je šifrovaná end-to-end",
@ -1822,13 +1822,13 @@
"Send a reply…": "Odpovědět…",
"Send a message…": "Odeslat zprávu…",
"Direct Messages": "Přímé zprávy",
"Reject & Ignore user": "Odmítnout & ignorovat uživatele",
"Reject & Ignore user": "Odmítnout a ignorovat uživatele",
"Unknown Command": "Neznámý příkaz",
"Unrecognised command: %(commandText)s": "Nerozpoznaný příkaz: %(commandText)s",
"You can use <code>/help</code> to list available commands. Did you mean to send this as a message?": "Můžete použít <code>/help</code> na vypsání všech příkazů. Nebo jste text chtěli odeslat jako zprávu?",
"Hint: Begin your message with <code>//</code> to start it with a slash.": "Tip: Zprávu můžete začít <code>//</code>, pokud chcete aby začínala lomítkem.",
"Send as message": "Odeslat jako zprávu",
"Waiting for %(displayName)s to accept…": "Čekáme, než %(displayName)s přijme…",
"Waiting for %(displayName)s to accept…": "Čekáme, než %(displayName)s výzvu přijme…",
"Start Verification": "Začít s ověřením",
"Your messages are secured and only you and the recipient have the unique keys to unlock them.": "Vaše zprávy jsou zabezpečené - pouze vy a jejich příjemci máte klíče potřebné k jejich přečtení.",
"Verify User": "Ověřit uživatele",
@ -1922,7 +1922,7 @@
"The session you are trying to verify doesn't support scanning a QR code or emoji verification, which is what %(brand)s supports. Try with a different client.": "Relace, kterou se snažíte ověřit, neumožňuje ověření QR kódem ani pomocí emoji, což je to, co %(brand)s podporuje. Zkuste použít jiného klienta.",
"Verify by scanning": "Ověřte naskenováním",
"You declined": "Odmítli jste",
"%(name)s declined": "Uživatel %(name)s odmítl",
"%(name)s declined": "%(name)s odmítl/a",
"Keep a copy of it somewhere secure, like a password manager or even a safe.": "Uschovejte si kopii na bezpečném místě, například ve správci hesel nebo v trezoru.",
"Your recovery key": "Váš obnovovací klíč",
"Copy": "Zkopírovat",
@ -1968,9 +1968,9 @@
"%(senderName)s added the alternative addresses %(addresses)s for this room.|one": "%(senderName)s přidal/a této místnosti alternativní adresu %(addresses)s.",
"%(senderName)s removed the alternative addresses %(addresses)s for this room.|other": "%(senderName)s odebral/a této místnosti alternativní adresy %(addresses)s.",
"%(senderName)s removed the alternative addresses %(addresses)s for this room.|one": "%(senderName)s odebral/a této místnosti alternativní adresu %(addresses)s.",
"%(senderName)s changed the alternative addresses for this room.": "%(senderName)s změnil/a této místnosti alternativní adresy.",
"%(senderName)s changed the main and alternative addresses for this room.": "%(senderName)s změnil/a této místnosti hlavní a alternativní adresy.",
"%(senderName)s changed the addresses for this room.": "%(senderName)s změnil/a této místnosti adresy.",
"%(senderName)s changed the alternative addresses for this room.": "%(senderName)s změnil/a alternativní adresy této místnosti.",
"%(senderName)s changed the main and alternative addresses for this room.": "%(senderName)s změnil/a hlavní a alternativní adresy této místnosti.",
"%(senderName)s changed the addresses for this room.": "%(senderName)s změnil/a adresy této místnosti.",
"Manually Verify by Text": "Manuální textové ověření",
"Interactively verify by Emoji": "Interaktivní ověření s emotikonami",
"Support adding custom themes": "Umožnit přidání vlastního vzhledu",
@ -2041,7 +2041,7 @@
"Where youre logged in": "Kde jste přihlášení",
"You've successfully verified your device!": "Úspěšně jste ověřili vaše zařízení!",
"Start verification again from the notification.": "Začít proces ověření znovu pomocí notifikace.",
"Start verification again from their profile.": "Začít proces ověření znovu z jejich profilu.",
"Start verification again from their profile.": "Proces ověření začněte znovu z profilu kontaktu.",
"Verification timed out.": "Ověření vypršelo.",
"You cancelled verification on your other session.": "Na druhé relace jste proces ověření zrušili.",
"%(displayName)s cancelled verification.": "%(displayName)s zrušil/a proces ověření.",
@ -2064,7 +2064,7 @@
"%(networkName)s rooms": "místnosti v %(networkName)s",
"Matrix rooms": "místnosti na Matrixu",
"Enable end-to-end encryption": "Povolit E2E šifrování",
"You cant disable this later. Bridges & most bots wont work yet.": "Už to v budoucnu nepůjde vypnout. Většina botů a propojení zatím nefunguje.",
"You cant disable this later. Bridges & most bots wont work yet.": "Toto nelze později vypnout. Většina botů a propojení zatím nefunguje.",
"Server did not require any authentication": "Server nevyžadoval žádné ověření",
"Server did not return valid authentication information.": "Server neposkytl platné informace o ověření.",
"Confirm your account deactivation by using Single Sign On to prove your identity.": "Potvrďte deaktivaci účtu použtím Jednotného přihlášení.",
@ -2291,11 +2291,11 @@
"Show Widgets": "Zobrazit widgety",
"Hide Widgets": "Skrýt widgety",
"Room settings": "Nastavení místnosti",
"Use the <a>Desktop app</a> to see all encrypted files": "Pomocí <a>desktopové aplikace</a> zobrazíte všechny šifrované soubory",
"Use the <a>Desktop app</a> to see all encrypted files": "Pro zobrazení všech šifrovaných souborů použijte <a>desktopovou aplikaci</a>",
"Attach files from chat or just drag and drop them anywhere in a room.": "Připojte soubory z chatu nebo je jednoduše přetáhněte kamkoli do místnosti.",
"No files visible in this room": "V této místnosti nejsou viditelné žádné soubory",
"Show files": "Zobrazit soubory",
"%(count)s people|other": "%(count)s lidé",
"%(count)s people|other": "%(count)s lidé",
"About": "O",
"Youre all caught up": "Vše vyřízeno",
"You have no visible notifications in this room.": "V této místnosti nemáte žádná viditelná oznámení.",
@ -2306,7 +2306,7 @@
"Backup version:": "Verze zálohy:",
"Algorithm:": "Algoritmus:",
"You might enable this if the room will only be used for collaborating with internal teams on your homeserver. This cannot be changed later.": "Tuto možnost můžete povolit, pokud bude místnost použita pouze pro spolupráci s interními týmy na vašem domovském serveru. Toto nelze později změnit.",
"Block anyone not part of %(serverName)s from ever joining this room.": "Blokovat komukoli, kdo není součástí serveru %(serverName)s, aby se nikdy nepřipojil do této místnosti.",
"Block anyone not part of %(serverName)s from ever joining this room.": "Blokovat komukoli, kdo není součástí serveru %(serverName)s, aby se připojil do této místnosti.",
"Back up your encryption keys with your account data in case you lose access to your sessions. Your keys will be secured with a unique Recovery Key.": "Zálohujte šifrovací klíče s daty vašeho účtu pro případ, že ztratíte přístup k relacím. Vaše klíče budou zabezpečeny jedinečným klíčem pro obnovení.",
"Manage the names of and sign out of your sessions below or <a>verify them in your User Profile</a>.": "Níže můžete spravovat názvy a odhlásit se ze svých relací nebo <a>je ověřit v uživatelském profilu</a>.",
"or another cross-signing capable Matrix client": "nebo jiný Matrix klient schopný cross-signing",
@ -2789,7 +2789,7 @@
"Fill Screen": "Vyplnit obrazovku",
"Voice Call": "Hlasový hovor",
"Video Call": "Videohovor",
"%(senderName)s ended the call": "Uživatel %(senderName)s ukončil hovor",
"%(senderName)s ended the call": "%(senderName)s ukončil/a hovor",
"You ended the call": "Ukončili jste hovor",
"New version of %(brand)s is available": "K dispozici je nová verze %(brand)s",
"Error leaving room": "Při opouštění místnosti došlo k chybě",
@ -2879,7 +2879,7 @@
"Prepends (╯°□°)╯︵ ┻━┻ to a plain-text message": "Vloží (╯°□°)╯︵ ┻━┻ na začátek zprávy",
"Remain on your screen while running": "Při běhu zůstává na obrazovce",
"Remain on your screen when viewing another room, when running": "Při prohlížení jiné místnosti zůstává při běhu na obrazovce",
"%(senderDisplayName)s changed the server ACLs for this room.": "%(senderDisplayName)s změnil seznam přístupů serveru pro tuto místnost.",
"%(senderDisplayName)s changed the server ACLs for this room.": "%(senderDisplayName)s změnil/a seznam přístupů serveru pro tuto místnost.",
"Offline encrypted messaging using dehydrated devices": "Offline šifrovaná komunikace pomocí dehydrovaných zařízení",
"See emotes posted to your active room": "Prohlédněte si emoji zveřejněné ve vaší aktivní místnosti",
"See emotes posted to this room": "Prohlédněte si emoji zveřejněné v této místnosti",
@ -2904,5 +2904,69 @@
"Start a Conversation": "Zahájit konverzaci",
"Dial pad": "Číselník",
"There was an error looking up the phone number": "Při vyhledávání telefonního čísla došlo k chybě",
"Unable to look up phone number": "Nelze nalézt telefonní číslo"
"Unable to look up phone number": "Nelze nalézt telefonní číslo",
"Channel: <channelLink/>": "Kanál: <channelLink/>",
"Change which room, message, or user you're viewing": "Změňte, kterou místnost, zprávu nebo uživatele si prohlížíte",
"Workspace: <networkLink/>": "Pracovní oblast: <networkLink/>",
"If you've forgotten your Security Key you can <button>set up new recovery options</button>": "Pokud jste zapomněli bezpečnostní klíč, můžete <button>nastavit nové možnosti obnovení</button>",
"If you've forgotten your Security Phrase you can <button1>use your Security Key</button1> or <button2>set up new recovery options</button2>": "Pokud jste zapomněli bezpečnostní frázi, můžete <button1>použít bezpečnostní klíč</button1> nebo <button2>nastavit nové možnosti obnovení</button2>",
"Backup could not be decrypted with this Security Phrase: please verify that you entered the correct Security Phrase.": "Zálohu nebylo možné dešifrovat pomocí této bezpečnostní fráze: ověřte, zda jste zadali správnou bezpečnostní frázi.",
"Backup could not be decrypted with this Security Key: please verify that you entered the correct Security Key.": "Zálohu nebylo možné dešifrovat pomocí tohoto bezpečnostního klíče: ověřte, zda jste zadali správný bezpečnostní klíč.",
"Back up your encryption keys with your account data in case you lose access to your sessions. Your keys will be secured with a unique Security Key.": "Zálohujte šifrovací klíče s daty účtu pro případ, že ztratíte přístup k relacím. Vaše klíče budou zabezpečeny jedinečným bezpečnostním klíčem.",
"Your Security Key is a safety net - you can use it to restore access to your encrypted messages if you forget your Security Phrase.": "Váš bezpečnostní klíč je bezpečnostní síť - můžete ji použít k obnovení přístupu k šifrovaným zprávám, pokud zapomenete bezpečnostní frázi.",
"We'll store an encrypted copy of your keys on our server. Secure your backup with a Security Phrase.": "Na náš server uložíme zašifrovanou kopii vašich klíčů. Zabezpečte zálohu pomocí bezpečnostní fráze.",
"Access your secure message history and set up secure messaging by entering your Security Key.": "Vstupte do historie zabezpečených zpráv a nastavte zabezpečené zprávy zadáním bezpečnostního klíče.",
"Access your secure message history and set up secure messaging by entering your Security Phrase.": "Vstupte do historie zabezpečených zpráv a nastavte zabezpečené zprávy zadáním bezpečnostní fráze.",
"Unable to access secret storage. Please verify that you entered the correct Security Phrase.": "Nelze získat přístup k zabezpečenému úložišti. Ověřte, zda jste zadali správnou bezpečnostní frázi.",
"We recommend you change your password and Security Key in Settings immediately": "Doporučujeme vám okamžitě změnit heslo a bezpečnostní klíč v Nastavení",
"This session has detected that your Security Phrase and key for Secure Messages have been removed.": "Tato relace zjistila, že byla odstraněna vaše bezpečnostní fráze a klíč pro zabezpečené zprávy.",
"A new Security Phrase and key for Secure Messages have been detected.": "Byla zjištěna nová bezpečnostní fráze a klíč pro zabezpečené zprávy.",
"Make a copy of your Security Key": "Vytvořte kopii bezpečnostního klíče",
"Confirm your Security Phrase": "Potvrďte svou bezpečnostní frázi",
"Secure your backup with a Security Phrase": "Zabezpečte zálohu pomocí bezpečnostní fráze",
"Repeat your Security Phrase...": "Zopakujte vaši bezpečnostní frázi...",
"Set up with a Security Key": "Nastavit pomocí bezpečnostního klíče",
"Use Security Key": "Použít bezpečnostní klíč",
"This looks like a valid Security Key!": "Vypadá to jako platný bezpečnostní klíč!",
"Invalid Security Key": "Neplatný bezpečnostní klíč",
"Your Security Key has been <b>copied to your clipboard</b>, paste it to:": "Váš bezpečnostní klíč byl <b>zkopírován do schránky</b>, vložte jej do:",
"Your Security Key is in your <b>Downloads</b> folder.": "Váš bezpečnostní klíč je ve složce <b>Stažené soubory</b>.",
"Your Security Key": "Váš bezpečnostní klíč",
"Please enter your Security Phrase a second time to confirm.": "Potvrďte prosím svou bezpečnostní frázi.",
"Great! This Security Phrase looks strong enough.": "Skvělé! Tato bezpečnostní fráze vypadá dostatečně silně.",
"Use Security Key or Phrase": "Použijte bezpečnostní klíč nebo frázi",
"Not a valid Security Key": "Neplatný bezpečnostní klíč",
"Enter Security Key": "Zadejte bezpečnostní klíč",
"Enter Security Phrase": "Zadejte bezpečnostní frázi",
"Incorrect Security Phrase": "Nesprávná bezpečnostní fráze",
"Security Key mismatch": "Neshoda bezpečnostního klíče",
"Wrong Security Key": "Špatný bezpečnostní klíč",
"Set my room layout for everyone": "Nastavit všem rozložení mé místnosti",
"%(senderName)s has updated the widget layout": "%(senderName)s aktualizoval rozložení widgetu",
"Search (must be enabled)": "Hledat (musí být povoleno)",
"Remember this": "Zapamatujte si toto",
"The widget will verify your user ID, but won't be able to perform actions for you:": "Widget ověří vaše uživatelské ID, ale nebude za vás moci provádět akce:",
"Allow this widget to verify your identity": "Povolte tomuto widgetu ověřit vaši identitu",
"Use Ctrl + F to search": "Hledejte pomocí Ctrl + F",
"Use Command + F to search": "Hledejte pomocí Command + F",
"Converts the DM to a room": "Převede přímou zprávu na místnost",
"Converts the room to a DM": "Převede místnost na přímou zprávu",
"Mobile experience": "Zážitek na mobilních zařízeních",
"Element Web is currently experimental on mobile. The native apps are recommended for most people.": "Element Web je v současné době experimentální na mobilních zařízeních. Nativní aplikace se doporučují pro většinu lidí.",
"Use app for a better experience": "Pro lepší zážitek použijte aplikaci",
"Element Web is experimental on mobile. For a better experience and the latest features, use our free native app.": "Element Web je experimentální na mobilních zařízeních. Pro lepší zážitek a nejnovější funkce použijte naši bezplatnou nativní aplikaci.",
"Use app": "Použijte aplikaci",
"Something went wrong in confirming your identity. Cancel and try again.": "Při ověřování vaší identity se něco pokazilo. Zrušte to a zkuste to znovu.",
"Your homeserver rejected your log in attempt. This could be due to things just taking too long. Please try again. If this continues, please contact your homeserver administrator.": "Váš domovský server odmítl váš pokus o přihlášení. Může to být způsobeno tím, že věci trvají příliš dlouho. Prosím zkuste to znovu. Pokud to bude pokračovat, obraťte se na správce domovského serveru.",
"Your homeserver was unreachable and was not able to log you in. Please try again. If this continues, please contact your homeserver administrator.": "Váš domovský server nebyl dosažitelný a nemohl vás přihlásit. Zkuste to prosím znovu. Pokud to bude pokračovat, obraťte se na správce domovského serveru.",
"Try again": "Zkuste to znovu",
"We asked the browser to remember which homeserver you use to let you sign in, but unfortunately your browser has forgotten it. Go to the sign in page and try again.": "Požádali jsme prohlížeč, aby si pamatoval, který domovský server používáte k přihlášení, ale váš prohlížeč to bohužel zapomněl. Přejděte na přihlašovací stránku a zkuste to znovu.",
"We couldn't log you in": "Nemohli jsme vás přihlásit",
"Show stickers button": "Tlačítko Zobrazit nálepky",
"Windows": "Okna",
"Screens": "Obrazovky",
"Share your screen": "Sdílejte svou obrazovku",
"Expand code blocks by default": "Ve výchozím nastavení rozbalit bloky kódu",
"Show line numbers in code blocks": "Zobrazit čísla řádků v blocích kódu",
"Recently visited rooms": "Nedávno navštívené místnosti"
}

View file

@ -20,7 +20,7 @@
"Change Password": "Passwort ändern",
"Searches DuckDuckGo for results": "Verwendet DuckDuckGo für Suchergebnisse",
"Commands": "Kommandos",
"Emoji": "Emoji",
"Emoji": "Emojis",
"Sign in": "Anmelden",
"Warning!": "Warnung!",
"Error": "Fehler",
@ -59,13 +59,13 @@
"Moderator": "Moderator",
"Notifications": "Benachrichtigungen",
"<not supported>": "<nicht unterstützt>",
"No users have specific privileges in this room": "Kein Benutzer hat in diesem Raum besondere Berechtigungen",
"No users have specific privileges in this room": "Keine Nutzer:innen haben in diesem Raum privilegierte Berechtigungen",
"Only people who have been invited": "Nur Personen, die eingeladen wurden",
"Password": "Passwort",
"Permissions": "Berechtigungen",
"Phone": "Telefon",
"Please check your email and click on the link it contains. Once this is done, click continue.": "Bitte prüfe deinen E-Mail-Posteingang und klicke auf den in der E-Mail enthaltenen Link. Anschließend auf \"Fortsetzen\" klicken.",
"Privileged Users": "Privilegierte Benutzer",
"Privileged Users": "Privilegierte Nutzer:innen",
"Profile": "Profil",
"Reject invitation": "Einladung ablehnen",
"Remove": "Entfernen",
@ -202,7 +202,7 @@
"Disinvite": "Einladung zurückziehen",
"Download %(text)s": "%(text)s herunterladen",
"Failed to ban user": "Verbannen des Benutzers fehlgeschlagen",
"Failed to change power level": "Ändern des Berechtigungslevels fehlgeschlagen",
"Failed to change power level": "Ändern der Berechtigungsstufe fehlgeschlagen",
"Failed to join room": "Betreten des Raumes ist fehlgeschlagen",
"Failed to kick": "Kicken fehlgeschlagen",
"Failed to mute user": "Stummschalten des Nutzers fehlgeschlagen",
@ -228,7 +228,7 @@
"Tried to load a specific point in this room's timeline, but was unable to find it.": "Es wurde versucht, einen bestimmten Punkt im Chatverlauf dieses Raumes zu laden, der Punkt konnte jedoch nicht gefunden werden.",
"You seem to be in a call, are you sure you want to quit?": "Du scheinst in einem Gespräch zu sein, bist du sicher, dass du aufhören willst?",
"You seem to be uploading files, are you sure you want to quit?": "Du scheinst Dateien hochzuladen. Bist du sicher schließen zu wollen?",
"You will not be able to undo this change as you are promoting the user to have the same power level as yourself.": "Du wirst diese Änderung nicht rückgängig machen können, da der Benutzer dasselbe Berechtigungslevel wie du selbst erhalten wird.",
"You will not be able to undo this change as you are promoting the user to have the same power level as yourself.": "Du wirst diese Änderung nicht rückgängig machen können, da der/die Nutzer!n dasselbe Berechtigungsstufe wie du selbst erhalten wird.",
"Room": "Raum",
"Cancel": "Abbrechen",
"Click to unmute video": "Klicken, um die Video-Stummschaltung zu deaktivieren",
@ -314,7 +314,7 @@
"Default Device": "Standard-Gerät",
"Microphone": "Mikrofon",
"Camera": "Kamera",
"Export": "Export",
"Export": "Exportieren",
"Import": "Importieren",
"Incorrect username and/or password.": "Inkorrekter Nutzername und/oder Passwort.",
"Results from DuckDuckGo": "Ergebnisse von DuckDuckGo",
@ -422,7 +422,7 @@
"Add a User": "Benutzer hinzufügen",
"You have entered an invalid address.": "Du hast eine ungültige Adresse eingegeben.",
"Matrix ID": "Matrix-ID",
"Unignore": "Ignorieren aufheben",
"Unignore": "Nicht mehr ignorieren",
"Unignored user": "Benutzer nicht mehr ignoriert",
"Ignored user": "Benutzer ignoriert",
"Stops ignoring a user, showing their messages going forward": "Beendet das Ignorieren eines Benutzers, nachfolgende Nachrichten werden wieder angezeigt",
@ -451,7 +451,7 @@
"Pinned Messages": "Angeheftete Nachrichten",
"%(senderName)s changed the pinned messages for the room.": "%(senderName)s hat die angehefteten Nachrichten für diesen Raum geändert.",
"Jump to read receipt": "Zur Lesebestätigung springen",
"Message Pinning": "Anheften von Nachrichten",
"Message Pinning": "Nachrichten-Anheftung",
"Long Description (HTML)": "Lange Beschreibung (HTML)",
"Jump to message": "Zur Nachricht springen",
"No pinned messages.": "Keine angehefteten Nachrichten vorhanden.",
@ -490,7 +490,7 @@
"Leave Community": "Community verlassen",
"Add rooms to this community": "Räume zu dieser Community hinzufügen",
"%(inviter)s has invited you to join this community": "%(inviter)s hat dich in diese Community eingeladen",
"You are a member of this community": "Du bist ein Mitglied dieser Community",
"You are a member of this community": "Du bist Mitglied dieser Community",
"You are an administrator of this community": "Du bist ein Administrator dieser Community",
"Community %(groupId)s not found": "Community '%(groupId)s' nicht gefunden",
"Failed to load %(groupId)s": "'%(groupId)s' konnte nicht geladen werden",
@ -504,7 +504,7 @@
"Delete Widget": "Widget löschen",
"Mention": "Erwähnen",
"Invite": "Einladen",
"Deleting a widget removes it for all users in this room. Are you sure you want to delete this widget?": "Das Löschen eines Widgets entfernt es für alle Nutzer in diesem Raum. Möchtest du dieses Widget wirklich löschen?",
"Deleting a widget removes it for all users in this room. Are you sure you want to delete this widget?": "Das Löschen eines Widgets entfernt es für alle Nutzer:innen in diesem Raum. Möchtest du dieses Widget wirklich löschen?",
"Mirror local video feed": "Lokalen Video-Feed spiegeln",
"Failed to withdraw invitation": "Die Einladung konnte nicht zurückgezogen werden",
"Community IDs may only contain characters a-z, 0-9, or '=_-./'": "Community-IDs dürfen nur die folgenden Zeichen enthalten: a-z, 0-9, or '=_-./'",
@ -588,7 +588,7 @@
"Enable inline URL previews by default": "URL-Vorschau standardmäßig aktivieren",
"Enable URL previews for this room (only affects you)": "URL-Vorschau für diesen Raum aktivieren (betrifft nur dich)",
"Enable URL previews by default for participants in this room": "URL-Vorschau standardmäßig für Mitglieder dieses Raumes aktivieren",
"Please note you are logging into the %(hs)s server, not matrix.org.": "Hinweis: Du meldest dich auf dem %(hs)s-Server an, nicht auf matrix.org.",
"Please note you are logging into the %(hs)s server, not matrix.org.": "Hinweis: Du bist im Begriff, dich auf dem %(hs)s-Server anzumelden, nicht auf matrix.org.",
"There's no one else here! Would you like to <inviteText>invite others</inviteText> or <nowarnText>stop warning about the empty room</nowarnText>?": "Sonst ist hier aktuell niemand. Möchtest du <inviteText>Benutzer einladen</inviteText> oder die <nowarnText>Warnmeldung bezüglich des leeren Raums deaktivieren</nowarnText>?",
"URL previews are disabled by default for participants in this room.": "URL-Vorschau ist für Mitglieder dieses Raumes standardmäßig deaktiviert.",
"URL previews are enabled by default for participants in this room.": "URL-Vorschau ist für Mitglieder dieses Raumes standardmäßig aktiviert.",
@ -641,7 +641,7 @@
"Failed to remove tag %(tagName)s from room": "Entfernen der Raum-Kennzeichnung %(tagName)s fehlgeschlagen",
"Failed to add tag %(tagName)s to room": "Fehler beim Hinzufügen des \"%(tagName)s\"-Tags an dem Raum",
"Did you know: you can use communities to filter your %(brand)s experience!": "Wusstest du: Du kannst Communities nutzen um deine %(brand)s-Erfahrung zu filtern!",
"To set up a filter, drag a community avatar over to the filter panel on the far left hand side of the screen. You can click on an avatar in the filter panel at any time to see only the rooms and people associated with that community.": "Um einen Filter zu setzen, ziehe ein Community-Bild auf das Filter-Panel ganz links. Du kannst jederzeit auf einen Avatar im Filter-Panel klicken um nur die Räume und Personen aus der Community zu sehen.",
"To set up a filter, drag a community avatar over to the filter panel on the far left hand side of the screen. You can click on an avatar in the filter panel at any time to see only the rooms and people associated with that community.": "Um einen Filter zu setzen, ziehe ein Community-Bild auf das Filter-Panel ganz links. Du kannst jederzeit auf einen Avatar im Filter-Panel klicken, um nur die Räume und Personen aus der Community zu sehen.",
"Clear filter": "Filter zurücksetzen",
"Key request sent.": "Schlüssel-Anfragen gesendet.",
"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.": "Wenn du einen Fehler via GitHub gemeldet hast, können Fehlerberichte uns helfen um das Problem zu finden. Sie enthalten Anwendungsdaten wie deinen Nutzernamen, Raum- und Gruppen-ID's und Aliase die du besucht hast und Nutzernamen anderer Nutzer. Sie enthalten keine Nachrichten.",
@ -979,7 +979,7 @@
"Render simple counters in room header": "Einfache Zähler in Raum-Kopfzeile anzeigen",
"Enable Emoji suggestions while typing": "Emoji-Vorschläge während der Eingabe aktivieren",
"Show a placeholder for removed messages": "Zeigt einen Platzhalter für gelöschte Nachrichten an",
"Show join/leave messages (invites/kicks/bans unaffected)": "Zeige Betreten-/Verlassen-Nachrichten (Einladungen/Kicks/Bans sind dadurch nicht betroffen)",
"Show join/leave messages (invites/kicks/bans unaffected)": "Betreten-/Verlassen-Nachrichten zeigen (betrifft nicht Einladungen/Kicks/Bans)",
"Show avatar changes": "Avatar-Änderungen anzeigen",
"Show display name changes": "Anzeigenamen-Änderungen anzeigen",
"Send typing notifications": "Tipp-Benachrichtigungen senden",
@ -1025,7 +1025,7 @@
"FAQ": "Häufige Fragen",
"Versions": "Versionen",
"Room Addresses": "Raum-Adressen",
"Deactivating your account is a permanent action - be careful!": "Das Deaktivieren deines Kontos ist nicht widerruflich - sei vorsichtig!",
"Deactivating your account is a permanent action - be careful!": "Die Deaktivierung deines Kontos ist nicht widerruflich - sei vorsichtig!",
"Preferences": "Einstellungen",
"Room list": "Raumliste",
"The file '%(fileName)s' exceeds this homeserver's size limit for uploads": "Die Datei '%(fileName)s' überschreitet die maximale Größe für Uploads auf diesem Heimserver",
@ -1121,8 +1121,8 @@
"Join": "Beitreten",
"Waiting for partner to confirm...": "Warte auf Bestätigung des Gesprächspartners...",
"Incoming Verification Request": "Eingehende Verifikationsanfrage",
"Allow Peer-to-Peer for 1:1 calls": "Erlaube Peer-to-Peer für 1:1-Anrufe",
"Are you sure? You will lose your encrypted messages if your keys are not backed up properly.": "Bist du sicher? Du wirst deine verschlüsselten Nachrichten verlieren, wenn deine Schlüssel nicht gesichert sind.",
"Allow Peer-to-Peer for 1:1 calls": "Peer-to-Peer-Verbindungen für 1:1-Anrufe erlauben",
"Are you sure? You will lose your encrypted messages if your keys are not backed up properly.": "Bist du sicher? Du wirst deine verschlüsselten Nachrichten verlieren, wenn deine Schlüssel nicht gut gesichert sind.",
"Encrypted messages are secured with end-to-end encryption. Only you and the recipient(s) have the keys to read these messages.": "Verschlüsselte Nachrichten sind mit Ende-zu-Ende-Verschlüsselung gesichert. Nur du und der/die Empfänger haben die Schlüssel um diese Nachrichten zu lesen.",
"Restore from Backup": "Von Sicherung wiederherstellen",
"Back up your keys before signing out to avoid losing them.": "Sichere deine Schlüssel bevor du dich abmeldest, damit du sie nicht verlierst.",
@ -1221,9 +1221,9 @@
"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>": "Sobald aktiviert, kann die Verschlüsselung für einen Raum nicht mehr deaktiviert werden. Nachrichten in einem verschlüsselten Raum können nur noch von Teilnehmern aber nicht mehr vom Server gelesen werden. Einige Bots und Brücken werden vielleicht nicht mehr funktionieren. <a>Erfahre mehr über Verschlüsselung.</a>",
"Error updating main address": "Fehler beim Aktualisieren der Hauptadresse",
"There was an error updating the room's main address. It may not be allowed by the server or a temporary failure occurred.": "Es gab ein Problem beim Aktualisieren der Raum-Hauptadresse. Es kann sein, dass es vom Server verboten ist oder ein temporäres Problem auftrat.",
"Error updating flair": "Konnte Abzeichen nicht aktualisieren",
"Error updating flair": "Abzeichen-Aktualisierung fehlgeschlagen",
"There was an error updating the flair for this room. The server may not allow it or a temporary error occurred.": "Es gab ein Problem beim Aktualisieren des Abzeichens für diesen Raum. Es kann sein, dass der Server es nicht erlaubt oder ein temporäres Problem auftrat.",
"Power level": "Berechtigungslevel",
"Power level": "Berechtigungsstufe",
"Room Settings - %(roomName)s": "Raumeinstellungen - %(roomName)s",
"A username can only contain lower case letters, numbers and '=_-./'": "Ein Benutzername kann nur Kleinbuchstaben, Nummern und '=_-./' enthalten",
"Share Permalink": "Teile permanenten Link",
@ -1264,7 +1264,7 @@
"Show hidden events in timeline": "Zeige versteckte Ereignisse in der Chronik",
"Low bandwidth mode": "Modus für niedrige Bandbreite",
"Reset": "Zurücksetzen",
"Joining room …": "Raum beitreten…",
"Joining room …": "Trete Raum bei …",
"Rejecting invite …": "Einladung ablehnen…",
"Sign Up": "Registrieren",
"Sign In": "Anmelden",
@ -1328,9 +1328,9 @@
"Find a room…": "Einen Raum suchen…",
"Find a room… (e.g. %(exampleRoom)s)": "Einen Raum suchen… (z.B. %(exampleRoom)s)",
"If you can't find the room you're looking for, ask for an invite or <a>Create a new room</a>.": "Wenn du den gesuchten Raum nicht finden kannst, frage nach einer Einladung für den Raum oder <a>Erstelle einen neuen Raum</a>.",
"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.": "Alternativ kannst du versuchen, den öffentlichen Server unter <code>turn.matrix.org</code> zu verwenden. Allerdings wird dieser nicht so zuverlässig sein, und deine IP-Adresse mit diesem Server teilen. Du kannst dies auch in den Einstellungen konfigurieren.",
"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.": "Alternativ kannst du versuchen, den öffentlichen Server unter <code>turn.matrix.org</code> zu verwenden. Allerdings wird dieser nicht so zuverlässig sein, und du teilst deine IP-Adresse mit diesem Server. Du kannst dies auch in den Einstellungen konfigurieren.",
"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.": "Diese Handlung erfordert es, auf den Standard-Identitätsserver <server /> zuzugreifen, um eine E-Mail Adresse oder Telefonnummer zu validieren, aber der Server hat keine Nutzungsbedingungen.",
"Only continue if you trust the owner of the server.": "Fahre nur fort, wenn du dem/r Besitzer*in des Servers vertraust.",
"Only continue if you trust the owner of the server.": "Fahre nur fort, wenn du dem/r Besitzer:in des Servers vertraust.",
"Trust": "Vertrauen",
"Custom (%(level)s)": "Benutzerdefinierte (%(level)s)",
"Sends a message as plain text, without interpreting it as markdown": "Verschickt eine Nachricht in Rohtext, ohne sie als Markdown darzustellen",
@ -1374,7 +1374,7 @@
"Later": "Später",
"Review": "Überprüfen",
"Verify": "Verifizieren",
"Decline (%(counter)s)": "Zurückweisen (%(counter)s)",
"Decline (%(counter)s)": "Ablehnen (%(counter)s)",
"not found": "nicht gefunden",
"rooms.": "Räumen zu speichern.",
"Manage": "Verwalten",
@ -1387,15 +1387,15 @@
"Backup has a signature from <verify>unknown</verify> user with ID %(deviceId)s": "Die Sicherung hat eine Signatur von <verify>unbekanntem/r</verify> Nutzer!n mit ID %(deviceId)s",
"Backup key stored: ": "Backup Schlüssel gespeichert: ",
"Clear notifications": "Benachrichtigungen löschen",
"Disconnect from the identity server <current /> and connect to <new /> instead?": "Verbindung vom Identitätsserver <current /> trennen und stattdessen zu <new /> verbinden?",
"The identity server you have chosen does not have any terms of service.": "Der Identitätsserver, den du gewählt hast, hat keine Nutzungsbedingungen.",
"Disconnect from the identity server <current /> and connect to <new /> instead?": "Vom Identitätsserver <current /> trennen, und stattdessen eine Verbindung zu <new /> aufbauen?",
"The identity server you have chosen does not have any terms of service.": "Der von dir gewählte Identitätsserver hat keine Nutzungsbedingungen.",
"Disconnect identity server": "Verbindung zum Identitätsserver trennen",
"contact the administrators of identity server <idserver />": "Administrator des Identitätsservers <idserver /> kontaktieren",
"wait and try again later": "warte und versuche es später erneut",
"Disconnect anyway": "Verbindung trotzdem trennen",
"You are still <b>sharing your personal data</b> on the identity server <idserver />.": "Du <b>teilst deine persönlichen Daten</b> immer noch auf dem Identitätsserver <idserver />.",
"We recommend that you remove your email addresses and phone numbers from the identity server before disconnecting.": "Wir empfehlen, dass du deine Email Adressen und Telefonnummern vom Identitätsserver löschst, bevor du die Verbindung trennst.",
"You are not currently using an identity server. To discover and be discoverable by existing contacts you know, add one below.": "Du nutzt momentan keinen Identitätsserver. Um von bestehenden Kontakten die du kennst gefunden zu werden und diese zu finden, füge unten einen hinzu.",
"You are not currently using an identity server. To discover and be discoverable by existing contacts you know, add one below.": "Zur Zeit benutzt du keinen Identitätsserver. Trage unten einen Server ein, um Kontakte finden und von anderen gefunden zu werden.",
"Use an Integration Manager <b>(%(serverName)s)</b> to manage bots, widgets, and sticker packs.": "Nutze einen Integrationsmanager <b>(%(serverName)s)</b> um Bots, Widgets und Sticker Packs zu verwalten.",
"Use an Integration Manager to manage bots, widgets, and sticker packs.": "Verwende einen Integrationsmanager um Bots, Widgets und Sticker Packs zu verwalten.",
"Manage integrations": "Integrationen verwalten",
@ -1451,7 +1451,7 @@
"Filter": "Filtern",
"Filter rooms…": "Räume filtern…",
"You have %(count)s unread notifications in a prior version of this room.|one": "Du hast %(count)s ungelesene Benachrichtigungen in einer früheren Version dieses Raumes.",
"Go Back": "Gehe zurück",
"Go Back": "Zurückgehen",
"Notification Autocomplete": "Benachrichtigung Autovervollständigen",
"If disabled, messages from encrypted rooms won't appear in search results.": "Wenn deaktiviert, werden Nachrichten von verschlüsselten Räumen nicht in den Ergebnissen auftauchen.",
"This user has not verified all of their sessions.": "Dieser Benutzer hat nicht alle seine Sitzungen verifiziert.",
@ -1545,7 +1545,7 @@
"Discovery options will appear once you have added a phone number above.": "Entdeckungsoptionen werden angezeigt, sobald eine Telefonnummer hinzugefügt wurde.",
"Close preview": "Vorschau schließen",
"Loading room preview": "Lade Raumvorschau",
"Join the discussion": "Trete der Diskussion bei",
"Join the discussion": "Tritt der Diskussion bei",
"Remove for everyone": "Für alle entfernen",
"Remove for me": "Für mich entfernen",
"Create your Matrix account on <underlinedServerName />": "Erstelle dein Matrix-Konto auf <underlinedServerName />",
@ -1555,7 +1555,7 @@
"Remove %(phone)s?": "%(phone)s entfernen?",
"Remove recent messages by %(user)s": "Letzte Nachrichten von %(user)s entfernen",
"You are about to remove %(count)s messages by %(user)s. This cannot be undone. Do you wish to continue?|other": "Du bist dabei %(count)s Nachrichten von %(user)s zu löschen, was nicht rückgängig gemacht werden kann. Fortfahren?",
"You are about to remove %(count)s messages by %(user)s. This cannot be undone. Do you wish to continue?|one": "Du bist dabei eine Nachrichten von %(user)s zu löschen, was nicht rückgängig gemacht werden kann. Fortfahren?",
"You are about to remove %(count)s messages by %(user)s. This cannot be undone. Do you wish to continue?|one": "Du bist dabei, eine Nachricht von %(user)s zu löschen. Das kann nicht rückgängig gemacht werden. Fortfahren?",
"Remove %(count)s messages|other": "%(count)s Nachrichten entfernen",
"Remove %(count)s messages|one": "Eine Nachricht entfernen",
"Remove recent messages": "Letzte Nachrichten entfernen",
@ -1573,60 +1573,60 @@
"%(senderName)s removed the rule banning rooms matching %(glob)s": "%(senderName)s entfernte die Ausschluss-Regel für Räume, die %(glob)s entsprechen",
"%(senderName)s removed the rule banning servers matching %(glob)s": "%(senderName)s entfernte die Ausschluss-Regel für Server, die %(glob)s entsprechen",
"%(senderName)s removed a ban rule matching %(glob)s": "%(senderName)s entfernte die Ausschluss-Regel, die %(glob)s entspricht",
"%(senderName)s updated the rule banning users matching %(glob)s for %(reason)s": "%(senderName)s aktualisierte die Ausschluss-Regel für Nutzer, die aufgrund von %(reason)s %(glob)s entsprechen",
"%(senderName)s updated the rule banning users matching %(glob)s for %(reason)s": "%(senderName)s aktualisierte die Ausschluss-Regel für Nutzer:innen, die aufgrund von %(reason)s %(glob)s entsprechen",
"%(senderName)s updated the rule banning rooms matching %(glob)s for %(reason)s": "%(senderName)s aktualisierte die Ausschluss-Regel für Räume, die aufgrund von %(reason)s %(glob)s entsprechen",
"%(senderName)s updated the rule banning servers matching %(glob)s for %(reason)s": "%(senderName)s aktualisierte die Ausschluss-Regel für Server, die aufgrund von %(reason)s %(glob)s entsprechen",
"%(senderName)s updated a ban rule matching %(glob)s for %(reason)s": "%(senderName)s aktualisierte eine Ausschluss-Regel, die wegen %(reason)s %(glob)s entspricht",
"%(senderName)s created a rule banning users matching %(glob)s for %(reason)s": "%(senderName)s erstellte eine Ausschluss-Regel für Nutzer, die wegen %(reason)s %(glob)s entspricht",
"%(senderName)s created a rule banning rooms matching %(glob)s for %(reason)s": "%(senderName)s erstellt eine Ausschluss-Regel für Räume, die %(glob)s aufgrund von %(reason)s entspricht",
"%(senderName)s created a rule banning servers matching %(glob)s for %(reason)s": "%(senderName)s erstellte eine Ausschluss-Regel für Server, die aufgrund von %(reason)s %(glob)s entsprechen",
"%(senderName)s created a ban rule matching %(glob)s for %(reason)s": "%(senderName)s erstellt eine Ausschluss-Regel, die aufgrund von %(reason)s %(glob)s entsprechen",
"%(senderName)s created a ban rule matching %(glob)s for %(reason)s": "%(senderName)s erstellte eine Ausschluss-Regel, die aufgrund von %(reason)s %(glob)s entspricht",
"Do you want to chat with %(user)s?": "Möchtest du mit %(user)s chatten?",
"<userName/> wants to chat": "<userName/> möchte mit dir chatten",
"Start chatting": "Chat starten",
"Reject & Ignore user": "Ablehnen & Nutzer ignorieren",
"Reject & Ignore user": "Ablehnen & Nutzer:in ignorieren",
"%(senderName)s changed a rule that was banning users matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s ändert eine Ausschluss-Regel von %(oldGlob)s nach %(newGlob)s, wegen %(reason)s",
"%(senderName)s changed a rule that was banning rooms matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s ändert eine Ausschluss-Regel für Räume von %(oldGlob)s nach %(newGlob)s, wegen %(reason)s",
"Allow fallback call assist server turn.matrix.org when your homeserver does not offer one (your IP address would be shared during a call)": "Auf den Server turn.matrix.org zurückgreifen, falls deine Heimserver keine Anruf-Assistenz anbietet (deine IP-Adresse wird während eines Anrufs geteilt)",
"Show more": "Mehr zeigen",
"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.": "Diese Sitzung <b>speichert deine Schlüssel nicht</b>, du kannst sie aber an die Schlüsselsicherung anschließen.",
"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.": "Diese Sitzung <b>sichert nicht deine Schlüssel</b>, aber du hast eine vorhandene Sicherung, die du wiederherstellen und in Zukunft hinzufügen kannst.",
"Connect this session to key backup before signing out to avoid losing any keys that may only be on this session.": "Verbinde diese Sitzung mit deiner Schlüsselsicherung bevor du dich abmeldest, um den Verlust von Schlüsseln zu vermeiden.",
"This backup is trusted because it has been restored on this session": "Dieser Sicherung wird vertraut, da sie während dieser Sitzung wiederhergestellt wurde",
"Enable desktop notifications for this session": "Desktop-Benachrichtigungen für diese Sitzung aktivieren",
"Enable audible notifications for this session": "Aktiviere die akustischen Benachrichtigungen für diese Sitzung",
"Integration Managers receive configuration data, and can modify widgets, send room invites, and set power levels on your behalf.": "Integrationsserver können für dich Widgets einstellen, Raum-Einladungen verschicken oder deine Berechtigungen setzen.",
"Integration Managers receive configuration data, and can modify widgets, send room invites, and set power levels on your behalf.": "Integrationsmanaager erhalten Konfigurationsdaten und können Widgets modifizieren, Raumeinladungen verschicken und in deinem Namen Einflusslevel setzen.",
"Read Marker lifetime (ms)": "Gültigkeitsdauer der Gelesen-Markierung (ms)",
"Read Marker off-screen lifetime (ms)": "Gültigkeitsdauer der Gelesen-Markierung außerhalb des Bildschirms (ms)",
"Session key:": "Sitzungsschlüssel:",
"A session's public name is visible to people you communicate with": "Der öffentliche Sitzungsname ist sichtbar für Personen, mit denen du kommunizierst",
"Sounds": "Töne",
"Upgrade the room": "Raum hochstufen",
"Enable room encryption": "Verschlüsselung aktivieren",
"This message cannot be decrypted": "Diese Nachricht konnte nicht entschlüsselt werden",
"Encrypted by an unverified session": "Verschlüsselt von einer unbekannten Sitzung",
"Enable room encryption": "Raumverschlüsselung aktivieren",
"This message cannot be decrypted": "Diese Nachricht kann nicht entschlüsselt werden",
"Encrypted by an unverified session": "Verschlüsselt von einer nicht verifizierten Sitzung",
"Unencrypted": "Unverschlüsselt",
"Encrypted by a deleted session": "Verschlüsselt von einer gelöschten Sitzung",
"The encryption used by this room isn't supported.": "Die Verschlüsselung, die dieser Raum verwendet, wird nicht unterstützt.",
"React": "Reaktion hinzufügen",
"The encryption used by this room isn't supported.": "Die von diesem Raum verwendete Verschlüsselung wird nicht unterstützt.",
"React": "Reagieren",
"e.g. my-room": "z.B. mein-raum",
"Use an identity server to invite by email. <default>Use the default (%(defaultIdentityServerName)s)</default> or manage in <settings>Settings</settings>.": "Verwende einen Identitätsserver um mit einer E-Mail-Adresse einzuladen. <default>Benutzer den Standard-Identitätsserver (%(defaultIdentityServerName)s)</default> oder konfiguriere einen in den <settings>Einstellungen</settings>.",
"Use an identity server to invite by email. Manage in <settings>Settings</settings>.": "Verwende einen Identitätsserver um mit einer E-Mail-Adresse einzuladen. Diese können in den <settings>Einstellungen</settings> konfiguriert werden.",
"Create a public room": "Erstelle einen öffentlichen Raum",
"Use an identity server to invite by email. <default>Use the default (%(defaultIdentityServerName)s)</default> or manage in <settings>Settings</settings>.": "Verwende einen Identitätsserver, um per E-Mail einzuladen. <default>Nutze den Standard-Identitätsserver (%(defaultIdentityServerName)s)</default> oder konfiguriere einen in den <settings>Einstellungen</settings>.",
"Use an identity server to invite by email. Manage in <settings>Settings</settings>.": "Verwende einen Identitätsserver, um mit einer E-Mail-Adresse einzuladen. Diese können in den <settings>Einstellungen</settings> konfiguriert werden.",
"Create a public room": "Öffentlichen Raum erstellen",
"Show advanced": "Weitere Einstellungen anzeigen",
"Verify session": "Sitzung verifizieren",
"Session key": "Sitzungsschlüssel",
"Recent Conversations": "Letzte Unterhaltungen",
"Report Content to Your Homeserver Administrator": "Inhalte an den Administrator deines Heimservers melden",
"Reporting this message will send its unique 'event ID' to the administrator of your homeserver. If messages in this room are encrypted, your homeserver administrator will not be able to read the message text or view any files or images.": "Wenn du diese Nachricht meldest wird dessen einzigartige 'event ID' an den Administrator deines Heimservers übermittelt. Wenn die Nachrichten in diesem Raum verschlüsselt sind wird dein Administrator nicht in der Lage sein den Text zu lesen oder Medien einzusehen.",
"Report Content to Your Homeserver Administrator": "Inhalte an die Administration deines Heimservers melden",
"Reporting this message will send its unique 'event ID' to the administrator of your homeserver. If messages in this room are encrypted, your homeserver administrator will not be able to read the message text or view any files or images.": "Wenn du diese Nachricht meldest, wird die eindeutige Event-ID an die Administration deines Heimservers übermittelt. Wenn die Nachrichten in diesem Raum verschlüsselt sind, wird deine Heimserver-Administration nicht in der Lage sein, Nachrichten zu lesen oder Medien einzusehen.",
"Send report": "Bericht senden",
"Enter recovery passphrase": "Gib die Wiederherstellungspassphrase ein",
"Enter recovery key": "Wiederherstellungspassphrase eingeben",
"Report Content": "Inhalte melden",
"Report Content": "Inhalt melden",
"Set an email for account recovery. Use email to optionally be discoverable by existing contacts.": "Gib eine E-Mail-Adresse an um dein Konto wiederherstellen zu können. Die E-Mail-Adresse kann auch genutzt werden um deinen Kontakt zu finden.",
"Enter your custom homeserver URL <a>What does this mean?</a>": "Gib eine andere Heimserver-Adresse an <a>Was bedeutet das?</a>",
"%(creator)s created and configured the room.": "%(creator)s hat den Raum erstellt und konfiguriert.",
"Set up with a recovery key": "Mit einem Wiederherstellungsschlüssel einrichten",
"Keep a copy of it somewhere secure, like a password manager or even a safe.": "Bewahre ihn sicher auf, wie in einem Passwort-Manager oder einem Safe.",
"Keep a copy of it somewhere secure, like a password manager or even a safe.": "Bewahre eine Kopie an einem sicheren Ort, wie einem Passwort-Manager oder in einem Safe auf.",
"Your recovery key": "Dein Wiederherstellungsschlüssel",
"Copy": "In Zwischenablage kopieren",
"Make a copy of your recovery key": "Speichere deinen Wiederherstellungsschlüssel",
@ -1652,14 +1652,14 @@
"Manually Verify by Text": "Verifiziere manuell mit einem Text",
"Interactively verify by Emoji": "Verifiziere interaktiv mit Emojis",
"Support adding custom themes": "Unterstütze das Hinzufügen von benutzerdefinierten Designs",
"Ask this user to verify their session, or manually verify it below.": "Bitte diesen Nutzer, seine Sitzung zu verifizieren, oder verifiziere diesen unten manuell.",
"Ask this user to verify their session, or manually verify it below.": "Bitte diese/n Nutzer:in, seine/ihre Sitzung zu verifizieren, oder verifiziere diese unten manuell.",
"a few seconds from now": "in ein paar Sekunden",
"Manually verify all remote sessions": "Verifiziere alle Remotesitzungen",
"Confirm the emoji below are displayed on both sessions, in the same order:": "Bestätige, dass die unten angezeigten Emojis auf beiden Sitzungen in der selben Reihenfolge angezeigt werden:",
"Verify this session by confirming the following number appears on its screen.": "Verfiziere diese Sitzung, indem du bestätigst, dass die folgende Nummer auf ihrem Bildschirm erscheint.",
"Waiting for your other session, %(deviceName)s (%(deviceId)s), to verify…": "Warte auf deine andere Sitzung,%(deviceName)s /%(deviceId)s), um zu verfizieren…",
"How fast should messages be downloaded.": "Wie schnell Nachrichten heruntergeladen werden sollen.",
"Compare a unique set of emoji if you don't have a camera on either device": "Vergleiche eine einmalige Reihe von Emoji, sofern du an keinem Gerät eine Kamera hast",
"Compare a unique set of emoji if you don't have a camera on either device": "Vergleiche eine einmalige Reihe von Emojis, sofern du an keinem Gerät eine Kamera hast",
"Waiting for %(displayName)s to verify…": "Warte darauf, dass %(displayName)s bestätigt…",
"Cancelling…": "Abbrechen…",
"They match": "Sie passen zueinander",
@ -1671,24 +1671,24 @@
"Workspace: %(networkName)s": "Arbeitsbereich: %(networkName)s",
"Channel: %(channelName)s": "Kanal: %(channelName)s",
"Show less": "Weniger zeigen",
"<b>Warning</b>: You should only set up key backup from a trusted computer.": "<b>Achtung</b>: Du solltest die Schlüsselsicherung nur auf einem vertrauenswürdigen Gerät einrichten.",
"Regain access to your account and recover encryption keys stored in this session. Without them, you wont be able to read all of your secure messages in any session.": "Melde dich an um die ausschließlich in dieser Sitzung gespeicherten Verschlüsselungsschlüssel wiederherzustellen. Du benötigst sie, um deine verschlüsselten Nachrichten in jeder Sitzung zu lesen.",
"<b>Warning</b>: You should only set up key backup from a trusted computer.": "<b>Achtung</b>: Du solltest die Schlüsselsicherung nur von einem vertrauenswürdigen Computer aus einrichten.",
"Regain access to your account and recover encryption keys stored in this session. Without them, you wont be able to read all of your secure messages in any session.": "Melde dich an, um die ausschließlich in dieser Sitzung gespeicherten Verschlüsselungsschlüssel wiederherzustellen. Du benötigst sie, um deine verschlüsselten Nachrichten in jeder Sitzung zu lesen.",
"Forgotten your password?": "Passwort vergessen?",
"You're signed out": "Du wurdest abgemeldet",
"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.": "Achtung: Deine persönlichen Daten (inclusive der Verschlüsselungsschlüssel) sind noch in dieser Sitzung gespeichert. Lösche diese Daten wenn du die Sitzung nicht mehr benötigst oder dich mit einem anderen Konto anmelden möchtest.",
"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.": "Achtung: Deine persönlichen Daten (einschließlich Verschlüsselungsschlüssel) sind noch in dieser Sitzung gespeichert. Lösche diese Daten, wenn du diese Sitzung nicht mehr benötigst, oder dich mit einem anderen Konto anmelden möchtest.",
"Confirm deleting these sessions by using Single Sign On to prove your identity.|other": "Bestätige das Löschen dieser Sitzung indem du dich mittels Single Sign-On anmeldest um deine Identität nachzuweisen.",
"Confirm deleting these sessions by using Single Sign On to prove your identity.|one": "Bestätige das Löschen dieser Sitzung indem du dich mittels Single Sign-On anmeldest um deine Identität nachzuweisen.",
"Confirm deleting these sessions": "Bestätige das Löschen dieser Sitzungen",
"Click the button below to confirm deleting these sessions.|other": "Klicke den Button um das Löschen dieser Sitzungen zu bestätigen.",
"Click the button below to confirm deleting these sessions.|one": "Klicke den Button um das Löschen dieser Sitzung zu bestätigen.",
"Clear all data in this session?": "Alle Daten dieser Sitzung löschen?",
"Clear all data": "Daten löschen",
"Clear all data": "Alle Daten löschen",
"Confirm your account deactivation by using Single Sign On to prove your identity.": "Bestätige das Löschen deines Kontos indem du dich mittels Single Sign-On anmeldest um deine Identität nachzuweisen.",
"Confirm account deactivation": "Konto löschen bestätigen",
"Confirm your identity by entering your account password below.": "Bestätige deine Identität indem du dein Passwort unten eingibst.",
"Confirm your identity by entering your account password below.": "Bestätige deine Identität, indem du unten dein Kontopasswort eingibst.",
"Confirm your identity by verifying this login from one of your other sessions, granting it access to encrypted messages.": "Bestätige deine Identität indem du diesen Login von einer deiner anderen Sitzungen verifizierst um Zugriff auf deine verschlüsselten Nachrichten zu erhalten.",
"Enter your account password to confirm the upgrade:": "Gib dein Passwort ein um die Aktualisierung zu bestätigen:",
"You'll need to authenticate with the server to confirm the upgrade.": "Du musst dich am Server authentifizieren um die Aktualisierung zu bestätigen.",
"Enter your account password to confirm the upgrade:": "Gib dein Kontopasswort ein, um die Aktualisierung zu bestätigen:",
"You'll need to authenticate with the server to confirm the upgrade.": "Du musst dich am Server authentifizieren, um die Aktualisierung zu bestätigen.",
"Enter your recovery passphrase a second time to confirm it.": "Gib deine Wiederherstellungspassphrase zur Bestätigung erneut ein.",
"Confirm your recovery passphrase": "Bestätige deine Wiederherstellungspassphrase",
"Please enter your recovery passphrase a second time to confirm.": "Bitte gib deine Wiederherstellungspassphrase ein zweites Mal ein um sie zu bestätigen.",
@ -1742,7 +1742,7 @@
"Cross-signing public keys:": "Öffentliche Cross-Signing-Schlüssel:",
"in memory": "im Speicher",
"Cross-signing private keys:": "Private Cross-Signing-Schlüssel:",
"in secret storage": "im sicheren Speicher",
"in secret storage": "im Schlüsselspeicher",
"Self signing private key:": "Selbst signierter privater Schlüssel:",
"cached locally": "lokal zwischengespeichert",
"not found locally": "lokal nicht gefunden",
@ -1759,13 +1759,13 @@
" to store messages from ": " um Nachrichten von ",
"%(brand)s is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom %(brand)s Desktop with <nativeLink>search components added</nativeLink>.": "%(brand)s benötigt weitere Komponenten um verschlüsselte Nachrichten lokal zu durchsuchen. Wenn du diese Funktion testen möchtest kannst du dir deine eigene Version von %(brand)s Desktop mit der <nativeLink>integrierten Suchfunktion bauen</nativeLink>.",
"Backup has a <validity>valid</validity> signature from this user": "Die Sicherung hat eine <validity>gültige</validity> Signatur dieses Benutzers",
"Backup has a <validity>invalid</validity> signature from this user": "Die Sicherung hat eine <validity>ungültige</validity> Signatur dieses Benutzers",
"Backup has a <validity>invalid</validity> signature from this user": "Die Sicherung hat eine <validity>ungültige</validity> Signatur von diesem/r Benutzer!n",
"Backup has a <validity>valid</validity> signature from <verify>verified</verify> session <device></device>": "Die Sicherung hat eine <validity>gültige</validity> Signatur von einer <verify>verifizierten</verify> Sitzung <device></device>",
"Backup has a <validity>valid</validity> signature from <verify>unverified</verify> session <device></device>": "Die Sicherung hat eine <validity>gültige</validity> Signatur von einer <verify>nicht verifizierten</verify> Sitzung <device></device>",
"Backup has an <validity>invalid</validity> signature from <verify>verified</verify> session <device></device>": "Die Sicherung hat eine <validity>ungültige</validity> Signatur von einer <verify>verifizierten</verify> Sitzung <device></device>",
"Backup has an <validity>invalid</validity> signature from <verify>unverified</verify> session <device></device>": "Die Sicherung hat eine <validity>ungültige</validity> Signatur von einer <verify>nicht verifizierten</verify> Sitzung <device></device>",
"Your keys are <b>not being backed up from this session</b>.": "Deine Schlüssel werden <b>nicht von dieser Sitzung gesichert</b>.",
"You are currently using <server></server> to discover and be discoverable by existing contacts you know. You can change your identity server below.": "Du verwendest aktuell <server></server> um andere Benutzer zu finden und gefunden zu werden. Du kannst deinen Identitätsserver unten ändern.",
"You are currently using <server></server> to discover and be discoverable by existing contacts you know. You can change your identity server below.": "Zur Zeit verwendest du <server></server>, um Kontakte zu finden und von anderen gefunden zu werden. Du kannst deinen Identitätsserver weiter unten ändern.",
"Invalid theme schema.": "Ungültiges Design Schema.",
"Error downloading theme information.": "Fehler beim herunterladen des Themas.",
"Theme added!": "Design hinzugefügt!",
@ -1776,29 +1776,29 @@
"Manage the names of and sign out of your sessions below or <a>verify them in your User Profile</a>.": "Benenne deine Sitzungen, melde dich aus den Sitzungen ab oder <a>verifiziere sie in deinen Benutzereinstellungen</a>.",
"Error changing power level requirement": "Fehler beim Ändern der Anforderungen für Benutzerrechte",
"Error changing power level": "Fehler beim Ändern der Benutzerrechte",
"Your email address hasn't been verified yet": "Deine E-Mail Adresse wurde noch nicht verifiziert",
"Verify the link in your inbox": "Verifiziere den Link in deinem Nachrichteneingang",
"Complete": "Fertig",
"Revoke": "Zurückziehen",
"Your email address hasn't been verified yet": "Deine E-Mail-Adresse wurde noch nicht überprüft",
"Verify the link in your inbox": "Verifiziere den Link in deinem Posteingang",
"Complete": "Abschließen",
"Revoke": "Widerrufen",
"Share": "Teilen",
"You have not verified this user.": "Du hast diesen Benutzer nicht verifiziert.",
"Everyone in this room is verified": "Jeder in diesem Raum ist verifiziert",
"You have not verified this user.": "Du hast diese:n Nutzer!n nicht verifiziert.",
"Everyone in this room is verified": "Jede/r in diesem Raum ist verifiziert",
"Mod": "Mod",
"Invite only": "Nur auf Einladung",
"Scroll to most recent messages": "Springe zur neusten Nachricht",
"No recent messages by %(user)s found": "Keine neuen Nachrichten von %(user)s gefunden",
"Try scrolling up in the timeline to see if there are any earlier ones.": "Versuche nach oben zu scrollen um zu sehen ob sich dort frühere Nachrichten befinden.",
"Try scrolling up in the timeline to see if there are any earlier ones.": "Versuche nach oben zu scrollen, um zu sehen ob sich dort frühere Nachrichten befinden.",
"For a large amount of messages, this might take some time. Please don't refresh your client in the meantime.": "Dies kann bei vielen Nachrichten einige Zeit dauern. Bitte lade die Anwendung in dieser Zeit nicht neu.",
"Deactivate user?": "Benutzer deaktivieren?",
"Deactivating this user will log them out and prevent them from logging back in. Additionally, they will leave all the rooms they are in. This action cannot be reversed. Are you sure you want to deactivate this user?": "Beim Deaktivieren wird der Benutzer abgemeldet und ein erneutes Anmelden verhindert. Zusätzlich wird er aus allen Räumen entfernt. Diese Aktion kann nicht rückgängig gemacht werden. Bist du sicher dass du diesen Benutzer deaktivieren willst?",
"Deactivate user": "Benutzer deaktivieren",
"Failed to deactivate user": "Deaktivieren des Benutzers fehlgeschlagen",
"Deactivate user?": "Nutzer!n deaktivieren?",
"Deactivating this user will log them out and prevent them from logging back in. Additionally, they will leave all the rooms they are in. This action cannot be reversed. Are you sure you want to deactivate this user?": "Beim Deaktivieren wird dieser/s Nutzer!n/s abgemeldet und ein erneutes Anmelden verhindert. Zusätzlich wird sie/er aus allen Räumen entfernt. Diese Aktion kann nicht rückgängig gemacht werden. Bist du sicher, dass du diese/n Nutzer!n deaktivieren willst?",
"Deactivate user": "Nutzer!n deaktivieren",
"Failed to deactivate user": "Deaktivieren des/der Nutzer!n fehlgeschlagen",
"Send a reply…": "Sende eine Antwort…",
"Send a message…": "Sende eine Nachricht…",
"Bold": "Fett",
"Italics": "Kursiv",
"Strikethrough": "Durchgestrichen",
"Code block": "Quelltext",
"Code block": "Code-Block",
"Recent rooms": "Letzte Räume",
"Loading …": "Lade …",
"Join the conversation with an account": "Tritt der Unterhaltung mit einem Konto bei",
@ -1806,33 +1806,33 @@
"Re-join": "Wieder beitreten",
"You were banned from %(roomName)s by %(memberName)s": "Du wurdest von %(memberName)s aus %(roomName)s verbannt",
"Something went wrong with your invite to %(roomName)s": "Bei deiner Einladung zu %(roomName)s ist ein Fehler aufgetreten",
"An error (%(errcode)s) was returned while trying to validate your invite. You could try to pass this information on to a room admin.": "Während der Verifizierung deiner Einladung ist ein Fehler (%(errcode)s) aufgetreten. Du kannst diese Information einem Raum-Administrator weitergeben.",
"An error (%(errcode)s) was returned while trying to validate your invite. You could try to pass this information on to a room admin.": "Während der Verifizierung deiner Einladung ist ein Fehler (%(errcode)s) aufgetreten. Du kannst diese Information einem/r Raum-Administrator:in weitergeben.",
"You can only join it with a working invite.": "Du kannst nur mit einer gültigen Einladung beitreten.",
"Try to join anyway": "Versuche trotzdem beizutreten",
"You can still join it because this is a public room.": "Du kannst trotzdem beitreten da dies ein öffentlicher Raum ist.",
"Try to join anyway": "Dennoch versuchen beizutreten",
"You can still join it because this is a public room.": "Du kannst dennoch beitreten, da es ein öffentlicher Raum ist.",
"This invite to %(roomName)s was sent to %(email)s which is not associated with your account": "Diese Einladung zu %(roomName)s wurde an die Adresse %(email)s gesendet, die nicht zu deinem Konto gehört",
"Link this email with your account in Settings to receive invites directly in %(brand)s.": "Verbinde diese E-Mail-Adresse in den Einstellungen mit deinem Konto um die Einladungen direkt in %(brand)s zu erhalten.",
"This invite to %(roomName)s was sent to %(email)s": "Diese Einladung zu %(roomName)s wurde an %(email)s gesendet",
"Use an identity server in Settings to receive invites directly in %(brand)s.": "Verknüpfe einen Identitätsserver in den Einstellungen um die Einladungen direkt in %(brand)s zu erhalten.",
"Share this email in Settings to receive invites directly in %(brand)s.": "Teile diese E-Mail-Adresse in den Einstellungen um Einladungen direkt in %(brand)s zu erhalten.",
"%(roomName)s can't be previewed. Do you want to join it?": "Für %(roomName)s kann keine Vorschau erzeugt werden. Möchtest du den Raum betreten?",
"This room doesn't exist. Are you sure you're at the right place?": "Dieser Raum existiert nicht. Bist du sicher dass du hier richtig bist?",
"Try again later, or ask a room admin to check if you have access.": "Versuche es später erneut oder bitte einen Raum-Administrator deine Zutrittsrechte zu überprüfen.",
"%(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>.": "Beim Betreten des Raums ist ein Fehler aufgetreten %(errcode)s. Wenn du denkst dass diese Meldung nicht korrekt ist <issueLink>sende bitte einen Fehlerbericht</issueLink>.",
"%(count)s unread messages including mentions.|other": "%(count)s ungelesene Nachrichten, inklusive Erwähnungen.",
"%(roomName)s can't be previewed. Do you want to join it?": "Vorschau von %(roomName)s kann nicht angezeigt werden. Möchtest du den Raum betreten?",
"This room doesn't exist. Are you sure you're at the right place?": "Dieser Raum existiert nicht. Bist du sicher, dass du hier richtig bist?",
"Try again later, or ask a room admin to check if you have access.": "Versuche es später erneut oder bitte eine/n Raum-Administrator:in zu prüfen, ob du berechtigt bist.",
"%(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>.": "%(errcode)s wurde, beim Versuch den Raum zu betreten, zurückgegeben. Wenn du denkst dass diese Meldung nicht korrekt ist, <issueLink>erstelle bitte einen Fehlerbericht</issueLink>.",
"%(count)s unread messages including mentions.|other": "%(count)s ungelesene Nachrichten einschließlich Erwähnungen.",
"%(count)s unread messages including mentions.|one": "1 ungelesene Erwähnung.",
"%(count)s unread messages.|other": "%(count)s ungelesene Nachrichten.",
"%(count)s unread messages.|one": "1 ungelesene Nachricht.",
"Unread mentions.": "Ungelesene Erwähnungen.",
"Unread messages.": "Ungelesene Nachrichten.",
"This room has already been upgraded.": "Dieser Raum wurde bereits hochgestuft.",
"This room is running room version <roomVersion />, which this homeserver has marked as <i>unstable</i>.": "Dieser Raum läuft mit der Raumversion <roomVersion />, welcher dieser Heimserver als <i>instabil</i> markiert hat.",
"This room has already been upgraded.": "Diese Raum wurde bereits aktualisiert.",
"This room is running room version <roomVersion />, which this homeserver has marked as <i>unstable</i>.": "Dieser Raum läuft mit der Raumversion <roomVersion />, welche dieser Heimserver als <i>instabil</i> markiert hat.",
"Unknown Command": "Unbekannter Befehl",
"Unrecognised command: %(commandText)s": "Unbekannter Befehl: %(commandText)s",
"Hint: Begin your message with <code>//</code> to start it with a slash.": "Hinweis: Beginne deine Nachricht mit <code>//</code> um sie mit einem Querstrich zu beginnen.",
"Hint: Begin your message with <code>//</code> to start it with a slash.": "Hinweis: Beginne deine Nachricht mit <code>//</code>, um sie mit einem Schrägstrich zu beginnen.",
"Send as message": "Als Nachricht senden",
"Failed to connect to integration manager": "Fehler beim Verbinden mit dem Integrationsserver",
"Could not revoke the invite. The server may be experiencing a temporary problem or you do not have sufficient permissions to revoke the invite.": "Konnte die Einladung nicht zurückziehen. Der Server hat ein vorübergehendes Problem oder du besitzt nicht die nötigen Rechte um die Einladung zurückzuziehen.",
"Could not revoke the invite. The server may be experiencing a temporary problem or you do not have sufficient permissions to revoke the invite.": "Die Einladung konnte nicht zurückgezogen werden. Der Server hat möglicherweise ein vorübergehendes Problem oder du hast nicht ausreichende Berechtigungen, um die Einladung zurückzuziehen.",
"Mark all as read": "Alle als gelesen markieren",
"Local address": "Lokale Adresse",
"Published Addresses": "Öffentliche Adresse",
@ -1847,20 +1847,20 @@
"Accepting…": "Annehmen…",
"Start Verification": "Starte Verifikation",
"Messages in this room are end-to-end encrypted.": "Nachrichten in diesem Raum sind Ende-zu-Ende verschlüsselt.",
"Your messages are secured and only you and the recipient have the unique keys to unlock them.": "Diese Nachrichten sind verschlüsselt und nur du und der Empfänger habt die Schlüssel um sie zu entschlüsseln.",
"Your messages are secured and only you and the recipient have the unique keys to unlock them.": "Diese Nachrichten sind verschlüsselt und nur du und der/die Empfänger:in haben die Schlüssel, um sie zu entschlüsseln.",
"In encrypted rooms, your messages are secured and only you and the recipient have the unique keys to unlock them.": "In verschlüsselten Räumen sind deine Nachrichten verschlüsselt und nur du und der Empfänger habt die Schlüssel um sie zu entschlüsseln.",
"Verify User": "Benutzer verifizieren",
"For extra security, verify this user by checking a one-time code on both of your devices.": "Verifiziere den Benutzer, durch Vergleichen eines Einmal-Codes auf euren beiden Geräten, um die Sicherheit zu erhöhen.",
"Verify User": "Nutzer!n verifizieren",
"For extra security, verify this user by checking a one-time code on both of your devices.": "Für zusätzliche Sicherheit, verifiziere diese/n Nutzer!n, durch Vergleichen eines Einmal-Codes auf euren beiden Geräten.",
"Your messages are not secure": "Deine Nachrichten sind nicht sicher",
"One of the following may be compromised:": "Eines der folgenden könnte kompromittiert sein:",
"Your homeserver": "Dein Heimserver",
"The homeserver the user youre verifying is connected to": "Der Heimserver an dem der zu verifizierende Benutzer angemeldet ist",
"Yours, or the other users internet connection": "Deine Internetverbindung oder die des anderen Benutzers",
"Yours, or the other users session": "Deine Sitzung oder die des anderen Benutzers",
"The homeserver the user youre verifying is connected to": "Der Heimserver, an dem der/die zu verifizierende Nutzer:in angemeldet ist",
"Yours, or the other users internet connection": "Deine oder die Internetverbindung des Gegenüber",
"Yours, or the other users session": "Deine Sitzung oder die des Gegenüber",
"<strong>%(role)s</strong> in %(roomName)s": "<strong>%(role)s</strong> in %(roomName)s",
"This client does not support end-to-end encryption.": "Diese Anwendung unterstützt keine Ende-zu-Ende-Verschlüsselung.",
"Verify by scanning": "Mit Scannen eines QR Codes verifizieren",
"If you can't scan the code above, verify by comparing unique emoji.": "Wenn du den obenstehenden Code nicht scannen kannst versuche es mit der Emoji Verifikation.",
"Verify by scanning": "Verifizierung durch QR-Code-Scannen",
"If you can't scan the code above, verify by comparing unique emoji.": "Wenn du den obigen Code nicht scannen kannst, verifiziere stattdessen durch den Emoji-Vergleich.",
"Verify all users in a room to ensure it's secure.": "Verifiziere alle Benutzer in einem Raum um die vollständige Sicherheit zu gewährleisten.",
"In encrypted rooms, verify all users to ensure its secure.": "Verifiziere alle Benutzer in verschlüsselten Räumen um die vollständige Sicherheit zu gewährleisten.",
"You've successfully verified %(deviceName)s (%(deviceId)s)!": "Du hast %(deviceName)s (%(deviceId)s) erfolgreich verifiziert!",
@ -1873,15 +1873,15 @@
"You cancelled verification.": "Du hast die Verifikation abgebrochen.",
"Verification cancelled": "Verifikation abgebrochen",
"Compare emoji": "Vergleiche Emojis",
"Message Actions": "Nachrichten Aktionen",
"Show image": "Zeige Bild",
"You have ignored this user, so their message is hidden. <a>Show anyways.</a>": "Du ignorierst diesen Benutzer, deshalb werden seine Nachrichten nicht angezeigt. <a>Trotzdem anzeigen.</a>",
"Message Actions": "Nachrichtenaktionen",
"Show image": "Bild anzeigen",
"You have ignored this user, so their message is hidden. <a>Show anyways.</a>": "Du hast diese/n Nutzer!n ignoriert, sodass seine/ihre Nachricht ausgeblendet ist. <a>Dennoch anzeigen.</a>",
"You accepted": "Du hast angenommen",
"You declined": "Du hast abgelehnt",
"You cancelled": "Du hast abgebrochen",
"Accepting …": "Annehmen …",
"Declining …": "Ablehnen …",
"You sent a verification request": "Du hast eine Verifikationsanfrage gesendet",
"You sent a verification request": "Du hast eine Verifizierungsanfrage gesendet",
"Show all": "Alle zeigen",
"Reactions": "Reaktionen",
"<reactors/><reactedWith> reacted with %(content)s</reactedWith>": "<reactors/><reactedWith> hat mit %(content)s reagiert</reactedWith>",
@ -1903,15 +1903,15 @@
"Quick Reactions": "Praktische Reaktionen",
"Cancel search": "Suche abbrechen",
"Any of the following data may be shared:": "Die folgenden Daten können geteilt werden:",
"Your avatar URL": "Deine Avatar URL",
"Your user ID": "Deine Benutzer ID",
"Your avatar URL": "Deine Avatar-URL",
"Your user ID": "Deine Nutzer-ID",
"Your theme": "Dein Design",
"%(brand)s URL": "%(brand)s URL",
"Room ID": "Raum ID",
"Widget ID": "Widget ID",
"Using this widget may share data <helpIcon /> with %(widgetDomain)s & your Integration Manager.": "Wenn du dieses Widget verwendest können Daten <helpIcon /> zu %(widgetDomain)s und deinem Integrationsserver übertragen werden.",
"Using this widget may share data <helpIcon /> with %(widgetDomain)s.": "Wenn du dieses Widget verwendest können Daten <helpIcon /> zu %(widgetDomain)s übertragen werden.",
"Widgets do not use message encryption.": "Widgets verschlüsseln deine Nachrichten nicht.",
"Room ID": "Raum-ID",
"Widget ID": "Widget-ID",
"Using this widget may share data <helpIcon /> with %(widgetDomain)s & your Integration Manager.": "Wenn du dieses Widget verwendest, können Daten <helpIcon /> zu %(widgetDomain)s und deinem Integrationsserver übertragen werden.",
"Using this widget may share data <helpIcon /> with %(widgetDomain)s.": "Wenn du dieses Widget verwendest, können Daten <helpIcon /> zu %(widgetDomain)s übertragen werden.",
"Widgets do not use message encryption.": "Widgets verwenden keine Nachrichtenverschlüsselung.",
"Please <newIssueLink>create a new issue</newIssueLink> on GitHub so that we can investigate this bug.": "Bitte <newIssueLink>erstelle ein neues Issue</newIssueLink> auf GitHub damit wir diesen Fehler untersuchen können.",
"Rotate Left": "Nach links drehen",
"Rotate counter-clockwise": "Gegen den Uhrzeigersinn drehen",
@ -1921,7 +1921,7 @@
"%(severalUsers)smade no changes %(count)s times|one": "%(severalUsers)shaben keine Änderung vorgenommen",
"%(oneUser)smade no changes %(count)s times|other": "%(oneUser)shat %(count)s mal keine Änderung vorgenommen",
"%(oneUser)smade no changes %(count)s times|one": "%(oneUser)shat keine Änderung vorgenommen",
"Some characters not allowed": "Manche Zeichen sind nicht erlaubt",
"Some characters not allowed": "Einige Zeichen sind nicht erlaubt",
"Enter a server name": "Gibt einen Servernamen ein",
"Looks good": "Das sieht gut aus",
"Can't find this server or its room list": "Kann diesen Server oder seine Raumliste nicht finden",
@ -1937,13 +1937,13 @@
"%(networkName)s rooms": "%(networkName)s Räume",
"Matrix rooms": "Matrix Räume",
"Close dialog": "Dialog schließen",
"Please tell us what went wrong or, better, create a GitHub issue that describes the problem.": "Bitte teile uns mit was schiefgelaufen ist oder erstelle ein Github Issue und beschreibe das Problem.",
"Please tell us what went wrong or, better, create a GitHub issue that describes the problem.": "Bitte teile uns mit, was schief lief - oder besser, erstelle ein GitHub-Issue, das das Problem beschreibt.",
"Reminder: Your browser is unsupported, so your experience may be unpredictable.": "Warnung: Dein Browser wird nicht unterstützt. Die Anwendung kann instabil sein.",
"Notes": "Notizen",
"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.": "Wenn du mehr Informationen hast die uns bei Untersuchung des Problems helfen (z.B. was du gerade getan hast, Raum IDs, Benutzer IDs, etc.) gib sie bitte hier an.",
"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.": "Wenn du mehr Informationen hast, die uns bei Untersuchung des Problems helfen (z.B. was du gerade getan hast, Raum-IDs, Benutzer-IDs, etc.), gib sie bitte hier an.",
"Removing…": "Löschen…",
"Destroy cross-signing keys?": "Cross-signing Schlüssel löschen?",
"Clear cross-signing keys": "Entferne Cross-signing Schlüssel",
"Destroy cross-signing keys?": "Cross-Signing-Schlüssel zerstören?",
"Clear cross-signing keys": "Cross-Signing-Schlüssel löschen",
"Enable end-to-end encryption": "Ende-zu-Ende Verschlüsselung aktivieren",
"You cant disable this later. Bridges & most bots wont work yet.": "Du kannst dies später nicht mehr ändern. Bridges und die meisten Bots werden nicht funktionieren.",
"Server did not require any authentication": "Der Server benötigt keine Authentifizierung",
@ -1951,15 +1951,15 @@
"Are you sure you want to deactivate your account? This is irreversible.": "Bist du sicher dass du dein Konto deaktivieren möchtest? Dies kann nicht rückgängig gemacht werden.",
"There was a problem communicating with the server. Please try again.": "Bei der Kommunikation mit dem Server ist ein Fehler aufgetreten. Bitte versuche es erneut.",
"View Servers in Room": "Zeige Server im Raum",
"Verification Requests": "Verifikationsanfragen",
"Verification Requests": "Verifizierungsanfrage",
"Integrations are disabled": "Integrationen sind deaktiviert",
"Integrations not allowed": "Integrationen sind nicht erlaubt",
"Failed to invite the following users to chat: %(csvUsers)s": "Fehler beim Einladen der folgenden Benutzer: %(csvUsers)s",
"Something went wrong trying to invite the users.": "Beim Einladen der Benutzer ist ein Fehler aufgetreten.",
"Failed to find the following users": "Kann die folgenden Benutzer nicht finden",
"The following users might not exist or are invalid, and cannot be invited: %(csvNames)s": "Die folgenden Benutzer konnten nicht eingeladen werden, da sie nicht existieren oder ungültig sind: %(csvNames)s",
"Failed to invite the following users to chat: %(csvUsers)s": "Einladen der folgenden Nutzer:innen fehlgeschlagen: %(csvUsers)s",
"Something went wrong trying to invite the users.": "Beim Einladen der Nutzer:innen lief etwas schief.",
"Failed to find the following users": "Folgenden Nutzer:innen konnten nicht gefunden werden",
"The following users might not exist or are invalid, and cannot be invited: %(csvNames)s": "Folgende Nutzer:innen konnten nicht eingeladen werden, da sie nicht existieren oder ungültig sind: %(csvNames)s",
"a new master key signature": "Eine neue Hauptschlüssel Signatur",
"a new cross-signing key signature": "Eine neue cross-signing Schlüssel Signatur",
"a new cross-signing key signature": "Eine neue Cross-Signing-Schlüsselsignatur",
"a device cross-signing signature": "Eine Geräte Schlüssel Signatur",
"a key signature": "Eine Schlüssel Signatur",
"Your password": "Dein Passwort",
@ -1986,9 +1986,9 @@
"If you didnt sign in to this session, your account may be compromised.": "Wenn du dich nicht bei dieser Sitzung angemeldet hast, ist dein Konto möglicherweise gefährdet.",
"This wasn't me": "Das war ich nicht",
"Please fill why you're reporting.": "Bitte gib an, weshalb du einen Fehler meldest.",
"Automatically invite users": "Benutzer automatisch einladen",
"Upgrade private room": "Privaten Raum hochstufen",
"Upgrade public room": "Öffentlichen Raum hochstufen",
"Automatically invite users": "Nutzer:innen automatisch einladen",
"Upgrade private room": "Privaten Raum aktualisieren",
"Upgrade public room": "Öffentlichen Raum aktualisieren",
"This usually only affects how the room is processed on the server. If you're having problems with your %(brand)s, please <a>report a bug</a>.": "Dies wirkt sich normalerweise nur darauf aus, wie der Raum auf dem Server verarbeitet wird. Wenn du Probleme mit deinem %(brand)s hast, <a>melde bitte einen Bug</a>.",
"You'll upgrade this room from <oldVersion /> to <newVersion />.": "Du wirst diesen Raum von <oldVersion /> zu <newVersion /> aktualisieren.",
"Missing session data": "Fehlende Sitzungsdaten",
@ -2001,7 +2001,7 @@
"These files are <b>too large</b> to upload. The file size limit is %(limit)s.": "Die Datei ist <b>zu groß</b>, um hochgeladen zu werden. Die maximale Dateigröße ist %(limit)s.",
"Some files are <b>too large</b> to be uploaded. The file size limit is %(limit)s.": "Einige Dateien sind <b>zu groß</b>, um hochgeladen zu werden. Die maximale Dateigröße ist %(limit)s.",
"Verify other session": "Andere Sitzung verifizieren",
"Verification Request": "Verifikationsanfrage",
"Verification Request": "Verifizierungsanfrage",
"Upload %(count)s other files|other": "%(count)s andere Dateien hochladen",
"Upload %(count)s other files|one": "%(count)s andere Datei hochladen",
"A widget would like to verify your identity": "Ein Widget möchte deine Identität verifizieren",
@ -2013,7 +2013,7 @@
"Successfully restored %(sessionCount)s keys": "%(sessionCount)s Schlüssel erfolgreich wiederhergestellt",
"Reload": "Neu laden",
"Take picture": "Foto machen",
"User Status": "Benutzerstatus",
"User Status": "Nutzerstatus",
"Country Dropdown": "Landauswahl",
"Recovery key mismatch": "Nicht übereinstimmende Wiederherstellungsschlüssel",
"Incorrect recovery passphrase": "Falsche Wiederherstellungspassphrase",
@ -2056,10 +2056,10 @@
"Your new session is now verified. Other users will see it as trusted.": "Deine neue Sitzung ist nun verifiziert. Andere Benutzer sehen sie als vertrauenswürdig an.",
"well formed": "wohlgeformt",
"If you don't want to use <server /> to discover and be discoverable by existing contacts you know, enter another identity server below.": "Wenn du <server /> nicht verwenden willst, um Kontakte zu finden und von anderen gefunden zu werden, trage unten einen anderen Identitätsserver ein.",
"To report a Matrix-related security issue, please read the Matrix.org <a>Security Disclosure Policy</a>.": "Wenn du einen sicherheitsrelevanten Fehler melden möchtest, lies bitte die Matrix.org <a>Security Disclosure Policy</a>.",
"An error occurred changing the room's power level requirements. Ensure you have sufficient permissions and try again.": "Beim Ändern der Anforderungen für Benutzerrechte ist ein Fehler aufgetreten. Stelle sicher dass du die nötigen Berechtigungen besitzt und versuche es erneut.",
"An error occurred changing the user's power level. Ensure you have sufficient permissions and try again.": "Beim Ändern der Benutzerrechte ist ein Fehler aufgetreten. Stelle sicher dass du die nötigen Berechtigungen besitzt und versuche es erneut.",
"Unable to share email address": "E-Mail Adresse konnte nicht geteilt werden",
"To report a Matrix-related security issue, please read the Matrix.org <a>Security Disclosure Policy</a>.": "Um ein Matrix-bezogenes Sicherheitsproblem zu melden, lies bitte die Matrix.org <a>Sicherheitsrichtlinien</a>.",
"An error occurred changing the room's power level requirements. Ensure you have sufficient permissions and try again.": "Beim Ändern der Anforderungen für Benutzerrechte ist ein Fehler aufgetreten. Stelle sicher, dass du die nötigen Berechtigungen besitzt und versuche es erneut.",
"An error occurred changing the user's power level. Ensure you have sufficient permissions and try again.": "Beim Ändern der Benutzerrechte ist ein Fehler aufgetreten. Stelle sicher, dass du die nötigen Berechtigungen besitzt und versuche es erneut.",
"Unable to share email address": "E-Mail-Adresse kann nicht geteilt werden",
"Please enter verification code sent via text.": "Gib den Verifikationscode ein, den du empfangen hast.",
"Almost there! Is your other session showing the same shield?": "Fast geschafft! Zeigt deine andere Sitzung das gleiche Schild?",
"Almost there! Is %(displayName)s showing the same shield?": "Fast geschafft! Wird bei %(displayName)s das gleiche Schild angezeigt?",
@ -2069,7 +2069,7 @@
"%(severalUsers)smade no changes %(count)s times|other": "%(severalUsers)s haben %(count)s mal nichts geändert",
"Deleting cross-signing keys is permanent. Anyone you have verified with will see security alerts. You almost certainly don't want to do this, unless you've lost every device you can cross-sign from.": "Das Löschen von Cross-Signing-Schlüsseln ist dauerhaft. Jeder, mit dem du dich verifiziert hast, bekommt Sicherheitswarnungen angezeigt. Du möchtest dies mit ziemlicher Sicherheit nicht tun, es sei denn, du hast jedes Gerät verloren, von dem aus du ein Cross-Signing durchführen kannst.",
"Clearing all data from this session is permanent. Encrypted messages will be lost unless their keys have been backed up.": "Das Löschen aller Daten aus dieser Sitzung ist dauerhaft. Verschlüsselte Nachrichten gehen verloren, sofern deine Schlüssel nicht gesichert wurden.",
"Verifying this user will mark their session as trusted, and also mark your session as trusted to them.": "Wenn du diesen Benutzer verifizierst werden seine Sitzungen für dich und deine Sitzungen für ihn als vertrauenswürdig markiert.",
"Verifying this user will mark their session as trusted, and also mark your session as trusted to them.": "Wenn du diese/e Nutzer!n verifizierst werden seine/ihre Sitzungen für dich und deine Sitzungen für ihn/sie als vertrauenswürdig markiert.",
"Verify this device to mark it as trusted. Trusting this device gives you and other users extra peace of mind when using end-to-end encrypted messages.": "Verifiziere dieses Gerät, um es als vertrauenswürdig zu markieren. Das Vertrauen in dieses Gerät gibt dir und anderen Benutzern zusätzliche Sicherheit, wenn ihr Ende-zu-Ende verschlüsselte Nachrichten verwendet.",
"Verifying this device will mark it as trusted, and users who have verified with you will trust this device.": "Verifiziere dieses Gerät und es wird es als vertrauenswürdig markiert. Benutzer, die sich bei dir verifiziert haben, werden diesem Gerät auch vertrauen.",
"Your %(brand)s doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "Dein %(brand)s erlaubt dir nicht, eine Integrationsverwaltung zu verwenden, um dies zu tun. Bitte kontaktiere einen Administrator.",
@ -2131,7 +2131,7 @@
"Room List": "Raumliste",
"Autocomplete": "Auto-Vervollständigung",
"Alt": "Alt",
"Toggle microphone mute": "Schalte Mikrophon stumm",
"Toggle microphone mute": "Schalte Mikrofon stumm/an",
"Toggle video on/off": "Schalte Video an/aus",
"Jump to room search": "Springe zur Raumsuche",
"Close dialog or context menu": "Schließe Dialog oder Kontextmenü",
@ -2178,7 +2178,7 @@
"Waiting for your other session to verify…": "Warte auf die Verifikation deiner anderen Sitzungen…",
"You've successfully verified your device!": "Du hast dein Gerät erfolgreich verifiziert!",
"QR Code": "QR-Code",
"To continue, use Single Sign On to prove your identity.": "Zum Fortfahren, nutze Single Sign On um deine Identität zu bestätigen.",
"To continue, use Single Sign On to prove your identity.": "Zum Fortfahren, nutze Single Sign-On um deine Identität zu bestätigen.",
"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",
@ -2345,17 +2345,17 @@
"%(brand)s iOS": "%(brand)s iOS",
"%(brand)s X for Android": "%(brand)s X für Android",
"Were excited to announce Riot is now Element": "Wir freuen uns zu verkünden, dass Riot jetzt Element ist",
"%(brand)s can't securely cache encrypted messages locally while running in a web browser. Use <desktopLink>%(brand)s Desktop</desktopLink> for encrypted messages to appear in search results.": "%(brand)s kann verschlüsselte Nachrichten nicht sicher zwischenspeichern während es in einem Browser läuft. Verwende <desktopLink>%(brand)s Desktop</desktopLink> damit verschlüsselte Nachrichten durchsuchbar werden.",
"Show rooms with unread messages first": "Zeige Räume mit ungelesenen Nachrichten zuerst",
"Show previews of messages": "Zeige Vorschau von Nachrichten",
"Use default": "Verwende den Standard",
"%(brand)s can't securely cache encrypted messages locally while running in a web browser. Use <desktopLink>%(brand)s Desktop</desktopLink> for encrypted messages to appear in search results.": "%(brand)s kann verschlüsselte Nachrichten nicht sicher während der Ausführung im Browser durchsuchen. Benutze <desktopLink>%(brand)s Desktop</desktopLink>, um verschlüsselte Nachrichten in den Suchergebnissen angezeigt zu bekommen.",
"Show rooms with unread messages first": "Räume mit ungelesenen Nachrichten zuerst zeigen",
"Show previews of messages": "Nachrichtenvorschau anzeigen",
"Use default": "Standardeinstellungen benutzen",
"Mentions & Keywords": "Erwähnungen & Schlüsselwörter",
"Notification options": "Benachrichtigungsoptionen",
"Forget Room": "Vergesse Raum",
"Forget Room": "Raum vergessen",
"Favourited": "Favorisiert",
"This room is public": "Dieser Raum ist öffentlich",
"Away": "Abwesend",
"The session you are trying to verify doesn't support scanning a QR code or emoji verification, which is what %(brand)s supports. Try with a different client.": "Die Sitzung, die du verifizieren möchtest, unterstützt weder das scannen eines QR Codes noch eine Emoji Verifikation, welche von %(brand)s unterstützt werden. Versuche es mit einem anderen Client.",
"The session you are trying to verify doesn't support scanning a QR code or emoji verification, which is what %(brand)s supports. Try with a different client.": "Die Sitzung, die du verifizieren möchtest, unterstützt weder das scannen eines QR-Codes noch eine Emoji-Verifikation, welche von %(brand)s unterstützt werden. Versuche es mit einer anderen Anwendung.",
"Edited at %(date)s": "Geändert am %(date)s",
"Click to view edits": "Klicke um Änderungen anzuzeigen",
"%(brand)s encountered an error during upload of:": "%(brand)s hat einen Fehler festgestellt beim hochladen von:",
@ -2659,7 +2659,7 @@
"Enter email address": "E-Mail-Adresse eingeben",
"Open the link in the email to continue registration.": "Öffnen Sie den Link in der E-Mail, um mit der Registrierung fortzufahren.",
"A confirmation email has been sent to %(emailAddress)s": "Eine Bestätigungs-E-Mail wurde an %(emailAddress)s gesendet",
"Use the + to make a new room or explore existing ones below": "Verwenden Sie das +, um einen neuen Raum zu erstellen oder unten einen bestehenden zu erkunden",
"Use the + to make a new room or explore existing ones below": "Benutze das + um einen neuen Raum zu erstellen oder darunter um existierende Räume zu suchen",
"Return to call": "Zurück zum Anruf",
"Fill Screen": "Bildschirm ausfüllen",
"Voice Call": "Sprachanruf",
@ -2979,5 +2979,75 @@
"Sends the given message with snowfall": "Sendet die gewählte Nachricht mit Schneeflocken",
"Transfer": "Übertragen",
"Failed to transfer call": "Anruf-Übertragung fehlgeschlagen",
"A call can only be transferred to a single user.": "Ein Anruf kann nur auf einen einzelnen Nutzer übertragen werden."
"A call can only be transferred to a single user.": "Ein Anruf kann nur auf einen einzelnen Nutzer übertragen werden.",
"Set up with a Security Key": "Mit einem Sicherheitsschlüssel einrichten",
"Use Security Key": "Sicherheitsschlüssel benutzen",
"Use Security Key or Phrase": "Sicherheitsschlüssel oder -phrase benutzen",
"Not a valid Security Key": "Kein gültiger Sicherheisschlüssel",
"This looks like a valid Security Key!": "Dies sieht aus wie ein gültiger Sicherheitsschlüssel!",
"Enter Security Key": "Sicherheitsschlüssel eingeben",
"Enter Security Phrase": "Sicherheitsphrase eingeben",
"Backup could not be decrypted with this Security Phrase: please verify that you entered the correct Security Phrase.": "Das Backup konnte mit dieser Sicherheitsphrase nicht entschlüsselt werden: Bitte überprüfe, ob du die richtige eingegeben hast.",
"Incorrect Security Phrase": "Falsche Sicherheitsphrase",
"Backup could not be decrypted with this Security Key: please verify that you entered the correct Security Key.": "Das Backup konnte mit diesem Sicherheitsschlüssel nicht entschlüsselt werden: Bitte überprüfe, ob du den richtigen Sicherheitsschlüssel eingegeben hast.",
"Unable to access secret storage. Please verify that you entered the correct Security Phrase.": "Zugriff auf geheimen Speicher nicht möglich. Bitte überprüfe, ob du die richtige Sicherheitsphrase eingegeben hast.",
"Invalid Security Key": "Ungültiger Sicherheitsschlüssel",
"Wrong Security Key": "Falscher Sicherheitsschlüssel",
"We recommend you change your password and Security Key in Settings immediately": "Wir empfehlen dir, dein Passwort und deinen Sicherheitsschlüssel sofort in den Einstellungen zu ändern",
"There was an error finding this widget.": "Fehler beim Finden dieses Widgets.",
"Active Widgets": "Aktive Widgets",
"Open dial pad": "Wähltastatur öffnen",
"Start a Conversation": "Beginne eine Konversation",
"Back up your encryption keys with your account data in case you lose access to your sessions. Your keys will be secured with a unique Security Key.": "Sichere deine Verschlüsselungsschlüssel mit deinen Kontodaten, falls du den Zugriff auf deine Sitzungen verlierst. Deine Schlüssel werden mit einem eindeutigen Sicherheitsschlüssel gesichert.",
"Channel: <channelLink/>": "Kanal: <channelLink/>",
"Workspace: <networkLink/>": "Arbeitsraum: <networkLink/>",
"Dial pad": "Wähltastatur",
"There was an error looking up the phone number": "Beim Suchen der Telefonnummer ist ein Fehler aufgetreten",
"Change which room, message, or user you're viewing": "Ändere welchen Raum, Nachricht oder Nutzer du siehst",
"Unable to look up phone number": "Telefonnummer kann nicht gesucht werden",
"This session has detected that your Security Phrase and key for Secure Messages have been removed.": "In dieser Sitzung wurde festgestellt, dass deine Sicherheitsphrase und dein Schlüssel für sichere Nachrichten entfernt wurden.",
"A new Security Phrase and key for Secure Messages have been detected.": "Eine neue Sicherheitsphrase und ein neuer Schlüssel für sichere Nachrichten wurden erkannt.",
"Make a copy of your Security Key": "Mache eine Kopie von deinem Sicherheitsschlüssel",
"Confirm your Security Phrase": "Deine Sicherheitsphrase bestätigen",
"Secure your backup with a Security Phrase": "Sichere dein Backup mit einer Sicherheitsphrase",
"Your Security Key is in your <b>Downloads</b> folder.": "Dein Sicherheitsschlüssel ist in deinem <b>Download</b>-Ordner.",
"Your Security Key has been <b>copied to your clipboard</b>, paste it to:": "Dein Sicherheitsschlüssel wurde <b>in die Zwischenablage kopiert</b>, füge ihn ein in:",
"Your Security Key": "Dein Sicherheitsschlüssel",
"Your Security Key is a safety net - you can use it to restore access to your encrypted messages if you forget your Security Phrase.": "Dein Sicherheitsschlüssel ist ein Sicherheitsnetz. Du kannst ihn nutzen, um den Zugriff auf deine verschlüsselten Nachrichten wiederherzustellen, falls du deine Sicherheitsphrase vergessen hast.",
"Repeat your Security Phrase...": "Wiederhole deine Sicherheitsphrase...",
"Please enter your Security Phrase a second time to confirm.": "Gib deine Sicherheitsphrase zur Bestätigung ein zweites Mal ein.",
"Great! This Security Phrase looks strong enough.": "Großartig! Diese Sicherheitsphrase sieht stark genug aus.",
"Access your secure message history and set up secure messaging by entering your Security Phrase.": "Greife auf deinen sicheren Chatverlauf zu und richte die sichere Nachrichtenübermittlung ein, indem du deine Sicherheitsphrase (z.B. einem langen Satz, den niemand errät) eingibst.",
"We'll store an encrypted copy of your keys on our server. Secure your backup with a Security Phrase.": "Wir werden eine verschlüsselte Kopie deiner Schlüssel auf unserem Server speichern. Sichere dein Backup mit einer Sicherheitsphrase (z.B. einem langen Satz, den niemand errät).",
"If you've forgotten your Security Key you can <button>set up new recovery options</button>": "Wenn du deinen Sicherheitsschlüssel vergessen hast, kannst du <button>neue Wiederherstellungsoptionen einrichten</button>",
"Access your secure message history and set up secure messaging by entering your Security Key.": "Greife auf deinen sicheren Chatverlauf zu und richte die sichere Nachrichtenübermittlung ein, indem du deinen Sicherheitsschlüssel eingibst.",
"If you've forgotten your Security Phrase you can <button1>use your Security Key</button1> or <button2>set up new recovery options</button2>": "Wenn du deine Sicherheitsphrase vergessen hast, kannst du <button1>deinen Sicherheitsschlüssel nutzen</button1> oder <button2>neue Wiederherstellungsoptionen einrichten</button2>",
"Security Key mismatch": "Nicht übereinstimmende Sicherheitsschlüssel",
"Set my room layout for everyone": "Setze mein Raum-Layout für alle",
"%(senderName)s has updated the widget layout": "%(senderName)s hat das Widget-Layout aktualisiert",
"Search (must be enabled)": "Suche (muss aktiviert sein)",
"Remember this": "Dies merken",
"The widget will verify your user ID, but won't be able to perform actions for you:": "Das Widget überprüft deine Nutzer-ID, kann jedoch keine Aktionen für dich ausführen:",
"Allow this widget to verify your identity": "Erlaube diesem Widget deine Identität zu überprüfen",
"Use Command + F to search": "Nutze Befehlstaste (⌘) + F zum Suchen",
"Use Ctrl + F to search": "Nutze Strg + F zum Suchen",
"Element Web is currently experimental on mobile. The native apps are recommended for most people.": "Element Web ist derzeit experimentell auf mobilen Endgeräten. Die nativen Apps werden empfohlen.",
"Converts the DM to a room": "Wandelt die Direktnachricht zu Raum um",
"Converts the room to a DM": "Wandelt den Raum zu Direktnachricht um",
"Something went wrong in confirming your identity. Cancel and try again.": "Bei der Bestätigung deiner Identität ist ein Fehler aufgetreten. Abbrechen und erneut versuchen.",
"Use app": "App verwenden",
"Element Web is experimental on mobile. For a better experience and the latest features, use our free native app.": "Element Web ist experimentell auf mobilen Endgeräten. Für eine bessere Erfahrung und die neuesten Erweiterungen, nutze unsere freie, native App.",
"Use app for a better experience": "Nutze die App für eine bessere Erfahrung",
"We asked the browser to remember which homeserver you use to let you sign in, but unfortunately your browser has forgotten it. Go to the sign in page and try again.": "Wir haben deinen Browser gebeten, sich zu merken, bei welchem Homeserver du dich anmeldest, aber dein Browser hat dies leider vergessen. Gehe zur Anmeldeseite und versuche es erneut.",
"Show stickers button": "Sticker-Schaltfläche anzeigen",
"Your homeserver rejected your log in attempt. This could be due to things just taking too long. Please try again. If this continues, please contact your homeserver administrator.": "Dein Homeserver hat deinen Anmeldeversuch abgelehnt. Dies könnte daran liegen, dass der Prozess einfach zu lange dauert. Bitte versuche es erneut. Wenn dies so weitergeht, wende dich bitte an deine Homeserver-Administration.",
"Your homeserver was unreachable and was not able to log you in. Please try again. If this continues, please contact your homeserver administrator.": "Dein Homeserver war nicht erreichbar und konnte dich nicht anmelden. Bitte versuche es erneut. Wenn dies so weitergeht, wende dich bitte an deine Homeserver-Administration.",
"We couldn't log you in": "Wir konnten dich nicht anmelden",
"Windows": "Fenster",
"Screens": "Bildschirme",
"Share your screen": "Deinen Bildschirm teilen",
"Recently visited rooms": "Kürzlich besuchte Räume",
"Show line numbers in code blocks": "Zeilennummern in Code-Blöcken anzeigen",
"Expand code blocks by default": "Code-Blöcke standardmäßig erweitern",
"Try again": "Erneut versuchen"
}

View file

@ -31,7 +31,7 @@
"%(senderName)s banned %(targetName)s.": "Ο χρήστης %(senderName)s έδιωξε τον χρήστη %(targetName)s.",
"Autoplay GIFs and videos": "Αυτόματη αναπαραγωγή GIFs και βίντεο",
"Anyone who knows the room's link, apart from guests": "Oποιοσδήποτε",
"%(items)s and %(lastItem)s": "%(items)s %(lastItem)s",
"%(items)s and %(lastItem)s": "%(items)s και %(lastItem)s",
"Access Token:": "Κωδικός πρόσβασης:",
"Always show message timestamps": "Εμφάνιση πάντα της ένδειξης ώρας στα μηνύματα",
"and %(count)s others...|one": "και ένας ακόμα...",
@ -51,7 +51,7 @@
"Cryptography": "Κρυπτογραφία",
"Current password": "Τωρινός κωδικός πρόσβασης",
"Custom level": "Προσαρμοσμένο επίπεδο",
"/ddg is not a command": "/ddg δεν αναγνωρίζεται ως εντολή",
"/ddg is not a command": "Το /ddg δεν αναγνωρίζεται ως εντολή",
"Deactivate Account": "Απενεργοποίηση λογαριασμού",
"Decrypt %(text)s": "Αποκρυπτογράφηση %(text)s",
"Default": "Προεπιλογή",
@ -60,7 +60,7 @@
"Email": "Ηλεκτρονική διεύθυνση",
"Email address": "Ηλεκτρονική διεύθυνση",
"Emoji": "Εικονίδια",
"%(senderName)s ended the call.": "%(senderName)s τερμάτισε την κλήση.",
"%(senderName)s ended the call.": "Ο %(senderName)s τερμάτισε την κλήση.",
"Error decrypting attachment": "Σφάλμα κατά την αποκρυπτογράφηση της επισύναψης",
"Existing Call": "Υπάρχουσα κλήση",
"Export": "Εξαγωγή",
@ -92,7 +92,7 @@
"Invited": "Προσκλήθηκε",
"Invites": "Προσκλήσεις",
"Sign in with": "Συνδεθείτε με",
"%(targetName)s joined the room.": "ο %(targetName)s συνδέθηκε στο δωμάτιο.",
"%(targetName)s joined the room.": "Ο %(targetName)s συνδέθηκε στο δωμάτιο.",
"Jump to first unread message.": "Πηγαίνετε στο πρώτο μη αναγνωσμένο μήνυμα.",
"%(senderName)s kicked %(targetName)s.": "Ο %(senderName)s έδιωξε τον χρήστη %(targetName)s.",
"Kick": "Απομάκρυνση",
@ -608,5 +608,318 @@
"Whether you're using %(brand)s as an installed Progressive Web App": "Εάν χρησιμοπιείται %(brand)s σαν εγκατεστημένο Progressive Web App",
"Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Ενα χρησιμοποιείται το %(brand)s σε συσκευή αφής",
"Click the button below to confirm adding this phone number.": "Πιέστε το κουμπί από κάτω για να επιβεβαίωσετε την προσθήκη του τηλεφωνικού αριθμού.",
"Confirm": "Επιβεβαίωση"
"Confirm": "Επιβεβαίωση",
"Use custom size": "Χρησιμοποιήστε προσαρμοσμένο μέγεθος",
"Font size": "Μέγεθος γραμματοσειράς",
"Render LaTeX maths in messages": "Εμφανίστε μαθηματικά LaTeX σε μηνύματα",
"You started a call": "Ξεκινήσατε μία κλήση",
"Call ended": "Τέλος κλήσης",
"%(senderName)s ended the call": "Ο χρήστης %(senderName)s σταμάτησε την κλήση",
"You ended the call": "Σταματήσατε την κλήση",
"Call in progress": "Κλήση σε εξέλιξη",
"%(senderName)s joined the call": "Ο χρήστης %(senderName)s συνδέθηκε στην κλήση",
"You joined the call": "Συνδεθήκατε στην κλήση",
"Guest": "Επισκέπτης",
"Ok": "Εντάξει",
"Your homeserver has exceeded its user limit.": "Ο διακομιστής σας ξεπέρασε το όριο χρηστών.",
"Use app": "Χρησιμοποιήστε την εφαρμογή",
"Use app for a better experience": "Χρησιμοποιήστε την εφαρμογή για καλύτερη εμπειρία",
"Enable": "Ενεργοποίηση",
"No": "Όχι",
"Yes": "Ναι",
"No need for symbols, digits, or uppercase letters": "Δεν χρειάζονται σύμβολα, ψηφία, ή κεφαλαία γράμματα",
"Use a few words, avoid common phrases": "Χρησιμοποιήστε αρκετές λέξεις, αποφύγετε συνηθισμένες φράσεις",
"Unknown server error": "Άγνωστο σφάλμα διακομιστή",
"User %(user_id)s may or may not exist": "Ο χρήστης %(user_id)s μπορεί να υπάρχει ή να μην υπάρχει",
"User %(user_id)s does not exist": "Ο χρήστης %(user_id)s δεν υπάρχει",
"User %(userId)s is already in the room": "Ο χρήστης %(userId)s είναι ήδη στο δωμάτιο",
"You do not have permission to invite people to this room.": "Δεν έχετε δικαίωμα να προσκαλείτε άτομα σε αυτό το δωμάτιο.",
"Unrecognised address": "Η διεύθυνση δεν αναγνωρίστηκε",
"Error leaving room": "Σφάλμα στην έξοδο από το δωμάτιο",
"%(num)s days ago": "%(num)s μέρες πριν",
"about a day ago": "σχεδόν μία μέρα πριν",
"%(num)s hours ago": "%(num)s ώρες πριν",
"about an hour ago": "σχεδόν μία ώρα πριν",
"%(num)s minutes ago": "%(num)s λεπτά πριν",
"about a minute ago": "σχεδόν ένα λεπτό πριν",
"a few seconds ago": "λίγα δευτερόλεπτα πριν",
"%(items)s and %(count)s others|one": "%(items)s και ένα ακόμα",
"%(items)s and %(count)s others|other": "%(items)s και %(count)s άλλα",
"%(names)s and %(lastPerson)s are typing …": "%(names)s και %(lastPerson)s πληκτρολογούν …",
"%(names)s and %(count)s others are typing …|one": "%(names)s και ένας ακόμα πληκτρολογούν …",
"%(names)s and %(count)s others are typing …|other": "%(names)s και %(count)s άλλοι πληκτρολογούν …",
"%(displayName)s is typing …": "%(displayName)s πληκτρολογεί …",
"Ask this user to verify their session, or manually verify it below.": "Ζητήστε από αυτόν τον χρήστη να επιβεβαιώσει την συνεδρία του, ή επιβεβαιώστε την χειροκίνητα παρακάτω.",
"%(name)s (%(userId)s) signed in to a new session without verifying it:": "Ο %(name)s (%(userId)s) συνδέθηκε σε μία νέα συνεδρία χωρίς να την επιβεβαιώσει:",
"Verify your other session using one of the options below.": "Επιβεβαιώστε την άλλη σας συνεδρία χρησιμοποιώντας μία από τις παρακάτω επιλογές.",
"You signed in to a new session without verifying it:": "Συνδεθήκατε σε μια νέα συνεδρία χωρίς να την επιβεβαιώσετε:",
"Dark": "Σκούρο",
"Light": "Ανοιχτό",
"%(senderName)s removed the rule banning users matching %(glob)s": "Ο %(senderName)s αφαίρεσε τον κανόνα που αποκλείει τους χρήστες που ταιριάζουν με %(glob)s",
"%(senderName)s placed a video call. (not supported by this browser)": "Ο %(senderName)s έκανε μια κλήση βίντεο. (δεν υποστηρίζεται από το πρόγραμμα περιήγησης)",
"%(senderName)s placed a video call.": "Ο %(senderName)s έκανε μία κλήση βίντεο.",
"%(senderName)s placed a voice call. (not supported by this browser)": "Ο %(senderName)s έκανε μια ηχητική κλήση. (δεν υποστηρίζεται από το πρόγραμμα περιήγησης)",
"%(senderName)s placed a voice call.": "Ο %(senderName)s έκανε μία ηχητική κλήση.",
"%(senderName)s declined the call.": "Ο %(senderName)s απέρριψε την κλήση.",
"(an error occurred)": "(συνέβη ένα σφάλμα)",
"(their device couldn't start the camera / microphone)": "(η συσκευή δεν μπόρεσε να ανοίξει την κάμερα / μικρόφωνο)",
"(connection failed)": "(αποτυχία σύνδεσης)",
"%(senderName)s changed the alternative addresses for this room.": "Ο %(senderName)s άλλαξε την εναλλακτική διεύθυνση για αυτό το δωμάτιο.",
"%(senderName)s removed the alternative addresses %(addresses)s for this room.|one": "Ο %(senderName)s αφαίρεσε την εναλλακτική διεύθυνση %(addresses)s για αυτό το δωμάτιο.",
"%(senderName)s removed the alternative addresses %(addresses)s for this room.|other": "Ο %(senderName)s αφαίρεσε τις εναλλακτικές διευθύνσεις %(addresses)s για αυτό το δωμάτιο.",
"%(senderName)s added the alternative addresses %(addresses)s for this room.|one": "Ο %(senderName)s πρόσθεσε τις εναλλακτικές διευθύνσεις %(addresses)s για αυτό το δωμάτιο.",
"%(senderName)s added the alternative addresses %(addresses)s for this room.|other": "Ο %(senderName)s πρόσθεσε τις εναλλακτικές διευθύνσεις %(addresses)s για αυτό το δωμάτιο.",
"%(senderName)s removed the main address for this room.": "Ο %(senderName)s αφαίρεσε την κύρια διεύθυνση για αυτό το δωμάτιο.",
"%(senderName)s set the main address for this room to %(address)s.": "Ο %(senderName)s έθεσε την κύρια διεύθυνση αυτού του δωματίου σε %(address)s.",
"🎉 All servers are banned from participating! This room can no longer be used.": "🎉 Όλοι οι διακομιστές αποκλείστηκαν από την συμμετοχή! Αυτό το δωμάτιο δεν μπορεί να χρησιμοποιηθεί πλέον.",
"%(senderDisplayName)s changed guest access to %(rule)s": "Ο %(senderDisplayName)s άλλαξε την πρόσβαση επισκεπτών σε %(rule)s",
"%(senderDisplayName)s has prevented guests from joining the room.": "Ο %(senderDisplayName)s απέτρεψε τους επισκέπτες από το να μπαίνουν στο δωμάτιο.",
"%(senderDisplayName)s has allowed guests to join the room.": "Ο %(senderDisplayName)s επέτρεψε τους επισκέπτες να μπαίνουν στο δωμάτιο.",
"%(senderDisplayName)s changed the join rule to %(rule)s": "Ο %(senderDisplayName)s άλλαξε τους κανόνες εισόδου σε %(rule)s",
"%(senderDisplayName)s made the room invite only.": "Ο %(senderDisplayName)s άλλαξε το δωμάτιο σε \"μόνο με πρόσκληση\".",
"%(senderDisplayName)s made the room public to whoever knows the link.": "Ο %(senderDisplayName)s έκανε το δωμάτιο δημόσιο για όποιον γνωρίζει τον σύνδεσμο.",
"%(senderDisplayName)s upgraded this room.": "Ο %(senderDisplayName)s αναβάθμισε αυτό το δωμάτιο.",
"%(senderDisplayName)s changed the room name from %(oldRoomName)s to %(newRoomName)s.": "Ο %(senderDisplayName)s άλλαξε το όνομα δωματίου από %(oldRoomName)s σε %(newRoomName)s.",
"%(senderName)s made no change.": "Ο %(senderName)s δεν έκανε καμία αλλαγή.",
"Converts the DM to a room": "Μετατρέπει την προσωπική συνομιλία σε δωμάτιο",
"Converts the room to a DM": "Μετατρέπει το δωμάτιο σε προσωπική συνομιλία",
"Takes the call in the current room off hold": "Επαναφέρει την κλήση στο τρέχον δωμάτιο από την αναμονή",
"Places the call in the current room on hold": "Βάζει την κλήση στο τρέχον δωμάτιο σε αναμονή",
"Sends a message to the given user": "Στέλνει ένα μήνυμα στον δοσμένο χρήστη",
"Opens chat with the given user": "Ανοίγει την συνομιλία με τον δοσμένο χρήστη",
"Send a bug report with logs": "Στέλνει μία αναφορά σφάλματος με logs",
"Displays information about a user": "Εμφανίζει πληροφορίες για έναν χρήστη",
"Displays list of commands with usages and descriptions": "Εμφανίζει τη λίστα εντολών με τρόπους χρήσης και περιγραφές",
"Sends the given emote coloured as a rainbow": "Στέλνει το δοσμένο emote χρωματισμένο σαν ουράνιο τόξο",
"Sends the given message coloured as a rainbow": "Στέλνει το δοσμένο μήνυμα χρωματισμένο σαν ουράνιο τόξο",
"Session already verified!": "Η συνεδρία έχει ήδη επιβεβαιωθεί!",
"Unknown (user, session) pair:": "Άγνωστο ζευγάρι (χρήστης, συνεδρία):",
"You cannot modify widgets in this room.": "Δεν μπορείτε να τροποποιήσετε τα widget σε αυτό το δωμάτιο.",
"Please supply a https:// or http:// widget URL": "Παρακαλώ εισάγετε ένα widget URL με https:// ή http://",
"Please supply a widget URL or embed code": "Παρακαλώ εισάγετε ένα widget URL ή ενσωματώστε κώδικα",
"Adds a custom widget by URL to the room": "Προσθέτει ένα προσαρμοσμένο widget μέσω URL στο δωμάτιο",
"Opens the Developer Tools dialog": "Ανοίγει το παράθυρο Εργαλείων για Προγραμματιστές",
"Could not find user in room": "Δεν βρέθηκε ο χρήστης στο δωμάτιο",
"Failed to set topic": "Αποτυχία ορισμού θέματος",
"Double check that your server supports the room version chosen and try again.": "Επανελέγξτε ότι ο διακομιστής σας υποστηρίζει την έκδοση δωματίου που επιλέξατε και προσπαθήστε ξανά.",
"Error upgrading room": "Σφάλμα αναβάθμισης δωματίου",
"Sends a message as html, without interpreting it as markdown": "Αποστέλλει ένα μήνυμα ως html, χωρίς να το ερμηνεύει ως markdown",
"Prepends ( ͡° ͜ʖ ͡°) to a plain-text message": "Προ-εισάγει ( ͡° ͜ʖ ͡°) σε ένα μήνυμα απλού κειμένου",
"Prepends ┬──┬ ( ゜-゜ノ) to a plain-text message": "Προ-εισάγει ┬──┬ ( ゜-゜ノ) σε ένα μήνυμα απλού κειμένου",
"Prepends (╯°□°)╯︵ ┻━┻ to a plain-text message": "Προ-εισάγει (╯°□°)╯︵ ┻━┻ σε ένα μήνυμα απλού κειμένου",
"Go Back": "Πηγαίνετε Πίσω",
"Are you sure you want to cancel entering passphrase?": "Είστε σίγουρος/η ότι θέλετε να ακυρώσετε την εισαγωγή κωδικού;",
"Cancel entering passphrase?": "Ακύρωση εισαγωγής κωδικού;",
"Sign In": "Σύνδεση",
"Create Account": "Δημιουργία Λογαριασμού",
"Use your account or create a new one to continue.": "Χρησιμοποιήστε τον λογαριασμό σας ή δημιουργήστε νέο για να συνεχίσετε.",
"Sign In or Create Account": "Συνδεθείτε ή Δημιουργήστε Λογαριασμό",
"Zimbabwe": "Ζιμπάμπουε",
"Zambia": "Ζαμπία",
"Yemen": "Υεμένη",
"Western Sahara": "Δυτική Σαχάρα",
"Vietnam": "Βιετνάμ",
"Venezuela": "Βενεζουέλα",
"Vatican City": "Πόλη του Βατικανό",
"Uzbekistan": "Ουζμπεκιστάν",
"Uruguay": "Ουρουγουάη",
"United Arab Emirates": "Ηνωμένα Αραβικά Εμιράτα",
"Ukraine": "Ουκρανία",
"Uganda": "Ουγκάντα",
"Tuvalu": "Τουβαλού",
"Turkmenistan": "Τουρκμενιστάν",
"Turkey": "Τουρκία",
"Tunisia": "Τυνησία",
"Trinidad & Tobago": "Τρινιντάντ & Τομπάγκο",
"Togo": "Τογκό",
"Thailand": "Ταϊλάνδη",
"Tanzania": "Τανζανία",
"Tajikistan": "Τατζικιστάν",
"Taiwan": "Ταϊβάν",
"Syria": "Συρία",
"Switzerland": "Ελβετία",
"Sweden": "Σουηδία",
"Sudan": "Σουδάν",
"Sri Lanka": "Σρι Λάνκα",
"Spain": "Ισπανία",
"South Sudan": "Νότιο Σουδάν",
"South Korea": "Νότια Κορέα",
"South Africa": "Νότια Αφρική",
"Somalia": "Σομαλία",
"Solomon Islands": "Νήσοι Σολομώντα",
"Slovenia": "Σλοβενία",
"Slovakia": "Σλοβακία",
"Singapore": "Σινγκαπούρη",
"Sierra Leone": "Σιέρα Λεόνε",
"Seychelles": "Σεϋχέλες",
"Serbia": "Σερβία",
"Senegal": "Σενεγάλη",
"Saudi Arabia": "Σαουδική Αραβία",
"Samoa": "Σαμόα",
"Rwanda": "Ρουάντα",
"Russia": "Ρωσία",
"Romania": "Ρουμανία",
"Qatar": "Κατάρ",
"Puerto Rico": "Πουέρτο Ρίκο",
"Portugal": "Πορτογαλία",
"Poland": "Πολωνία",
"Philippines": "Φιλιπίνες",
"Peru": "Περού",
"Paraguay": "Παραγουάη",
"Papua New Guinea": "Παπούα Νέα Γουινέα",
"Panama": "Παναμάς",
"Palestine": "Παλεστίνη",
"Palau": "Παλάο",
"Pakistan": "Πακιστάν",
"Oman": "Ομάν",
"Norway": "Νορβηγία",
"North Korea": "Βόρεια Κορέα",
"Nigeria": "Νιγηρία",
"Niger": "Νίγηρας",
"Nicaragua": "Νικαράγουα",
"New Zealand": "Νέα Ζηλανδία",
"Netherlands": "Ολλανδία",
"Nepal": "Νεπάλ",
"Namibia": "Ναμίμπια",
"Mozambique": "Μοζαμβίκη",
"Morocco": "Μαρόκο",
"Montenegro": "Μαυροβούνιο",
"Mongolia": "Μονγκολία",
"Monaco": "Μονακό",
"Moldova": "Μολδαβία",
"Micronesia": "Μικρονησία",
"Mexico": "Μεξικό",
"Mauritania": "Μαυριτανία",
"Martinique": "Μαρτινίκη",
"Marshall Islands": "Νήσοι Μάρσαλ",
"Malta": "Μάλτα",
"Mali": "Μάλι",
"Maldives": "Μαλδίβες",
"Malaysia": "Μαλαισία",
"Madagascar": "Μαδαγασκάρη",
"Macedonia": "Μακεδονία",
"Macau": "Μακάο",
"Luxembourg": "Λουξεμβούργο",
"Lithuania": "Λιθουανία",
"Liechtenstein": "Λιχτενστάιν",
"Libya": "Λιβύη",
"Lebanon": "Λίβανος",
"Latvia": "Λετονία",
"Laos": "Λάος",
"Kyrgyzstan": "Κιργιστάν",
"Kuwait": "Κουβέιτ",
"Kosovo": "Κόσοβο",
"Kiribati": "Κιριμπάτι",
"Kenya": "Κένυα",
"Kazakhstan": "Καζακστάν",
"Jordan": "Ιορδανία",
"Jersey": "Τζέρσεϋ",
"Japan": "Ιαπωνία",
"Jamaica": "Τζαμάικα",
"Italy": "Ιταλία",
"Israel": "Ισραήλ",
"Ireland": "Ιρλανδία",
"Iraq": "Ιράκ",
"Iran": "Ιράν",
"Indonesia": "Ινδονησία",
"India": "Ινδία",
"Iceland": "Ισλανδία",
"Hungary": "Ουγγαρία",
"Hong Kong": "Χονγκ Κονγκ",
"Honduras": "Ονδούρα",
"Haiti": "Χαϊτί",
"Guinea": "Γουινέα",
"Guatemala": "Γουατεμάλα",
"Guadeloupe": "Γουαδελούπη",
"Grenada": "Γρενάδα",
"Greenland": "Γρινλανδία",
"Greece": "Ελλάδα",
"Gibraltar": "Γιβραλτάρ",
"Ghana": "Γκάνα",
"Germany": "Γερμανία",
"Georgia": "Γεωργία",
"French Polynesia": "Γαλλική Πολυνησία",
"French Guiana": "Γαλλική Γουιάνα",
"France": "Γαλλία",
"Finland": "Φινλανδία",
"Fiji": "Φίτζι",
"Faroe Islands": "Νήσοι Φαρόε",
"Ethiopia": "Αιθιοπία",
"Estonia": "Εσθονία",
"Eritrea": "Ερυθραία",
"El Salvador": "Ελ Σαλβαδόρ",
"Egypt": "Αίγυπτος",
"Ecuador": "Ισημερινός",
"Dominican Republic": "Δομινικανή Δημοκρατία",
"Djibouti": "Τζιμπουτί",
"Denmark": "Δανία",
"Côte dIvoire": "Ακτή Ελεφαντοστού",
"Czech Republic": "Δημοκρατία της Τσεχίας",
"Cyprus": "Κύπρος",
"Cuba": "Κούβα",
"Croatia": "Κροατία",
"Costa Rica": "Κόστα Ρίκα",
"Colombia": "Κολομβία",
"China": "Κίνα",
"Chile": "Χιλή",
"Chad": "Τσαντ",
"Central African Republic": "Δημοκρατία της Κεντρικής Αφρικής",
"Cayman Islands": "Νήσοι Κέιμαν",
"Canada": "Καναδάς",
"Cameroon": "Καμερούν",
"Burundi": "Μπουρούντι",
"Burkina Faso": "Μπουρκίνα Φάσο",
"Bulgaria": "Βουλγαρία",
"Brazil": "Βραζιλία",
"Botswana": "Μποτσουάνα",
"Bosnia": "Βοσνία",
"Bolivia": "Βολιβία",
"Bhutan": "Μπουτάν",
"Belgium": "Βέλγιο",
"Belarus": "Λευκορωσία",
"Barbados": "Μπαρμπάντος",
"Bangladesh": "Μπαγκλαντές",
"Bahrain": "Μπαχρέιν",
"Bahamas": "Μπαχάμες",
"Azerbaijan": "Αζερμπαϊτζάν",
"Austria": "Αυστρία",
"Australia": "Αυστραλία",
"Armenia": "Αρμενία",
"Argentina": "Αργεντινή",
"Antarctica": "Ανταρκτική",
"Angola": "Ανγκόλα",
"Andorra": "Ανδόρα",
"American Samoa": "Αμερικανική Σαμόα",
"Algeria": "Αλγερία",
"Albania": "Αλβανία",
"Åland Islands": "Νήσοι Åland",
"Afghanistan": "Αφγανιστάν",
"United States": "Ηνωμένες Πολιτείες",
"United Kingdom": "Ηνωμένο Βασίλειο",
"Your homeserver rejected your log in attempt. This could be due to things just taking too long. Please try again. If this continues, please contact your homeserver administrator.": "Ο διακομιστής σας απέρριψε την προσπάθεια σύνδεσης. Αυτό μπορεί να συνέβη απλά λόγω καθυστέρησης. Παρακαλώ προσπαθήστε ξανά. Αν αυτό συνεχιστεί, παρακαλώ επικοινωνήστε με τον διαχειριστή του διακομιστή σας.",
"Your homeserver was unreachable and was not able to log you in. Please try again. If this continues, please contact your homeserver administrator.": "Δεν μπορέσαμε να επικοινωνήσουμε με τον διακομιστή και δεν σας έχει συνδέσει. Παρακαλώ προσπαθήστε ξανά. Αν αυτό συνεχιστεί, παρακαλώ επικοινωνήστε με τον διαχειριστή του διακομιστή σας.",
"Try again": "Προσπαθήστε ξανά",
"We asked the browser to remember which homeserver you use to let you sign in, but unfortunately your browser has forgotten it. Go to the sign in page and try again.": "Ζητήσαμε από το πρόγραμμα περιήγησης να θυμάται τον διακομιστή που χρησιμοποιείτε για να συνδέεστε, αλλά το πρόγραμμα περιήγησης δεν το έχει αποθηκεύσει. Πηγαίνετε στην σελίδα σύνδεσεις για να προσπαθήσετε ξανά.",
"We couldn't log you in": "Δεν μπορέσαμε να σας συνδέσουμε",
"Room name or address": "Όνομα ή διεύθυνση δωματίου",
"This will end the conference for everyone. Continue?": "Αυτό θα σταματήσει την διάσκεψη για όλους. Συνέχεια;",
"End conference": "Τέλος διάσκεψης",
"You've reached the maximum number of simultaneous calls.": "Έχετε φτάσει τον μέγιστο αριθμό ταυτοχρόνων κλήσεων.",
"Too Many Calls": "Πάρα Πολλές Κλήσεις",
"No other application is using the webcam": "Η κάμερα δεν χρησιμοποιείται από καμία άλλη εφαρμογή",
"Permission is granted to use the webcam": "Έχετε παραχωρήσει την άδεια χρήσης της κάμερας",
"A microphone and webcam are plugged in and set up correctly": "Ένα μικρόφωνο και μια κάμερα έχουν συνδεθεί και εγκατασταθεί σωστά",
"Call failed because webcam or microphone could not be accessed. Check that:": "Η κλήση απέτυχε επειδή δεν μπόρεσε να βρεθεί κάμερα ή μικρόφωνο. Ελέγξτε ότι:",
"Unable to access webcam / microphone": "Αδυναμία πρόσβασης κάμερας / μικροφώνου",
"Call failed because microphone could not be accessed. Check that a microphone is plugged in and set up correctly.": "Η κλήση απέτυχε επειδή δεν μπόρεσε να βρεθεί μικρόφωνο. Ελέγξτε ότι έχετε συνδέσει ένα μικρόφωνο και έχει εγκατασταθεί σωστά.",
"Unable to access microphone": "Αδυναμία πρόσβασης μικροφώνου",
"The call was answered on another device.": "Η κλήση απαντήθηκε σε μια άλλη συσκευή.",
"Answered Elsewhere": "Απαντήθηκε αλλού",
"The call could not be established": "Η κλήση δεν μπόρεσε να πραγματοποιηθεί",
"The other party declined the call.": "Η άλλη πλευρά απέρριψε την κλήση.",
"Call Declined": "Η κλήση απορρίφθηκε",
"Your user agent": "Η συσκευή σας",
"Confirm adding phone number": "Επιβεβαιώστε την προσθήκη του τηλεφωνικού αριθμού",
"Click the button below to confirm adding this email address.": "Πιέστε το κουμπί από κάτω για να επιβεβαιώσετε την προσθήκη της διεύθυνσης ηλ. ταχυδρομείου.",
"Confirm adding email": "Επιβεβαιώστε την προσθήκη διεύθυνσης ηλ. ταχυδρομείου"
}

View file

@ -118,6 +118,11 @@
"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.": "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.",
"Only continue if you trust the owner of the server.": "Only continue if you trust the owner of the server.",
"Trust": "Trust",
"We couldn't log you in": "We couldn't log you in",
"We asked the browser to remember which homeserver you use to let you sign in, but unfortunately your browser has forgotten it. Go to the sign in page and try again.": "We asked the browser to remember which homeserver you use to let you sign in, but unfortunately your browser has forgotten it. Go to the sign in page and try again.",
"Try again": "Try again",
"Your homeserver was unreachable and was not able to log you in. Please try again. If this continues, please contact your homeserver administrator.": "Your homeserver was unreachable and was not able to log you in. Please try again. If this continues, please contact your homeserver administrator.",
"Your homeserver rejected your log in attempt. This could be due to things just taking too long. Please try again. If this continues, please contact your homeserver administrator.": "Your homeserver rejected your log in attempt. This could be due to things just taking too long. Please try again. If this continues, please contact your homeserver administrator.",
"%(name)s is requesting verification": "%(name)s is requesting verification",
"%(brand)s does not have permission to send you notifications - please check your browser settings": "%(brand)s does not have permission to send you notifications - please check your browser settings",
"%(brand)s was not given permission to send notifications - please try again": "%(brand)s was not given permission to send notifications - please try again",
@ -474,6 +479,8 @@
"Sends a message to the given user": "Sends a message to the given user",
"Places the call in the current room on hold": "Places the call in the current room on hold",
"Takes the call in the current room off hold": "Takes the call in the current room off hold",
"Converts the room to a DM": "Converts the room to a DM",
"Converts the DM to a room": "Converts the DM to a room",
"Displays action": "Displays action",
"Reason": "Reason",
"%(targetName)s accepted the invitation for %(displayName)s.": "%(targetName)s accepted the invitation for %(displayName)s.",
@ -726,6 +733,9 @@
"Notifications": "Notifications",
"Enable desktop notifications": "Enable desktop notifications",
"Enable": "Enable",
"Use app for a better experience": "Use app for a better experience",
"Element Web is experimental on mobile. For a better experience and the latest features, use our free native app.": "Element Web is experimental on mobile. For a better experience and the latest features, use our free native app.",
"Use app": "Use app",
"Your homeserver has exceeded its user limit.": "Your homeserver has exceeded its user limit.",
"Your homeserver has exceeded one of its resource limits.": "Your homeserver has exceeded one of its resource limits.",
"Contact your <a>server admin</a>.": "Contact your <a>server admin</a>.",
@ -785,6 +795,7 @@
"Font size": "Font size",
"Use custom size": "Use custom size",
"Enable Emoji suggestions while typing": "Enable Emoji suggestions while typing",
"Show stickers button": "Show stickers button",
"Use a more compact Modern layout": "Use a more compact Modern layout",
"Show a placeholder for removed messages": "Show a placeholder for removed messages",
"Show join/leave messages (invites/kicks/bans unaffected)": "Show join/leave messages (invites/kicks/bans unaffected)",
@ -795,10 +806,14 @@
"Always show message timestamps": "Always show message timestamps",
"Autoplay GIFs and videos": "Autoplay GIFs and videos",
"Enable automatic language detection for syntax highlighting": "Enable automatic language detection for syntax highlighting",
"Expand code blocks by default": "Expand code blocks by default",
"Show line numbers in code blocks": "Show line numbers in code blocks",
"Show avatars in user and room mentions": "Show avatars in user and room mentions",
"Enable big emoji in chat": "Enable big emoji in chat",
"Send typing notifications": "Send typing notifications",
"Show typing notifications": "Show typing notifications",
"Use Command + F to search": "Use Command + F to search",
"Use Ctrl + F to search": "Use Ctrl + F to search",
"Use Command + Enter to send a message": "Use Command + Enter to send a message",
"Use Ctrl + Enter to send a message": "Use Ctrl + Enter to send a message",
"Automatically replace plain text Emoji": "Automatically replace plain text Emoji",
@ -829,8 +844,7 @@
"How fast should messages be downloaded.": "How fast should messages be downloaded.",
"Manually verify all remote sessions": "Manually verify all remote sessions",
"IRC display name width": "IRC display name width",
"Enable experimental, compact IRC style layout": "Enable experimental, compact IRC style layout",
"Show chat effects": "Show chat effects",
"Show chat effects (animations when receiving e.g. confetti)": "Show chat effects (animations when receiving e.g. confetti)",
"Collecting app version information": "Collecting app version information",
"Collecting logs": "Collecting logs",
"Uploading logs": "Uploading logs",
@ -1149,12 +1163,10 @@
"Custom theme URL": "Custom theme URL",
"Add theme": "Add theme",
"Theme": "Theme",
"Message layout": "Message layout",
"Compact": "Compact",
"Modern": "Modern",
"Hide advanced": "Hide advanced",
"Show advanced": "Show advanced",
"Set the name of a font installed on your system & %(brand)s will attempt to use it.": "Set the name of a font installed on your system & %(brand)s will attempt to use it.",
"Enable experimental, compact IRC style layout": "Enable experimental, compact IRC style layout",
"Customise your appearance": "Customise your appearance",
"Appearance Settings only affect this %(brand)s session.": "Appearance Settings only affect this %(brand)s session.",
"Flair": "Flair",
@ -1450,6 +1462,7 @@
"Seen by %(displayName)s (%(userName)s) at %(dateTime)s": "Seen by %(displayName)s (%(userName)s) at %(dateTime)s",
"Replying": "Replying",
"Room %(name)s": "Room %(name)s",
"Recently visited rooms": "Recently visited rooms",
"No recently visited rooms": "No recently visited rooms",
"No rooms to show": "No rooms to show",
"Unnamed room": "Unnamed room",
@ -1839,6 +1852,9 @@
"Use the <a>Desktop app</a> to search encrypted messages": "Use the <a>Desktop app</a> to search encrypted messages",
"This version of %(brand)s does not support viewing some encrypted files": "This version of %(brand)s does not support viewing some encrypted files",
"This version of %(brand)s does not support searching encrypted messages": "This version of %(brand)s does not support searching encrypted messages",
"Share your screen": "Share your screen",
"Screens": "Screens",
"Windows": "Windows",
"Join": "Join",
"No results": "No results",
"Please <newIssueLink>create a new issue</newIssueLink> on GitHub so that we can investigate this bug.": "Please <newIssueLink>create a new issue</newIssueLink> on GitHub so that we can investigate this bug.",
@ -2072,6 +2088,19 @@
"Please view <existingIssuesLink>existing bugs on Github</existingIssuesLink> first. No match? <newIssueLink>Start a new one</newIssueLink>.": "Please view <existingIssuesLink>existing bugs on Github</existingIssuesLink> first. No match? <newIssueLink>Start a new one</newIssueLink>.",
"PRO TIP: If you start a bug, please submit <debugLogsLink>debug logs</debugLogsLink> to help us track down the problem.": "PRO TIP: If you start a bug, please submit <debugLogsLink>debug logs</debugLogsLink> to help us track down the problem.",
"Send feedback": "Send feedback",
"Confirm abort of host creation": "Confirm abort of host creation",
"Are you sure you wish to abort creation of the host? The process cannot be continued.": "Are you sure you wish to abort creation of the host? The process cannot be continued.",
"Abort": "Abort",
"Failed to connect to your homeserver. Please close this dialog and try again.": "Failed to connect to your homeserver. Please close this dialog and try again.",
"Continuing temporarily allows the %(hostSignupBrand)s setup process to access your account to fetch verified email addresses. This data is not stored.": "Continuing temporarily allows the %(hostSignupBrand)s setup process to access your account to fetch verified email addresses. This data is not stored.",
"Learn more in our <privacyPolicyLink />, <termsOfServiceLink /> and <cookiePolicyLink />.": "Learn more in our <privacyPolicyLink />, <termsOfServiceLink /> and <cookiePolicyLink />.",
"Cookie Policy": "Cookie Policy",
"Privacy Policy": "Privacy Policy",
"Terms of Service": "Terms of Service",
"You should know": "You should know",
"%(hostSignupBrand)s Setup": "%(hostSignupBrand)s Setup",
"Maximize dialog": "Maximize dialog",
"Minimize dialog": "Minimize dialog",
"Verify this user to mark them as trusted. Trusting users gives you extra peace of mind when using end-to-end encrypted messages.": "Verify this user to mark them as trusted. Trusting users gives you extra peace of mind when using end-to-end encrypted messages.",
"Verifying this user will mark their session as trusted, and also mark your session as trusted to them.": "Verifying this user will mark their session as trusted, and also mark your session as trusted to them.",
"Verify this device to mark it as trusted. Trusting this device gives you and other users extra peace of mind when using end-to-end encrypted messages.": "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.",
@ -2222,7 +2251,6 @@
"Find others by phone or email": "Find others by phone or email",
"Be found by phone or email": "Be found by phone or email",
"Use bots, bridges, widgets and sticker packs": "Use bots, bridges, widgets and sticker packs",
"Terms of Service": "Terms of Service",
"To continue you need to accept the terms of this service.": "To continue you need to accept the terms of this service.",
"Service": "Service",
"Summary": "Summary",
@ -2245,10 +2273,9 @@
"Approve": "Approve",
"Decline All": "Decline All",
"Remember my selection for this widget": "Remember my selection for this widget",
"A widget would like to verify your identity": "A widget would like to verify your identity",
"A widget located at %(widgetUrl)s would like to verify your identity. By allowing this, the widget will be able to verify your user ID, but not perform actions as you.": "A widget located at %(widgetUrl)s would like to verify your identity. By allowing this, the widget will be able to verify your user ID, but not perform actions as you.",
"Allow": "Allow",
"Deny": "Deny",
"Allow this widget to verify your identity": "Allow this widget to verify your identity",
"The widget will verify your user ID, but won't be able to perform actions for you:": "The widget will verify your user ID, but won't be able to perform actions for you:",
"Remember this": "Remember this",
"Wrong file type": "Wrong file type",
"Looks good!": "Looks good!",
"Wrong Security Key": "Wrong Security Key",
@ -2337,6 +2364,7 @@
"Please enter the code it contains:": "Please enter the code it contains:",
"Code": "Code",
"Submit": "Submit",
"Something went wrong in confirming your identity. Cancel and try again.": "Something went wrong in confirming your identity. Cancel and try again.",
"Start authentication": "Start authentication",
"Enter password": "Enter password",
"Nice, strong password!": "Nice, strong password!",
@ -2422,6 +2450,7 @@
"Send a Direct Message": "Send a Direct Message",
"Explore Public Rooms": "Explore Public Rooms",
"Create a Group Chat": "Create a Group Chat",
"Upgrade to %(hostSignupBrand)s": "Upgrade to %(hostSignupBrand)s",
"Explore rooms": "Explore rooms",
"Failed to reject invitation": "Failed to reject invitation",
"Cannot create rooms in this community": "Cannot create rooms in this community",
@ -2710,6 +2739,7 @@
"Dismiss read marker and jump to bottom": "Dismiss read marker and jump to bottom",
"Jump to oldest unread message": "Jump to oldest unread message",
"Upload a file": "Upload a file",
"Search (must be enabled)": "Search (must be enabled)",
"Jump to room search": "Jump to room search",
"Navigate up/down in the room list": "Navigate up/down in the room list",
"Select room from the room list": "Select room from the room list",

File diff suppressed because it is too large Load diff

View file

@ -2991,5 +2991,67 @@
"Start a Conversation": "Alusta vestlust",
"Dial pad": "Numbriklahvistik",
"There was an error looking up the phone number": "Telefoninumbri otsimisel tekkis viga",
"Unable to look up phone number": "Telefoninumbrit ei õnnestu leida"
"Unable to look up phone number": "Telefoninumbrit ei õnnestu leida",
"Channel: <channelLink/>": "Kanal: <channelLink/>",
"Workspace: <networkLink/>": "Tööruum: <networkLink/>",
"Change which room, message, or user you're viewing": "Muuda jututuba, sõnumit või kasutajat, mida hetkel vaatad",
"Use Security Key": "Kasuta turvavõtit",
"Use Security Key or Phrase": "Kasuta turvavõtit või turvafraasi",
"If you've forgotten your Security Key you can <button>set up new recovery options</button>": "Kui sa oled unustanud oma turvavõtme, siis sa võid <button>seadistada uued taastamise võimalused</button>",
"Access your secure message history and set up secure messaging by entering your Security Key.": "Sisestades turvavõtme pääsed ligi oma turvatud sõnumitele ning sätid tööle krüptitud sõnumivahetuse.",
"Not a valid Security Key": "Vigane turvavõti",
"This looks like a valid Security Key!": "See tundub olema õige turvavõti!",
"Enter Security Key": "Sisesta turvavõti",
"If you've forgotten your Security Phrase you can <button1>use your Security Key</button1> or <button2>set up new recovery options</button2>": "Kui sa oled unustanud turvafraasi, siis sa saad <button1>kasutada oma turvavõtit</button1> või <button2>seadistada uued taastamise võimalused</button2>",
"Access your secure message history and set up secure messaging by entering your Security Phrase.": "Sisestades turvafraasi, saad ligipääsu oma turvatud sõnumitele ning sätid toimima krüptitud sõnumivahetuse.",
"Enter Security Phrase": "Sisesta turvafraas",
"Backup could not be decrypted with this Security Phrase: please verify that you entered the correct Security Phrase.": "Selle turvafraasiga ei õnnestunud varundust dekrüptida: palun kontrolli, kas sa kasutad õiget turvafraasi.",
"Incorrect Security Phrase": "Vigane turvafraas",
"Backup could not be decrypted with this Security Key: please verify that you entered the correct Security Key.": "Selle turvavõtmega ei õnnestunud varundust dekrüptida: palun kontrolli, kas sa kasutad õiget turvavõtit.",
"Security Key mismatch": "Turvavõtmed ei klapi",
"Unable to access secret storage. Please verify that you entered the correct Security Phrase.": "Ei õnnestu saada ligipääsu turvahoidlale. Palun kontrolli, et sa oleksid sisestanud õige turvafraasi.",
"Invalid Security Key": "Vigane turvavõti",
"Wrong Security Key": "Vale turvavõti",
"We recommend you change your password and Security Key in Settings immediately": "Me soovitame, et vaheta Seadistuste lehelt koheselt oma salasõna ja turvavõti",
"Back up your encryption keys with your account data in case you lose access to your sessions. Your keys will be secured with a unique Security Key.": "Selleks puhuks, kui sa kaotad ligipääsu kõikidele oma sessioonidele, tee varukoopia oma krüptovõtmetest ja kasutajakonto seadistustest. Unikaalse turvavõtmega tagad selle, et sinu varukoopia on kaitstud.",
"This session has detected that your Security Phrase and key for Secure Messages have been removed.": "Oleme tuvastanud, et selles sessioonis ei leidu turvafraasi ega krüptitud sõnumite turvavõtit.",
"A new Security Phrase and key for Secure Messages have been detected.": "Tuvastasin krüptitud sõnumite uue turvafraasi ja turvavõtme.",
"Make a copy of your Security Key": "Tee oma turvavõtmest koopia",
"Confirm your Security Phrase": "Kinnita oma turvafraasi",
"Secure your backup with a Security Phrase": "Krüpti oma varukoopia turvafraasiga",
"Your Security Key is in your <b>Downloads</b> folder.": "Sinu turvavõti asub sinu kaustas <b>Allalaadimised</b>.",
"Your Security Key has been <b>copied to your clipboard</b>, paste it to:": "Sinu turvavõti on <b>kopeeritud lõikelauale</b>, aseta ta:",
"Your Security Key": "Sinu turvavõti",
"Your Security Key is a safety net - you can use it to restore access to your encrypted messages if you forget your Security Phrase.": "Sinu turvavõti toimib julgestusena - juhul, kui sa unustad turvafraasi, siis sa saad seda kasutada taastamaks ligipääsu krüptitud sõnumitele.",
"Repeat your Security Phrase...": "Korda oma turvafraasi...",
"Please enter your Security Phrase a second time to confirm.": "Kinnitamiseks palun sisesta turvafraas teist korda.",
"Set up with a Security Key": "Võta kasutusele turvavõti",
"Great! This Security Phrase looks strong enough.": "Suurepärane! Turvafraas on piisavalt kange.",
"We'll store an encrypted copy of your keys on our server. Secure your backup with a Security Phrase.": "Me salvestame krüptitud koopia sinu krüptovõtmetest oma serveris. Selle koopia krüptimisel kasutame sinu turvafraasi.",
"Set my room layout for everyone": "Kasuta minu jututoa paigutust kõigi jaoks",
"%(senderName)s has updated the widget layout": "%(senderName)s on uuendanud vidinate paigutust",
"Search (must be enabled)": "Otsing (peab olema lubatud)",
"Remember this": "Jäta see meelde",
"The widget will verify your user ID, but won't be able to perform actions for you:": "See vidin verifitseerib sinu kasutajatunnuse, kuid ta ei saa sinu nimel toiminguid teha:",
"Allow this widget to verify your identity": "Luba sellel vidinal sinu isikut verifitseerida",
"Use Ctrl + F to search": "Otsimiseks vajuta Ctrl + F klahve",
"Use Command + F to search": "Otsimiseks vajuta Cmd + F klahve",
"Converts the DM to a room": "Muuda otsevestlus jututoaks",
"Converts the room to a DM": "Muuda jututuba otsevestluseks",
"Use app for a better experience": "Rakendusega saad Matrix'is suhelda parimal viisil",
"Something went wrong in confirming your identity. Cancel and try again.": "Midagi läks sinu isiku tuvastamisel viltu. Tühista viimane toiming ja proovi uuesti.",
"Use app": "Kasuta rakendust",
"Element Web is experimental on mobile. For a better experience and the latest features, use our free native app.": "Brauseripõhine Element toimib mobiiltelefonis mööndustega. Meie rakendusega saad parema kasutajakogemuse ja uusimad funktsionaalsused.",
"Your homeserver rejected your log in attempt. This could be due to things just taking too long. Please try again. If this continues, please contact your homeserver administrator.": "Sinu koduserver ei võimaldanud sul sisse logida. Võib-olla juhtus nii, kuna sisselogimine kestis liiga kaua. Palun proovi mõne hetke pärast uuesti. Kui olukord ikkagi ei muutu, siis palun küsi lisateavet oma koduserveri haldajalt.",
"Your homeserver was unreachable and was not able to log you in. Please try again. If this continues, please contact your homeserver administrator.": "Sinu koduserver ei olnud kättesaadav ning me ei saanud sind sisse logida. Palun proovi mõne hetke pärast uuesti. Kui olukord ikkagi ei muutu, siis palun küsi lisateavet oma koduserveri haldajalt.",
"Try again": "Proovi uuesti",
"We asked the browser to remember which homeserver you use to let you sign in, but unfortunately your browser has forgotten it. Go to the sign in page and try again.": "Me sättisime nii, et sinu veebibrauser jätaks järgmiseks sisselogimiseks meelde sinu koduserveri, kuid kahjuks on ta selle unustanud. Palun mine sisselogimise lehele ja proovi uuesti.",
"We couldn't log you in": "Meil ei õnnestunud sind sisse logida",
"Show stickers button": "Näita kleepsude nuppu",
"Windows": "Aknad",
"Screens": "Ekraanid",
"Share your screen": "Jaga oma ekraani",
"Show line numbers in code blocks": "Näita koodiblokkides reanumbreid",
"Expand code blocks by default": "Vaikimisi kuva koodiblokid tervikuna",
"Recently visited rooms": "Hiljuti külastatud jututoad"
}

View file

@ -26,9 +26,9 @@
"Admin": "Ylläpitäjä",
"Allow": "Salli",
"No Microphones detected": "Mikrofonia ei löytynyt",
"No Webcams detected": "Webkameraa ei löytynyt",
"No Webcams detected": "Kameroita ei löytynyt",
"No media permissions": "Ei mediaoikeuksia",
"You may need to manually permit %(brand)s to access your microphone/webcam": "Voit joutua antamaan %(brand)sille luvan mikrofonin/webkameran käyttöön",
"You may need to manually permit %(brand)s to access your microphone/webcam": "Voit joutua antamaan %(brand)sille luvan mikrofonin/kameran käyttöön",
"Default Device": "Oletuslaite",
"Microphone": "Mikrofoni",
"Camera": "Kamera",
@ -103,7 +103,7 @@
"Failed to send request.": "Pyynnön lähettäminen epäonnistui.",
"Failed to set display name": "Näyttönimen asettaminen epäonnistui",
"Failed to unban": "Porttikiellon poistaminen epäonnistui",
"Failed to upload profile picture!": "Profiilikuvan lataaminen epäonnistui!",
"Failed to upload profile picture!": "Profiilikuvan lähetys epäonnistui!",
"Failed to verify email address: make sure you clicked the link in the email": "Sähköpostin vahvistus epäonnistui: varmista, että klikkasit sähköpostissa olevaa linkkiä",
"Failure to create room": "Huoneen luominen epäonnistui",
"Favourites": "Suosikit",
@ -136,7 +136,7 @@
"Logout": "Kirjaudu ulos",
"Low priority": "Matala prioriteetti",
"Manage Integrations": "Hallinnoi integraatioita",
"Moderator": "Moderaattori",
"Moderator": "Valvoja",
"Name": "Nimi",
"New passwords don't match": "Uudet salasanat eivät täsmää",
"New passwords must match each other.": "Uusien salasanojen on vastattava toisiaan.",
@ -186,8 +186,8 @@
"unknown caller": "tuntematon soittaja",
"Unmute": "Poista mykistys",
"Unnamed Room": "Nimeämätön huone",
"Uploading %(filename)s and %(count)s others|zero": "Ladataan %(filename)s",
"Uploading %(filename)s and %(count)s others|one": "Ladataan %(filename)s ja %(count)s muuta",
"Uploading %(filename)s and %(count)s others|zero": "Lähetetään %(filename)s",
"Uploading %(filename)s and %(count)s others|one": "Lähetetään %(filename)s ja %(count)s muuta",
"%(senderDisplayName)s changed the room name to %(roomName)s.": "%(senderDisplayName)s vaihtoi huoneen nimeksi %(roomName)s.",
"Enable automatic language detection for syntax highlighting": "Ota automaattinen kielentunnistus käyttöön syntaksikorostusta varten",
"%(senderName)s ended the call.": "%(senderName)s lopetti puhelun.",
@ -302,10 +302,10 @@
"%(senderName)s unbanned %(targetName)s.": "%(senderName)s poisti porttikiellon käyttäjältä %(targetName)s.",
"Unable to capture screen": "Ruudun kaappaus epäonnistui",
"Unable to enable Notifications": "Ilmoitusten käyttöönotto epäonnistui",
"Uploading %(filename)s and %(count)s others|other": "Ladataan %(filename)s ja %(count)s muuta",
"Upload Failed": "Lataus epäonnistui",
"Upload file": "Lataa tiedostoja",
"Upload new:": "Lataa uusi:",
"Uploading %(filename)s and %(count)s others|other": "Lähetetään %(filename)s ja %(count)s muuta",
"Upload Failed": "Lähetys epäonnistui",
"Upload file": "Lähetä tiedostoja",
"Upload new:": "Lähetä uusi:",
"Usage": "Käyttö",
"%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s vaihtoi aiheeksi \"%(topic)s\".",
"Define the power level of a user": "Määritä käyttäjän oikeustaso",
@ -325,7 +325,7 @@
"(could not connect media)": "(mediaa ei voitu yhdistää)",
"%(senderName)s withdrew %(targetName)s's invitation.": "%(senderName)s veti takaisin käyttäjän %(targetName)s kutsun.",
"You seem to be in a call, are you sure you want to quit?": "Sinulla näyttää olevan puhelu kesken. Haluatko varmasti lopettaa?",
"You seem to be uploading files, are you sure you want to quit?": "Näytät lataavan tiedostoja. Oletko varma että haluat lopettaa?",
"You seem to be uploading files, are you sure you want to quit?": "Näytät lähettävän tiedostoja. Oletko varma että haluat lopettaa?",
"Jan": "tammi",
"Feb": "helmi",
"Mar": "maalis",
@ -348,7 +348,7 @@
"Error decrypting video": "Virhe purettaessa videon salausta",
"Add an Integration": "Lisää integraatio",
"URL Previews": "URL-esikatselut",
"Drop file here to upload": "Pudota tiedosto tähän ladataksesi sen palvelimelle",
"Drop file here to upload": "Pudota tiedosto tähän lähettääksesi sen palvelimelle",
" (unsupported)": " (ei tuettu)",
"Check for update": "Tarkista päivitykset",
"Username available": "Käyttäjätunnus saatavilla",
@ -364,7 +364,7 @@
"Skip": "Ohita",
"Example": "Esimerkki",
"Create": "Luo",
"Failed to upload image": "Kuvan lataaminen epäonnistui",
"Failed to upload image": "Kuvan lähetys epäonnistui",
"Add a widget": "Lisää sovelma",
"Cannot add any more widgets": "Enempää sovelmia ei voida lisätä",
"Delete widget": "Poista sovelma",
@ -375,7 +375,7 @@
"The exported file will allow anyone who can read it to decrypt any encrypted messages that you can see, so you should be careful to keep it secure. To help with this, you should enter a passphrase below, which will be used to encrypt the exported data. It will only be possible to import the data by using the same passphrase.": "Viedyn tiedoston avulla kuka tahansa pystyy purkamaan kaikki salatut viestit jotka voit nähdä, joten sinun täytyy säilyttää sitä huolellisesti. Helpottaaksesi tätä, syötä alle salasana jonka avulla viedyt tiedot salataan. Voit myöhemmin tuoda tiedot ainoastaan samalla salasanalla.",
"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.": "Tämä prosessi mahdollistaa aiemmin tallennettujen salausavainten tuominen toiseen Matrix-asiakasohjelmaan. Tämän jälkeen voit purkaa kaikki salatut viestit jotka toinen asiakasohjelma pystyisi purkamaan.",
"Who would you like to add to this community?": "Kenet haluaisit lisätä tähän yhteisöön?",
"Warning: any person you add to a community will be publicly visible to anyone who knows the community ID": "Varoitus: henkilöt, jotka lisäät yhteisöön, näkyvät kaikille jotka tietävät yhteisön tunnisteen",
"Warning: any person you add to a community will be publicly visible to anyone who knows the community ID": "Varoitus: kaikki yhteisöön lisätyt henkilöt näkyvät kaikille, jotka tietävät yhteisön tunnuksen",
"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?",
@ -405,7 +405,7 @@
"Enable URL previews by default for participants in this room": "Ota linkkien esikatselu käyttöön kaikille huoneen jäsenille",
"%(senderName)s sent an image": "%(senderName)s lähetti kuvan",
"%(senderName)s sent a video": "%(senderName)s lähetti videon",
"%(senderName)s uploaded a file": "%(senderName)s latasi tiedoston",
"%(senderName)s uploaded a file": "%(senderName)s lähetti tiedoston",
"Disinvite this user?": "Peru tämän käyttäjän kutsu?",
"Kick this user?": "Poista tämä käyttäjä?",
"Unban this user?": "Poista tämän käyttäjän porttikielto?",
@ -425,16 +425,16 @@
"World readable": "Täysin julkinen",
"Guests can join": "Vierailijat voivat liittyä",
"No rooms to show": "Ei näytettäviä huoneita",
"Upload avatar": "Lataa profiilikuva",
"Upload avatar": "Lähetä profiilikuva",
"Community Invites": "Yhteisökutsut",
"Banned by %(displayName)s": "%(displayName)s antoi porttikiellon",
"Privileged Users": "Etuoikeutetut käyttäjät",
"Members only (since the point in time of selecting this option)": "Vain jäsenet (tämän valinnan tekemisestä lähtien)",
"Members only (since they were invited)": "Vain jäsenet (kutsumisestaan lähtien)",
"Members only (since they joined)": "Vain jäsenet (liittymisestään lähtien)",
"Invalid community ID": "Virheellinen yhteisötunniste",
"'%(groupId)s' is not a valid community ID": "'%(groupId)s' on virheellinen yhteisötunniste",
"New community ID (e.g. +foo:%(localDomain)s)": "Uusi yhteisötunniste (esim. +foo:%(localDomain)s)",
"Invalid community ID": "Virheellinen yhteisön tunnus",
"'%(groupId)s' is not a valid community ID": "'%(groupId)s' on virheellinen yhteisön tunnus",
"New community ID (e.g. +foo:%(localDomain)s)": "Uusi yhteisön tunnus (esim. +foo:%(localDomain)s)",
"%(senderDisplayName)s changed the avatar for %(roomName)s": "%(senderDisplayName)s vaihtoi huoneen %(roomName)s kuvan",
"%(senderDisplayName)s removed the room avatar.": "%(senderDisplayName)s poisti huoneen kuvan.",
"%(senderDisplayName)s changed the room avatar to <img/>": "%(senderDisplayName)s vaihtoi huoneen kuvaksi <img/>",
@ -467,11 +467,11 @@
"Try using one of the following valid address types: %(validTypesList)s.": "Kokeile käyttää yhtä näistä kelvollisista osoitetyypeistä: %(validTypesList)s.",
"You have entered an invalid address.": "Olet syöttänyt virheellisen sähköpostiosoitteen.",
"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.": "Oletko varma että haluat poistaa tämän tapahtuman? Huomaa että jos poistat huoneen nimen tai aiheen muutoksen, saattaa muutos kumoutua.",
"Community IDs may only contain characters a-z, 0-9, or '=_-./'": "Yhteisötunnisteet voivat sisältää vain merkkejä a-z, 0-9 tai '=_-/'",
"Community IDs may only contain characters a-z, 0-9, or '=_-./'": "Yhteisön tunnukset voivat sisältää vain merkkejä a-z, 0-9 tai '=_-/'",
"Something went wrong whilst creating your community": "Jokin meni pieleen yhteisön luomisessa",
"Create Community": "Luo yhteisö",
"Community Name": "Yhteisön nimi",
"Community ID": "Yhteisötunniste",
"Community ID": "Yhteisön tunnus",
"example": "esimerkki",
"Add rooms to the community summary": "Lisää huoneita yhteisön yhteenvetoon",
"Which rooms would you like to add to this summary?": "Mitkä huoneet haluaisit lisätä tähän yhteenvetoon?",
@ -701,7 +701,7 @@
"Unhide Preview": "Näytä esikatselu",
"Unable to join network": "Verkkoon liittyminen epäonnistui",
"Sorry, your browser is <b>not</b> able to run %(brand)s.": "Valitettavasti %(brand)s <b>ei</b> toimi selaimessasi.",
"Uploaded on %(date)s by %(user)s": "Ladattu %(date)s käyttäjän %(user)s toimesta",
"Uploaded on %(date)s by %(user)s": "Lähetetty %(date)s käyttäjän %(user)s toimesta",
"Messages in group chats": "Viestit ryhmissä",
"Yesterday": "Eilen",
"Error encountered (%(errorDetail)s).": "Virhe: %(errorDetail)s.",
@ -1130,7 +1130,7 @@
"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.": "Debug-lokit sisältävät sovelluksen käyttödataa, kuten käyttäjätunnuksesi, vierailemiesi huoneiden ja ryhmien tunnukset tai aliakset, sekä muiden käyttäjien käyttäjätunnukset. Ne eivät sisällä viestejä.",
"Before submitting logs, you must <a>create a GitHub issue</a> to describe your problem.": "Ennen lokien lähettämistä sinun täytyy <a>luoda Githubiin issue (kysymys/ongelma)</a>, joka sisältää kuvauksen ongelmastasi.",
"Unable to load commit detail: %(msg)s": "Commitin tietojen hakeminen epäonnistui: %(msg)s",
"Community IDs cannot be empty.": "Yhteisön ID:t eivät voi olla tyhjänä.",
"Community IDs cannot be empty.": "Yhteisön tunnukset eivät voi olla tyhjänä.",
"To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of %(brand)s to do this": "Jotta et menetä keskusteluhistoriaasi, sinun täytyy tallentaa huoneen avaimet ennen kuin kirjaudut ulos. Joudut käyttämään uudempaa %(brand)sin versiota tätä varten",
"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>": "Tämä tekee tilistäsi lopullisesti käyttökelvottoman. Et voi kirjautua sisään, eikä kukaan voi rekisteröidä samaa käyttäjätunnusta. Tilisi poistuu kaikista huoneista, joihin se on liittynyt, ja tilisi tiedot poistetaan identiteettipalvelimeltasi. <b>Tämä toimenpidettä ei voi kumota.</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.": "Tilisi poistaminen käytöstä <b>ei oletuksena saa meitä unohtamaan lähettämiäsi viestejä.</b> Jos haluaisit meidän unohtavan viestisi, rastita alla oleva ruutu.",
@ -1257,8 +1257,8 @@
"If you didn't remove the recovery method, an attacker may be trying to access your account. Change your account password and set a new recovery method immediately in Settings.": "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 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.",
"At this time it is not possible to reply with a file. Would you like to upload this file without replying?": "Tiedostolla vastaaminen ei ole mahdollista tällä kertaa. Haluatko lähettää tiedoston vastaamatta?",
"The file '%(fileName)s' failed to upload.": "Tiedoston '%(fileName)s' lähettäminen ei onnistunut.",
"The server does not support the room version specified.": "Palvelin ei tue määritettyä huoneversiota.",
"Changes your avatar in this current room only": "Vaihtaa kuvasi vain nykyisessä huoneessa",
"Sends the given message coloured as a rainbow": "Lähettää viestin sateenkaaren väreissä",
@ -1296,14 +1296,14 @@
"Missing session data": "Istunnon dataa puuttuu",
"Some session data, including encrypted message keys, is missing. Sign out and sign in to fix this, restoring keys from backup.": "Istunnon dataa, mukaan lukien salausavaimia, puuttuu. Kirjaudu ulos ja sisään, jolloin avaimet palautetaan varmuuskopiosta.",
"Your browser likely removed this data when running low on disk space.": "Selaimesi luultavasti poisti tämän datan, kun levytila oli vähissä.",
"Upload files (%(current)s of %(total)s)": "Lataa tiedostot (%(current)s / %(total)s)",
"Upload files": "Lataa tiedostot",
"These files are <b>too large</b> to upload. The file size limit is %(limit)s.": "Tiedostot ovat <b>liian isoja</b> ladattaviksi. Tiedoston kokoraja on %(limit)s.",
"Some files are <b>too large</b> to be uploaded. The file size limit is %(limit)s.": "Osa tiedostoista on <b>liian isoja</b> ladattaviksi. Tiedoston kokoraja on %(limit)s.",
"Upload %(count)s other files|other": "Lataa %(count)s muuta tiedostoa",
"Upload %(count)s other files|one": "Lataa %(count)s muu tiedosto",
"Upload files (%(current)s of %(total)s)": "Lähettää tiedostoa (%(current)s / %(total)s)",
"Upload files": "Lähetä tiedostot",
"These files are <b>too large</b> to upload. The file size limit is %(limit)s.": "Tiedostot ovat <b>liian isoja</b> lähetettäväksi. Tiedoston kokoraja on %(limit)s.",
"Some files are <b>too large</b> to be uploaded. The file size limit is %(limit)s.": "Osa tiedostoista on <b>liian isoja</b> lähetettäväksi. Tiedoston kokoraja on %(limit)s.",
"Upload %(count)s other files|other": "Lähetä %(count)s muuta tiedostoa",
"Upload %(count)s other files|one": "Lähetä %(count)s muu tiedosto",
"Cancel All": "Peruuta kaikki",
"Upload Error": "Latausvirhe",
"Upload Error": "Lähetysvirhe",
"Use an email address to recover your account": "Voit palauttaa tilisi sähköpostiosoitteen avulla",
"Enter email address (required on this homeserver)": "Syötä sähköpostiosoite (vaaditaan tällä kotipalvelimella)",
"Doesn't look like a valid email address": "Ei näytä kelvolliselta sähköpostiosoitteelta",
@ -1324,7 +1324,7 @@
"edited": "muokattu",
"To help us prevent this in future, please <a>send us logs</a>.": "Voit auttaa meitä estämään tämän toistumisen <a>lähettämällä meille lokeja</a>.",
"Name or Matrix ID": "Nimi tai Matrix-tunnus",
"This file is <b>too large</b> to upload. The file size limit is %(limit)s but this file is %(sizeOfThisFile)s.": "Tiedosto on <b>liian iso</b> ladattavaksi. Tiedostojen kokoraja on %(limit)s mutta tämä tiedosto on %(sizeOfThisFile)s.",
"This file is <b>too large</b> to upload. The file size limit is %(limit)s but this file is %(sizeOfThisFile)s.": "Tiedosto on <b>liian iso</b> lähetettäväksi. Tiedostojen kokoraja on %(limit)s mutta tämä tiedosto on %(sizeOfThisFile)s.",
"Unbans user with given ID": "Poistaa porttikiellon tunnuksen mukaiselta käyttäjältä",
"No homeserver URL provided": "Kotipalvelimen osoite puuttuu",
"Unexpected error resolving homeserver configuration": "Odottamaton virhe selvitettäessä kotipalvelimen asetuksia",
@ -1349,7 +1349,7 @@
"You can log in, but some features will be unavailable until the identity server is back online. If you keep seeing this warning, check your configuration or contact a server admin.": "Voit kirjautua, mutta osa toiminnoista on pois käytöstä kunnes identiteettipalvelin on jälleen toiminnassa. Jos tämä varoitus toistuu, tarkista asetuksesi tai ota yhteyttä palvelimen ylläpitäjään.",
"Unexpected error resolving identity server configuration": "Odottamaton virhe selvitettäessä identiteettipalvelimen asetuksia",
"Low bandwidth mode": "Matalan kaistanleveyden tila",
"Uploaded sound": "Ladattu ääni",
"Uploaded sound": "Asetettu ääni",
"Sounds": "Äänet",
"Notification sound": "Ilmoitusääni",
"Reset": "Palauta alkutilaan",
@ -1367,7 +1367,7 @@
"Edited at %(date)s. Click to view edits.": "Muokattu %(date)s. Klikkaa nähdäksesi muokkaukset.",
"Message edits": "Viestin muokkaukset",
"Upgrading this room requires closing down the current instance of the room and creating a new room in its place. To give room members the best possible experience, we will:": "Tämän huoneen päivittäminen edellyttää huoneen nykyisen instanssin sulkemista ja uuden huoneen luomista sen tilalle. Jotta tämä kävisi huoneen jäsenten kannalta mahdollisimman sujuvasti, teemme seuraavaa:",
"Upload all": "Lataa kaikki palvelimelle",
"Upload all": "Lähetä kaikki palvelimelle",
"Upload": "Lähetä",
"Changes your avatar in all rooms": "Vaihtaa kuvasi kaikissa huoneissa",
"%(senderName)s made no change.": "%(senderName)s ei tehnyt muutoksia.",
@ -1436,7 +1436,7 @@
"Remove %(phone)s?": "Poista %(phone)s?",
"Command Help": "Komento-ohje",
"This account has been deactivated.": "Tämä tili on poistettu.",
"Sends a message as plain text, without interpreting it as markdown": "Lähettää viestin pelkkänä tekstinä, tulkitsematta sitä markdownina",
"Sends a message as plain text, without interpreting it as markdown": "Lähettää viestin sellaisenaan, tulkitsematta sitä markdownina",
"You do not have the required permissions to use this command.": "Sinulla ei ole vaadittavia oikeuksia tämän komennon käyttämiseksi.",
"Use an identity server": "Käytä identiteettipalvelinta",
"If you don't want to use <server /> to discover and be discoverable by existing contacts you know, enter another identity server below.": "Ellet halua käyttää palvelinta <server /> löytääksesi tuntemiasi ihmisiä ja tullaksesi löydetyksi, syötä toinen identiteettipalvelin alle.",
@ -1697,7 +1697,7 @@
"Cross-signing private keys:": "Ristiinvarmennuksen salaiset avaimet:",
"in secret storage": "salavarastossa",
"Secret storage public key:": "Salavaraston julkinen avain:",
"in account data": "tunnuksen tiedoissa",
"in account data": "tilin tiedoissa",
"not stored": "ei tallennettu",
"Cross-signing": "Ristiinvarmennus",
"Backup has a <validity>valid</validity> signature from this user": "Varmuuskopiossa on <validity>kelvollinen</validity> allekirjoitus tältä käyttäjältä",
@ -1981,7 +1981,7 @@
"Review where youre logged in": "Tarkasta missä olet sisäänkirjautuneena",
"New login. Was this you?": "Uusi sisäänkirjautuminen. Olitko se sinä?",
"%(name)s is requesting verification": "%(name)s pyytää varmennusta",
"Sends a message as html, without interpreting it as markdown": "Lähettää viestin HTML-muodossa, tulkitsematta sitä Markdowniksi",
"Sends a message as html, without interpreting it as markdown": "Lähettää viestin HTML-muodossa, tulkitsematta sitä markdownina",
"Please supply a widget URL or embed code": "Anna sovelman osoite tai upotettava koodinpätkä",
"You signed in to a new session without verifying it:": "Olet kirjautunut uuteen istuntoon varmentamatta sitä:",
"Verify your other session using one of the options below.": "Varmenna toinen istuntosi käyttämällä yhtä seuraavista tavoista.",
@ -2016,11 +2016,11 @@
"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",
"Verify all your sessions to ensure your account & messages are safe": "Varmenna kaikki istuntosi varmistaaksesi, että käyttäjätilisi ja viestisi ovat turvassa",
"Verify the new login accessing your account: %(name)s": "Varmenna uusi kirjautuminen tilillesi: %(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 päästä päähän -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 ristiinvarmennusta.",
"Your account has a cross-signing identity in secret storage, but it is not yet trusted by this session.": "Tunnuksellasi on ristiinvarmennuksen identiteetti salaisessa tallennustilassa, mutta tämä istunto ei vielä luota siihen.",
"Your account has a cross-signing identity in secret storage, but it is not yet trusted by this session.": "Tililläsi on ristiinvarmennuksen identiteetti salaisessa tallennustilassa, mutta tämä istunto ei vielä 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 istunto erikseen, äläkä luota ristiinvarmennettuihin 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.",
@ -2223,9 +2223,9 @@
"Learn more at <a>element.io/previously-riot</a>": "Lue lisää osoitteessa <a>element.io/previously-riot</a>",
"Security & privacy": "Tietoturva ja -suoja",
"User menu": "Käyttäjän valikko",
"Video conference started by %(senderName)s": "%(senderName)s aloitti videopuhelun",
"Video conference updated by %(senderName)s": "%(senderName)s muokkasi videopuhelua",
"Video conference ended by %(senderName)s": "%(senderName)s päätti videopuhelun",
"Video conference started by %(senderName)s": "%(senderName)s aloitti ryhmävideopuhelun",
"Video conference updated by %(senderName)s": "%(senderName)s päivitti ryhmävideopuhelun",
"Video conference ended by %(senderName)s": "%(senderName)s päätti ryhmävideopuhelun",
"Join the conference from the room information card on the right": "Liity ryhmäpuheluun oikealla olevasta huoneen tiedoista",
"Join the conference at the top of this room": "Liity ryhmäpuheluun huoneen ylälaidassa",
"This will end the conference for everyone. Continue?": "Tämä päättää ryhmäpuhelun kaikilta. Jatka?",
@ -2237,7 +2237,7 @@
"Message deleted on %(date)s": "Viesti poistettu %(date)s",
"Show %(count)s more|one": "Näytä %(count)s lisää",
"Show %(count)s more|other": "Näytä %(count)s lisää",
"Mod": "Moderaattori",
"Mod": "Valvoja",
"Read Marker off-screen lifetime (ms)": "Viestin luetuksi merkkaamisen kesto, kun Element ei ole näkyvissä (ms)",
"Maximize widget": "Suurenna sovelma",
"Minimize widget": "Pienennä sovelma",
@ -2559,7 +2559,7 @@
"List options": "Lajittele",
"Activity": "Aktiivisuus",
"A-Z": "A-Ö",
"Server Options": "Palvelimen asetukset",
"Server Options": "Palvelinasetukset",
"Information": "Tiedot",
"Effects": "Tehosteet",
"Zimbabwe": "Zimbabwe",
@ -2682,10 +2682,10 @@
"Self-verification request": "Itsevarmennuspyyntö",
"Add a photo so people know it's you.": "Lisää kuva, jotta ihmiset tietävät, että se olet sinä.",
"Great, that'll help people know it's you": "Hienoa, tämä auttaa ihmisiä tietämään, että se olet sinä",
"Attach files from chat or just drag and drop them anywhere in a room.": "Liitä tiedostot keskustelusta tai vedä ja pudota ne mihin tahansa huoneeseen.",
"Attach files from chat or just drag and drop them anywhere in a room.": "Liitä tiedostoja alalaidan klemmarilla, tai raahaa ja pudota ne mihin tahansa huoneen kohtaan.",
"Use email or phone to optionally be discoverable by existing contacts.": "Käytä sähköpostiosoitetta tai puhelinnumeroa, jos haluat olla löydettävissä nykyisille yhteystiedoille.",
"Use email to optionally be discoverable by existing contacts.": "Käytä sähköpostiosoitetta, jos haluat olla löydettävissä nykyisille yhteystiedoille.",
"Add an email to be able to reset your password.": "Lisää sähköpostiosoite, jotta voit nollata salasanasi.",
"Add an email to be able to reset your password.": "Lisää sähköpostiosoite, jotta voit palauttaa salasanasi.",
"Forgot password?": "Unohtuiko salasana?",
"That phone number doesn't look quite right, please check and try again": "Tämä puhelinnumero ei näytä oikealta, tarkista se ja yritä uudelleen",
"Move right": "Siirry oikealle",
@ -2705,8 +2705,8 @@
"You can only pin up to %(count)s widgets|other": "Voit kiinnittää enintään %(count)s sovelmaa",
"Favourited": "Suositut",
"Use the + to make a new room or explore existing ones below": "Luo uusi huone tai tutustu alla oleviin + -painikeella",
"%(senderDisplayName)s set the server ACLs for this room.": "%(senderDisplayName)s asetti palvelimen pääsyhallintaluetteloon tämän huoneen.",
"%(senderDisplayName)s changed the server ACLs for this room.": "%(senderDisplayName)s muutti palvelimen pääsyhallintaluetteloa tälle huoneelle.",
"%(senderDisplayName)s set the server ACLs for this room.": "%(senderDisplayName)s loi tämän huoneen palvelinten pääsynvalvontalistan.",
"%(senderDisplayName)s changed the server ACLs for this room.": "%(senderDisplayName)s muutti tämän huoneen palvelinten pääsynvalvontalistaa.",
"Expand room list section": "Laajenna huoneluettelon osa",
"Collapse room list section": "Supista huoneluettelon osa",
"Use a different passphrase?": "Käytä eri salalausetta?",
@ -2745,8 +2745,8 @@
"Enable advanced debugging for the room list": "Ota huoneluettelon edistynyt virheenkorjaus käyttöön",
"A connection error occurred while trying to contact the server.": "Yhteysvirhe yritettäessä ottaa yhteyttä palvelimeen.",
"The <b>%(capability)s</b> capability": "<b>%(capability)s</b>-ominaisuus",
"See when the avatar changes in this room": "Katso, milloin nimi vaihtuu tässä huoneessa",
"See when the name changes in your active room": "Katso, milloin nimi muuttuu aktiivisessa huoneessa",
"See when the avatar changes in this room": "Näe, milloin kuva vaihtuu tässä huoneessa",
"See when the name changes in your active room": "Näe milloin käyttäjän nimi muuttuu aktiivisessa huoneessa",
"If disabled, messages from encrypted rooms won't appear in search results.": "Jos ei ole käytössä, salattujen huoneiden viestejä ei näytetä hakutuloksissa.",
"Jump to start/end of the composer": "Siirry kirjoittimen alkuun/loppuun",
"Dismiss read marker and jump to bottom": "Hylkää lukumerkki ja hyppää pohjaan",
@ -2787,26 +2787,26 @@
"Remain on your screen while running": "Pysy ruudulla käynnissä olon ajan",
"Move autocomplete selection up/down": "Siirrä automaattisen täydennyksen valintaa ylös/alas",
"sends snowfall": "lähetä lumisadetta",
"Sends the given message with snowfall": "Lähetä viesti lumisateen kera",
"Sends the given message with snowfall": "Lähetä viestin lumisateen kera",
"Sends the given message with fireworks": "Lähettää viestin ilotulitteiden kera",
"sends confetti": "lähetä konfettia",
"sends confetti": "lähetä konfettia",
"Sends the given message with confetti": "Lähettää viestin konfettien kera",
"sends fireworks": "lähetä ilotulitus",
"You held the call <a>Switch</a>": "Puhelu pidossa <a>Vaihda</a>",
"You held the call <a>Resume</a>": "Puhelu pidossa <a>Jatka</a>",
"%(name)s on hold": "%(name)s on pidossa",
"Please verify the room ID or address and try again.": "Tarkista huonetunnus ja yritä uudelleen.",
"Use this when referencing your community to others. The community ID cannot be changed.": "Käytä tätä, kun kutsut muita yhteisöösi. Yhteisötunnusta ei voi muuttaa.",
"Community ID: +<localpart />:%(domain)s": "Yhteisötunnus: +<localpart />:%(domain)s",
"Use this when referencing your community to others. The community ID cannot be changed.": "Käytä tätä, kun kutsut muita yhteisöösi. Yhteisön tunnusta ei voi muuttaa.",
"Community ID: +<localpart />:%(domain)s": "Yhteisön tunnus: +<localpart />:%(domain)s",
"Are you sure you want to deactivate your account? This is irreversible.": "Haluatko varmasti poistaa tilisi pysyvästi?",
"Data on this screen is shared with %(widgetDomain)s": "Tällä näytöllä olevia tietoja jaetaan %(widgetDomain)s:n kanssa",
"Data on this screen is shared with %(widgetDomain)s": "Tällä näytöllä olevaa tietoa jaetaan verkkotunnuksen %(widgetDomain)s kanssa",
"A browser extension is preventing the request.": "Selainlaajennus estää pyynnön.",
"Approve widget permissions": "Hyväksy sovelman käyttöoikeudet",
"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.": "Olet kirjautunut ulos kaikista istunnoista, etkä enää saa push-ilmoituksia. Ota ilmoitukset uudelleen käyttöön kirjautumalla uudelleen kullekin laitteelle.",
"That username already exists, please try another.": "Antamasi käyttäjänimi on varattu, kokeile toista.",
"Continue with %(ssoButtons)s": "Jatka %(ssoButtons)slla",
"%(ssoButtons)s Or %(usernamePassword)s": "%(ssoButtons)s Tai %(usernamePassword)s",
"Host account on": "Isännöi tiliä osoitteessa",
"Host account on": "Ylläpidä tiliä osoitteessa",
"Decide where your account is hosted": "Päätä, missä tiliäsi isännöidään",
"Your new session is now verified. Other users will see it as trusted.": "Uusi istuntosi on vahvistettu. Muut käyttäjät näkevät sen luotettavana.",
"Your new session is now verified. It has access to your encrypted messages, and other users will see it as trusted.": "Uusi istuntosi on vahvistettu. Sillä on nyt pääsy salattuihin viesteihisi, ja muut käyttäjät näkevät sen luotettavana.",
@ -2816,7 +2816,7 @@
"Repeat your recovery passphrase...": "Toista palautuksen salasana...",
"Enter a security phrase only you know, as its used to safeguard your data. To be secure, you shouldnt re-use your account password.": "Syötä salasana, jonka tiedät vain sinä, koska sitä käytetään tietojesi suojaamiseen. Turvallisuuden takaamiseksi älä käytä samaa salasanaa muualla.",
"Enter your recovery passphrase a second time to confirm it.": "Vahvista antamalla palautuksen salasana uudelleen.",
"Message downloading sleep time(ms)": "Viestin lataamisen odotusaika(ms)",
"Message downloading sleep time(ms)": "Viestin lataamisen odotusaika (ms)",
"Prepends ┬──┬ ( ゜-゜ノ) to a plain-text message": "Lisää ┬──┬ ( ゜-゜ノ) viestin alkuun",
"Prepends (╯°□°)╯︵ ┻━┻ to a plain-text message": "Lisää (╯°□°)╯︵ ┻━┻ viestin alkuun",
"Unable to access secret storage. Please verify that you entered the correct recovery passphrase.": "Salaisen tallenustilan avaaminen epäonnistui. Varmista, että syötit oikean palautuksen salasanan.",
@ -2828,9 +2828,31 @@
"Save your Security Key": "Tallenna turva-avain",
"This session is encrypting history using the new recovery method.": "Tämä istunto salaa historiansa käyttäen uutta palautustapaa.",
"This session has detected that your recovery passphrase and key for Secure Messages have been removed.": "Tämä istunto on havainnut, että palauttamisen salauslause ja salattujen viestien avain on poistettu.",
"If you did this accidentally, you can setup Secure Messages on this session which will re-encrypt this session's message history with a new recovery method.": "Jos teit tämän vahingossa, voit ottaa käyttöön turvalliset viestit tälle istunnolle, se salaa tämän istunnon viestihistorian uudella palautustavalla.",
"If you did this accidentally, you can setup Secure Messages on this session which will re-encrypt this session's message history with a new recovery method.": "",
"Close dialog or context menu": "Sulje valintaikkuna tai pikavalikko",
"%(brand)s is securely caching encrypted messages locally for them to appear in search results:": "%(brand)s tallentaa turvallisesti salattuja viestejä välimuistiin, jotta ne näkyvät hakutuloksissa:",
"Navigate recent messages to edit": "Voit muokata viimeisimpiä viestejä",
"Clear room list filter field": "Tyhjennä huoneluettelon suodatinkenttä"
"Clear room list filter field": "Tyhjennä huoneluettelon suodatinkenttä",
"May include members not in %(communityName)s": "Voi sisältää muitakin kuin yhteistön %(communityName)s jäseniä",
"Failed to transfer call": "Puhelunsiirto epäonnistui",
"A call can only be transferred to a single user.": "Puhelun voi siirtää vain yhdelle käyttäjälle.",
"Active Widgets": "Aktiiviset sovelmat",
"Block anyone not part of %(serverName)s from ever joining this room.": "Estä muita kuin palvelimen %(serverName)s jäseniä liittymästä tähän huoneeseen.",
"Continue with %(provider)s": "Jatka käyttäen palveluntarjoajaa %(provider)s",
"Open dial pad": "Avaa näppäimistö",
"Start a Conversation": "Aloita keskustelu",
"Dial pad": "Näppäimistö",
"There was an error looking up the phone number": "Puhelinnumeron haussa tapahtui virhe",
"Unable to look up phone number": "Puhelinnumeroa ei voi hakea",
"Use Ctrl + F to search": "Etsi painamalla Ctrl + F",
"Use Command + F to search": "Etsi painamalla Komento + F",
"Use app": "Käytä sovellusta",
"Element Web is experimental on mobile. For a better experience and the latest features, use our free native app.": "Element Web on mobiililaitteilla kokeellinen. Ilmainen sovelluksemme tarjoaa paremman kokemuksen ja uusimmat ominaisuudet.",
"Use app for a better experience": "Parempi kokemus sovelluksella",
"Change which room, message, or user you're viewing": "Vaihda näytettävää huonetta, viestiä tai käyttäjää",
"Converts the DM to a room": "Muuntaa yksityisviestin huoneeksi",
"Converts the room to a DM": "Muuntaa huoneen yksityisviestiksi",
"Your homeserver rejected your log in attempt. This could be due to things just taking too long. Please try again. If this continues, please contact your homeserver administrator.": "Kotipalvelimesi hylkäsi kirjautumisyrityksesi. Syynä saattaa olla, että asiat tapahtuvat liian hitaasti. Yritä uudelleen. Mikäli ongelma jatkuu, ota yhteyttä kotipalvelimesi ylläpitäjään.",
"Your homeserver was unreachable and was not able to log you in. Please try again. If this continues, please contact your homeserver administrator.": "Kotipalvelintasi ei tavoitettu eikä sinua siksi kirjattu sisään. Yritä uudelleen. Mikäli ongelma jatkuu, ota yhteyttä kotipalvelimesi ylläpitäjään.",
"Try again": "Yritä uudelleen"
}

View file

@ -2561,7 +2561,7 @@
"Got an account? <a>Sign in</a>": "Vous avez un compte? <a>Connectez-vous</a>",
"New here? <a>Create an account</a>": "Nouveau ici? <a>Créez un compte</a>",
"There was a problem communicating with the homeserver, please try again later.": "Il y a eu un problème lors de la communication avec le serveur d'accueil, veuillez réessayer ultérieurement.",
"New? <a>Create account</a>": "Nouveau? <a>Créez un compte</a>",
"New? <a>Create account</a>": "Nouveau? <a>Créez un compte</a>",
"That username already exists, please try another.": "Ce nom d'utilisateur existe déjà, essayez-en un autre.",
"Already have an account? <a>Sign in here</a>": "Vous avez déjà un compte? <a>Connectez-vous ici</a>",
"Algeria": "Algérie",
@ -2821,7 +2821,7 @@
"Brazil": "Brésil",
"Bouvet Island": "Île Bouvet",
"Botswana": "",
"Bosnia": "",
"Bosnia": "Bosnie-Herzegovine",
"Bolivia": "",
"Bhutan": "",
"Bermuda": "",
@ -2848,5 +2848,92 @@
"Prepends (╯°□°)╯︵ ┻━┻ to a plain-text message": "Ajoute \"(╯°□°)╯︵ ┻━┻\" en préfixe du message",
"Prepends ┬──┬ ( ゜-゜ノ) to a plain-text message": "Ajoute \"┬──┬ ( ゜-゜ノ)\" en préfixe du message",
"Effects": "Effets",
"Zimbabwe": "Zimbabwe"
"Zimbabwe": "Zimbabwe",
"Send images as you in your active room": "Envoie des images sous votre nom dans le salon actuel",
"Send images as you in this room": "Envoie des images sous votre nom dans ce salon",
"See emotes posted to your active room": "Voir les émoticônes envoyées dans le salon actuel",
"See emotes posted to this room": "Voir les émoticônes envoyées dans ce salon",
"Send emotes as you in your active room": "Envoyer des émoticônes sous votre nom dans le salon actuel",
"Send emotes as you in this room": "Envoyer des émoticônes sous votre nom dans ce salon",
"See videos posted to your active room": "Voir les vidéos publiées dans votre salon actuel",
"See videos posted to this room": "Voir les vidéos publiées dans ce salon",
"Send videos as you in your active room": "Envoie des vidéos en tant que vous dans votre salon actuel",
"Send videos as you in this room": "Envoie des vidéos en tant que vous dans ce salon",
"See images posted to this room": "Voir les images publiées dans ce salon",
"See images posted to your active room": "Voir les images publiées dans votre salon actuel",
"See messages posted to your active room": "Voir les messages publiés dans votre salon actuel",
"See messages posted to this room": "Voir les messages publiés dans ce salon",
"Send messages as you in your active room": "Envoie des messages en tant que vous dans votre salon actuel",
"Send messages as you in this room": "Envoie des messages en tant que vous dans ce salon",
"The <b>%(capability)s</b> capability": "La capacité <b>%(capability)s</b>",
"See <b>%(eventType)s</b> events posted to your active room": "Voir les événements <b>%(eventType)s</b> publiés dans votre salon actuel",
"Send <b>%(eventType)s</b> events as you in your active room": "Envoie des événements <b>%(eventType)s</b> en tant que vous dans votre salon actuel",
"See <b>%(eventType)s</b> events posted to this room": "Voir les événements <b>%(eventType)s</b> publiés dans ce salon",
"Send <b>%(eventType)s</b> events as you in this room": "Envoie des événements <b>%(eventType)s</b> en tant que vous dans ce salon",
"Send stickers to your active room as you": "Envoie des stickers en tant que vous dans le salon actuel",
"Continue with %(ssoButtons)s": "Continuer avec %(ssoButtons)s",
"About homeservers": "À propos des serveurs d'accueils",
"Learn more": "En savoir plus",
"Use your preferred Matrix homeserver if you have one, or host your own.": "Utilisez votre serveur d'accueil Matrix préféré si vous en avez un, ou hébergez le vôtre.",
"Other homeserver": "Autre serveur d'accueil",
"We call the places where you can host your account homeservers.": "Nous appelons serveur d'accueils les lieux où vous pouvez héberger votre compte.",
"Sign into your homeserver": "Connectez-vous sur votre serveur d'accueil",
"Matrix.org is the biggest public homeserver in the world, so its a good place for many.": "Matrix.org est le plus grand serveur d'accueil dans le monde, donc c'est un bon lieu pour beaucoup.",
"Specify a homeserver": "Spécifiez un serveur d'accueil",
"Invalid URL": "URL invalide",
"Unable to validate homeserver": "Impossible de valider le serveur d'accueil",
"Just a heads up, if you don't add an email and forget your password, you could <b>permanently lose access to your account</b>.": "Juste une remarque, si vous n'ajoutez pas un email et que vous oubliez votre mot de passe, vous pourriez <b>perdre définitivement l'accés à votre compte</b>.",
"Continuing without email": "Continuer sans email",
"Transfer": "Transférer",
"Failed to transfer call": "N'a pas réussi à transférer l'appel",
"A call can only be transferred to a single user.": "Un appel peut seulement être transféré à un seul utilisateur.",
"Invite by email": "Inviter par email",
"Active Widgets": "Gadgets actifs",
"Reason (optional)": "Raison (optionnelle)",
"Continue with %(provider)s": "Continuer avec %(provider)s",
"Homeserver": "Serveur d'accueil",
"You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Element with an existing Matrix account on a different homeserver.": "Vous pouvez utiliser les options de serveur personnalisés pour vous connecter à d'autres serveurs Matrix en spécifiant une URL de serveur d'accueil différente. Celà vous permet d'utiliser Element avec un compte Matrix existant sur un serveur d'accueil différent.",
"Server Options": "Options serveur",
"Messages in this room are end-to-end encrypted. When people join, you can verify them in their profile, just tap on their avatar.": "Les messages ici sont chiffrés de bout en bout. Quand les gens joignent, vous pouvez les vérifiez dans leur profil, tappez juste sur leur avatar.",
"Messages here are end-to-end encrypted. Verify %(displayName)s in their profile - tap on their avatar.": "Les messages ici sont chiffrés de bout en bout. Vérifiez %(displayName)s dans leur profil - tapez sur leur avatar.",
"Role": "Rôle",
"Use the + to make a new room or explore existing ones below": "Utilisez le + pour créer un nouveau salon ou explorer les existantes ci-dessous",
"This is the start of <roomName/>.": "C'est le début de <roomName/>.",
"Add a photo, so people can easily spot your room.": "Ajoutez une photo afin que les gens repèrent facilement votre salon.",
"%(displayName)s created this room.": "%(displayName)s a créé ce salon.",
"You created this room.": "Vous avez créé ce salon.",
"<a>Add a topic</a> to help people know what it is about.": "<a>Ajoutez un sujet</a> pour aider les gens à savoir de quoi il est question.",
"Topic: %(topic)s ": "Sujet: %(topic)s ",
"Topic: %(topic)s (<a>edit</a>)": "Sujet: %(topic)s (<a>éditer</a>)",
"This is the beginning of your direct message history with <displayName/>.": "C'est le début de votre historique de messages direct avec <displayName/>.",
"Only the two of you are in this conversation, unless either of you invites anyone to join.": "Seulement vous deux êtes dans cette conversation, à moins que l'un de vous invite quelqu'un à joindre.",
"%(name)s on hold": "%(name)s est en attente",
"Return to call": "Revenir à l'appel",
"Fill Screen": "Remplir l'écran",
"Voice Call": "Appel vocal",
"Video Call": "Appel vidéo",
"%(peerName)s held the call": "%(peerName)s a mis l'appel en pause",
"You held the call <a>Resume</a>": "Vous avez mis l'appel en attente <a>Reprendre</a>",
"You held the call <a>Switch</a>": "Vous avez mis l'appel en attente <a>Basculer</a>",
"sends snowfall": "envoie une chute de neige",
"Sends the given message with snowfall": "Envoie le message donné avec une chute de neige",
"sends fireworks": "envoie des feux d'artifices",
"Sends the given message with fireworks": "Envoie le message donné avec des feux d'artifices",
"sends confetti": "envoie des confettis",
"Sends the given message with confetti": "Envoie le message avec des confettis",
"Show chat effects": "Montrer les effets cosmétiques du chat",
"Use Command + Enter to send a message": "Utilisez Ctrl + Entrée pour envoyer un message",
"Render LaTeX maths in messages": "Formate et affiche les maths format LaTeX dans les messages",
"New version of %(brand)s is available": "Nouvelle version de %(brand)s disponible",
"Update %(brand)s": "Mettre à jour %(brand)s",
"Enable desktop notifications": "Activer les notifications sur le bureau",
"Don't miss a reply": "Ne ratez pas une réponse",
"See <b>%(msgtype)s</b> messages posted to your active room": "Voir les messages de type <b>%(msgtype)s</b> publiés dans le salon actuel",
"See <b>%(msgtype)s</b> messages posted to this room": "Voir les messages de type <b>%(msgtype)s</b> publiés dans ce salon",
"Send <b>%(msgtype)s</b> messages as you in this room": "Envoie des messages de type<b>%(msgtype)s</b> en tant que vous dans ce salon",
"Send <b>%(msgtype)s</b> messages as you in your active room": "Envoie des messages de type <b>%(msgtype)s</b> en tant que vous dans votre salon actuel",
"See general files posted to your active room": "Voir les fichiers postés dans votre salon actuel",
"See general files posted to this room": "Voir les fichiers postés dans ce salon",
"Send general files as you in your active room": "Envoie des fichiers en tant que vous dans votre salon actuel",
"Send general files as you in this room": "Envoie des fichiers en tant que vous dans ce salon"
}

View file

@ -936,7 +936,7 @@
"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. 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 defecto (%(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",
@ -1494,7 +1494,7 @@
"Key backup": "Copia da Chave",
"Message search": "Buscar mensaxe",
"Cross-signing": "Sinatura cruzada",
"Your server admin has disabled end-to-end encryption by default in private rooms & Direct Messages.": "A administración do servidor desactivou por omisión o cifrado extremo-a-extremo en salas privadas e Mensaxes Directas.",
"Your server admin has disabled end-to-end encryption by default in private rooms & Direct Messages.": "A administración do servidor desactivou por defecto o cifrado extremo-a-extremo en salas privadas e Mensaxes Directas.",
"A session's public name is visible to people you communicate with": "Un nome público de sesión é visible para a xente coa que te comunicas",
"Missing media permissions, click the button below to request.": "Falta permiso acceso multimedia, preme o botón para solicitalo.",
"Request media permissions": "Solicitar permiso a multimedia",
@ -1833,7 +1833,7 @@
"Add a new server...": "Engadir un novo servidor...",
"%(networkName)s rooms": "Salas de %(networkName)s",
"That doesn't look like a valid email address": "Non semella un enderezo de email válido",
"Use an identity server to invite by email. <default>Use the default (%(defaultIdentityServerName)s)</default> or manage in <settings>Settings</settings>.": "Usa un servidor de identidade para convidar por email. <default>Usa valor por omisión (%(defaultIdentityServerName)s)</default> ou xestionao en <settings>Axustes</settings>.",
"Use an identity server to invite by email. <default>Use the default (%(defaultIdentityServerName)s)</default> or manage in <settings>Settings</settings>.": "Usa un servidor de identidade para convidar por email. <default>Usa o valor por defecto (%(defaultIdentityServerName)s)</default> ou xestionao en <settings>Axustes</settings>.",
"Use an identity server to invite by email. Manage in <settings>Settings</settings>.": "Usa un servidor de identidade para convidar por email. Xestionao en <settings>Axustes</settings>.",
"The following users may not exist": "As seguintes usuarias poderían non existir",
"Unable to find profiles for the Matrix IDs listed below - would you like to invite them anyway?": "Non se atopou o perfil dos IDs Matrix da lista inferior - ¿Desexas convidalas igualmente?",
@ -2360,7 +2360,7 @@
"Set the name of a font installed on your system & %(brand)s will attempt to use it.": "Escolle unha das tipografías instaladas no teu sistema e %(brand)s intentará utilizalas.",
"Make this room low priority": "Marcar a sala como de baixa prioridade",
"Low priority rooms show up at the bottom of your room list in a dedicated section at the bottom of your room list": "As salas de baixa prioridade aparecen abaixo na lista de salas, nunha sección dedicada no final da lista",
"Use default": "Usar por omisión",
"Use default": "Usar por defecto",
"Mentions & Keywords": "Mencións e Palabras chave",
"Notification options": "Opcións de notificación",
"Favourited": "Con marca de Favorita",
@ -2975,7 +2975,7 @@
"sends fireworks": "envía fogos de artificio",
"Sends the given message with fireworks": "Envia a mensaxe dada con fogos de artificio",
"Prepends ┬──┬ ( ゜-゜ノ) to a plain-text message": "Antecede con ┬──┬ ( ゜-゜ノ) a unha mensaxe de texto plano",
"Prepends (╯°□°)╯︵ ┻━┻ to a plain-text message": "Antecede con (╯°□°)╯︵ ┻━┻ a unha mensaxe de texto plano",
"Prepends (╯°□°)╯︵ ┻━┻ to a plain-text message": "Antecede con (╯°□°)╯︵ ┻━┻ a unha mensaxe de texto plano",
"%(name)s on hold": "%(name)s agardando",
"You held the call <a>Switch</a>": "Pausaches a chamada <a>Cambiar</a>",
"sends snowfall": "envía neve",
@ -2990,5 +2990,67 @@
"Start a Conversation": "Iniciar unha Conversa",
"Dial pad": "Marcador",
"There was an error looking up the phone number": "Houbo un erro buscando o número de teléfono",
"Unable to look up phone number": "Non atopamos o número de teléfono"
"Unable to look up phone number": "Non atopamos o número de teléfono",
"Channel: <channelLink/>": "Canle: <channelLink/>",
"Workspace: <networkLink/>": "Espazo de traballo: <networkLink/>",
"Change which room, message, or user you're viewing": "Cambia a sala, mensaxe ou usuaria que estás vendo",
"This session has detected that your Security Phrase and key for Secure Messages have been removed.": "Esta sesión detectou que se eliminaron a túa Frase de Seguridade e chave para Mensaxes Seguras.",
"A new Security Phrase and key for Secure Messages have been detected.": "Detectouse unha nova Frase de Seguridade e chave para as Mensaxes Seguras.",
"Make a copy of your Security Key": "Fai unha copia da túa Chave de Seguridade",
"Confirm your Security Phrase": "Confirma a Frase de Seguridade",
"Secure your backup with a Security Phrase": "Asegura a copia cunha Frase de Seguridade",
"Your Security Key is in your <b>Downloads</b> folder.": "A Chave de Seguridade está no cartafol <b>Descargas</b>.",
"Your Security Key has been <b>copied to your clipboard</b>, paste it to:": "A Chave de Seguridade foi <b>copiada ao portapapeis</b>, pégaa en:",
"Your Security Key": "A túa Chave de Seguridade",
"Your Security Key is a safety net - you can use it to restore access to your encrypted messages if you forget your Security Phrase.": "A túa Chave de Seguridade é unha rede de seguridade - podes utilizala para restablecer o acceso ás mensaxes cifradas se esqueceches a Frase de Seguridade.",
"Repeat your Security Phrase...": "Repite a Frase de Seguridade...",
"Please enter your Security Phrase a second time to confirm.": "Escribe outra vez a Frase de Seguridade para confirmala.",
"Set up with a Security Key": "Configurar cunha Chave de Seguridade",
"Great! This Security Phrase looks strong enough.": "Ben! Esta Frase de Seguridade semella ser forte abondo.",
"We'll store an encrypted copy of your keys on our server. Secure your backup with a Security Phrase.": "Gardaremos unha copia cifrada das túas chaves no noso servidor. Asegura a túa copia cunha Frase de Seguridade.",
"Use Security Key": "Usar Chave de Seguridade",
"Use Security Key or Phrase": "Usar Chave ou Frase de Seguridade",
"If you've forgotten your Security Key you can <button>set up new recovery options</button>": "Se esqueceches a túa Chave de Seguridade podes <button>establecer novas opcións de recuperación</button>",
"Access your secure message history and set up secure messaging by entering your Security Key.": "Accede ao teu historial de mensaxes seguras e asegura a comunicación escribindo a Chave de Seguridade.",
"Not a valid Security Key": "Chave de Seguridade non válida",
"This looks like a valid Security Key!": "Semella unha Chave de Seguridade válida!",
"Enter Security Key": "Escribe a Chave de Seguridade",
"If you've forgotten your Security Phrase you can <button1>use your Security Key</button1> or <button2>set up new recovery options</button2>": "Se esqueceches a túa Frase de Seguridade podes <button1>usar a túa Chave de Seguridade</button1> ou <button2>establecer novas opcións de recuperación</button2>",
"Access your secure message history and set up secure messaging by entering your Security Phrase.": "Accede ao teu historial de mensaxes seguras e configura a comunicación segura escribindo a túa Frase de Seguridade.",
"Enter Security Phrase": "Escribe a Frase de Seguridade",
"Backup could not be decrypted with this Security Phrase: please verify that you entered the correct Security Phrase.": "Non se puido descifrar a Copia con esta Frase de Seguridade: comproba que escribiches a Frase de Seguridade correcta.",
"Incorrect Security Phrase": "Frase de Seguridade incorrecta",
"Backup could not be decrypted with this Security Key: please verify that you entered the correct Security Key.": "Non se puido descifrar a Copia con esta Chave de Seguridade: comproba que aplicaches a Chave de Seguridade correcta.",
"Security Key mismatch": "Non concorda a Chave de Seguridade",
"Unable to access secret storage. Please verify that you entered the correct Security Phrase.": "Non se puido acceder ao almacenaxe segredo. Comproba que escribiches correctamente a Frase de Seguridade.",
"Invalid Security Key": "Chave de Seguridade non válida",
"Wrong Security Key": "Chave de Seguridade incorrecta",
"We recommend you change your password and Security Key in Settings immediately": "Recomendámosche cambiar o teu contrasinal e Chave de Seguridade inmediatamente nos Axustes",
"Set my room layout for everyone": "Establecer a miña disposición da sala para todas",
"Back up your encryption keys with your account data in case you lose access to your sessions. Your keys will be secured with a unique Security Key.": "Fai unha copia de apoio das chaves de cifrado da túa conta en caso de perder o acceso ás túas sesións. As chaves estarán seguras cunha única Chave de Seguridade.",
"%(senderName)s has updated the widget layout": "%(senderName)s actualizou a disposición dos widgets",
"Converts the room to a DM": "Converte a sala en MD",
"Converts the DM to a room": "Converte a MD nunha sala",
"Use Command + F to search": "Usa Command + F para buscar",
"Use Ctrl + F to search": "Usa Ctrl + F para buscar",
"Use app for a better experience": "Para ter unha mellor experiencia usa a app",
"Element Web is experimental on mobile. For a better experience and the latest features, use our free native app.": "Element Web en móbiles está en fase experimental. Para ter unha mellor experiencia e máis funcións utiliza a app nativa gratuíta.",
"Use app": "Usa a app",
"Search (must be enabled)": "Buscar (debe esta activa)",
"Allow this widget to verify your identity": "Permitir a este widget verificar a túa identidade",
"The widget will verify your user ID, but won't be able to perform actions for you:": "Este widget vai verificar o ID do teu usuario, pero non poderá realizar accións no teu nome:",
"Remember this": "Lembrar isto",
"Something went wrong in confirming your identity. Cancel and try again.": "Algo fallou ao intentar confirma a túa identidade. Cancela e inténtao outra vez.",
"Your homeserver rejected your log in attempt. This could be due to things just taking too long. Please try again. If this continues, please contact your homeserver administrator.": "O servidor de inicio rexeitou o intento de conexión. Esto podería deberse a que lle levou moito tempo. Inténtao outra vez e se persiste o problema contacta coa administración do servidor.",
"Your homeserver was unreachable and was not able to log you in. Please try again. If this continues, please contact your homeserver administrator.": "Non temos acceso ao teu servidor de inicio e non puidemos conectarte. Inténtao outra vez. Se persiste o problema, contacta coa administración do servidor.",
"Try again": "Intentar outra vez",
"We asked the browser to remember which homeserver you use to let you sign in, but unfortunately your browser has forgotten it. Go to the sign in page and try again.": "Pedíramoslle ao teu navegador que lembrase o teu servidor de inicio para conectarte, pero o navegador esqueceuno. Vaite á páxina de conexión e inténtao outra vez.",
"We couldn't log you in": "Non puidemos conectarte",
"Show stickers button": "Mostrar botón dos adhesivos",
"Windows": "Ventás",
"Screens": "Pantallas",
"Share your screen": "Compartir a túa pantalla",
"Recently visited rooms": "Salas visitadas recentemente",
"Show line numbers in code blocks": "Mostrar números de liña nos bloques de código",
"Expand code blocks by default": "Por omsión despregar bloques de código"
}

View file

@ -608,7 +608,7 @@
"Vanuatu": "ונואטו",
"Default": "ברירת מחדל",
"Sign In": "כניסה",
"Create Account": "צור חשבון",
"Create Account": "יצירת חשבון",
"Use your account or create a new one to continue.": "השתמשו בחשבונכם או צרו חשבון חדש.",
"Sign In or Create Account": "התחברו או צרו חשבון",
"Zimbabwe": "זימבבואה",
@ -767,8 +767,8 @@
"%(senderName)s made future room history visible to all room members.": "%(senderName)s הגדיר את הסטוריית החדר כפתוחה לכל משתמשי החדר.",
"%(senderName)s made future room history visible to all room members, from the point they joined.": "%(senderName)s הגדיר את תצוגת ההסטוריה של החדר כפתוחה עבור כל משתמשי החדר, מהרגע שבו הם הצתרפו.",
"%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s הגדיר את תצוגת ההסטוריה של החדר כפתוחה עבור כל משתמשי החדר, מהרגע שבו הם הוזמנו.",
"%(senderName)s sent an invitation to %(targetDisplayName)s to join the room.": "%(senderName)s שלח את ההזמנה אל %(targetDisplayName)s להצתרף אל החדר.",
"%(senderName)s revoked the invitation for %(targetDisplayName)s to join the room.": "%(senderName)s שלל את ההזמנה עבור %(targetDisplayName)s להצתרף אל החדר.",
"%(senderName)s sent an invitation to %(targetDisplayName)s to join the room.": "%(senderName)s שלח הזמנה ל%(targetDisplayName)s להצטרף אל החדר.",
"%(senderName)s revoked the invitation for %(targetDisplayName)s to join the room.": "%(senderName)s דחה את ההזמנה של %(targetDisplayName)s להצטרף אל החדר.",
"%(senderName)s placed a video call. (not supported by this browser)": "%(senderName)s התחיל שיחת וידאו. (אינו נתמך בדפדפן זה)",
"%(senderName)s placed a video call.": "%(senderName)s התחיל שיחת וידאו.",
"%(senderName)s placed a voice call. (not supported by this browser)": "%(senderName)s התחיל שיחה קולית. (אינו נתמך בדפדפן זה)",
@ -803,7 +803,7 @@
"%(senderDisplayName)s changed guest access to %(rule)s": "%(senderDisplayName)s שינה את כללי הכניסה לאורחים ל- %(rule)s",
"%(senderDisplayName)s has prevented guests from joining the room.": "%(senderDisplayName)s מנע אפשרות מאורחים להכנס אל החדר.",
"%(senderDisplayName)s has allowed guests to join the room.": "%(senderDisplayName)s איפשר לאורחים להכנס אל החדר.",
"%(senderDisplayName)s changed the join rule to %(rule)s": "%(senderDisplayName)s שינה את כללי ההצתרפות ל- %(rule)s",
"%(senderDisplayName)s changed the join rule to %(rule)s": "%(senderDisplayName)s שינה את כללי ההצטרפות ל־%(rule)s",
"%(senderDisplayName)s made the room invite only.": "%(senderDisplayName)s הגדיר את החדר כ- \"הזמנה בלבד!\".",
"%(senderDisplayName)s made the room public to whoever knows the link.": "%(senderDisplayName)s הגדיר את החדר כציבורי עבור כל מי שקיבל את הקישור.",
"%(senderDisplayName)s upgraded this room.": "%(senderDisplayName)s שידרג את החדר הזה.",
@ -816,7 +816,7 @@
"%(senderName)s unbanned %(targetName)s.": "%(senderName)s הסיר חסימה מ %(targetName)s.",
"%(targetName)s left the room.": "%(targetName)s עזב\\ה את החדר.",
"%(targetName)s rejected the invitation.": "%(targetName)s דחו את ההזמנה.",
"%(targetName)s joined the room.": "%(targetName)s הצתרף אל החדר.",
"%(targetName)s joined the room.": "%(targetName)s הצטרף אל החדר.",
"%(senderName)s made no change.": "%(senderName)s לא עשה שום שינוי.",
"%(senderName)s set a profile picture.": "%(senderName)s הגדירו תמונת פרופיל.",
"%(senderName)s changed their profile picture.": "%(senderName)s שינו את תמונת הפרופיל שלהם.",
@ -1103,7 +1103,7 @@
"Show read receipts sent by other users": "הצג הודעות שנקראו בידי משתמשים אחרים",
"Show display name changes": "הצג שינויים של שמות",
"Show avatar changes": "הצג שינויים באווטר",
"Show join/leave messages (invites/kicks/bans unaffected)": "הצג הודעות הצתרף\\עזב (הזמנות\\בעיטות\\חסימות לא מושפעות)",
"Show join/leave messages (invites/kicks/bans unaffected)": "הצג הודעות הצטרף/עזב (הזמנות/בעיטות/חסימות לא מושפעות)",
"Show a placeholder for removed messages": "הצד מקום לתצוגת הודעות שהוסרו",
"Use a more compact Modern layout": "השתמש בתצוגה מודרנית ומצומצמת יותר",
"Enable Emoji suggestions while typing": "החל הצעות לסמלים בזמן כתיבה",
@ -1258,7 +1258,7 @@
"Are you sure you wish to remove (delete) this event? Note that if you delete a room name or topic change, it could undo the change.": "האם אתה בטוח שברצונך להסיר (למחוק) אירוע זה? שים לב שאם תמחק שם של חדר או שינוי נושא, זה עלול לבטל את השינוי.",
"Confirm Removal": "אשר הסרה",
"Removing…": "מסיר…",
"Invite people to join %(communityName)s": "הזמן אנשים להצתרף אל %(communityName)s",
"Invite people to join %(communityName)s": "הזמנת אנשים להצטרף אל %(communityName)s",
"Send %(count)s invites|one": "שלח %(count)s הזמנות",
"Send %(count)s invites|other": "שלח %(count)s הזמנות",
"Skip": "דלג",
@ -1363,8 +1363,8 @@
"%(oneUser)sleft and rejoined %(count)s times|other": "%(oneUser)s עזב וחזר %(count)s פעמים",
"%(severalUsers)sleft and rejoined %(count)s times|one": "%(severalUsers)s עזבו וחזרו",
"%(severalUsers)sleft and rejoined %(count)s times|other": "%(severalUsers)s עזבו וחזרו %(count)s פעמים",
"%(oneUser)sjoined and left %(count)s times|one": "%(oneUser)s הצתרף ועזב",
"%(oneUser)sjoined and left %(count)s times|other": "%(oneUser)s הצתרף ועזב %(count)s פעמים",
"%(oneUser)sjoined and left %(count)s times|one": "%(oneUser)s הצטרפ/ה ועזב/ה",
"%(oneUser)sjoined and left %(count)s times|other": "%(oneUser)s הצטרף ועזב/ה %(count)s פעמים",
"%(severalUsers)sjoined and left %(count)s times|one": "%(severalUsers)s הצתרפו ועזבו",
"%(severalUsers)sjoined and left %(count)s times|other": "%(severalUsers)s הצתרפו ועזבו %(count)s פעמים",
"%(oneUser)sleft %(count)s times|one": "%(oneUser)s עזב\\ה",
@ -1374,7 +1374,7 @@
"%(oneUser)sjoined %(count)s times|one": "%(oneUser)s הצתרפו",
"%(severalUsers)sjoined %(count)s times|other": "%(severalUsers)s הצתרפו %(count)s פעמים",
"%(oneUser)sjoined %(count)s times|other": "%(oneUser)s הצתרפו %(count)s פעמים",
"%(severalUsers)sjoined %(count)s times|one": "%(severalUsers)s הצתרף",
"%(severalUsers)sjoined %(count)s times|one": "%(severalUsers)s הצטרפ/ה",
"%(nameList)s %(transitionList)s": "%(nameList)s-%(transitionList)s",
"Language Dropdown": "תפריט שפות",
"Information": "מידע",
@ -1386,7 +1386,7 @@
"expand": "הרחב",
"Please <newIssueLink>create a new issue</newIssueLink> on GitHub so that we can investigate this bug.": "אנא <newIssueLink> צור בעיה חדשה </newIssueLink> ב- GitHub כדי שנוכל לחקור את הבאג הזה.",
"No results": "אין תוצאות",
"Join": "הצתרפות",
"Join": "הצטרפות",
"This version of %(brand)s does not support searching encrypted messages": "גרסה זו של %(brand)s אינה תומכת בחיפוש הודעות מוצפנות",
"This version of %(brand)s does not support viewing some encrypted files": "גרסה זו של %(brand)s אינה תומכת בצפייה בקבצים מוצפנים מסוימים",
"Use the <a>Desktop app</a> to search encrypted messages": "השתמשו ב <a> אפליקציית שולחן העבודה </a> לחיפוש הודעות מוצפנות",
@ -1632,7 +1632,7 @@
"Show Widgets": "הצג ישומונים",
"Hide Widgets": "הסתר ישומונים",
"Forget room": "שכח חדר",
"Join Room": "הצתרף אל חדר",
"Join Room": "הצטרף אל חדר",
"(~%(count)s results)|one": "(תוצאת %(count)s)",
"(~%(count)s results)|other": "(תוצאת %(count)s)",
"No recently visited rooms": "אין חדרים שבקרתם בהם לאחרונה",
@ -2068,11 +2068,11 @@
"%(roomName)s is not accessible at this time.": "לא ניתן להכנס אל %(roomName)s בזמן הזה.",
"This room doesn't exist. Are you sure you're at the right place?": "החדר הזה לא קיים. האם אתה בטוח שאתה נמצא במקום הנכון?",
"%(roomName)s does not exist.": "%(roomName)s לא קיים.",
"%(roomName)s can't be previewed. Do you want to join it?": "לא ניתן לצפות ב-%(roomName)s. האם תרצו להצתרף?",
"You're previewing %(roomName)s. Want to join it?": "אתם צופים ב- %(roomName)s. האם תרצו להצתרף?",
"%(roomName)s can't be previewed. Do you want to join it?": "לא ניתן לצפות ב־%(roomName)s. האם תרצו להצטרף?",
"You're previewing %(roomName)s. Want to join it?": "אתם צופים ב־%(roomName)s. האם תרצו להצטרף?",
"Reject & Ignore user": "דחה והתעלם ממשתמש זה",
"<userName/> invited you": "<userName/> הזמין אתכם",
"Do you want to join %(roomName)s?": "האם אתם מעוניינים להצתרף אל %(roomName)s?",
"Do you want to join %(roomName)s?": "האם אתם מעוניינים להצטרף אל %(roomName)s?",
"Start chatting": "החלו לדבר",
"<userName/> wants to chat": "<userName/> מעוניין לדבר איתכם",
"Do you want to chat with %(user)s?": "האם אתם רוצים לדבר עם %(user)s?",
@ -2081,14 +2081,14 @@
"This invite to %(roomName)s was sent to %(email)s": "הזמנה לחדר %(roomName)s נשלחה לכתובת %(email)s",
"Link this email with your account in Settings to receive invites directly in %(brand)s.": "קשר דוא\"ל זה לחשבונך בהגדרות כדי לקבל הזמנות ישירות ב-%(brand)s.",
"This invite to %(roomName)s was sent to %(email)s which is not associated with your account": "הזמנה זו ל-%(roomName)s נשלחה ל-%(email)s שאינה משויכת לחשבונך",
"Join the discussion": "הצתרף אל הדיון",
"Join the discussion": "הצטרף אל הדיון",
"You can still join it because this is a public room.": "אתה עדיין יכול להצטרף אליו כי זה חדר ציבורי.",
"Try to join anyway": "נסה להצתרף בכל מקרה",
"Try to join anyway": "נסה להצטרף בכל מקרה",
"You can only join it with a working invite.": "אתה יכול להצטרף אליו רק עם הזמנה עובדת.",
"An error (%(errcode)s) was returned while trying to validate your invite. You could try to pass this information on to a room admin.": "שגיאה (%(errcode)s) הוחזרה בעת ניסיון לאמת את ההזמנה שלך. אתה יכול לנסות להעביר מידע זה למנהל חדר.",
"Something went wrong with your invite to %(roomName)s": "משהו השתבש עם ההזמנה שלכם אל חדר %(roomName)s",
"You were banned from %(roomName)s by %(memberName)s": "נחסמתם מ-%(roomName)s על ידי %(memberName)s",
"Re-join": "הצתרפות מחדש",
"Re-join": "הצטרפות מחדש",
"Forget this room": "שכח חדר זה",
"Reason: %(reason)s": "סיבה: %(reason)s",
"You were kicked from %(roomName)s by %(memberName)s": "אתם נבעטתם מ-%(roomName)s על ידי %(memberName)s",
@ -2097,7 +2097,7 @@
"You do not have permission to create rooms in this community.": "אין לך הרשאה ליצור חדרים בקהילה זו.",
"Cannot create rooms in this community": "לא ניתן ליצור חדרים בקהילה זו",
"Failed to reject invitation": "דחיית ההזמנה נכשלה",
"Explore rooms": "חקור חדרים",
"Explore rooms": "שיטוט בחדרים",
"Create a Group Chat": "צור צ'אט קבוצתי",
"Explore Public Rooms": "חקור חדרים ציבוריים",
"Send a Direct Message": "שלח הודעה ישירה",
@ -2115,11 +2115,11 @@
"Long Description (HTML)": "תאור ארוך (HTML)",
"Your community hasn't got a Long Description, a HTML page to show to community members.<br />Click here to open settings and give it one!": "לקהילה שלך אין תיאור ארוך, דף HTML להצגה בפני חברי הקהילה. <br/> לחץ כאן כדי לפתוח הגדרות ולתת לו אחת!",
"Everyone": "כולם",
"Who can join this community?": "מי יכול להצתרף לקהילה זו?",
"Who can join this community?": "מי יכולים להצטרף לקהילה זו?",
"You are a member of this community": "אתם חברים בקהילה זו",
"You are an administrator of this community": "אתם המנהלים של קהילה זו",
"Leave this community": "עזוב קהילה זו",
"Join this community": "הצתרף לקהילה זו",
"Join this community": "הצטרפות לקהילה זו",
"%(inviter)s has invited you to join this community": "%(inviter)s הזמין אותך להצטרף לקהילה זו",
"Featured Users:": "משתמשים מומלצים:",
"Featured Rooms:": "חדרים מומלצים:",
@ -2742,5 +2742,37 @@
"Review terms and conditions": "עיין בתנאים ובהגבלות",
"To continue using the %(homeserverDomain)s homeserver you must review and agree to our terms and conditions.": "כדי להמשיך להשתמש בשרת הבית (%(homeserverDomain)s), עליך לבדוק ולהסכים לתנאים ולהגבלות שלנו.",
"For security, this session has been signed out. Please sign in again.": "למען ביטחון, הפגישה הזו נותקה. אנא היכנסו שוב.",
"Signed Out": "יציאה"
"Signed Out": "יציאה",
"Channel: <channelLink/>": "ערוץ: <channelLink/>",
"Dial pad": "לוח חיוג",
"There was an error looking up the phone number": "אירעה שגיאה בחיפוש מספר הטלפון",
"Unable to look up phone number": "לא ניתן לחפש את מספר הטלפון",
"%(senderName)s has updated the widget layout": "%(senderName)s עדכן את פריסת היישומון",
"There was an error finding this widget.": "אירעה שגיאה במציאת היישומון הזה.",
"Active Widgets": "יישומונים פעילים",
"Set my room layout for everyone": "הגדר את פריסת החדר שלי עבור כולם",
"Open dial pad": "פתח לוח חיוג",
"Back up your encryption keys with your account data in case you lose access to your sessions. Your keys will be secured with a unique Security Key.": "גבה את מפתחות ההצפנה שלך עם נתוני חשבונך במקרה שתאבד את הגישה להפעלות שלך. המפתחות שלך מאובטחים באמצעות מפתח אבטחה ייחודי.",
"If you've forgotten your Security Key you can <button>set up new recovery options</button>": "אם שכחת את מפתח האבטחה שלך תוכל <button>להגדיר אפשרויות שחזור חדשות<button/>",
"Search (must be enabled)": "חיפוש (חייב להיות מופעל)",
"Make a copy of your Security Key": "צור עותק של מפתח האבטחה שלך",
"Your Security Key": "מפתח האבטחה שלך",
"Set up with a Security Key": "הגדר עם מפתח אבטחה",
"Use Security Key": "השתמש במפתח אבטחה",
"Access your secure message history and set up secure messaging by entering your Security Key.": "גש להיסטוריית ההודעות המאובטחות שלך והגדר הודעות מאובטחות על ידי הזנת מפתח האבטחה שלך.",
"Enter Security Key": "הזן מפתח אבטחה",
"Backup could not be decrypted with this Security Key: please verify that you entered the correct Security Key.": "לא ניתן היה לפענח את הגיבוי באמצעות מפתח האבטחה הזה: ודא שהזנת את מפתח האבטחה הנכון.",
"Security Key mismatch": "מפתחות האבטחה לא תואמים",
"Unable to access secret storage. Please verify that you entered the correct Security Phrase.": "אין אפשרות לגשת לאחסון הסודי. אנא אשר שהזנת את ביטוי האבטחה הנכון.",
"Invalid Security Key": "מפתח אבטחה לא חוקי",
"Wrong Security Key": "מפתח אבטחה שגוי",
"Remember this": "זכור את זה",
"The widget will verify your user ID, but won't be able to perform actions for you:": "היישומון יאמת את מזהה המשתמש שלך, אך לא יוכל לבצע פעולות עבורך:",
"Allow this widget to verify your identity": "אפשר לווידג'ט זה לאמת את זהותך",
"We recommend you change your password and Security Key in Settings immediately": "אנו ממליצים לך לשנות את הסיסמה ומפתח האבטחה שלך בהגדרות באופן מיידי",
"Start a Conversation": "התחל שיחה",
"Workspace: <networkLink/>": "סביבת עבודה: <networkLink/>",
"Use Ctrl + F to search": "השתמש ב- Ctrl + F כדי לחפש",
"Use Command + F to search": "השתמש ב- Command + F כדי לחפש",
"Change which room, message, or user you're viewing": "שנה את החדר, ההודעה או המשתמש שאתה צופה בו"
}

View file

@ -2978,5 +2978,85 @@
"You have no visible notifications.": "Nincsenek látható értesítések.",
"Transfer": "Átadás",
"Failed to transfer call": "A hívás átadása nem sikerült",
"A call can only be transferred to a single user.": "Csak egy felhasználónak lehet átadni a hívást."
"A call can only be transferred to a single user.": "Csak egy felhasználónak lehet átadni a hívást.",
"There was an error finding this widget.": "A kisalkalmazás keresésekor hiba történt.",
"Active Widgets": "Aktív kisalkalmazások",
"Open dial pad": "Számlap megnyitása",
"Start a Conversation": "Beszélgetés megkezdése",
"Dial pad": "Tárcsázó számlap",
"There was an error looking up the phone number": "A telefonszám megkeresésekor hiba történt",
"Unable to look up phone number": "A telefonszámot nem sikerült megtalálni",
"Workspace: <networkLink/>": "Munkaterület: <networkLink/>",
"Change which room, message, or user you're viewing": "Azon szoba, üzenet vagy felhasználó megváltoztatása amit éppen néz",
"Channel: <channelLink/>": "Csatorna: <channelLink/>",
"This session has detected that your Security Phrase and key for Secure Messages have been removed.": "A munkamenet észrevette, hogy a Biztonságos üzenetek Biztonsági Jelmondata és Kulcsa törölve lett.",
"A new Security Phrase and key for Secure Messages have been detected.": "A Biztonságos üzenetekhez új Biztonsági Jelmondatot és kulcsot észleltünk.",
"Make a copy of your Security Key": "Készítsen másolatot a Biztonsági Kulcsról",
"Confirm your Security Phrase": "Biztonsági Jelmondat megerősítése",
"Secure your backup with a Security Phrase": "Védje a mentését a Biztonsági Jelmondattal",
"Your Security Key is in your <b>Downloads</b> folder.": "A Biztonsági Kulcsa a <b>Letöltések</b> mappában van.",
"Your Security Key has been <b>copied to your clipboard</b>, paste it to:": "A Biztonsági Kulcsa <b>a vágólapra lett másolva</b>, illessze be ide:",
"Your Security Key": "Biztonsági Kulcsa",
"Your Security Key is a safety net - you can use it to restore access to your encrypted messages if you forget your Security Phrase.": "A Biztonsági Kulcs egy biztonsági háló - arra az esetre ha elfelejti a Biztonsági Jelmondatot - a titkosított üzenetekhez való hozzáférés visszaállításához.",
"Repeat your Security Phrase...": "Ismételje meg a Biztonsági Jelmondatát…",
"Please enter your Security Phrase a second time to confirm.": "A megerősítéshez kérjük adja meg a Biztonsági Jelmondatot még egyszer.",
"Set up with a Security Key": "Beállítás Biztonsági Kulccsal",
"Great! This Security Phrase looks strong enough.": "Nagyszerű! Ez a Biztonsági Jelmondat elég erősnek tűnik.",
"We'll store an encrypted copy of your keys on our server. Secure your backup with a Security Phrase.": "A kulcsait titkosított formában tároljuk a szerverünkön. Helyezze biztonságba a mentését a Biztonsági Jelmondattal.",
"Use Security Key": "Használjon Biztonsági Kulcsot",
"Use Security Key or Phrase": "Használjon Biztonsági Kulcsot vagy Jelmondatot",
"If you've forgotten your Security Key you can <button>set up new recovery options</button>": "Ha elfelejtette a Biztonsági Kulcsot <button>állítson be új visszaállítási lehetőséget</button>",
"Access your secure message history and set up secure messaging by entering your Security Key.": "A Biztonsági Kulcs megadásával hozzáférhet a régi biztonságos üzeneteihez és beállíthatja a biztonságos üzenetküldést.",
"Not a valid Security Key": "Érvénytelen Biztonsági Kulcs",
"This looks like a valid Security Key!": "Ez érvényes Biztonsági Kulcsnak tűnik!",
"Enter Security Key": "Biztonsági Kulcs megadása",
"If you've forgotten your Security Phrase you can <button1>use your Security Key</button1> or <button2>set up new recovery options</button2>": "Ha elfelejtette a Biztonsági Jelmondatot, használhatja a <button1>Biztonsági Kulcsot</button1> vagy <button2>új Biztonsági paramétereket állíthat be</button2>",
"Access your secure message history and set up secure messaging by entering your Security Phrase.": "A Biztonsági Jelmondattal hozzáférhet a régi titkosított üzeneteihez és beállíthatja a biztonságos üzenetküldést.",
"Enter Security Phrase": "Biztonsági Jelmondat megadása",
"Backup could not be decrypted with this Security Phrase: please verify that you entered the correct Security Phrase.": "A mentést nem lehet visszafejteni ezzel a Biztonsági Jelmondattal: kérjük ellenőrizze, hogy a megfelelő Biztonsági Jelmondatot adta-e meg.",
"Incorrect Security Phrase": "Helytelen Biztonsági Jelmondat",
"Backup could not be decrypted with this Security Key: please verify that you entered the correct Security Key.": "Ezzel a Biztonsági Kulccsal a mentést nem lehet visszafejteni: kérjük ellenőrizze, hogy a Biztonsági Kulcsot jól adta-e meg.",
"Security Key mismatch": "A Biztonsági Kulcsok nem egyeznek",
"Unable to access secret storage. Please verify that you entered the correct Security Phrase.": "A biztonsági tárolóhoz nem lehet hozzáférni. Kérjük ellenőrizze, hogy jó Biztonsági jelmondatot adott-e meg.",
"Invalid Security Key": "Érvénytelen Biztonsági Kulcs",
"Wrong Security Key": "Hibás Biztonsági Kulcs",
"We recommend you change your password and Security Key in Settings immediately": "Javasoljuk, hogy a jelszavát és a Biztonsági kulcsát mihamarabb változtassa meg a Beállításokban",
"Back up your encryption keys with your account data in case you lose access to your sessions. Your keys will be secured with a unique Security Key.": "Mentse el a titkosítási kulcsokat a fiókadatokkal arra az esetre ha elvesztené a hozzáférést a munkameneteihez. A kulcsok egy egyedi Biztonsági Kulccsal lesznek védve.",
"Set my room layout for everyone": "A szoba megjelenésének beállítása mindenki számára",
"%(senderName)s has updated the widget layout": "%(senderName)s megváltoztatta a kisalkalmazás megjelenését",
"Use Ctrl + F to search": "Kereséshez használja a CTRL + F kombinációt",
"Use Command + F to search": "Kereséshez használja a Parancs + F kombinációt",
"Use app": "Használja az alkalmazást",
"Element Web is experimental on mobile. For a better experience and the latest features, use our free native app.": "Element Web kísérleti állapotban van mobiltelefonon. A jobb élmény és a legújabb funkciók használatához használja az alkalmazást.",
"Use app for a better experience": "A jobb élmény érdekében használjon alkalmazást",
"Converts the DM to a room": "A közvetlen beszélgetésből egy szobát készít",
"Converts the room to a DM": "A szobát átalakítja közvetlen beszélgetéshez",
"Your homeserver rejected your log in attempt. This could be due to things just taking too long. Please try again. If this continues, please contact your homeserver administrator.": "A Matrix szerver visszautasította a bejelentkezését. Lehet, hogy valami túl sokáig tartott. Próbálja újra. Ha továbbra is fennáll a probléma, kérjük vegye fel a kapcsolatot a Matrix szerver üzemeltetőjével.",
"Your homeserver was unreachable and was not able to log you in. Please try again. If this continues, please contact your homeserver administrator.": "A Matrix szerver elérhetetlen és nem tudta bejelentkeztetni. Próbálja újra. Ha továbbra is fennáll a probléma, kérjük vegye fel a kapcsolatot a Matrix szerver üzemeltetőjével.",
"Try again": "Próbálja újra",
"We asked the browser to remember which homeserver you use to let you sign in, but unfortunately your browser has forgotten it. Go to the sign in page and try again.": "A böngészőt utasítottuk, hogy jegyezze meg, melyik matrix szervert használta a bejelentkezéshez, de elfelejtette. Navigáljon újra a bejelentkezési oldalra.",
"We couldn't log you in": "Sajnos nem tudjuk bejelentkeztetni",
"Search (must be enabled)": "Keresés (engedélyezve kell lennie)",
"Something went wrong in confirming your identity. Cancel and try again.": "A személyazonosság ellenőrzésénél valami hiba történt. Megszakítás és próbálja újra.",
"Remember this": "Emlékezzen erre",
"The widget will verify your user ID, but won't be able to perform actions for you:": "A kisalkalmazás ellenőrizni fogja a felhasználói azonosítóját, de az alábbi tevékenységeket nem tudja végrehajtani:",
"Allow this widget to verify your identity": "A kisalkalmazás ellenőrizheti a személyazonosságot",
"Show stickers button": "Matrica gomb megjelenítése",
"Windows": "Ablakok",
"Screens": "Képernyők",
"Share your screen": "Képernyő megosztása",
"Show line numbers in code blocks": "Sorszámok megmutatása a kód blokkban",
"Expand code blocks by default": "Kód blokk kibontása alapesetben",
"Recently visited rooms": "Nemrég meglátogatott szobák",
"Upgrade to pro": "Pro verzióra való áttérés",
"Minimize dialog": "Dialógus ablak kicsinyítés",
"Maximize dialog": "Dialógus ablak nagyítás",
"%(hostSignupBrand)s Setup": "%(hostSignupBrand)s Beállítás",
"You should know": "Tudnia kell",
"Privacy Policy": "Adatvédelmi szabályok",
"Cookie Policy": "Süti szabályzat",
"Learn more in our <privacyPolicyLink />, <termsOfServiceLink /> and <cookiePolicyLink />.": "Tudjon meg többet innen: <privacyPolicyLink />, <termsOfServiceLink /> és <cookiePolicyLink />.",
"Continuing temporarily allows the %(hostSignupBrand)s setup process to access your account to fetch verified email addresses. This data is not stored.": "Folytatva %(hostSignupBrand)s beállítási folyamat ideiglenes hozzáférést kap a fiókadatok elérésére az ellenőrzött e-mail cím megszerzésének érdekében. Ezt az adat nincs elmenetve.",
"Failed to connect to your homeserver. Please close this dialog and try again.": "A matrix szerverhez való csatlakozás nem sikerült. Zárja be ezt az ablakot és próbálja újra.",
"Abort": "Megszakítás"
}

View file

@ -2990,5 +2990,60 @@
"Start a Conversation": "Inizia una conversazione",
"Dial pad": "Tastierino",
"There was an error looking up the phone number": "Si è verificato un errore nella ricerca del numero di telefono",
"Unable to look up phone number": "Impossibile cercare il numero di telefono"
"Unable to look up phone number": "Impossibile cercare il numero di telefono",
"This session has detected that your Security Phrase and key for Secure Messages have been removed.": "Questa sessione ha rilevato che la tua password di sicurezza e la chiave per i messaggi sicuri sono state rimosse.",
"A new Security Phrase and key for Secure Messages have been detected.": "Sono state rilevate una nuova password di sicurezza e una chiave per i messaggi sicuri.",
"Make a copy of your Security Key": "Fai una copia della chiave di sicurezza",
"Confirm your Security Phrase": "Conferma password di sicurezza",
"Secure your backup with a Security Phrase": "Proteggi il tuo backup con una password di sicurezza",
"Your Security Key is in your <b>Downloads</b> folder.": "La chiave di sicurezza è nella tua cartella <b>Scaricati</b>.",
"Your Security Key has been <b>copied to your clipboard</b>, paste it to:": "La tua chiave di sicurezza è stata <b>copiata negli appunti</b>, incollala in:",
"Your Security Key": "La tua chiave di sicurezza",
"Your Security Key is a safety net - you can use it to restore access to your encrypted messages if you forget your Security Phrase.": "La chiave di sicurezza è come una rete di salvataggio - puoi usarla per recuperare l'accesso ai messaggi cifrati se dimentichi la password di sicurezza.",
"Repeat your Security Phrase...": "Ripeti la password di sicurezza...",
"Please enter your Security Phrase a second time to confirm.": "Inserisci di nuovo la password di sicurezza per confermarla.",
"Set up with a Security Key": "Imposta con una chiave di sicurezza",
"Great! This Security Phrase looks strong enough.": "Ottimo! Questa password di sicurezza sembra abbastanza robusta.",
"We'll store an encrypted copy of your keys on our server. Secure your backup with a Security Phrase.": "Salveremo una copia cifrata delle tue chiavi sul nostro server. Proteggi il tuo backup con una password di sicurezza.",
"Use Security Key": "Usa chiave di sicurezza",
"Use Security Key or Phrase": "Usa una chiave o password di sicurezza",
"If you've forgotten your Security Key you can <button>set up new recovery options</button>": "Se hai dimenticato la tua chiave di sicurezza puoi <button>impostare nuove opzioni di recupero</button>",
"Access your secure message history and set up secure messaging by entering your Security Key.": "Accedi alla cronologia sicura dei messaggi e imposta la messaggistica sicura inserendo la tua chiave di sicurezza.",
"Not a valid Security Key": "Chiave di sicurezza non valida",
"This looks like a valid Security Key!": "Sembra essere una chiave di sicurezza valida!",
"Enter Security Key": "Inserisci chaive di sicurezza",
"If you've forgotten your Security Phrase you can <button1>use your Security Key</button1> or <button2>set up new recovery options</button2>": "Se hai dimenticato la password di sicurezza puoi <button1>usare la tua chiave di sicurezza</button1> o <button2>impostare nuove opzioni di recupero</button2>",
"Access your secure message history and set up secure messaging by entering your Security Phrase.": "Accedi alla cronologia sicura dei messaggi e imposta la messaggistica sicura inserendo la tua password di sicurezza.",
"Enter Security Phrase": "Inserisci password di sicurezza",
"Backup could not be decrypted with this Security Phrase: please verify that you entered the correct Security Phrase.": "Impossibile decifrare il backup con questa password di sicurezza: verifica di avere inserito la password di sicurezza corretta.",
"Incorrect Security Phrase": "Password di sicurezza sbagliata",
"Backup could not be decrypted with this Security Key: please verify that you entered the correct Security Key.": "Impossibile decifrare il backup con questa chiave di sicurezza: verifica di avere inserito la chiave di sicurezza corretta.",
"Security Key mismatch": "La chiave di sicurezza non corrisponde",
"Unable to access secret storage. Please verify that you entered the correct Security Phrase.": "Impossibile accedere all'archivio segreto. Verifica di avere inserito la password di sicurezza giusta.",
"Invalid Security Key": "Chiave di sicurezza non valida",
"Wrong Security Key": "Chiave di sicurezza sbagliata",
"We recommend you change your password and Security Key in Settings immediately": "Ti consigliamo di cambiare immediatamente la password e la chiave di sicurezza nelle impostazioni",
"Set my room layout for everyone": "Imposta la disposizione della stanza per tutti",
"Back up your encryption keys with your account data in case you lose access to your sessions. Your keys will be secured with a unique Security Key.": "Fai il backup delle tue chiavi di crittografia con i dati del tuo account in caso perdessi l'accesso alle sessioni. Le tue chiavi saranno protette con una chiave di recupero univoca.",
"Channel: <channelLink/>": "Canale: <channelLink/>",
"Workspace: <networkLink/>": "Spazio di lavoro: <networkLink/>",
"Change which room, message, or user you're viewing": "Cambia quale stanza, messaggio o utente stai vedendo",
"%(senderName)s has updated the widget layout": "%(senderName)s ha aggiornato la disposizione del widget",
"Converts the room to a DM": "Converte la stanza in un MD",
"Converts the DM to a room": "Converte il MD in una stanza",
"Use Command + F to search": "Usa Command + F per cercare",
"Use Ctrl + F to search": "Usa Ctrl + F per cercare",
"Use app for a better experience": "Usa l'app per un'esperienza migliore",
"Element Web is experimental on mobile. For a better experience and the latest features, use our free native app.": "Element Web è sperimentale su mobile. Per un'esperienza migliore e le ultime funzionalità, usa la nostra app nativa gratuita.",
"Use app": "Usa l'app",
"Search (must be enabled)": "Cerca (deve essere attivato)",
"Allow this widget to verify your identity": "Permetti a questo widget di verificare la tua identità",
"The widget will verify your user ID, but won't be able to perform actions for you:": "Il widget verificherà il tuo ID utente, ma non sarà un grado di eseguire azioni per te:",
"Remember this": "Ricordalo",
"Something went wrong in confirming your identity. Cancel and try again.": "Qualcosa è andato storto confermando la tua identità. Annulla e riprova.",
"Your homeserver rejected your log in attempt. This could be due to things just taking too long. Please try again. If this continues, please contact your homeserver administrator.": "Il tuo homeserver ha rifiutato il tuo tentativo di accesso. Potrebbe essere causato da tempi troppo lunghi. Riprova. Se il problema persiste, contatta l'amministratore dell'homeserver.",
"Your homeserver was unreachable and was not able to log you in. Please try again. If this continues, please contact your homeserver administrator.": "Il tuo homeserver è irraggiungibile e non ha potuto farti accedere. Riprova. Se il problema persiste, contatta l'amministratore dell'homeserver.",
"Try again": "Riprova",
"We asked the browser to remember which homeserver you use to let you sign in, but unfortunately your browser has forgotten it. Go to the sign in page and try again.": "Abbiamo chiesto al browser di ricordare quale homeserver usi per farti accedere, ma sfortunatamente l'ha dimenticato. Vai alla pagina di accesso e riprova.",
"We couldn't log you in": "Non abbiamo potuto farti accedere"
}

View file

@ -124,7 +124,7 @@
"Advanced notification settings": "通知の詳細設定",
"Notification targets": "通知先",
"You are not receiving desktop notifications": "デスクトップ通知を受け取っていません",
"Update": "アップデート",
"Update": "更新",
"Unable to fetch notification target list": "通知先リストを取得できませんでした",
"Uploaded on %(date)s by %(user)s": "このファイルは %(date)s に %(user)s によりアップロードされました",
"Send Custom Event": "カスタムイベントを送信する",
@ -162,7 +162,7 @@
"State Key": "ステータスキー",
"Quote": "引用",
"Send logs": "ログを送信する",
"Downloading update...": "アップデート、ダウンロードしています…",
"Downloading update...": "更新をダウンロードしています...",
"You have successfully set a password and an email address!": "パスワードとメールアドレスの設定に成功しました!",
"Failed to send custom event.": "カスタムイベントの送信に失敗しました。",
"What's new?": "新着",
@ -189,7 +189,7 @@
"Unhide Preview": "プレビューを表示する",
"Event Content": "イベントの内容",
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "現在ご使用のブラウザでは、アプリの外見や使い心地が正常でない可能性があります。また、一部または全部の機能がご使用いただけない可能性があります。このままご使用いただけますが、問題が発生した場合は対応しかねます!",
"Checking for an update...": "アップデートを確認しています…",
"Checking for an update...": "更新を確認しています...",
"e.g. <CurrentPageURL>": "凡例: <CurrentPageURL>",
"Your device resolution": "端末の解像度",
"Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "このページに部屋、ユーザー、グループIDなどの識別可能な情報が含まれている場合、そのデータはサーバーに送信される前に削除されます。",
@ -1505,5 +1505,26 @@
"Backup version:": "バックアップバージョン:",
"Secret storage:": "機密ストレージ:",
"Master private key:": "マスター秘密鍵:",
"Back up your encryption keys with your account data in case you lose access to your sessions. Your keys will be secured with a unique Recovery Key.": "セッションにアクセスできなくなる場合に備えて、アカウントデータとともに暗号鍵をバックアップします。あなたの鍵は一意のリカバリーキーで保護されます。"
"Back up your encryption keys with your account data in case you lose access to your sessions. Your keys will be secured with a unique Recovery Key.": "セッションにアクセスできなくなる場合に備えて、アカウントデータとともに暗号鍵をバックアップします。あなたの鍵は一意のリカバリーキーで保護されます。",
"Add a photo, so people can easily spot your room.": "写真を追加して、あなたの部屋を目立たせましょう。",
"Add a photo so people know it's you.": "写真を追加して、あなただとわかるようにしましょう。",
"Only the two of you are in this conversation, unless either of you invites anyone to join.": "あなたか宛先が誰かを招待しない限りは、この会話は2人だけのものです。",
"Password is allowed, but unsafe": "パスワードの要件は満たしていますが、安全ではありません",
"Nice, strong password!": "素晴らしい、強固なパスワードです!",
"Enter password": "パスワードを入力",
"Forgot password?": "パスワードをお忘れですか?",
"Enter email address": "メールアドレスを入力",
"Enter phone number (required on this homeserver)": "電話番号を入力 (このホームサーバーでは必須)",
"Enter phone number": "電話番号を入力",
"Show avatars in user and room mentions": "ユーザーと部屋でのメンションにアバターを表示する",
"Use Ctrl + F to search": "Ctrl + F で検索する",
"Back up your encryption keys with your account data in case you lose access to your sessions. Your keys will be secured with a unique Security Key.": "セッションにアクセスできなくなる場合に備えて、アカウントデータと暗号鍵をバックアップします。鍵は一意のセキュリティキーで保護されます。",
"New version available. <a>Update now.</a>": "新しいバージョンが利用可能です。<a>今すぐ更新</a>",
"Sign In": "サインイン",
"Create Account": "アカウントの作成",
"Explore rooms": "部屋を探す",
"Please view <existingIssuesLink>existing bugs on Github</existingIssuesLink> first. No match? <newIssueLink>Start a new one</newIssueLink>.": "まず、<existingIssuesLink>Github で既知のバグ</existingIssuesLink>を確認してください。また掲載されていない新しいバグを発見した場合は<newIssueLink>報告してください</newIssueLink>。",
"Report a bug": "バグの報告",
"Update %(brand)s": "%(brand)s の更新",
"New version of %(brand)s is available": "%(brand)s の新バージョンが利用可能です"
}

View file

@ -2731,5 +2731,23 @@
"The call was answered on another device.": "Tiririt ɣef usiwel tella-d ɣef yibenk-nniḍen.",
"Answered Elsewhere": "Yerra-d seg wadeg-nniḍen",
"The call could not be established": "Asiwel ur yeqεid ara",
"The other party declined the call.": "Amdan-nniḍen yugi asiwel."
"The other party declined the call.": "Amdan-nniḍen yugi asiwel.",
"%(senderDisplayName)s changed the server ACLs for this room.": "%(senderDisplayName)s isenfel iɣewwaren n unekcum ɣer texxamt-a.",
"Decide where your account is hosted": "Wali anida ara yezdeɣ umiḍan-ik·im",
"Host account on": "Sezdeɣ amiḍan deg",
"Already have an account? <a>Sign in here</a>": "Tesεiḍ yakan amiḍan? <a>Kcem ɣer da</a>",
"%(ssoButtons)s Or %(usernamePassword)s": "%(ssoButtons)s neɣ %(usernamePassword)s",
"Continue with %(ssoButtons)s": "Kemmel s %(ssoButtons)s",
"That username already exists, please try another.": "Isem-a n useqdac yella yakan, ttxil-k·m εreḍ wayeḍ.",
"Go to Home View": "Uɣal ɣer usebter agejdan",
"Send videos as you in this room": "Azen tividyutin deg texxamt-a am wakken d kečč",
"See images posted to your active room": "Wali tignatin i d-yeffɣen deg texxamt-a iremden",
"%(senderDisplayName)s set the server ACLs for this room.": "%(senderDisplayName)s yesbadu ACLs n uqeddac i texxamt-a.",
"Takes the call in the current room off hold": "Uɣal ɣer usiwel ara iteddun deg -texxamt-a",
"Places the call in the current room on hold": "Seḥbes asiwel deg texxamt-a i kra n wakud",
"Prepends ┬──┬ ( ゜-゜ノ) to a plain-text message": "Yerna ┬──┬ ( ゜-゜ノ) ɣer tazwara n yizen",
"Prepends (╯°□°)╯︵ ┻━┻ to a plain-text message": "Yerna (╯°□°)╯︵ ┻━┻ ɣer tazwara n yizen",
"This will end the conference for everyone. Continue?": "Aya ad yeḥbes asarag i yal yiwen. Kemmel?",
"End conference": "Kfu asarag",
"Call failed because microphone could not be accessed. Check that a microphone is plugged in and set up correctly.": "Tawuri tecceḍ acku asawaḍ ur yessaweḍ ara ad yekcem. Senqed ma yella usawaḍ yeqqnen yerna yettusbadu akken iwata."
}

View file

@ -2047,5 +2047,47 @@
"Please view <existingIssuesLink>existing bugs on Github</existingIssuesLink> first. No match? <newIssueLink>Start a new one</newIssueLink>.": "Pirmiausia peržiūrėkite <existingIssuesLink>Github'e esančius pranešimus apie klaidas</existingIssuesLink>. Jokio atitikmens? <newIssueLink>Pradėkite naują pranešimą</newIssueLink>.",
"This usually only affects how the room is processed on the server. If you're having problems with your %(brand)s, please <a>report a bug</a>.": "Paprastai tai turi įtakos tik kambario apdorojimui serveryje. Jei jūs turite problemų su savo %(brand)s, <a>praneškite apie klaidą</a>.",
"Report a bug": "Pranešti apie klaidą",
"Invite someone using their name, email address, username (like <userId/>) or <a>share this room</a>.": "Pakviesti ką nors, naudojant jų vardą, el. pašto adresą, vartotojo vardą (pvz.: <userId/>) arba <a>bendrinti šį kambarį</a>."
"Invite someone using their name, email address, username (like <userId/>) or <a>share this room</a>.": "Pakviesti ką nors, naudojant jų vardą, el. pašto adresą, vartotojo vardą (pvz.: <userId/>) arba <a>bendrinti šį kambarį</a>.",
"Azerbaijan": "Azerbaidžanas",
"Austria": "Austrija",
"Australia": "Australija",
"Aruba": "Aruba",
"Armenia": "Armėnija",
"Argentina": "Argentina",
"Antigua & Barbuda": "Antigva ir Barbuda",
"Antarctica": "Antarktida",
"Anguilla": "Angilija",
"Angola": "Angola",
"Andorra": "Andora",
"American Samoa": "Amerikos Samoa",
"Algeria": "Alžyras",
"Albania": "Albanija",
"Åland Islands": "Alandų Salos",
"Afghanistan": "Afganistanas",
"United States": "Jungtinės Amerikos Valstijos",
"United Kingdom": "Jungtinė Karalystė",
"You've reached the maximum number of simultaneous calls.": "Pasiekėte maksimalų vienu metu vykdomų skambučių skaičių.",
"Too Many Calls": "Per Daug Skambučių",
"No other application is using the webcam": "Jokia kita programa nenaudoja kameros",
"Permission is granted to use the webcam": "Suteiktas leidimas naudoti kamerą",
"A microphone and webcam are plugged in and set up correctly": "Mikrofonas ir kamera yra prijungti ir tinkamai nustatyti",
"Call failed because webcam or microphone could not be accessed. Check that:": "Skambutis nepavyko, nes kamera arba mikrofonas negali būti pasiekta. Patikrinkite tai:",
"Unable to access webcam / microphone": "Nepavyksta pasiekti kameros / mikrofono",
"Call failed because microphone could not be accessed. Check that a microphone is plugged in and set up correctly.": "Skambutis nepavyko, nes mikrofonas negali būti pasiektas. Patikrinkite, ar mikrofonas yra prijungtas ir tinkamai nustatytas.",
"Unable to access microphone": "Nepavyksta pasiekti mikrofono",
"Local Addresses": "Vietiniai Adresai",
"If you have previously used a more recent version of %(brand)s, your session may be incompatible with this version. Close this window and return to the more recent version.": "Jei anksčiau naudojote naujesnę %(brand)s versiją, jūsų seansas gali būti nesuderinamas su šia versija. Uždarykite šį langą ir grįžkite į naujesnę versiją.",
"We encountered an error trying to restore your previous session.": "Bandant atkurti ankstesnį seansą įvyko klaida.",
"The internet connection either session is using": "Interneto ryšys, naudojamas bet kurio seanso",
"This session, or the other session": "Šis seansas, arba kitas seansas",
"Confirm this user's session by comparing the following with their User Settings:": "Patvirtinkite šio vartotojo seansą, palygindami tai, kas nurodyta toliau, su jo Vartotojo Nustatymais:",
"Confirm by comparing the following with the User Settings in your other session:": "Patvirtinkite, palygindami tai, kas nurodyta toliau, su Vartotojo Nustatymais kitame jūsų seanse:",
"Clear all data in this session?": "Išvalyti visus duomenis šiame seanse?",
"%(count)s sessions|one": "%(count)s seansas",
"Yours, or the other users session": "Jūsų, arba kito vartotojo seansas",
"<requestLink>Re-request encryption keys</requestLink> from your other sessions.": "<requestLink>Iš naujo prašyti šifravimo raktų</requestLink> iš kitų jūsų seansų.",
"If your other sessions do not have the key for this message you will not be able to decrypt them.": "Jei jūsų kiti seansai neturi šios žinutės rakto, jūs negalėsite jos iššifruoti.",
"Missing session data": "Trūksta seanso duomenų",
"Successfully restored %(sessionCount)s keys": "Sėkmingai atkurti %(sessionCount)s raktai",
"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.": "Įspėjimas: Jūsų asmeniniai duomenys (įskaitant šifravimo raktus) vis dar yra saugomi šiame seanse. Išvalykite juos, jei baigėte naudoti šį seansą, arba norite prisijungti prie kitos paskyros."
}

File diff suppressed because it is too large Load diff

View file

@ -686,7 +686,7 @@
"Resend": "Opnieuw versturen",
"Error saving email notification preferences": "Fout bij het opslaan van de meldingsvoorkeuren voor e-mail",
"Messages containing my display name": "Berichten die mijn weergavenaam bevatten",
"Messages in one-to-one chats": "Berichten in tweegesprekken",
"Messages in one-to-one chats": "Berichten in een-op-een chats",
"Unavailable": "Niet beschikbaar",
"View Decrypted Source": "Ontsleutelde bron bekijken",
"Failed to update keywords": "Bijwerken van trefwoorden is mislukt",
@ -926,7 +926,7 @@
"Show developer tools": "Ontwikkelgereedschap tonen",
"Messages containing my username": "Berichten die mijn gebruikersnaam bevatten",
"Messages containing @room": "Berichten die @room bevatten",
"Encrypted messages in one-to-one chats": "Versleutelde berichten in tweegesprekken",
"Encrypted messages in one-to-one chats": "Versleutelde berichten in een-op-een chats",
"Encrypted messages in group chats": "Versleutelde berichten in groepsgesprekken",
"The other party cancelled the verification.": "De tegenpartij heeft de verificatie geannuleerd.",
"Verified!": "Geverifieerd!",
@ -1436,7 +1436,7 @@
"Please ask the administrator of your homeserver (<code>%(homeserverDomain)s</code>) to configure a TURN server in order for calls to work reliably.": "Vraag uw thuisserverbeheerder (<code>%(homeserverDomain)s</code>) een TURN-server te configureren teneinde oproepen betrouwbaar te doen werken.",
"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.": "U kunt ook de publieke server op <code>turn.matrix.org</code> gebruiken, maar dit zal minder betrouwbaar zijn, en zal uw IP-adres met die server delen. U kunt dit ook beheren in de Instellingen.",
"Try using turn.matrix.org": "Probeer turn.matrix.org te gebruiken",
"Allow fallback call assist server turn.matrix.org when your homeserver does not offer one (your IP address would be shared during a call)": "Sta de terugvalserver voor oproepbijstand turn.matrix.org toe wanneer uw thuisserver er geen aanbiedt (uw IP-adres wordt gedeeld gedurende een oproep)",
"Allow fallback call assist server turn.matrix.org when your homeserver does not offer one (your IP address would be shared during a call)": "Sta de terugvalserver voor oproepbijstand turn.matrix.org toe wanneer uw homeserver er geen aanbiedt (uw IP-adres wordt gedeeld gedurende een oproep)",
"Identity server has no terms of service": "De identiteitsserver heeft geen dienstvoorwaarden",
"The identity server you have chosen does not have any terms of service.": "De identiteitsserver die u heeft gekozen heeft geen dienstvoorwaarden.",
"Only continue if you trust the owner of the server.": "Ga enkel verder indien u de eigenaar van de server vertrouwt.",
@ -1515,7 +1515,7 @@
"Find a room… (e.g. %(exampleRoom)s)": "Zoek een gesprek… (bv. %(exampleRoom)s)",
"If you can't find the room you're looking for, ask for an invite or <a>Create a new room</a>.": "Als u het gesprek dat u zoekt niet kunt vinden, vraag dan een uitnodiging, of <a>Maak een nieuw gesprek aan</a>.",
"Explore rooms": "Gesprekken ontdekken",
"Show previews/thumbnails for images": "Toon voorbeelden voor afbeeldingen",
"Show previews/thumbnails for images": "Toon miniaturen voor afbeeldingen",
"Clear cache and reload": "Cache wissen en herladen",
"You are about to remove %(count)s messages by %(user)s. This cannot be undone. Do you wish to continue?|one": "U staat op het punt 1 bericht door %(user)s te verwijderen. Dit is onherroepelijk. Wilt u doorgaan?",
"Remove %(count)s messages|one": "1 bericht verwijderen",
@ -1531,7 +1531,7 @@
"Create a public room": "Maak een openbaar gesprek aan",
"Create a private room": "Maak een privégesprek aan",
"Topic (optional)": "Onderwerp (optioneel)",
"Make this room public": "Dit gesprek publiek maken",
"Make this room public": "Dit gesprek openbaar maken",
"Hide advanced": "Geavanceerde info verbergen",
"Show advanced": "Geavanceerde info tonen",
"Block users on other matrix homeservers from joining this room (This setting cannot be changed later!)": "Verhinder gebruikers op andere Matrix-thuisservers de toegang tot dit gesprek (Deze instelling kan later niet meer aangepast worden!)",
@ -1711,7 +1711,7 @@
"Mod": "Mod",
"rooms.": "gesprekken.",
"Recent rooms": "Actuele gesprekken",
"Direct Messages": "Tweegesprekken",
"Direct Messages": "Directe Berichten",
"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.",
@ -1895,7 +1895,7 @@
"The following users might not exist or are invalid, and cannot be invited: %(csvNames)s": "Volgende gebruikers bestaan mogelijk niet of zijn ongeldig, en kunnen dan ook niet uitgenodigd worden: %(csvNames)s",
"Recent Conversations": "Recente gesprekken",
"Suggestions": "Suggesties",
"Recently Direct Messaged": "Recente tweegesprekken",
"Recently Direct Messaged": "Recente gesprekken",
"Go": "Start",
"Your account is not secure": "Uw account is onveilig",
"Your password": "Uw wachtwoord",
@ -2025,7 +2025,7 @@
"Set password": "Stel wachtwoord in",
"To return to your account in future you need to set a password": "Zonder wachtwoord kunt u later niet tot uw account terugkeren",
"Restart": "Herstarten",
"People": "Tweegesprekken",
"People": "Personen",
"Set a room address to easily share your room with other people.": "Geef het gesprek een adres om het gemakkelijk met anderen te kunnen delen.",
"Invite people to join %(communityName)s": "Stuur uitnodigingen voor %(communityName)s",
"Unable to access microphone": "Je microfoon lijkt niet beschikbaar",
@ -2066,7 +2066,7 @@
"Call failed because microphone could not be accessed. Check that a microphone is plugged in and set up correctly.": "Oproep mislukt omdat er geen toegang is tot de microfoon. Kijk na dat de microfoon juist is aangesloten en ingesteld.",
"Video conference started by %(senderName)s": "Videovergadering gestart door %(senderName)s",
"Video conference updated by %(senderName)s": "Videovergadering geüpdatet door %(senderName)s",
"Video conference ended by %(senderName)s": "Videovergadering beëindigt door %(senderName)s",
"Video conference ended by %(senderName)s": "Videovergadering beëindigd door %(senderName)s",
"Join the conference from the room information card on the right": "Neem deel aan de vergadering via de informatiekaart rechts",
"List options": "Lijstopties",
"A-Z": "A-Z",
@ -2295,5 +2295,359 @@
"Belgium": "België",
"Belarus": "Wit-Rusland",
"Barbados": "Barbados",
"Bangladesh": "Bangladesh"
"Bangladesh": "Bangladesh",
"See when the name changes in your active room": "Zien wanneer de naam in uw actieve gesprek veranderd",
"Change the name of your active room": "Verander de naam van uw actieve gesprek",
"See when the name changes in this room": "Zien wanneer de naam in dit gesprek veranderd",
"Change the name of this room": "Verander de naam van dit gesprek",
"See when the topic changes in your active room": "Zien wanneer het onderwerp veranderd van uw actieve gesprek",
"Change the topic of your active room": "Verander het onderwerp van uw actieve gesprek",
"See when the topic changes in this room": "Zien wanneer het onderwerp van dit gesprek veranderd",
"Change the topic of this room": "Verander het onderwerp van dit gesprek",
"Change which room, message, or user you're viewing": "Verander welk gesprek, bericht of welke gebruiker u ziet",
"Change which room you're viewing": "Verander welk gesprek u ziet",
"(connection failed)": "(verbinden mislukt)",
"Places the call in the current room on hold": "De huidige oproep in de wacht zetten",
"Effects": "Effecten",
"Are you sure you want to cancel entering passphrase?": "Weet u zeker, dat u het invoeren van uw wachtwoord wilt afbreken?",
"Vatican City": "Vaticaanstad",
"Taiwan": "Taiwan",
"Your homeserver rejected your log in attempt. This could be due to things just taking too long. Please try again. If this continues, please contact your homeserver administrator.": "Uw thuisserver wees uw aanmeldingspoging af. Dit kan zijn doordat het te lang heeft geduurd. Probeer het opnieuw. Als dit probleem zich blijft voordoen, neem contact op met de beheerder van uw thuisserver.",
"Your homeserver was unreachable and was not able to log you in. Please try again. If this continues, please contact your homeserver administrator.": "Uw thuisserver was onbereikbaar en kon u niet aanmelden, probeer het opnieuw. Wanneer dit probleem zich blijft voordoen, neem contact op met de beheerder van uw thuisserver.",
"Try again": "Probeer opnieuw",
"We asked the browser to remember which homeserver you use to let you sign in, but unfortunately your browser has forgotten it. Go to the sign in page and try again.": "De browser is verzocht uw thuisserver te onthouden die u gebruikt om zich aan te melden, maar is deze vergeten. Ga naar de aanmeldpagina en probeer het opnieuw.",
"We couldn't log you in": "We konden u niet aanmelden",
"Room Info": "Gespreksinfo",
"Matrix.org is the biggest public homeserver in the world, so its a good place for many.": "Matrix.org is de grootste openbare thuisserver van de wereld, dus het is een goede plek voor vele.",
"Explore Public Rooms": "Verken openbare groepsgesprekken",
"Private rooms can be found and joined by invitation only. Public rooms can be found and joined by anyone in this community.": "Privégesprekken zijn alleen zichtbaar en toegankelijk met een uitnodiging. Openbare gesprekken zijn zichtbaar en toegankelijk voor iedereen in deze gemeenschap.",
"This room is public": "Dit gesprek is openbaar",
"Show previews of messages": "Toon voorvertoning van berichten",
"Show message previews for reactions in all rooms": "Toon berichtvoorbeelden voor reacties in alle gesprekken",
"Explore public rooms": "Verken openbare groepsgesprekken",
"Leave Room": "Verlaat gesprek",
"Room options": "Gesprekopties",
"Start a conversation with someone using their name, email address or username (like <userId/>).": "Start een gesprek met iemand door hun naam, emailadres of gebruikersnaam (zoals <userId/>) te typen.",
"Messages here are end-to-end encrypted. Verify %(displayName)s in their profile - tap on their avatar.": "Berichten hier zijn eind-tot-eind versleuteld. Verifieer %(displayName)s op hun profiel - klik op hun avatar.",
"%(creator)s created this DM.": "%(creator)s maakte deze DM.",
"Switch to dark mode": "Wissel naar donkere modus",
"Switch to light mode": "Wissel naar lichte modus",
"Appearance": "Weergave",
"All settings": "Alle instellingen",
"Error removing address": "Fout bij verwijderen van adres",
"There was an error removing that address. It may no longer exist or a temporary error occurred.": "Er is een fout opgetreden bij het verwijderen van dit adres. Deze bestaat mogelijk niet meer, of er is een tijdelijke fout opgetreden.",
"You don't have permission to delete the address.": "U heeft geen toestemming om het adres te verwijderen.",
"There was an error creating that address. It may not be allowed by the server or a temporary failure occurred.": "Er is een fout opgetreden bij het aanmaken van dit adres. Dit wordt mogelijk niet toegestaan door de server, of er is een tijdelijk probleem opgetreden.",
"Error creating address": "Fout bij aanmaken van het adres",
"There was an error updating the room's alternative addresses. It may not be allowed by the server or a temporary failure occurred.": "Er is een fout opgetreden bij het bijwerken van het nevenadres van het gesprek. Dit wordt mogelijk niet toegestaan door de server, of er is een tijdelijk probleem opgetreden.",
"Favourited": "Favoriet",
"Forget Room": "Gesprek vergeten",
"Notification options": "Meldingsinstellingen",
"Use default": "Gebruik standaardinstelling",
"Show %(count)s more|one": "Toon %(count)s meer",
"Show %(count)s more|other": "Toon %(count)s meer",
"Show rooms with unread messages first": "Gesprekken met ongelezen berichten als eerste tonen",
"%(count)s results|one": "%(count)s resultaten",
"%(count)s results|other": "%(count)s resultaten",
"Explore all public rooms": "Verken alle openbare groepsgesprekken",
"Start a new chat": "Een nieuw gesprek beginnen",
"Can't see what youre looking for?": "Niet kunnen vinden waar u naar zocht?",
"Custom Tag": "Aangepast label",
"Explore community rooms": "Gemeenschapsgesprekken verkennen",
"Start a Conversation": "Begin een gesprek",
"Show Widgets": "Widgets tonen",
"Hide Widgets": "Widgets verbergen",
"This is the start of <roomName/>.": "Dit is het begin van <roomName/>.",
"%(displayName)s created this room.": "%(displayName)s heeft dit gesprek aangemaakt.",
"You created this room.": "U heeft dit gesprek aangemaakt.",
"Topic: %(topic)s ": "Onderwerp: %(topic)s ",
"Topic: %(topic)s (<a>edit</a>)": "Onderwerp: %(topic)s (<a>bewerken</a>)",
"This is the beginning of your direct message history with <displayName/>.": "Dit is het begin van de geschiedenis van uw tweegesprek met <displayName/>.",
"Your server admin has disabled end-to-end encryption by default in private rooms & Direct Messages.": "De beheerder van uw server heeft eind-tot-eindversleuteling standaard uitgeschakeld in alle privégesprekken en tweegesprekken.",
"Scroll to most recent messages": "Spring naar meest recente bericht",
"The authenticity of this encrypted message can't be guaranteed on this device.": "De echtheid van dit versleutelde bericht kan op dit apparaat niet worden gegarandeerd.",
"To link to this room, please add an address.": "Voeg een adres toe om naar deze kamer te verwijzen.",
"Remove messages sent by others": "Berichten van anderen verwijderen",
"Privacy": "Privacy",
"Keyboard Shortcuts": "Sneltoetsen",
"Appearance Settings only affect this %(brand)s session.": "Weergave-instellingen zijn alleen van toepassing op deze %(brand)s sessie.",
"Customise your appearance": "Weergave aanpassen",
"Modern": "Modern",
"Compact": "Compact",
"Use between %(min)s pt and %(max)s pt": "Gebruik een getal tussen %(min)s pt en %(max)s pt",
"Custom font size can only be between %(min)s pt and %(max)s pt": "Aangepaste lettergrootte kan alleen een getal tussen %(min)s pt en %(max)s pt zijn",
"Size must be a number": "Grootte moet een getal zijn",
"New version available. <a>Update now.</a>": "Nieuwe versie beschikbaar. <a>Nu bijwerken.</a>",
"not ready": "Niet gereed",
"ready": "Gereed",
"unexpected type": "Onverwacht type",
"Algorithm:": "Algoritme:",
"Backup version:": "Versie reservekopie:",
"The operation could not be completed": "De handeling kon niet worden voltooid",
"Failed to save your profile": "Profiel opslaan mislukt",
"You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply.": "U heeft ze mogelijk ingesteld in een andere cliënt dan %(brand)s. U kunt ze niet aanpassen in %(brand)s, maar ze zijn wel actief.",
"There are advanced notifications which are not shown here.": "Er zijn geavanceerde meldingen die hier niet getoond worden.",
"Delete sessions|one": "Verwijder sessie",
"Delete sessions|other": "Verwijder sessies",
"Click the button below to confirm deleting these sessions.|one": "Bevestig het verwijderen van deze sessie door op de knop hieronder te drukken.",
"Click the button below to confirm deleting these sessions.|other": "Bevestig het verwijderen van deze sessies door op de knop hieronder te drukken.",
"Confirm deleting these sessions": "Bevestig dat u deze sessies wilt verwijderen",
"Confirm deleting these sessions by using Single Sign On to prove your identity.|one": "Bevestig uw identiteit met Eenmalige Aanmelding om deze sessies te verwijderen.",
"Confirm deleting these sessions by using Single Sign On to prove your identity.|other": "Bevestig uw identiteit met Eenmalige Aanmelding om deze sessies te verwijderen.",
"not found locally": "lokaal niet gevonden",
"cached locally": "Lokaal opgeslagen",
"not found in storage": "Niet gevonden in de opslag",
"Channel: <channelLink/>": "Kanaal: <channelLink/>",
"From %(deviceName)s (%(deviceId)s)": "Van %(deviceName)s %(deviceId)s",
"Waiting for your other session to verify…": "Wachten op uw andere sessie om te verifiëren…",
"Waiting for your other session, %(deviceName)s (%(deviceId)s), to verify…": "Wachten op uw andere sessie, %(deviceName)s (%(deviceId)s), om te verifiëren…",
"Verify this session by confirming the following number appears on its screen.": "Verifieer deze sessie door te bevestigen dat het scherm het volgende getal toont.",
"Confirm the emoji below are displayed on both sessions, in the same order:": "Bevestig dat de emoji's hieronder op beide sessies in dezelfde volgorde worden getoond:",
"Incoming call": "Inkomende oproep",
"Incoming video call": "Inkomende video-oproep",
"Incoming voice call": "Inkomende spraakoproep",
"Unknown caller": "Onbekende beller",
"There was an error looking up the phone number": "Bij het zoeken naar het telefoonnummer is een fout opgetreden",
"Unable to look up phone number": "Kan telefoonnummer niet opzoeken",
"Return to call": "Terug naar oproep",
"Fill Screen": "Scherm vullen",
"Voice Call": "Spraakoproep",
"Video Call": "Video-oproep",
"sends snowfall": "Stuur sneeuwvlokken",
"sends confetti": "Stuur confetti",
"sends fireworks": "Stuur vuurwerk",
"Downloading logs": "Logboeken downloaden",
"Uploading logs": "Logboeken versturen",
"Use Ctrl + Enter to send a message": "Gebruik Ctrl + Enter om een bericht te sturen",
"Use Command + Enter to send a message": "Gebruik Command (⌘) + Enter om een bericht te sturen",
"Use Ctrl + F to search": "Gebruik Ctrl + F om te zoeken",
"Use Command + F to search": "Gebruik Command (⌘) + F om te zoeken",
"Use a more compact Modern layout": "Gebruik een meer compacte 'Moderne' indeling",
"Use custom size": "Gebruik aangepaste grootte",
"Font size": "Lettergrootte",
"Enable advanced debugging for the room list": "Geavanceerde foutopsporing voor de gesprekkenlijst inschakelen",
"Render LaTeX maths in messages": "Weergeef LaTeX-wiskundenotatie in berichten",
"Change notification settings": "Meldingsinstellingen wijzigen",
"%(senderName)s: %(stickerName)s": "%(senderName)s: %(stickerName)s",
"%(senderName)s: %(reaction)s": "%(senderName)s: %(reaction)s",
"%(senderName)s: %(message)s": "%(senderName)s: %(message)s",
"* %(senderName)s %(emote)s": "* %(senderName)s %(emote)s",
"%(senderName)s is calling": "%(senderName)s belt",
"Waiting for answer": "Wachten op antwoord",
"%(senderName)s started a call": "%(senderName)s heeft een oproep gestart",
"You started a call": "U heeft een oproep gestart",
"Call ended": "Oproep beëindigd",
"%(senderName)s ended the call": "%(senderName)s heeft opgehangen",
"You ended the call": "U heeft opgehangen",
"Call in progress": "Oproep gaande",
"%(senderName)s joined the call": "%(senderName)s neemt deel aan de oproep",
"You joined the call": "U heeft deelgenomen aan de oproep",
"The person who invited you already left the room, or their server is offline.": "De persoon door wie u ben uitgenodigd heeft het gesprek al verlaten, of hun server is offline.",
"The person who invited you already left the room.": "De persoon door wie u ben uitgenodigd, heeft het gesprek reeds verlaten.",
"New version of %(brand)s is available": "Nieuwe versie van %(brand)s is beschikbaar",
"Update %(brand)s": "%(brand)s bijwerken",
"%(senderName)s has updated the widget layout": "%(senderName)s heeft de widget-indeling bijgewerkt",
"%(senderName)s declined the call.": "%(senderName)s heeft de oproep afgewezen.",
"(an error occurred)": "(een fout is opgetreden)",
"You've previously used a newer version of %(brand)s with this session. To use this version again with end to end encryption, you will need to sign out and back in again.": "U heeft eerder een nieuwere versie van %(brand)s in deze sessie gebruikt. Om deze versie opnieuw met eind-tot-eind-versleuteling te gebruiken, zult u zich moeten afmelden en opnieuw aanmelden.",
"Block anyone not part of %(serverName)s from ever joining this room.": "Weiger iedereen die geen deel uitmaakt van %(serverName)s aan dit gesprek deel te nemen.",
"Create a room in %(communityName)s": "Een gesprek aanmaken in %(communityName)s",
"Enable end-to-end encryption": "Eind-tot-eind-versleuteling inschakelen",
"Your server requires encryption to be enabled in private rooms.": "Uw server vereist dat versleuteling in een privégesprek is ingeschakeld.",
"Private rooms can be found and joined by invitation only. Public rooms can be found and joined by anyone.": "Privégesprekken zijn alleen zichtbaar en toegankelijk met een uitnodiging. Openbare gesprekken zijn zichtbaar en toegankelijk voor iedereen.",
"An image will help people identify your community.": "Een afbeelding zal anderen helpen uw gemeenschap te vinden.",
"Add image (optional)": "Afbeelding toevoegen (niet vereist)",
"Enter name": "Naam invoeren",
"What's the name of your community or team?": "Welke naam heeft uw gemeenschap of team?",
"You can change this later if needed.": "Indien nodig kunt u dit later nog veranderen.",
"Community ID: +<localpart />:%(domain)s": "Gemeenschaps-ID: +<localpart />:%(domain)s",
"Reason (optional)": "Reden (niet vereist)",
"Send %(count)s invites|one": "Stuur %(count)s uitnodiging",
"Send %(count)s invites|other": "Stuur %(count)s uitnodigingen",
"Show": "Toon",
"People you know on %(brand)s": "Mensen die u kent van %(brand)s",
"Add another email": "Nog een e-mailadres toevoegen",
"Download logs": "Download logboeken",
"Add a new server...": "Een nieuwe server toevoegen…",
"Server name": "Servernaam",
"Add a new server": "Een nieuwe server toevoegen",
"Matrix": "Matrix",
"Are you sure you want to remove <b>%(serverName)s</b>": "Weet u zeker dat u <b>%(serverName)s</b> wilt verwijderen",
"Your server": "Uw server",
"Can't find this server or its room list": "Kan deze server of de gesprekkenlijst niet vinden",
"Looks good": "Ziet er goed uit",
"Enter a server name": "Geef een servernaam",
"Continue with %(provider)s": "Doorgaan met %(provider)s",
"Homeserver": "Thuisserver",
"You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Element with an existing Matrix account on a different homeserver.": "U kunt de aangepaste serverinstellingen gebruiken om u aan te melden bij andere Matrix-servers, door een andere thuisserver-URL in te voeren. Dit laat u toe Element te gebruiken met een bestaande Matrix-account bij een andere thuisserver.",
"Server Options": "Serverinstellingen",
"This address is already in use": "Dit adres is al in gebruik",
"This address is available to use": "Dit adres kan worden gebruikt",
"Please provide a room address": "Geef een gespreksadres",
"Room address": "Gespreksadres",
"QR Code": "QR-code",
"Information": "Informatie",
"This version of %(brand)s does not support searching encrypted messages": "Deze versie van %(brand)s ondersteunt niet het doorzoeken van versleutelde berichten",
"This version of %(brand)s does not support viewing some encrypted files": "Deze versie van %(brand)s ondersteunt niet de mogelijkheid sommige versleutelde bestanden te weergeven",
"Use the <a>Desktop app</a> to search encrypted messages": "Gebruik de <a>Desktop-toepassing</a> om alle versleutelde berichten te zien",
"Categories": "Categorieën",
"Can't load this message": "Dit bericht kan niet geladen worden",
"Click to view edits": "Druk om wijzigingen te weergeven",
"Edited at %(date)s": "Bewerkt op %(date)s",
"Message deleted on %(date)s": "Bericht verwijderd op %(date)s",
"Message deleted by %(name)s": "Bericht verwijderd door %(name)s",
"Message deleted": "Bericht verwijderd",
"Join the conference at the top of this room": "Deelnemen aan de vergadering bovenaan dit gesprek",
"Ignored attempt to disable encryption": "Poging om versleuteling uit te schakelen genegeerd",
"Start verification again from the notification.": "Verificatie opnieuw beginnen vanuit de melding.",
"Verified": "Geverifieerd",
"You've successfully verified %(deviceName)s (%(deviceId)s)!": "U heeft %(deviceName)s (%(deviceId)s) geverifieerd!",
"You've successfully verified your device!": "U heeft uw apparaat geverifieerd!",
"Almost there! Is %(displayName)s showing the same shield?": "Bijna klaar! Toont %(displayName)s hetzelfde schild?",
"Almost there! Is your other session showing the same shield?": "Bijna klaar! Toont uw andere sessie hetzelfde schild?",
"Role": "Rol",
"Room settings": "Gespreksinstellingen",
"Show files": "Bestanden tonen",
"%(count)s people|other": "%(count)s mensen",
"About": "Over",
"Not encrypted": "Niet versleuteld",
"Widgets": "Widgets",
"Unpin a widget to view it in this panel": "Maak een widget los om het in dit deel te weergeven",
"Unpin": "Losmaken",
"You can only pin up to %(count)s widgets|other": "U kunt maar %(count)s widgets vastzetten",
"In encrypted rooms, your messages are secured and only you and the recipient have the unique keys to unlock them.": "In versleutelde gesprekken zijn uw berichten beveiligd, enkel de ontvanger en u hebben de unieke sleutels om ze te ontsleutelen.",
"Waiting for you to accept on your other session…": "Wachten totdat u uw uitnodiging in uw andere sessie aanneemt…",
"Set addresses for this room so users can find this room through your homeserver (%(localDomain)s)": "Stel een adres in zodat gebruikers dit gesprek via uw thuisserver (%(localDomain)s) kunnen vinden",
"Local Addresses": "Lokale adressen",
"Local address": "Lokaal adres",
"The server has denied your request.": "De server heeft uw verzoek afgewezen.",
"The server is offline.": "De server is offline.",
"A browser extension is preventing the request.": "Een invoertoepassing van uw browser verhindert de aanvraag.",
"The server (%(serverName)s) took too long to respond.": "De server (%(serverName)s) deed er te lang over om te antwoorden.",
"Server isn't responding": "Server reageert niet",
"You're all caught up.": "U bent helemaal bij.",
"Just a heads up, if you don't add an email and forget your password, you could <b>permanently lose access to your account</b>.": "Let op, wanneer u geen e-mailadres toevoegt en uw wachtwoord vergeet, kunt u <b>toegang tot uw account permanent verliezen</b>.",
"Continuing without email": "Doorgaan zonder e-mail",
"If they don't match, the security of your communication may be compromised.": "Als deze niet overeenkomen, dan wordt deze sessie mogelijk door iemand anders onderschept.",
"Confirm by comparing the following with the User Settings in your other session:": "Om te verifiëren dat deze sessie vertrouwd kan worden, contacteert u de eigenaar via een andere methode (bv. persoonlijk of via een telefoontje) en vraagt u hem/haar of de sleutel die hij/zij ziet in zijn/haar Gebruikersinstellingen van deze sessie overeenkomt met de sleutel hieronder:",
"Signature upload failed": "Versturen van ondertekening mislukt",
"Signature upload success": "Ondertekening succesvol verstuurd",
"Unable to upload": "Versturen niet mogelijk",
"Transfer": "Overdragen",
"Start a conversation with someone using their name or username (like <userId/>).": "Start een gesprek met iemand door hun naam of gebruikersnaam (zoals <userId/>) te typen.",
"May include members not in %(communityName)s": "Mag deelnemers bevatten die geen deel uitmaken van %(communityName)s",
"Invite by email": "Via e-mail uitnodigen",
"Click the button below to confirm your identity.": "Druk op de knop hieronder om uw identiteit te bevestigen.",
"Confirm to continue": "Bevestig om door te gaan",
"Report a bug": "Een fout rapporteren",
"Comment": "Opmerking",
"Add comment": "Opmerking toevoegen",
"Tell us below how you feel about %(brand)s so far.": "Vertel ons hoe %(brand)s u tot dusver bevalt.",
"Rate %(brand)s": "%(brand)s beoordelen",
"Update community": "Gemeenschap bijwerken",
"Active Widgets": "Ingeschakelde widgets",
"Manually verify all remote sessions": "Handmatig alle externe sessies verifiëren",
"System font name": "Systeemlettertypenaam",
"Use a system font": "Gebruik een systeemlettertype",
"Show line numbers in code blocks": "Toon regelnummers in codeblokken",
"Expand code blocks by default": "Standaard codeblokken uitvouwen",
"Show stickers button": "Toon stickers-knop",
"Offline encrypted messaging using dehydrated devices": "Offline versleutelde berichten met gebruik van uitgedroogde apparaten",
"Show message previews for reactions in DMs": "Toon berichtvoorbeelden voor reacties in DM's",
"New spinner design": "Nieuw laadicoonontwerp",
"Communities v2 prototypes. Requires compatible homeserver. Highly experimental - use with caution.": "Gemeenschappen v2 prototypes. Vereist een compatibele homeserver. Zeer experimenteel - gebruik met voorzichtigheid.",
"Safeguard against losing access to encrypted messages & data": "Beveiliging tegen verlies van toegang tot versleutelde berichten en gegevens",
"Set up Secure Backup": "Beveiligde back-up instellen",
"Contact your <a>server admin</a>.": "Neem contact op met uw <a>serverbeheerder</a>.",
"Use app": "Gebruik app",
"Element Web is experimental on mobile. For a better experience and the latest features, use our free native app.": "Element Web is experimenteel op mobiel. Voor een betere ervaring en de nieuwste functies kunt u onze gratis app gebruiken.",
"Use app for a better experience": "Gebruik de app voor een betere ervaring",
"Enable desktop notifications": "Bureaubladmeldingen inschakelen",
"Don't miss a reply": "Mis geen antwoord",
"Unknown App": "Onbekende App",
"Error leaving room": "Fout bij verlaten gesprek",
"Unexpected server error trying to leave the room": "Onverwachte serverfout bij het verlaten van dit gesprek",
"See <b>%(msgtype)s</b> messages posted to your active room": "Zie <b>%(msgtype)s</b>-berichten verstuurd in uw actieve gesprek",
"See <b>%(msgtype)s</b> messages posted to this room": "Zie <b>%(msgtype)s</b>-berichten verstuurd in dit gesprek",
"Send <b>%(msgtype)s</b> messages as you in your active room": "Stuur <b>%(msgtype)s</b>-berichten als uzelf in uw actieve gesprek",
"Send <b>%(msgtype)s</b> messages as you in this room": "Stuur <b>%(msgtype)s</b>-berichten als uzelf in dit gesprek",
"See general files posted to your active room": "Zie bestanden verstuurd naar uw actieve gesprek",
"See general files posted to this room": "Zie bestanden verstuurd naar dit gesprek",
"Send general files as you in your active room": "Stuur bestanden als uzelf in uw actieve gesprek",
"Send general files as you in this room": "Stuur bestanden als uzelf in dit gesprek",
"See videos posted to your active room": "Zie videos verstuurd naar uw actieve gesprek",
"See videos posted to this room": "Zie videos verstuurd naar dit gesprek",
"Send videos as you in your active room": "Stuur videos als uzelf in uw actieve gesprek",
"Send videos as you in this room": "Stuur videos als uzelf in dit gesprek",
"See images posted to your active room": "Zie afbeeldingen verstuurd in uw actieve gesprek",
"See images posted to this room": "Zie afbeeldingen verstuurd in dit gesprek",
"Send images as you in your active room": "Stuur afbeeldingen als uzelf in uw actieve gesprek",
"Send images as you in this room": "Stuur afbeeldingen als uzelf in dit gesprek",
"See emotes posted to your active room": "Zie emoticons verstuurd naar uw actieve gesprek",
"See emotes posted to this room": "Zie emoticons verstuurd naar dit gesprek",
"Send emotes as you in your active room": "Stuur emoticons als uzelf in uw actieve gesprek",
"Send emotes as you in this room": "Stuur emoticons als uzelf in dit gesprek",
"See text messages posted to your active room": "Zie tekstberichten verstuurd naar uw actieve gesprek",
"See text messages posted to this room": "Zie tekstberichten verstuurd naar dit gesprek",
"Send text messages as you in your active room": "Stuur tekstberichten als uzelf in uw actieve gesprek",
"Send text messages as you in this room": "Stuur tekstberichten als uzelf in dit gesprek",
"See messages posted to your active room": "Zie berichten verstuurd naar uw actieve gesprek",
"See messages posted to this room": "Zie berichten verstuurd naar dit gesprek",
"Send messages as you in your active room": "Stuur berichten als uzelf in uw actieve gesprek",
"Send messages as you in this room": "Stuur berichten als uzelf in dit gesprek",
"End": "Beëindigen",
"The <b>%(capability)s</b> capability": "De <b>%(capability)s</b> mogelijkheid",
"See <b>%(eventType)s</b> events posted to your active room": "Stuur <b>%(eventType)s</b> gebeurtenissen verstuurd in uw actieve gesprek",
"Send <b>%(eventType)s</b> events as you in your active room": "Stuur <b>%(eventType)s</b> gebeurtenissen als uzelf in uw actieve gesprek",
"See <b>%(eventType)s</b> events posted to this room": "Zie <b>%(eventType)s</b> gebeurtenissen verstuurd in dit gesprek",
"Send <b>%(eventType)s</b> events as you in this room": "Stuur <b>%(eventType)s</b> gebeurtenis als uzelf in dit gesprek",
"with state key %(stateKey)s": "met statussleutel %(stateKey)s",
"with an empty state key": "met een lege statussleutel",
"See when anyone posts a sticker to your active room": "Zien wanneer iemand een sticker in uw actieve gesprek verstuurd",
"Send stickers to your active room as you": "Stuur stickers naar uw actieve gesprek als uzelf",
"See when a sticker is posted in this room": "Zien wanneer stickers in dit gesprek zijn verstuurd",
"Send stickers to this room as you": "Stuur stickers in dit gesprek als uzelf",
"See when the avatar changes in your active room": "Zien wanneer de avatar in uw actieve gesprek veranderd",
"Change the avatar of your active room": "Wijzig de avatar van uw actieve gesprek",
"See when the avatar changes in this room": "Zien wanneer de avatar in dit gesprek veranderd",
"Change the avatar of this room": "Wijzig de gespreksavatar",
"Send stickers into your active room": "Stuur stickers in uw actieve gesprek",
"Send stickers into this room": "Stuur stickers in dit gesprek",
"Remain on your screen while running": "Blijft op uw scherm terwijl het beschikbaar is",
"Remain on your screen when viewing another room, when running": "Blijft op uw scherm wanneer u een andere gesprek bekijkt, zolang het beschikbaar is",
"(their device couldn't start the camera / microphone)": "(hun toestel kon de camera / microfoon niet starten)",
"🎉 All servers are banned from participating! This room can no longer be used.": "🎉 Alle servers zijn verbannen van deelname! Dit gesprek kan niet langer gebruikt worden.",
"%(senderDisplayName)s changed the server ACLs for this room.": "%(senderDisplayName)s vernaderde de server ACL's voor dit gesprek.",
"%(senderDisplayName)s set the server ACLs for this room.": "%(senderDisplayName)s stelde de server ACL's voor dit gesprek in.",
"Converts the room to a DM": "Verandert dit groepsgesprek in een DM",
"Converts the DM to a room": "Verandert deze DM in een groepsgesprek",
"Takes the call in the current room off hold": "De huidige oproep in huidige gesprek in de wacht zetten",
"São Tomé & Príncipe": "Sao Tomé en Principe",
"Swaziland": "Swaziland",
"Sudan": "Soedan",
"St. Vincent & Grenadines": "Sint Vincent en de Grenadines",
"South Georgia & South Sandwich Islands": "Zuid-Georgia en de Zuidelijke Sandwicheilanden",
"St. Pierre & Miquelon": "Sint Pierre en Miquelon",
"St. Helena": "Sint Helena",
"St. Lucia": "Sint Lucia",
"South Sudan": "Zuid-Soedan",
"Oman": "Oman",
"Theme added!": "Thema toegevoegd!",
"Add theme": "Thema toevoegen",
"No recently visited rooms": "Geen onlangs bezochte gesprekken",
"Use the <a>Desktop app</a> to see all encrypted files": "Gebruik de <a>Desktop-app</a> om alle versleutelde bestanden te zien",
"Reminder: Your browser is unsupported, so your experience may be unpredictable.": "Herinnering: Uw browser wordt niet ondersteund. Dit kan een negatieve impact hebben op uw ervaring.",
"Use this when referencing your community to others. The community ID cannot be changed.": "Gebruik dit om anderen naar uw gemeenschap te verwijzen. De gemeenschaps-ID kan later niet meer veranderd worden.",
"Please go into as much detail as you like, so we can track down the problem.": "Gebruik a.u.b. zoveel mogelijk details, zodat wij uw probleem kunnen vinden.",
"There are two ways you can provide feedback and help us improve %(brand)s.": "U kunt op twee manieren feedback geven en ons helpen %(brand)s te verbeteren.",
"Please view <existingIssuesLink>existing bugs on Github</existingIssuesLink> first. No match? <newIssueLink>Start a new one</newIssueLink>.": "Bekijk eerst de <existingIssuesLink>bestaande problemen op Github</existingIssuesLink>. <newIssueLink>Maak een nieuwe aan</newIssueLink> wanneer u uw probleem niet heeft gevonden.",
"Invite someone using their name, email address, username (like <userId/>) or <a>share this room</a>.": "Nodig iemand uit door gebruik te maken van hun naam, e-mailadres, gebruikersnaam (zoals <userId/>) of <a>deel dit gesprek</a>.",
"Invite someone using their name, username (like <userId/>) or <a>share this room</a>.": "Nodig iemand uit door gebruik te maken van hun naam, gebruikersnaam (zoals <userId/>) of <a>deel dit gesprek</a>.",
"Send feedback": "Feedback versturen",
"Feedback": "Feedback",
"Feedback sent": "Feedback verstuurd",
"Workspace: <networkLink/>": "Werkplaats: <networkLink/>",
"Your firewall or anti-virus is blocking the request.": "Uw firewall of antivirussoftware blokkeert de aanvraag.",
"Show chat effects": "Toon gesprekseffecten",
"Set the name of a font installed on your system & %(brand)s will attempt to use it.": "Stel de naam in van een lettertype dat op uw systeem is geïnstalleerd en %(brand)s zal proberen het te gebruiken."
}

View file

@ -771,7 +771,7 @@
"was invited %(count)s times|one": "został(a) zaproszony(-a)",
"was banned %(count)s times|one": "został(a) zablokowany(-a)",
"was kicked %(count)s times|one": "został wyrzucony",
"Whether or not you're using the Richtext mode of the Rich Text Editor": "Niezależnie od tego, czy używasz trybu Richtext edytora tekstu w formacie RTF",
"Whether or not you're using the Richtext mode of the Rich Text Editor": "Czy używasz bądź nie trybu edytora tekstu sformatowanego",
"Call in Progress": "Łączenie w toku",
"Permission Required": "Wymagane Uprawnienia",
"A call is currently being placed!": "W tej chwili trwa rozmowa!",
@ -883,7 +883,7 @@
"Retry": "Ponów",
"Unable to create key backup": "Nie można utworzyć kopii zapasowej klucza",
"Download": "Pobierz",
"Next": "Następny",
"Next": "Dalej",
"No backup found!": "Nie znaleziono kopii zapasowej!",
"Checking...": "Sprawdzanie…",
"Create a new room with the same name, description and avatar": "Utwórz nowy pokój o tej samej nazwie, opisie i awatarze",
@ -1047,8 +1047,8 @@
"Once enabled, encryption cannot be disabled.": "Po włączeniu szyfrowanie nie może zostać wyłączone.",
"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.": "Aby uniknąć duplikowania problemów, prosimy najpierw <existingIssuesLink>przejrzeć istniejące problemy</existingIssuesLink> (i dodać +1) lub <newIssueLink>utworzyć nowy problem</newIssueLink>, jeżeli nie możesz go znaleźć.",
"Go back": "Wróć",
"Whether or not you're logged in (we don't record your username)": "Niezależnie od tego, czy jesteś zalogowany (nie zapisujemy Twojej nazwy użytkownika)",
"Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "Niezależnie od tego, czy korzystasz z funkcji \"okruchy\" (awatary nad listą pokoi)",
"Whether or not you're logged in (we don't record your username)": "Czy jesteś zalogowany(-a) lub niezalogowany(-a) (nie zapisujemy Twojej nazwy użytkownika)",
"Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "Czy używasz korzystasz z funkcji „okruchów” (awatary nad listą pokoi)",
"Call failed due to misconfigured server": "Połączenie nie udało się przez błędną konfigurację serwera",
"Try using turn.matrix.org": "Spróbuj użyć serwera turn.matrix.org",
"The file '%(fileName)s' failed to upload.": "Nie udało się przesłać pliku '%(fileName)s'.",
@ -1998,9 +1998,9 @@
"Interactively verify by Emoji": "Zweryfikuj interaktywnie przez Emoji",
"Not Trusted": "Nie zaufany(-a)",
"Ask this user to verify their session, or manually verify it below.": "Poproś go/ją o zweryfikowanie tej sesji bądź zweryfikuj ją osobiście poniżej.",
"%(name)s (%(userId)s) signed in to a new session without verifying it:": "%(name)s%(userId)s zalogował(a) się do nowej sesji bez zweryfikowania jej:",
"%(name)s (%(userId)s) signed in to a new session without verifying it:": "%(name)s%(userId)s zalogował(a) się do nowej sesji bez zweryfikowania jej:",
"Verify your other session using one of the options below.": "Zweryfikuj swoje pozostałe sesje używając jednej z opcji poniżej.",
"You signed in to a new session without verifying it:": "Zalogowałeś się do nowej sesji bez jej zweryfikowania;",
"You signed in to a new session without verifying it:": "Zalogowałeś się do nowej sesji bez jej zweryfikowania:",
"%(senderName)s changed a rule that was banning servers matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s zmienił regułę banującą serwery pasujące do wzorca na %(oldGlob)s ustawiając nowy wzorzec %(newGlob)s z powodu %(reason)s",
"%(senderName)s changed a rule that was banning rooms matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s zmienił regułę banującą pokoje pasujące do wzorca na %(oldGlob)s ustawiając nowy wzorzec %(newGlob)s z powodu %(reason)s",
"%(senderName)s changed a rule that was banning users matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s zmienił regułę banującą użytkowników pasujących do wzorca na %(oldGlob)s ustawiając nowy wzorzec %(newGlob)s z powodu %(reason)s",
@ -2018,8 +2018,8 @@
"(an error occurred)": "(wystąpił błąd)",
"(their device couldn't start the camera / microphone)": "(ich urządzenie nie może uruchomić kamery / mikrofonu)",
"(connection failed)": "(połączenie nieudane)",
"%(senderName)s removed the alternative addresses %(addresses)s for this room.|one": "%(senderName)s usunął(-ęła) alternatywny adres %(addresses)s tego pokoju.",
"%(senderName)s removed the alternative addresses %(addresses)s for this room.|other": "%(senderName)s usunął(-ęła) alternatywny adres %(addresses)s tego pokoju.",
"%(senderName)s removed the alternative addresses %(addresses)s for this room.|one": "%(senderName)s usunął(-ęła) alternatywny adres %(addresses)s tego pokoju.",
"%(senderName)s removed the alternative addresses %(addresses)s for this room.|other": "%(senderName)s usunął(-ęła) alternatywny adres %(addresses)s tego pokoju.",
"🎉 All servers are banned from participating! This room can no longer be used.": "🎉 Wszystkie serwery zostały wykluczone z uczestnictwa! Ten pokój nie może być już używany.",
"Effects": "Efekty",
"Japan": "Japonia",
@ -2028,12 +2028,242 @@
"You've reached the maximum number of simultaneous calls.": "Osiągnięto maksymalną liczbę jednoczesnych połączeń.",
"Too Many Calls": "Zbyt wiele połączeń",
"No other application is using the webcam": "Kamera nie jest obecnie używana przez inną aplikację",
"Permission is granted to use the webcam": "Przyznano uprawnienia dostępu do kamery",
"Permission is granted to use the webcam": "Przyznano uprawnienia dostępu do kamery",
"A microphone and webcam are plugged in and set up correctly": "Mikrofon i kamera są podpięte i skonfigurowane prawidłowo",
"Call failed because webcam or microphone could not be accessed. Check that:": "Połączenie nieudane z powodu braku dostępu do kamery bądź mikrofonu. Sprawdź czy:",
"Unable to access webcam / microphone": "Nie można uzyskać dostępu do kamery / mikrofonu",
"Call failed because microphone could not be accessed. Check that a microphone is plugged in and set up correctly.": "Nie udało się zestawić połączenia z powodu braku dostępu do mikrofonu. Sprawdź czy mikrofon jest podłączony i poprawnie skonfigurowany.",
"Unable to access microphone": "Nie można uzyskać dostępu do mikrofonu",
"Forgot password?": "Nie pamiętasz hasła?",
"Use an identity server to invite by email. Manage in <settings>Settings</settings>.": "Użyj serwera tożsamości, aby zapraszać przez e-mail. Zarządzaj w <settings>Ustawieniach</settings>."
"Use an identity server to invite by email. Manage in <settings>Settings</settings>.": "Użyj serwera tożsamości, aby zapraszać przez e-mail. Zarządzaj w <settings>Ustawieniach</settings>.",
"Got it": "Rozumiem",
"Space used:": "Użyta powierzchnia:",
"This wasn't me": "To nie byłem(-am) ja",
"Verify by emoji": "Weryfikuj z użyciem emoji",
"Your messages are not secure": "Twoje wiadomości nie są bezpieczne",
"Start Verification": "Rozpocznij weryfikację",
"Waiting for %(displayName)s to accept…": "Oczekiwanie na akceptację przez %(displayName)s…",
"Bridges": "Mostki",
"Verify User": "Weryfikuj użytkownika",
"Verification Request": "Żądanie weryfikacji",
"Widgets do not use message encryption.": "Widżety nie używają szyfrowania wiadomości.",
"Automatically invite users": "Automatycznie zapraszaj użytkowników",
"This widget may use cookies.": "Ten widżet może używać plików cookies.",
"Widget added by": "Widżet dodany przez",
"Widget ID": "ID widżetu",
"Room ID": "ID pokoju",
"Your user ID": "Twoje ID użytkownika",
"Your avatar URL": "Adres URL Twojego awataru",
"Your display name": "Twoja nazwa wyświetlana",
"View rules": "Zobacz zasady",
"Quick Reactions": "Szybkie reakcje",
"Error subscribing to list": "Błąd subskrybowania listy",
"Please fill why you're reporting.": "Wypełnij, dlaczego dokonujesz zgłoszenia.",
"Jump to first unread room.": "Przejdź do pierwszego nieprzeczytanego pokoju.",
"Jump to first invite.": "Przejdź do pierwszego zaproszenia.",
"You verified %(name)s": "Zweryfikowałeś(-aś) %(name)s",
"Message Actions": "Działania na wiadomościach",
"This client does not support end-to-end encryption.": "Ten klient nie obsługuje szyfrowania end-to-end.",
"Failed to deactivate user": "Nie udało się zdezaktywować użytkownika",
"For a large amount of messages, this might take some time. Please don't refresh your client in the meantime.": "Dla większej liczby wiadomości, może to zająć trochę czasu. Nie odświeżaj klienta w tym czasie.",
"You are about to remove %(count)s messages by %(user)s. This cannot be undone. Do you wish to continue?|one": "Zamierzasz usunąć jedną wiadomość od %(user)s. Nie możesz tego cofnąć. Czy chcesz kontynuować?",
"You are about to remove %(count)s messages by %(user)s. This cannot be undone. Do you wish to continue?|other": "Zamierzasz usunąć %(count)s wiadomości od %(user)s. Nie możesz tego cofnąć. Czy chcesz kontynuować?",
"Remove recent messages by %(user)s": "Usuń ostatnie wiadomości od %(user)s",
"No recent messages by %(user)s found": "Nie znaleziono ostatnich wiadomości od %(user)s",
"Clear personal data": "Wyczyść dane osobiste",
"Sign in and regain access to your account.": "Zaloguj się i odzyskaj dostęp do konta.",
"This account has been deactivated.": "To konto zostało zdezaktywowane.",
"Use bots, bridges, widgets and sticker packs": "Używaj botów, mostków, widżetów i zestawów naklejek",
"Find others by phone or email": "Odnajdź innych z użyciem numeru telefonu lub adresu e-mail",
"Clear all data": "Wyczyść wszystkie dane",
"Please enter verification code sent via text.": "Wprowadź kod weryfikacyjny wysłany wiadomością tekstową.",
"Unable to share phone number": "Nie udało się udostępnić numeru telefonu",
"Unable to share email address": "Nie udało się udostępnić adresu e-mail",
"You can now close this window or <a>log in</a> to your new account.": "Możesz teraz zamknąć to okno, lub <a>zalogować się</a> na swoje nowe konto.",
"Continue with previous account": "Kontynuuj, używając poprzedniego konta",
"Use an email address to recover your account": "Użyj adresu e-mail, aby odzyskać swoje konto",
"Doesn't look like a valid email address": "To nie wygląda na prawidłowy adres e-mail",
"Incompatible local cache": "Niekompatybilna lokalna pamięć podręczna",
"Before submitting logs, you must <a>create a GitHub issue</a> to describe your problem.": "",
"Some files are <b>too large</b> to be uploaded. The file size limit is %(limit)s.": "Niektóre pliki są <b>zbyt duże</b> do wysłania. Ograniczenie wielkości plików to %(limit)s.",
"These files are <b>too large</b> to upload. The file size limit is %(limit)s.": "Te pliki są <b>zbyt duże</b> do wysłania. Ograniczenie wielkości plików to %(limit)s.",
"Remember my selection for this widget": "Zapamiętaj mój wybór dla tego widżetu",
"This file is <b>too large</b> to upload. The file size limit is %(limit)s but this file is %(sizeOfThisFile)s.": "Ten plik jest <b>zbyt duży</b>, aby został wysłany. Ograniczenie wielkości plików to %(limit)s, a ten plik waży %(sizeOfThisFile)s.",
"Your browser likely removed this data when running low on disk space.": "Twoja przeglądarka prawdopodobnie usunęła te dane, kiedy brakowało jej miejsca.",
"Missing session data": "Brakujące dane sesji",
"Sign out and remove encryption keys?": "Wylogować się i usunąć klucze szyfrowania?",
"Invited by %(sender)s": "Zaproszony(-a) przez %(sender)s",
"This room doesn't exist. Are you sure you're at the right place?": "Ten pokój nie istnieje. Czy na pewno jesteś we właściwym miejscu?",
"Something went wrong with your invite to %(roomName)s": "Coś poszło nie tak z Twoim zaproszeniem do %(roomName)s",
"You were banned from %(roomName)s by %(memberName)s": "Zostałeś(-aś) zbanowany(-a) z %(roomName)s przez %(memberName)s",
"Could not load user profile": "Nie udało się załadować profilu",
"Your password has been reset.": "Twoje hasło zostało zresetowane.",
"Want more than a community? <a>Get your own server</a>": "Chcesz więcej niż społeczności? <a>Zdobądź własny serwer</a>",
"Are you sure you want to sign out?": "Czy na pewno chcesz się wylogować?",
"Send %(eventType)s events": "Wyślij zdarzenia %(eventType)s",
"Failed to decrypt %(failedCount)s sessions!": "Nie udało się odszyfrować %(failedCount)s sesji!",
"Unable to load backup status": "Nie udało się załadować stanu kopii zapasowej",
"Failed to load group members": "Nie udało się załadować członków grupy",
"We've sent you an email to verify your address. Please follow the instructions there and then click the button below.": "Wysłaliśmy Ci e-mail, aby zweryfikować Twój adres. Podążaj za instrukcjami z niego, a później naciśnij poniższy przycisk.",
"Unable to verify phone number.": "Nie udało się zweryfikować numeru telefonu.",
"Go back to set it again.": "Wróć, aby skonfigurować to ponownie.",
"Upgrade Room Version": "Uaktualnij wersję pokoju",
"Upgrade this room to version %(version)s": "Uaktualnij ten pokój do wersji %(version)s",
"The room upgrade could not be completed": "Uaktualnienie pokoju nie mogło zostać ukończone",
"Failed to upgrade room": "Nie udało się uaktualnić pokoju",
"Backup version:": "Wersja kopii zapasowej:",
"The operation could not be completed": "To działanie nie mogło być ukończone",
"Failed to save your profile": "Nie udało się zapisać profilu",
"Confirm deleting these sessions": "Potwierdź usuwanie tych sesji",
"Unable to load session list": "Nie udało się załadować listy sesji",
"not found locally": "nie odnaleziono lokalnie",
"cached locally": "w lokalnej pamięci podręcznej",
"not found in storage": "nie odnaleziono w pamięci",
"in secret storage": "w tajnej pamięci",
"in memory": "w pamięci",
"Set up": "Konfiguruj",
"Channel: %(channelName)s": "Kanał: %(channelName)s",
"Workspace: %(networkName)s": "Przestrzeń robocza: %(networkName)s",
"This bridge is managed by <user />.": "Ten mostek jest zarządzany przez <user />.",
"Your server isn't responding to some <a>requests</a>.": "Twój serwer nie odpowiada na niektóre <a>zapytania</a>.",
"From %(deviceName)s (%(deviceId)s)": "Z %(deviceName)s (%(deviceId)s)",
"Verify this session by confirming the following number appears on its screen.": "Weryfikuj tę sesję potwierdzając, że następująca liczba pojawia się na jego ekranie.",
"Waiting for your other session, %(deviceName)s (%(deviceId)s), to verify…": "Oczekiwanie na weryfikację przez Twoją drugą sesję, %(deviceName)s (%(deviceId)s)…",
"Waiting for your other session to verify…": "Oczekiwanie na weryfikację przez Twoją drugą sesję…",
"Waiting for %(displayName)s to verify…": "Oczekiwanie na weryfikację przez %(displayName)s…",
"To be secure, do this in person or use a trusted way to communicate.": "Aby było to bezpieczne, wykonaj to przy tej osobie, lub używając zaufanego sposobu komunikacji.",
"Confirm the emoji below are displayed on both sessions, in the same order:": "Potwierdź, że poniższe emoji są wyświetlane w obu sesjach, w tej samej kolejności:",
"Start": "Rozpocznij",
"Compare a unique set of emoji if you don't have a camera on either device": "Porównaj unikatowy zestaw emoji, jeżeli nie masz aparatu na jednym z urządzeń",
"Compare unique emoji": "Porównaj unikatowe emoji",
"or": "lub",
"Scan this unique code": "Zeskanuj ten unikatowy kod",
"Verify this session by completing one of the following:": "Weryfikuj tę sesję wykonując jedno z następujących:",
"Incoming call": "Połączenie przychodzące",
"Unknown caller": "Nieznany rozmówca",
"Return to call": "Wróć do połączenia",
"Uploading logs": "Wysyłanie logów",
"Downloading logs": "Pobieranie logów",
"Show rooms with unread notifications first": "Pokazuj na początku pokoje z nieprzeczytanymi powiadomieniami",
"Use Command + Enter to send a message": "Użyj Command + Enter, aby wysłać wiadomość",
"Use Ctrl + Enter to send a message": "Użyj Ctrl + Enter, aby wysłać wiadomość",
"How fast should messages be downloaded.": "Jak szybko powinny być pobierane wiadomości.",
"IRC display name width": "Szerokość nazwy wyświetlanej IRC",
"Show chat effects": "Pokazuj efekty czatu",
"Render LaTeX maths in messages": "Renderuj działania LaTeX w wiadomościach",
"Multiple integration managers": "Wiele menedżerów integracji",
"Change notification settings": "Zmień ustawienia powiadomień",
"%(senderName)s: %(stickerName)s": "%(senderName)s: %(stickerName)s",
"%(senderName)s: %(reaction)s": "%(senderName)s: %(reaction)s",
"%(senderName)s: %(message)s": "%(senderName)s: %(message)s",
"%(senderName)s is calling": "%(senderName)s dzwoni",
"Waiting for answer": "Oczekiwanie na odpowiedź",
"%(senderName)s started a call": "%(senderName)s rozpoczął(-ęła) połączenie",
"You started a call": "Rozpocząłeś(-ęłaś) połączenie",
"Call ended": "Połączenie zakończone",
"%(senderName)s ended the call": "%(senderName)s zakończył(a) połączenie",
"The person who invited you already left the room.": "Osoba, która Cię zaprosiła, już opuściła pokój.",
"Verify the new login accessing your account: %(name)s": "Zweryfikuj nowe logowanie z dostępem do Twojego konta: %(name)s",
"You joined the call": "Dołączyłeś(-aś) do połączenia",
"%(senderName)s joined the call": "%(senderName)s dołączył(a) do połączenia",
"Call in progress": "Połączenie w trakcie",
"You ended the call": "Zakończyłeś(-aś) połączenie",
"New login. Was this you?": "Nowe logowanie. Czy to byłeś(-aś) Ty?",
"Contact your <a>server admin</a>.": "Skontaktuj się ze swoim <a>administratorem serwera</a>.",
"Your homeserver has exceeded one of its resource limits.": "Twój homeserver przekroczył jeden z limitów zasobów.",
"Your homeserver has exceeded its user limit.": "Twój homeserver przekroczył limit użytkowników.",
"Review": "Przejrzyj",
"Verify all your sessions to ensure your account & messages are safe": "Zweryfikuj wszystkie swoje sesje, aby upewnić się, że Twoje konto i wiadomości są bezpieczne",
"Error leaving room": "Błąd opuszczania pokoju",
"Unexpected server error trying to leave the room": "Nieoczekiwany błąd serwera podczas próby opuszczania pokoju",
"%(num)s days from now": "za %(num)s dni",
"%(num)s hours from now": "za %(num)s godzin",
"%(num)s minutes from now": "za %(num)s minut",
"a few seconds from now": "za kilka sekund",
"See messages posted to your active room": "Zobacz wiadomości publikowane w obecnym pokoju",
"See messages posted to this room": "Zobacz wiadomości publikowane w tym pokoju",
"Send messages as you in your active room": "Wysyłaj wiadomości jako Ty w obecnym pokoju",
"Send messages as you in this room": "Wysyłaj wiadomości jako Ty w tym pokoju",
"The <b>%(capability)s</b> capability": "Możliwość<b>%(capability)s</b>",
"Send <b>%(eventType)s</b> events as you in your active room": "Wysyłaj zdarzenia <b>%(eventType)s</b> jako Ty w obecnym pokoju",
"See <b>%(eventType)s</b> events posted to your active room": "Zobacz zdarzenia <b>%(eventType)s</b> opublikowane w Twoim aktywnym pokoju",
"See <b>%(eventType)s</b> events posted to this room": "Zobacz zdarzenia <b>%(eventType)s</b> opublikowane w tym pokoju",
"Send <b>%(eventType)s</b> events as you in this room": "Wysyłaj zdarzenia <b>%(eventType)s</b> jako Ty w tym pokoju",
"%(senderDisplayName)s set the server ACLs for this room.": "",
"Change the avatar of your active room": "Zmień awatar swojego aktywnego pokoju",
"See when the avatar changes in this room": "Zobacz, gdy awatar tego pokoju zmienia się",
"Change the avatar of this room": "Zmień awatar tego pokoju",
"See when the avatar changes in your active room": "Zobacz, gdy awatar Twojego obecnego pokoju zmienia się",
"See when the name changes in your active room": "Zobacz, gdy nazwa Twojego obecnego pokoju zmienia się",
"Change the name of your active room": "Zmień nazwę swojego obecnego pokoju",
"See when the name changes in this room": "Zobacz, gdy nazwa tego pokoju zmienia się",
"See when the topic changes in your active room": "Zobacz, gdy temat Twojego obecnego pokoju zmienia się",
"Change the topic of your active room": "Zmień temat swojego obecnego pokoju",
"See when the topic changes in this room": "Zobacz, gdy temat tego pokoju zmienia się",
"Manually Verify by Text": "Weryfikuj ręcznie tekstem",
"Everyone in this room is verified": "Wszyscy w tym pokoju są zweryfikowani",
"This room is end-to-end encrypted": "Ten pokój jest szyfrowany end-to-end",
"This message cannot be decrypted": "Ta wiadomość nie może zostać odszyfrowana",
"Scroll to most recent messages": "Przewiń do najnowszych wiadomości",
"Incoming video call": "Przychodzące połączenie wideo",
"Video Call": "Połączenie wideo",
"Fill Screen": "Wypełnij ekran",
"The integration manager is offline or it cannot reach your homeserver.": "Menedżer integracji jest offline, lub nie może połączyć się z Twoim homeserverem.",
"Cannot connect to integration manager": "Nie udało się połączyć z menedżerem integracji",
"Incoming voice call": "Przychodzące połączenie głosowe",
"Voice Call": "Połączenie głosowe",
"To report a Matrix-related security issue, please read the Matrix.org <a>Security Disclosure Policy</a>.": "Aby zgłosić błąd związany z bezpieczeństwem Matriksa, przeczytaj <a>Politykę odpowiedzialnego ujawniania informacji</a> Matrix.org.",
"Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Czy używasz %(brand)s na urządzeniu, gdzie dotyk jest główną metodą wprowadzania",
"Whether you're using %(brand)s as an installed Progressive Web App": "Czy używasz %(brand)s zainstalowanego jako Progressive Web App",
"Use email or phone to optionally be discoverable by existing contacts.": "Użyj adresu e-mail lub numeru telefonu, aby móc dodatkowo być odkrywanym(-ą) przez istniejące kontakty.",
"Add an email to be able to reset your password.": "Dodaj adres e-mail, aby zresetować swoje hasło.",
"Host account on": "Przechowuj konto na",
"Already have an account? <a>Sign in here</a>": "Masz już konto? <a>Zaloguj się tutaj</a>",
"Sign in instead": "Zaloguj się zamiast tego",
"Learn more": "Dowiedz się więcej",
"New? <a>Create account</a>": "Nowy(-a)? <a>Utwórz konto</a>",
"New here? <a>Create an account</a>": "Nowy(-a)? <a>Utwórz konto</a>",
"You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Element with an existing Matrix account on a different homeserver.": "Możesz użyć własnych opcji serwera aby zalogować się na inny serwer Matrixa, określając inny adres URL serwera. To pozwala Ci na używanie Elementu z użyciem istniejącego konta Matrixa na innym serwerze.",
"Server Options": "Opcje serwera",
"<b>Copy it</b> to your personal cloud storage": "<b>Skopiuj go</b> do osobistego dysku w chmurze",
"Your recovery key is in your <b>Downloads</b> folder.": "Twój klucz przywracania jest w Twoim folderze <b>Pobrane</b>.",
"Keep a copy of it somewhere secure, like a password manager or even a safe.": "Zachowaj jego kopię w bezpiecznym miejscu, np. w menedżerze haseł, czy nawet w sejfie.",
"Your recovery key": "Twój klucz przywracania",
"Make a copy of your recovery key": "Dokonaj kopii swojego klucza przywracania",
"Enter your recovery passphrase a second time to confirm it.": "Wprowadź swoje hasło przywracania drugi raz, aby je potwierdzić.",
"Confirm your recovery passphrase": "Potwierdź swoje hasło przywracania",
"Please enter your recovery passphrase a second time to confirm.": "Wprowadź swoje hasło przywracania drugi raz, aby je potwierdzić.",
"<b>Warning</b>: You should only set up key backup from a trusted computer.": "<b>Ostrzeżenie</b>: Kopia zapasowa klucza powinna być konfigurowana tylko z zaufanego komputera.",
"<b>Warning</b>: you should only set up key backup from a trusted computer.": "<b>Ostrzeżenie</b>: kopia zapasowa klucza powinna być konfigurowana tylko z zaufanego komputera.",
"For maximum security, this should be different from your account password.": "Dla maksymalnego bezpieczeństwa, powinno się ono różnić od hasła do Twojego konta.",
"Enter recovery passphrase": "Wprowadź hasło przywracania",
"We'll store an encrypted copy of your keys on our server. Secure your backup with a recovery passphrase.": "Będziemy przechowywać zaszyfrowaną kopię Twoich kluczy na naszym serwerze. Zabezpiecz swoją kopię zapasową hasłem przywracania.",
"Secure your backup with a recovery passphrase": "Zabezpiecz swoją kopię zapasową z hasłem przywracania",
"Discovery options will appear once you have added an email above.": "Opcje odkrywania pojawią się, gdy dodasz adres e-mail powyżej.",
"Discovery options will appear once you have added a phone number above.": "Opcje odkrywania pojawią się, gdy dodasz numer telefonu powyżej.",
"Show shortcuts to recently viewed rooms above the room list": "Pokazuj skróty do ostatnio wyświetlonych pokoi nad listą pokoi",
"Signature upload failed": "Wysłanie podpisu nie powiodło się",
"Signature upload success": "Wysłanie podpisu udało się",
"Manually export keys": "Ręcznie eksportuj klucze",
"Unable to upload": "Nie można wysłać",
"Recently Direct Messaged": "Ostatnio skontaktowani bezpośrednio",
"Click the button below to confirm your identity.": "Naciśnij poniższy przycisk, aby potwierdzić swoją tożsamość.",
"Confirm to continue": "Potwierdź, aby kontynuować",
"To continue, use Single Sign On to prove your identity.": "Aby kontynuować, użyj Single Sign On do potwierdzenia swojej tożsamości.",
"Integrations not allowed": "Integracje nie są dozwolone",
"Incoming Verification Request": "Oczekująca prośba o weryfikację",
"Waiting for partner to confirm...": "Oczekiwanie na potwierdzenie przez partnera…",
"Verify this user to mark them as trusted. Trusting users gives you extra peace of mind when using end-to-end encrypted messages.": "Zweryfikuj tego użytkownika, aby oznaczyć go jako zaufanego. Ustawienia użytkownika jako zaufanego dodaje większej pewności, gdy korzystasz z wiadomości szyfrowanych end-to-end.",
"PRO TIP: If you start a bug, please submit <debugLogsLink>debug logs</debugLogsLink> to help us track down the problem.": "PROTIP: Jeżeli zgłaszasz błąd, prosimy wysłać <debugLogsLink>dzienniki debugowania</debugLogsLink>, aby pomóc nam odnaleźć problem.",
"Please view <existingIssuesLink>existing bugs on Github</existingIssuesLink> first. No match? <newIssueLink>Start a new one</newIssueLink>.": "Najpierw zobacz <existingIssuesLink>istniejące błędy na GitHubie</existingIssuesLink>. Nie znajdziesz niczego? <newIssueLink>Utwórz nowy</newIssueLink>.",
"Report a bug": "Zgłoś błąd",
"Comment": "Komentarz",
"Add comment": "Dodaj komentarz",
"Please go into as much detail as you like, so we can track down the problem.": "Napisz tak szczegółowo, jak tylko możesz, abyśmy mogli odnaleźć problem.",
"Tell us below how you feel about %(brand)s so far.": "Powiedz nam, jak na razie podoba Ci się %(brand)s.",
"Rate %(brand)s": "Oceń %(brand)s",
"There was an error finding this widget.": "Wystąpił błąd podczas próby odnalezienia tego widżetu.",
"Active Widgets": "Aktywne widżety",
"Encryption not enabled": "Nie włączono szyfrowania",
"Encryption enabled": "Włączono szyfrowanie"
}

View file

@ -2912,5 +2912,76 @@
"Sends the given message with fireworks": "Envia a mensagem com fogos de artifício",
"Prepends ┬──┬ ( ゜-゜ノ) to a plain-text message": "Adiciona ┬──┬ ( ゜-゜ノ) a uma mensagem de texto simples",
"Prepends (╯°□°)╯︵ ┻━┻ to a plain-text message": "Adiciona (╯°□°)╯︵ ┻━┻ a uma mensagem de texto",
"You have no visible notifications.": "Não há notificações."
"You have no visible notifications.": "Não há notificações.",
"This session has detected that your Security Phrase and key for Secure Messages have been removed.": "Esta sessão detectou que a sua Frase de Segurança e a chave para mensagens seguras foram removidas.",
"A new Security Phrase and key for Secure Messages have been detected.": "Uma nova Frase de Segurança e uma nova chave para mensagens seguras foram detectadas.",
"Make a copy of your Security Key": "Faça uma cópia da sua Chave de Segurança",
"Confirm your Security Phrase": "Confirmar com a sua Frase de Segurança",
"Secure your backup with a Security Phrase": "Proteja o seu backup com uma Frase de Segurança",
"Your Security Key is in your <b>Downloads</b> folder.": "Sua Chave de Segurança está na pasta <b>Downloads</b>.",
"Your Security Key has been <b>copied to your clipboard</b>, paste it to:": "A sua Chave de Segurança foi <b>copiada para a sua área de transferência</b>, cole-a em:",
"Your Security Key": "Sua Chave de Segurança",
"Your Security Key is a safety net - you can use it to restore access to your encrypted messages if you forget your Security Phrase.": "A sua Chave de Segurança é uma prevenção - você pode usá-la para restaurar o acesso às suas mensagens criptografadas, se esquecer a sua Frase de Segurança.",
"Repeat your Security Phrase...": "Repita a sua Frase de Segurança...",
"Please enter your Security Phrase a second time to confirm.": "Digite a sua Frase de Segurança uma segunda vez para confirmá-la.",
"Set up with a Security Key": "Configurar uma Chave de Segurança",
"Great! This Security Phrase looks strong enough.": "Ótimo! Essa frase de segurança parece ser segura o suficiente.",
"We'll store an encrypted copy of your keys on our server. Secure your backup with a Security Phrase.": "Armazenaremos uma cópia criptografada de suas chaves em nosso servidor. Proteja o seu backup com uma Frase de Segurança.",
"Use Security Key": "Use a Chave de Segurança",
"Use Security Key or Phrase": "Use uma Chave de Segurança ou uma Frase de Segurança",
"If you've forgotten your Security Key you can <button>set up new recovery options</button>": "Se você esqueceu a sua Chave de Segurança, você pode <button>definir novas opções de recuperação</button>",
"Access your secure message history and set up secure messaging by entering your Security Key.": "Acesse o seu histórico de mensagens seguras e configure as mensagens seguras, ao inserir a sua Chave de Segurança.",
"Not a valid Security Key": "Chave de Segurança inválida",
"This looks like a valid Security Key!": "Essa Chave de Segurança é válida!",
"Enter Security Key": "Digite a Chave de Segurança",
"If you've forgotten your Security Phrase you can <button1>use your Security Key</button1> or <button2>set up new recovery options</button2>": "Se você esqueceu a sua Frase de Segurança, você pode <button1>usar a sua Chave de Segurança</button1> ou <button2>definir novas opções de recuperação</button2>",
"Access your secure message history and set up secure messaging by entering your Security Phrase.": "Acesse o seu histórico de mensagens seguras e configure mensagens seguras digitando a sua Frase de Segurança.",
"Enter Security Phrase": "Digite a Frase de Segurança",
"Backup could not be decrypted with this Security Phrase: please verify that you entered the correct Security Phrase.": "O backup não pôde ser descriptografado com esta Frase de Segurança: verifique se você digitou a Frase de Segurança correta.",
"Incorrect Security Phrase": "Frase de Segurança incorreta",
"Backup could not be decrypted with this Security Key: please verify that you entered the correct Security Key.": "Não foi possível descriptografar o backup com esta chave de segurança: verifique se você digitou a chave de segurança correta.",
"Security Key mismatch": "Incompatibilidade da Chave de Segurança",
"Unable to access secret storage. Please verify that you entered the correct Security Phrase.": "Não foi possível acessar o armazenamento secreto. Verifique se você digitou a Frase de Segurança correta.",
"Invalid Security Key": "Chave de Segurança inválida",
"Wrong Security Key": "Chave de Segurança errada",
"We recommend you change your password and Security Key in Settings immediately": "Recomendamos que você altere imediatamente a sua senha e Chave de Segurança nas Configurações",
"Transfer": "Transferir",
"Failed to transfer call": "Houve uma falha ao transferir a chamada",
"A call can only be transferred to a single user.": "Uma chamada só pode ser transferida para um único usuário.",
"There was an error finding this widget.": "Ocorreu um erro ao encontrar este widget.",
"Active Widgets": "Widgets ativados",
"Set my room layout for everyone": "Definir a minha aparência da sala para todos",
"Open dial pad": "Abrir o teclado de discagem",
"Start a Conversation": "Começar uma conversa",
"Back up your encryption keys with your account data in case you lose access to your sessions. Your keys will be secured with a unique Security Key.": "Faça backup de suas chaves de criptografia com os dados da sua conta, para se prevenir a perder o acesso às suas sessões. Suas chaves serão protegidas por uma Chave de Segurança exclusiva.",
"Channel: <channelLink/>": "Canal: <channelLink/>",
"Workspace: <networkLink/>": "Espaço de trabalho: <networkLink/>",
"Dial pad": "Teclado de discagem",
"There was an error looking up the phone number": "Ocorreu um erro ao procurar o número de telefone",
"Unable to look up phone number": "Não foi possível procurar o número de telefone",
"Change which room, message, or user you're viewing": "Alterar a sala, mensagem ou usuário que você está visualizando",
"%(senderName)s has updated the widget layout": "%(senderName)s atualizou a aparência do widget",
"Search (must be enabled)": "Pesquisar (deve estar ativado)",
"Upgrade to pro": "Atualizar para a versão pro",
"Something went wrong in confirming your identity. Cancel and try again.": "Algo deu errado ao confirmar a sua identidade. Cancele e tente novamente.",
"Remember this": "Lembre-se disso",
"The widget will verify your user ID, but won't be able to perform actions for you:": "O widget verificará o seu ID de usuário, mas não poderá realizar ações para você:",
"Allow this widget to verify your identity": "Permitir que este widget verifique a sua identidade",
"Privacy Policy": "Política de privacidade",
"Learn more in our <privacyPolicyLink />, <termsOfServiceLink /> and <cookiePolicyLink />.": "Saiba mais em nossa <privacyPolicyLink />, <termsOfServiceLink /> e <cookiePolicyLink />.",
"Windows": "Windows",
"Screens": "Telas",
"Share your screen": "Compartilhar a sua tela",
"Recently visited rooms": "Salas visitadas recentemente",
"Use Command + F to search": "Use Command + F para pesquisar",
"Use Ctrl + F to search": "Use Ctrl + F para pesquisar",
"Show line numbers in code blocks": "Mostrar o número da linha em blocos de código",
"Expand code blocks by default": "Expandir blocos de código por padrão",
"Show stickers button": "Mostrar o botão de figurinhas",
"Use app": "Usar o aplicativo",
"Use app for a better experience": "Use o aplicativo para ter uma experiência melhor",
"Converts the DM to a room": "Converte a conversa para uma sala",
"Converts the room to a DM": "Converte a sala para uma conversa",
"Try again": "Tente novamente",
"We couldn't log you in": "Não foi possível fazer login"
}

View file

@ -84,7 +84,7 @@
"%(senderName)s answered the call.": "%(senderName)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\".",
@ -273,7 +273,7 @@
"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 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.": "Попытка загрузить выбранный интервал истории чата этой комнаты не удалась, так как у вас нет разрешений на просмотр.",
@ -636,7 +636,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 в комнату",
@ -2975,5 +2975,15 @@
"You have no visible notifications.": "У вас нет видимых уведомлений.",
"Transfer": "Перевод",
"Failed to transfer call": "Не удалось перевести звонок",
"A call can only be transferred to a single user.": "Вызов может быть передан только одному пользователю."
"A call can only be transferred to a single user.": "Вызов может быть передан только одному пользователю.",
"There was an error finding this widget.": "При обнаружении этого виджета произошла ошибка.",
"Active Widgets": "Активные виджеты",
"Open dial pad": "Открыть панель набора номера",
"Dial pad": "Панель набора номера",
"Start a Conversation": "Начать разговор",
"There was an error looking up the phone number": "При поиске номера телефона произошла ошибка",
"Unable to look up phone number": "Невозможно найти номер телефона",
"Change which room, message, or user you're viewing": "Измените комнату, сообщение или пользователя, которого вы просматриваете",
"Channel: <channelLink/>": "Канал: <channelLink/>",
"Workspace: <networkLink/>": "Рабочая область: <networkLink/>"
}

View file

@ -2974,5 +2974,74 @@
"You have no visible notifications.": "Skeni njoftime të dukshme.",
"Transfer": "Shpërngule",
"Failed to transfer call": "Su arrit të shpërngulej thirrje",
"A call can only be transferred to a single user.": "Një thirrje mund të shpërngulet vetëm te një përdorues."
"A call can only be transferred to a single user.": "Një thirrje mund të shpërngulet vetëm te një përdorues.",
"There was an error finding this widget.": "Pati një gabim në gjetjen e këtij widget-i.",
"Active Widgets": "Widget-e Aktivë",
"Open dial pad": "Hap butonat e numrave",
"Start a Conversation": "Filloni një Bisedë",
"Dial pad": "Butona numrash",
"There was an error looking up the phone number": "Pati një gabim gjatë kërkimit të numrit të telefonit",
"Unable to look up phone number": "Sarrihet të kërkohet numër telefoni",
"Your Security Key": "Kyçi juaj i Sigurisë",
"Your Security Key is in your <b>Downloads</b> folder.": "Kyçi juaj i Sigurisë gjendet te dosja juaj <b>Shkarkime</b>.",
"We'll store an encrypted copy of your keys on our server. Secure your backup with a Security Phrase.": "Do të ruajmë një kopje të fshehtëzuar të kyçeve tuaj në shërbyesin tonë. Siguroni kopjeruajtjen tuaj me një Frazë Sigurie.",
"Use Security Key": "Përdorni Kyç Sigurie",
"A new Security Phrase and key for Secure Messages have been detected.": "Janë pikasur një Frazë e re Sigurie dhe kyç i ri për Mesazhe të Sigurt.",
"If you've forgotten your Security Key you can <button>set up new recovery options</button>": "Nëse keni harruar Kyçin tuaj të Sigurisë, mund të <button>ujdisni mundësi të reja rimarrjeje</button>.",
"Your Security Key has been <b>copied to your clipboard</b>, paste it to:": "Kyçi juaj i Sigurisë është <b>kopjuar te e papastra juaj</b>, ngjiteni te:",
"Confirm your Security Phrase": "Ripohoni Frazën tuaj të Sigurisë",
"Secure your backup with a Security Phrase": "Sigurojeni kopjeruajtjen tuaj me një Frazë Sigurie.",
"Repeat your Security Phrase...": "Përsëritni Frazën tuaj të Sigurisë…",
"Please enter your Security Phrase a second time to confirm.": "Ju lutemi, që të ripohohet, rijepeni Frazën tuaj të Sigurisë.",
"This session has detected that your Security Phrase and key for Secure Messages have been removed.": "Ky sesion ka pikasur se Fraza e Sigurisë dhe kyçi juaj për Mesazhe të Sigurt janë hequr.",
"Use Security Key or Phrase": "Përdorni Kyç ose Frazë Sigurie",
"Great! This Security Phrase looks strong enough.": "Bukur! Kjo Frazë Sigurie duket goxha e fuqishme.",
"Set up with a Security Key": "Ujdiseni me një Kyç Sigurie",
"Access your secure message history and set up secure messaging by entering your Security Key.": "Hyni te historiku i mesazheve tuaj të siguruar dhe rregulloni shkëmbim mesazhesh të sigurt duke dhënë Kyçin tuaj të Sigurisë.",
"Your Security Key is a safety net - you can use it to restore access to your encrypted messages if you forget your Security Phrase.": "Kyçi juaj i Sigurisë është një rrjetë sigurie - mund ta përdorni të të rifituar hyrje te mesazhet tuaj të fshehtëzuar, nëse harroni Frazën tuaj të Sigurisë.",
"Make a copy of your Security Key": "Bëni një kopje të Kyçit tuaj të Sigurisë",
"Not a valid Security Key": "Kyç Sigurie jo i vlefshëm",
"This looks like a valid Security Key!": "Ky duket si Kyç i vlefshëm Sigurie!",
"Enter Security Key": "Jepni Kyç Sigurie",
"If you've forgotten your Security Phrase you can <button1>use your Security Key</button1> or <button2>set up new recovery options</button2>": "Nëse keni harruar Frazën tuaj të Sigurisë, mund të <button1>përdorni Kyçin tuaj të Sigurisë</button1> ose të <button2>ujdisni mundësi të reja rikthimi</button2>",
"Access your secure message history and set up secure messaging by entering your Security Phrase.": "Hyni te historiku i mesazheve tuaj të siguruara dhe ujdisni shkëmbim të sigurt mesazhesh duke dhënë Frazën tuaj të Sigurisë.",
"Enter Security Phrase": "Jepni Frazën e Sigurisë",
"Backup could not be decrypted with this Security Phrase: please verify that you entered the correct Security Phrase.": "Kopjeruajtja su shfshehtëzua dot me këtë Frazë Sigurie: ju lutemi, verifikoni se keni dhënë Frazën e saktë të Sigurisë.",
"Incorrect Security Phrase": "Frazë e Pasaktë Sigurie",
"Backup could not be decrypted with this Security Key: please verify that you entered the correct Security Key.": "Kopjeruajtja smund të shfshehtëzohej me Kyçin e Sigurisë: ju lutemi, verifikoni se keni dhënë Kyçin e saktë të Sigurisë.",
"Security Key mismatch": "Mospërputhje Kyçesh Sigurie",
"Unable to access secret storage. Please verify that you entered the correct Security Phrase.": "Sarrihet të hyhet në depozitë të fshehtë. Ju lutemi, verifikoni se keni dhënë Frazën e saktë të Sigurisë.",
"Invalid Security Key": "Kyç Sigurie i Pavlefshëm",
"Wrong Security Key": "Kyç Sigurie i Gabuar",
"We recommend you change your password and Security Key in Settings immediately": "Rekomandojmë të ndryshoni menjëherë fjalëkalimin dhe Kyçin e Sigurisë, te Rregullimet",
"Back up your encryption keys with your account data in case you lose access to your sessions. Your keys will be secured with a unique Security Key.": "Kopjeruani kyçet tuaj të fshehtëzimit me të dhënat e llogarisë tuaj, për ditën kur mund të humbni hyrje në sesionet tuaja. Kyçet tuaj do të jenë të siguruar me një Kyç unik Sigurie.",
"Channel: <channelLink/>": "Kanal: <channelLink/>",
"Workspace: <networkLink/>": "Hapësirë pune: <networkLink/>",
"Change which room, message, or user you're viewing": "Ndryshoni cilën dhomë, mesazh ose përdorues po shihni",
"Search (must be enabled)": "Kërkim (duhet të jetë i aktivizuar)",
"Something went wrong in confirming your identity. Cancel and try again.": "Diç shkoi ters me ripohimin e identitetit tuaj. Anulojeni dhe riprovoni.",
"Remember this": "Mbaje mend këtë",
"The widget will verify your user ID, but won't be able to perform actions for you:": "Ky widget do të verifikojë ID-në tuaj të përdoruesit, por sdo të jetë në gjendje të kryejë veprime për ju:",
"Allow this widget to verify your identity": "Lejojeni këtë widget të verifikojë identitetin tuaj",
"Set my room layout for everyone": "Ujdise skemën e dhomës time për këdo",
"You held the call <a>Switch</a>": "Mbajtët të shtypur <a>Butonin</a> e thirrjeve",
"Use Ctrl + F to search": "Që të kërkoni, përdorni tastet Ctrl + F",
"Use Command + F to search": "Që të kërkoni, përdorni tastet Command + F",
"Use app": "Përdorni aplikacionin",
"Element Web is experimental on mobile. For a better experience and the latest features, use our free native app.": "Element Web në celular është eksperimental. Për një funksionim më të mirë dhe për veçoritë më të reja, përdorni aplikacionin falas, atë për platformën tuaj.",
"Use app for a better experience": "Për një punim më të mirë, përdorni aplikacionin",
"%(senderName)s has updated the widget layout": "%(senderName)s ka përditësuar skemën e widget-it",
"Converts the DM to a room": "E shndërron DM-në në një dhomë",
"Converts the room to a DM": "E shndërron dhomën në një DM",
"Your homeserver rejected your log in attempt. This could be due to things just taking too long. Please try again. If this continues, please contact your homeserver administrator.": "Shërbyesi juaj Home e hodhi poshtë përpjekjen tuaj për hyrje. Kjo mund të vijë për shkak gjërash që po zgjasin ca. Ju lutemi, riprovoniP. Nëse kjo vazhdon, ju lutemi, lidhuni me përgjegjësin e shërbyesit tuaj Home.",
"Your homeserver was unreachable and was not able to log you in. Please try again. If this continues, please contact your homeserver administrator.": "Shërbyesi juaj Home su kap dot dhe sqe në gjendje të bëhej futja juaj në llogarinë tuaj. Ju lutemi, riprovoni. Nëse kjo vazhdon, ju lutemi, lidhuni me përgjegjësin e shërbyesit tuaj Home.",
"Try again": "Riprovoni",
"We asked the browser to remember which homeserver you use to let you sign in, but unfortunately your browser has forgotten it. Go to the sign in page and try again.": "I kërkuam shfletuesit të mbajë mend cilin shërbyes Home përdorni, për tju lënë të bëni hyrje, por për fat të keq, shfletuesi juaj e ka harruar këtë. Kaloni te faqja e hyrjeve dhe riprovoni.",
"We couldn't log you in": "Sju nxorëm dot nga llogaria juaj",
"Screens": "Ekrane",
"Share your screen": "Tregojuni ekranin tuaj të tjerëve",
"Show line numbers in code blocks": "Shfaq numra rreshtat në blloqe kodi",
"Expand code blocks by default": "Zgjeroji blloqet e kodit, si parazgjedhje",
"Show stickers button": "Shfaq buton ngjitësish",
"Recently visited rooms": "Dhoma të vizituara së fundi"
}

View file

@ -1,8 +1,8 @@
{
"This email address is already in use": "Ова мејл адреса се већ користи",
"This email address is already in use": "Ова адреса е-поште се већ користи",
"This phone number is already in use": "Овај број телефона се већ користи",
"Failed to verify email address: make sure you clicked the link in the email": "Нисам успео да проверим мејл адресу, постарајте се да сте кликнули на везу у мејлу",
"The remote side failed to pick up": "Друга страна није подигла слушалицу",
"Failed to verify email address: make sure you clicked the link in the email": "Неуспела провера адресе е-поште: морате да кликнете на везу у поруци",
"The remote side failed to pick up": "Друга страна се није јавила",
"Unable to capture screen": "Не могу да ухватим садржај екрана",
"Existing Call": "Постојећи позив",
"You are already in a call.": "Већ сте у позиву.",
@ -36,7 +36,7 @@
"%(weekDayName)s, %(monthName)s %(day)s %(time)s": "%(weekDayName)s, %(monthName)s %(day)s %(time)s",
"%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s": "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s",
"Who would you like to add to this community?": "Кога желите додати у ову заједницу?",
"Warning: any person you add to a community will be publicly visible to anyone who knows the community ID": "Упозорење: било која особа додата у заједницу биће јавно видљива било коме ко зна ИБ заједнице",
"Warning: any person you add to a community will be publicly visible to anyone who knows the community ID": "Упозорење: било која особа додата у заједницу биће јавно видљива било коме ко зна ИД заједнице",
"Invite new community members": "Позови нове чланове заједнице",
"Invite to Community": "Позови у заједницу",
"Which rooms would you like to add to this community?": "Које собе желите додати у ову заједницу?",
@ -51,7 +51,7 @@
"%(brand)s was not given permission to send notifications - please try again": "%(brand)s-у није дато овлашћење за слање обавештења, пробајте поново касније",
"Unable to enable Notifications": "Нисам успео да омогућим обавештења",
"This email address was not found": "Ова мејл адреса није нађена",
"Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "Изгледа да ваша мејл адреса није повезана са Матрикс ИБ-јем на овом кућном серверу.",
"Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "Изгледа да ваша е-адреса није повезана са Матрикс ИД на овом домаћем серверу.",
"Default": "Подразумевано",
"Restricted": "Ограничено",
"Moderator": "Модератор",
@ -64,13 +64,13 @@
"Unable to create widget.": "Не могу да направим виџет.",
"Failed to send request.": "Неуспех при слању захтева.",
"This room is not recognised.": "Ова соба није препозната.",
"Power level must be positive integer.": "Ниво моћи мора бити позитивни број.",
"Power level must be positive integer.": "Ниво снаге мора бити позитивни број.",
"You are not in this room.": "Нисте у овој соби.",
"You do not have permission to do that in this room.": "Немате овлашћење да урадите то у овој соби.",
"Missing room_id in request": "Недостаје room_id у захтеву",
"Room %(roomId)s not visible": "Соба %(roomId)s није видљива",
"Missing user_id in request": "Недостаје user_id у захтеву",
"Call Failed": "Позивање неуспешно",
"Call Failed": "Позив неуспешан",
"Call Timeout": "Прекорачено време позивања",
"%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(weekDayName)s, %(day)s %(monthName)s %(fullYear)s",
"Usage": "Коришћење",
@ -87,7 +87,7 @@
"%(senderName)s requested a VoIP conference.": "%(senderName)s је затражио VoIP конференцију.",
"%(senderName)s invited %(targetName)s.": "%(senderName)s је позвао %(targetName)s.",
"%(senderName)s banned %(targetName)s.": "%(senderName)s је бановао %(targetName)s.",
"%(senderName)s set their display name to %(displayName)s.": "Корисник %(senderName)s је себи поставио приказно име %(displayName)s.",
"%(senderName)s set their display name to %(displayName)s.": "%(senderName)s постави приказно име на %(displayName)s.",
"%(senderName)s removed their display name (%(oldDisplayName)s).": "Корисник %(senderName)s је себи уклонио приказно име %(oldDisplayName)s.",
"%(senderName)s removed their profile picture.": "Корисник %(senderName)s је себи уклонио профилну слику.",
"%(senderName)s changed their profile picture.": "Корисник %(senderName)s је себи променио профилну слику.",
@ -118,7 +118,7 @@
"%(senderName)s made future room history visible to anyone.": "Корисник %(senderName)s је учинио будући историјат собе видљивим свима.",
"%(senderName)s made future room history visible to unknown (%(visibility)s).": "Корисник %(senderName)s је учинио будући историјат собе непознатим (%(visibility)s).",
"%(userId)s from %(fromPowerLevel)s to %(toPowerLevel)s": "%(userId)s са %(fromPowerLevel)s на %(toPowerLevel)s",
"%(senderName)s changed the power level of %(powerLevelDiffText)s.": "Корисник %(senderName)s је променио ниво моћи од %(powerLevelDiffText)s.",
"%(senderName)s changed the power level of %(powerLevelDiffText)s.": "%(senderName)s промени ниво снаге за %(powerLevelDiffText)s.",
"%(senderName)s changed the pinned messages for the room.": "Корисник %(senderName)s је променио закачене поруке у соби.",
"%(widgetName)s widget modified by %(senderName)s": "Корисник %(senderName)s је променио виџет %(widgetName)s",
"%(widgetName)s widget added by %(senderName)s": "Корисник %(senderName)s је додао виџет %(widgetName)s",
@ -138,8 +138,8 @@
"Enable automatic language detection for syntax highlighting": "Омогући самостално препознавање језика за истицање синтаксе",
"Automatically replace plain text Emoji": "Самостално замени емоџије писане обичним текстом",
"Mirror local video feed": "Копирај довод локалног видеа",
"Enable inline URL previews by default": "Подразумевано омогући претпрегледе адреса унутар линије",
"Enable URL previews for this room (only affects you)": "Омогући претпрегледе адреса у овој соби (утиче само на вас)",
"Enable inline URL previews by default": "Подразумевано укључи УРЛ прегледе",
"Enable URL previews for this room (only affects you)": "Укључи УРЛ прегледе у овој соби (утиче само на вас)",
"Enable URL previews by default for participants in this room": "Подразумевано омогући прегледе адреса за чланове ове собе",
"Room Colour": "Боја собе",
"Active call (%(roomName)s)": "Активни позив (%(roomName)s)",
@ -194,10 +194,10 @@
"Ban this user?": "Забранити приступ овом кориснику?",
"Failed to ban user": "Неуспех при забрањивању приступа кориснику",
"Failed to mute user": "Неуспех при пригушивању корисника",
"Failed to change power level": "Неуспех при промени нивоа моћи",
"You will not be able to undo this change as you are demoting yourself, if you are the last privileged user in the room it will be impossible to regain privileges.": "Нећете моћи да опозовете ове промене зато што снижавате себе, ако сте последњи овлашћени корисник у соби, немогуће је да поново добијете овлашћења.",
"Failed to change power level": "Не могу да изменим ниво снаге",
"You will not be able to undo this change as you are demoting yourself, if you are the last privileged user in the room it will be impossible to regain privileges.": "Нећете моћи да опозовете ове промене јер себи смањујете овлашћења. Ако сте последњи овлашћени корисник у соби, немогуће је да поново добијете овлашћења.",
"Are you sure?": "Да ли сте сигурни?",
"You will not be able to undo this change as you are promoting the user to have the same power level as yourself.": "Нећете моћи да опозовете ову измену јер унапређујете корисника тако да има исти ниво моћи као и ви.",
"You will not be able to undo this change as you are promoting the user to have the same power level as yourself.": "Нећете моћи да опозовете ову измену јер унапређујете корисника тако да има исти ниво снаге као и ви.",
"Unignore": "Не занемаруј више",
"Ignore": "Занемари",
"Jump to read receipt": "Скочи на потврду о прочитаности",
@ -210,7 +210,7 @@
"and %(count)s others...|one": "и још један други...",
"Invited": "Позван",
"Filter room members": "Филтрирај чланове собе",
"%(userName)s (power %(powerLevelNumber)s)": "%(userName)s (моћ %(powerLevelNumber)s)",
"%(userName)s (power %(powerLevelNumber)s)": "%(userName)s (снага %(powerLevelNumber)s)",
"Attachment": "Прилог",
"Hangup": "Спусти слушалицу",
"Voice call": "Гласовни позив",
@ -249,7 +249,7 @@
"(~%(count)s results)|other": "(~%(count)s резултата)",
"(~%(count)s results)|one": "(~%(count)s резултат)",
"Join Room": "Приступи соби",
"Upload avatar": "Отпреми аватара",
"Upload avatar": "Отпреми аватар",
"Settings": "Подешавања",
"Forget room": "Заборави собу",
"Search": "Претрага",
@ -258,7 +258,7 @@
"Favourites": "Омиљено",
"Rooms": "Собе",
"Low priority": "Ниска важност",
"Historical": "Историјско",
"Historical": "Историја",
"This room": "Ова соба",
"%(roomName)s does not exist.": "Соба %(roomName)s не постоји.",
"%(roomName)s is not accessible at this time.": "Соба %(roomName)s није доступна у овом тренутку.",
@ -269,15 +269,15 @@
"Privileged Users": "Овлашћени корисници",
"No users have specific privileges in this room": "Нема корисника са посебним овлашћењима у овој соби",
"Banned users": "Корисници са забраном приступа",
"This room is not accessible by remote Matrix servers": "Овој соби не могу приступити удаљени Матрикс сервери",
"This room is not accessible by remote Matrix servers": "Ова соба није доступна са удаљених Матрикс сервера",
"Leave room": "Напусти собу",
"Favourite": "Омиљено",
"Guests cannot join this room even if explicitly invited.": "Гости не могу приступити овој соби чак и ако су експлицитно позвани.",
"Click here to fix": "Кликните овде да бисте поправили",
"Who can access this room?": "Ко може приступити овој соби?",
"Only people who have been invited": "Само особе које су позване",
"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, apart from guests": "Свако ко има везу ка соби, осим гостију",
"Anyone who knows the room's link, including guests": "Свако ко има везу ка соби, укључујући и госте",
"Publish this room to the public in %(domain)s's room directory?": "Објавити ову собу у јавној фасцикли соба на домену %(domain)s?",
"Who can read history?": "Ко може читати историјат?",
"Anyone": "Било ко",
@ -292,17 +292,17 @@
"Close": "Затвори",
"not specified": "није наведено",
"This room has no local addresses": "Ова соба нема локалних адреса",
"Invalid community ID": "Неисправан ИБ заједнице",
"'%(groupId)s' is not a valid community ID": "„%(groupId)s“ није исправан ИБ заједнице",
"Invalid community ID": "Неисправан ИД заједнице",
"'%(groupId)s' is not a valid community ID": "„%(groupId)s“ није исправан ИД заједнице",
"Flair": "Беџ",
"Showing flair for these communities:": "Приказујем беџ за ове заједнице:",
"This room is not showing flair for any communities": "Ова соба не приказује беџеве било које заједнице",
"New community ID (e.g. +foo:%(localDomain)s)": "Нови ИБ заједнице (нпр.: +zajednica:%(localDomain)s)",
"You have <a>enabled</a> URL previews by default.": "<a>Омогућили</a> сте подразумеване претпрегледе адреса.",
"You have <a>disabled</a> URL previews by default.": "<a>Онемогућили</a> сте подразумеване претпрегледе адреса.",
"URL previews are enabled by default for participants in this room.": "Претпрегледи адреса су подразумевано омогућени за све чланове ове собе.",
"URL previews are disabled by default for participants in this room.": "Претпрегледи адреса су подразумевано онемогућени за све чланове ове собе.",
"URL Previews": "Претпрегледи адреса",
"New community ID (e.g. +foo:%(localDomain)s)": "Нови ИД заједнице (нпр.: +zajednica:%(localDomain)s)",
"You have <a>enabled</a> URL previews by default.": "<a>Укључили</a> сте да се УРЛ прегледи подразумевају.",
"You have <a>disabled</a> URL previews by default.": "<a>Искључили</a> сте да се УРЛ прегледи подразумевају.",
"URL previews are enabled by default for participants in this room.": "УРЛ прегледи су подразумевано укључени за чланове ове собе.",
"URL previews are disabled by default for participants in this room.": "УРЛ прегледи су подразумевано искључени за чланове ове собе.",
"URL Previews": "УРЛ прегледи",
"Error decrypting audio": "Грешка при дешифровању звука",
"Error decrypting attachment": "Грешка при дешифровању прилога",
"Decrypt %(text)s": "Дешифруј %(text)s",
@ -310,9 +310,9 @@
"Invalid file%(extra)s": "Неисправна датотека %(extra)s",
"Error decrypting image": "Грешка при дешифровању слике",
"Error decrypting video": "Грешка при дешифровању видеа",
"%(senderDisplayName)s changed the avatar for %(roomName)s": "Корисник %(senderDisplayName)s је променио аватара собе %(roomName)s",
"%(senderDisplayName)s removed the room avatar.": "Корисник %(senderDisplayName)s је уклонио аватара собе.",
"%(senderDisplayName)s changed the room avatar to <img/>": "Корисник %(senderDisplayName)s је променио аватара собе у <img/>",
"%(senderDisplayName)s changed the avatar for %(roomName)s": "%(senderDisplayName)s измени аватар собе %(roomName)s",
"%(senderDisplayName)s removed the room avatar.": "%(senderDisplayName)s уклони аватар собе.",
"%(senderDisplayName)s changed the room avatar to <img/>": "%(senderDisplayName)s промени аватар собе у <img/>",
"Copied!": "Копирано!",
"Failed to copy": "Нисам успео да ископирам",
"Add an Integration": "Додај уградњу",
@ -325,7 +325,7 @@
"A text message has been sent to %(msisdn)s": "Текстуална порука је послата на %(msisdn)s",
"Please enter the code it contains:": "Унесите код који се налази у њој:",
"Start authentication": "Започните идентификацију",
"powered by Matrix": "покреће Матрикс",
"powered by Matrix": "покреће га Матрикс",
"Sign in with": "Пријавите се преко",
"Email address": "Мејл адреса",
"Sign in": "Пријави се",
@ -404,14 +404,14 @@
"were kicked %(count)s times|one": "избачен",
"was kicked %(count)s times|other": "избачен %(count)s пута",
"was kicked %(count)s times|one": "избачен",
"%(severalUsers)schanged their name %(count)s times|other": "%(severalUsers)s је променило своје име %(count)s пута",
"%(severalUsers)schanged their name %(count)s times|one": "%(severalUsers)s је променило своје име",
"%(oneUser)schanged their name %(count)s times|other": "%(oneUser)s је променило своје име %(count)s пута",
"%(oneUser)schanged their name %(count)s times|one": "%(oneUser)s је променило своје име",
"%(severalUsers)schanged their avatar %(count)s times|other": "%(severalUsers)s је променило свој аватар %(count)s пута",
"%(severalUsers)schanged their avatar %(count)s times|one": "%(severalUsers)s је променило свој аватар",
"%(oneUser)schanged their avatar %(count)s times|other": "%(oneUser)s је променило свој аватар %(count)s пута",
"%(oneUser)schanged their avatar %(count)s times|one": "%(oneUser)s је променило свој аватар",
"%(severalUsers)schanged their name %(count)s times|other": "%(severalUsers)s промени своје име %(count)s пута",
"%(severalUsers)schanged their name %(count)s times|one": "%(severalUsers)s промени своје име",
"%(oneUser)schanged their name %(count)s times|other": "%(oneUser)s промени своје име %(count)s пута",
"%(oneUser)schanged their name %(count)s times|one": "%(oneUser)s промени своје име",
"%(severalUsers)schanged their avatar %(count)s times|other": "%(severalUsers)s промени свој аватар %(count)s пута",
"%(severalUsers)schanged their avatar %(count)s times|one": "%(severalUsers)s промени свој аватар",
"%(oneUser)schanged their avatar %(count)s times|other": "%(oneUser)s промени свој аватар %(count)s пута",
"%(oneUser)schanged their avatar %(count)s times|one": "%(oneUser)s промени свој аватар",
"%(items)s and %(count)s others|other": "%(items)s и %(count)s других",
"%(items)s and %(count)s others|one": "%(items)s и још један",
"%(items)s and %(lastItem)s": "%(items)s и %(lastItem)s",
@ -424,20 +424,20 @@
"And %(count)s more...|other": "И %(count)s других...",
"ex. @bob:example.com": "нпр.: @pera:domen.rs",
"Add User": "Додај корисника",
"Matrix ID": "Матрикс ИБ",
"Matrix Room ID": Б Матрикс собе",
"Matrix ID": "Матрикс ИД",
"Matrix Room ID": Д Матрикс собе",
"email address": "мејл адреса",
"Try using one of the following valid address types: %(validTypesList)s.": "Пробајте са једним од следећих исправних типова адреса: %(validTypesList)s.",
"You have entered an invalid address.": "Унели сте неисправну адресу.",
"Confirm Removal": "Потврди уклањање",
"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.": "Да ли сте сигурни да желите уклонити (обрисати) овај догађај? Знајте да брисање назива собе или мењање теме може опозвати измену.",
"Community IDs may only contain characters a-z, 0-9, or '=_-./'": Б-јеви заједнице могу садржати само знакове a-z, 0-9, или '=_-./'",
"Community IDs cannot be empty.": Б-јеви заједнице не могу бити празни.",
"Community IDs may only contain characters a-z, 0-9, or '=_-./'": Д заједнице могу садржати само знакове a-z, 0-9, или =_-./",
"Community IDs cannot be empty.": Д заједнице не могу бити празни.",
"Something went wrong whilst creating your community": "Нешто је пошло наопако приликом стварања ваше заједнице",
"Create Community": "Направи заједницу",
"Community Name": "Назив заједнице",
"Example": "Пример",
"Community ID": Б заједнице",
"Community ID": Д заједнице",
"example": "пример",
"Create": "Направи",
"Create Room": "Направи собу",
@ -447,9 +447,9 @@
"An error has occurred.": "Догодила се грешка.",
"OK": "У реду",
"Unable to restore session": "Не могу да повратим сесију",
"If you have previously used a more recent version of %(brand)s, your session may be incompatible with this version. Close this window and return to the more recent version.": "Ако сте претходно користили новије издање %(brand)s-а, ваша сесија може бити некомпатибилна са овим издањем. Затворите овај прозор и вратите се на новије издање.",
"If you have previously used a more recent version of %(brand)s, your session may be incompatible with this version. Close this window and return to the more recent version.": "Ако сте претходно користили новије издање апликације %(brand)s, ваша сесија може бити некомпатибилна са овим издањем. Затворите овај прозор и вратите се на новије издање.",
"Invalid Email Address": "Неисправна мејл адреса",
"This doesn't appear to be a valid email address": "Изгледа да ово није исправна мејл адреса",
"This doesn't appear to be a valid email address": "Ово не изгледа као исправна адреса е-поште",
"Verification Pending": "Чека се на проверу",
"Please check your email and click on the link it contains. Once this is done, click continue.": "Проверите ваш мејл и кликните на везу унутар њега. Када ово урадите, кликните на дугме „настави“.",
"Unable to add email address": "Не могу да додам мејл адресу",
@ -514,13 +514,13 @@
"Old cryptography data detected": "Нађени су стари криптографски подаци",
"The platform you're on": "Платформа коју користите",
"The version of %(brand)s": "%(brand)s издање",
"Your language of choice": "Ваш жељени језик",
"Your language of choice": "Ваш изабрани језик",
"Which officially provided instance you are using, if any": "Коју званичну инстанцу користите, ако користите",
"Whether or not you're using the Richtext mode of the Rich Text Editor": "Да ли користите режим богатог текста у уређивачу богатог текста",
"Your homeserver's URL": "Адреса вашег кућног сервера",
"Your homeserver's URL": "УРЛ вашег домаћег сервера",
"Analytics": "Аналитика",
"The information being sent to us to help make %(brand)s better includes:": "У податке које нам шаљете зарад побољшавања %(brand)s-а спадају:",
"Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Ако страница садржи поверљиве податке (као што је назив собе, корисника или ИБ-ја групе), ти подаци се уклањају пре слања на сервер.",
"Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Ако страница садржи поверљиве податке (као што је назив собе, ИД корисника или групе), ти подаци се уклањају пре слања на сервер.",
"%(oldDisplayName)s changed their display name to %(displayName)s.": "Корисник %(oldDisplayName)s је променио приказно име у %(displayName)s.",
"Failed to set direct chat tag": "Нисам успео да поставим ознаку директног ћаскања",
"Failed to remove tag %(tagName)s from room": "Нисам успео да скинем ознаку %(tagName)s са собе",
@ -588,7 +588,7 @@
"Account": "Налог",
"Access Token:": "Приступни жетон:",
"click to reveal": "кликни за приказ",
"Homeserver is": "Кућни сервер је",
"Homeserver is": "Домаћи сервер је",
"Identity Server is": "Идентитетски сервер је",
"%(brand)s version:": "%(brand)s издање:",
"olm version:": "olm издање:",
@ -603,20 +603,20 @@
"Incorrect username and/or password.": "Нетачно корисничко име и/или лозинка.",
"Please note you are logging into the %(hs)s server, not matrix.org.": "Знајте да се пријављујете на сервер %(hs)s, не на matrix.org.",
"The phone number entered looks invalid": "Унети број телефона не изгледа исправно",
"This homeserver doesn't offer any login flows which are supported by this client.": "Овај кућни сервер не пружа било који начин пријаве унутар овог клијента.",
"This homeserver doesn't offer any login flows which are supported by this client.": "Овај домаћи сервер не пружа било који начин пријаве унутар овог клијента.",
"Error: Problem communicating with the given homeserver.": "Грешка: проблем у комуницирању са датим кућним сервером.",
"Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or <a>enable unsafe scripts</a>.": "Не могу да се повежем на кућни сервер преко HTTP-а када се користи HTTPS адреса у траци вашег прегледача. Или користите HTTPS или <a>омогућите небезбедне скрипте</a>.",
"Can't connect to homeserver - please check your connectivity, ensure your <a>homeserver's SSL certificate</a> is trusted, and that a browser extension is not blocking requests.": "Не могу да се повежем на кућни сервер. Проверите вашу интернет везу, постарајте се да верујете <a>SSL сертификату кућног сервера</a> и да проширење прегледача не блокира захтеве.",
"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>.": "Не могу да се повежем на сервер преко ХТТП када је ХТТПС УРЛ у траци вашег прегледача. Или користите HTTPS или <a>омогућите небезбедне скрипте</a>.",
"Can't connect to homeserver - please check your connectivity, ensure your <a>homeserver's SSL certificate</a> is trusted, and that a browser extension is not blocking requests.": "Не могу да се повежем на домаћи сервер. Проверите вашу интернет везу, постарајте се да је <a>ССЛ сертификат сервера</a> од поверења и да проширење прегледача не блокира захтеве.",
"Failed to fetch avatar URL": "Нисам успео да добавим адресу аватара",
"Set a display name:": "Постави приказно име:",
"Upload an avatar:": "Отпреми аватар:",
"This server does not support authentication with a phone number.": "Овај сервер не подржава идентификацију преко броја мобилног.",
"Displays action": "Приказује радњу",
"Bans user with given id": "Забрањује приступ кориснику са датим иб-јем",
"Define the power level of a user": "Дефинише ниво моћи корисника",
"Deops user with given id": "Укида админа за корисника са датим иб-јем",
"Invites user with given id to current room": "Позива корисника са датим иб-јем у тренутну собу",
"Kicks user with given id": "Избацује корисника са датим иб-јем",
"Bans user with given id": "Забрањује приступ кориснику са датим ИД",
"Define the power level of a user": "Дефинише снагу корисника",
"Deops user with given id": "Укида админа за корисника са датим ИД",
"Invites user with given id to current room": "Позива корисника са датим ИД у тренутну собу",
"Kicks user with given id": "Избацује корисника са датим ИД",
"Changes your display nickname": "Мења ваш приказни надимак",
"Searches DuckDuckGo for results": "Претражује DuckDuckGo за резултате",
"Ignores a user, hiding their messages from you": "Занемарује корисника и тиме скрива њихове поруке од вас",
@ -627,7 +627,7 @@
"Notify the whole room": "Обавести све у соби",
"Room Notification": "Собно обавештење",
"Users": "Корисници",
"Session ID": Б сесије",
"Session ID": Д сесије",
"Passphrases must match": "Фразе се морају подударати",
"Passphrase must not be empty": "Фразе не смеју бити празне",
"Export room keys": "Извези кључеве собе",
@ -727,7 +727,7 @@
"When I'm invited to a room": "Када сам позван у собу",
"Can't update user notification settings": "Не могу да ажурирам корисничка подешавања обавештења",
"Notify for all other messages/rooms": "Обавести за све друге поруке и собе",
"Unable to look up room ID from server": "Не могу да погледам ИБ собе на серверу",
"Unable to look up room ID from server": "Не могу да потражим ИД собе на серверу",
"Couldn't find a matching Matrix room": "Не могу да нађем одговарајућу Матрикс собу",
"Invite to this room": "Позови у ову собу",
"You cannot delete this message. (%(code)s)": "Не можете обрисати ову поруку. (%(code)s)",
@ -762,8 +762,8 @@
"Thank you!": "Хвала вам!",
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Са вашим тренутним прегледачем изглед и угођај ове апликације може бити скроз неправилан и неке могућности можда неће радити. Уколико желите да ипак пробате, можете наставити али ћете бити без подршке за било које проблеме на које налетите!",
"Checking for an update...": "Проверавам ажурирања...",
"Every page you use in the app": "Свака страница коју будете користили у апликацији",
"e.g. <CurrentPageURL>": "Нпр.: <CurrentPageURL>",
"Every page you use in the app": "Свака страница коју користите у апликацији",
"e.g. <CurrentPageURL>": "нпр. <CurrentPageURL>",
"Your device resolution": "Резолуција вашег уређаја",
"Popout widget": "Виџет за искакање",
"Missing roomId.": "Недостаје roomId.",
@ -777,7 +777,7 @@
"Logs sent": "Записници су послати",
"Failed to send logs: ": "Нисам успео да пошаљем записнике: ",
"Submit debug logs": "Пошаљи записнике за поправљање грешака",
"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.": "Записници за поправљање грешака садрже податке о коришћењу апликације међу којима се налази ваше корисничко име, ИБ-јеви или алијаси посећених соба или група и корисничка имена других корисника. Не садрже саме поруке.",
"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.": "Записници за поправљање грешака садрже податке о коришћењу апликације међу којима се налази ваше корисничко име, ИД или алијаси посећених соба или група и корисничка имена других корисника. Не садрже саме поруке.",
"Unable to join community": "Не могу да приступим заједници",
"Unable to leave community": "Не могу да напустим заједницу",
"Changes made to your community <bold1>name</bold1> and <bold2>avatar</bold2> might not be seen by other users for up to 30 minutes.": "Измене које сте начинили у <bold1>имену</bold1> ваше заједнице и на <bold2>аватару</bold2> можда неће бити видљиве другим корисницима највише 30 минута.",
@ -786,14 +786,14 @@
"Who can join this community?": "Ко може приступити овој заједници?",
"Everyone": "Свако",
"Opens the Developer Tools dialog": "Отвори прозор програмерских алатки",
"If you've submitted a bug via GitHub, debug logs can help us track down the problem. Debug logs contain application usage data including your username, the IDs or aliases of the rooms or groups you have visited and the usernames of other users. They do not contain messages.": "Ако сте пријавили грешку преко Гитхаба, извештаји за поправљање грешака нам могу помоћи да лакше нађемо узрок. Извештаји садрже податке о коришћењу апликације и међу њих спада ваше корисничко име, ИБ-јеви или алијаси посећених соба или група и корисничка имена других корисника. Не садрже саме поруке.",
"If you've submitted a bug via GitHub, debug logs can help us track down the problem. Debug logs contain application usage data including your username, the IDs or aliases of the rooms or groups you have visited and the usernames of other users. They do not contain messages.": "Ако сте пријавили грешку преко Гитхаба, извештаји за поправљање грешака нам могу помоћи да лакше нађемо узрок. Извештаји садрже податке о коришћењу апликације и међу њих спада ваше корисничко име, ИД или алијаси посећених соба или група и корисничка имена других корисника. Не садрже саме поруке.",
"Always show encryption icons": "Увек прикажи иконице шифровања",
"Send Logs": "Пошаљи записнике",
"Clear Storage and Sign Out": "Очисти складиште и одјави ме",
"Refresh": "Освежи",
"We encountered an error trying to restore your previous session.": "Наишли смо на грешку приликом повраћаја ваше претходне сесије.",
"Clearing your browser's storage may fix the problem, but will sign you out and cause any encrypted chat history to become unreadable.": "Чишћење складишта вашег прегледача може решити проблем али ће вас то одјавити и учинити шифровани историјат ћаскања нечитљивим.",
"e.g. %(exampleValue)s": "нпр.: %(exampleValue)s",
"e.g. %(exampleValue)s": "нпр. %(exampleValue)s",
"Send analytics data": "Пошаљи аналитичке податке",
"Enable widget screenshots on supported widgets": "Омогући снимке екрана виџета у подржаним виџетима",
"Muted Users": "Утишани корисници",
@ -801,13 +801,13 @@
"To continue, please enter your password:": "Да бисте наставили, унесите вашу лозинку:",
"Collapse Reply Thread": "Скупи нит са одговорима",
"Can't leave Server Notices room": "Не могу да напустим собу са напоменама сервера",
"This room is used for important messages from the Homeserver, so you cannot leave it.": "Ова соба се користи за важне поруке са Кућног сервера, не можете изаћи из ове собе.",
"This room is used for important messages from the Homeserver, so you cannot leave it.": "Ова соба се користи за важне поруке са сервера. Не можете напустити ову собу.",
"Terms and Conditions": "Услови коришћења",
"To continue using the %(homeserverDomain)s homeserver you must review and agree to our terms and conditions.": "Да бисте наставили са коришћењем Кућног сервера %(homeserverDomain)s морате погледати и пристати на наше услове коришћења.",
"To continue using the %(homeserverDomain)s homeserver you must review and agree to our terms and conditions.": "Да наставите са коришћењем сервера %(homeserverDomain)s морате погледати и пристати на наше услове коришћења.",
"Review terms and conditions": "Погледај услове коришћења",
"Share Link to User": "Подели везу са корисником",
"Share room": "Подели собу",
"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>": "Ово ће учинити ваш налог трајно неупотребљивим. Нећете моћи да се пријавите и нико се неће моћи поново регистровати са истим корисничким ИБ-јем. Ово ће учинити да ваш налог напусти све собе у којима учествује и уклониће појединости вашег налога са идентитетског сервера. <b>Ова радња се не може опозвати.</b>",
"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>": "Ово ће учинити ваш налог трајно неупотребљивим. Нећете моћи да се пријавите и нико се неће моћи поново да се региструје са истим корисничким ИД. Ово ће учинити да ваш налог напусти све собе у којима учествује и уклониће појединости вашег налога са идентитетског сервера. <b>Ова радња се не може опозвати.</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.": "Деактивирањем вашег налога се <b>ваше поруке неће заборавити.</b> Ако желите да заборавимо ваше поруке, штиклирајте кућицу испод.",
"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.": "Видљивост порука у Матриксу је слична мејловима. Оне поруке које заборавимо нећемо делити са новим и нерегистрованим корисницима али постојећи корисници који су имали приступ овим порукама ће и даље моћи да виде своју копију.",
"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)": "Заборавите све моје поруке које сам послао када се мој налог деактивира (<b>Упозорење:</b> овим ће будући корисници видети непотпуне разговоре)",
@ -827,11 +827,11 @@
"Permission Required": "Неопходна је дозвола",
"You do not have permission to start a conference call in this room": "Немате дозволу да започињете конференцијски позив у овој соби",
"This event could not be displayed": "Овај догађај не може бити приказан",
"Demote yourself?": "Снизите чин себи?",
"Demote": "Снизите чин",
"Demote yourself?": "Рашчињавате себе?",
"Demote": "Рашчини",
"Whether or not you're logged in (we don't record your username)": "Да ли сте пријављени (не бележимо ваше корисничко име)",
"The file '%(fileName)s' exceeds this homeserver's size limit for uploads": "Датотека „%(fileName)s“ премашује ограничење величине отпремања на овом кућном серверу",
"Unable to load! Check your network connectivity and try again.": "Нисам могао да учитам! Проверите вашу мрежну везу и пробајте поново.",
"The file '%(fileName)s' exceeds this homeserver's size limit for uploads": "Фајл „%(fileName)s“ премашује ограничење величине отпремања на овом серверу",
"Unable to load! Check your network connectivity and try again.": "Не могу да учитам! Проверите повезаност и пробајте поново.",
"Failed to invite users to the room:": "Нисам успео да позовем кориснике у собу:",
"Upgrades a room to a new version": "Надограђује собу на ново издање",
"Gets or sets the room topic": "Добавља или поставља тему собе",
@ -863,17 +863,17 @@
"The username field must not be blank.": "Поље корисничког имена не може бити празно.",
"Username": "Корисничко име",
"Not sure of your password? <a>Set a new one</a>": "Не сећате се лозинке? <a>Поставите нову</a>",
"Are you sure you want to sign out?": "Да ли сте сигурни да се желите одјавити?",
"Call failed due to misconfigured server": "Позив није успео због погрешно подешеног сервера",
"Please ask the administrator of your homeserver (<code>%(homeserverDomain)s</code>) to configure a TURN server in order for calls to work reliably.": "Замолите администратора вашег сервера (<code>%(homeserverDomain)s</code>) да подеси TURN сервер како би позиви радили поуздано.",
"Alternatively, you can try to use the public server at <code>turn.matrix.org</code>, but this will not be as reliable, and it will share your IP address with that server. You can also manage this in Settings.": "Или, можете покушати да користите јавни сервер на <code>turn.matrix.org</code>, али ово неће бити толико поуздано, и поделиће вашу IP адресу са тим сервером. Ово такође можете мењати у Подешавањима.",
"Try using turn.matrix.org": окушајте да користите turn.matrix.org",
"Are you sure you want to sign out?": "Заиста желите да се одјавите?",
"Call failed due to misconfigured server": "Позив неуспешан због лоше подешеног сервера",
"Please ask the administrator of your homeserver (<code>%(homeserverDomain)s</code>) to configure a TURN server in order for calls to work reliably.": "Замолите администратора вашег сервера (<code>%(homeserverDomain)s</code>) да подеси TURN сервер како би позиви радили поуздано.",
"Alternatively, you can try to use the public server at <code>turn.matrix.org</code>, but this will not be as reliable, and it will share your IP address with that server. You can also manage this in Settings.": "Можете покушати и да користите јавни сервер на <code>turn.matrix.org</code>, али ово неће бити толико поуздано и откриће вашу ИП адресу серверу. Овим можете управљати у Поставкама.",
"Try using turn.matrix.org": робајте turn.matrix.org",
"Use Single Sign On to continue": "Користи јединствену пријаву за наставак",
"Confirm adding this email address by using Single Sign On to prove your identity.": "Потврдите додавање ове е-адресе коришћењем јединствене пријаве за доказивање вашег идентитета.",
"Single Sign On": "Јединствена пријава",
"Confirm adding email": "Потврди додавање е-адресе",
"Click the button below to confirm adding this email address.": "Кликните на дугме испод за потврђивање додавања ове е-адресе.",
"Add Email Address": "Додај е-адресу",
"Add Email Address": "Додај адресу е-поште",
"Room name or address": "Назив собе или адреса",
"Identity server has no terms of service": "Идентитетски сервер нема услове коришћења",
"Changes your avatar in all rooms": "Промените ваш аватар у свим собама",
@ -920,7 +920,7 @@
"Scroll to most recent messages": "Пребаци на најновије поруке",
"Emoji picker": "Бирач емоџија",
"Send a message…": "Пошаљи поруку…",
"Direct Messages": "Непосредне поруке",
"Direct Messages": "Директне поруке",
"Create room": "Направи собу",
"People": "Људи",
"Forget this room": "Заборави ову собу",
@ -937,8 +937,8 @@
"Room Topic": "Тема собе",
"Messages in this room are end-to-end encrypted.": "Поруке у овој соби су шифроване с краја на крај.",
"Messages in this room are not end-to-end encrypted.": "Поруке у овој соби нису шифроване с краја на крај.",
"%(count)s verified sessions|other": "Укупно потврђених сесија: %(count)s",
"%(count)s verified sessions|one": "Једна потврђена сесија",
"%(count)s verified sessions|other": "потврђених сесија: %(count)s",
"%(count)s verified sessions|one": "1 потврђена сесија",
"Hide verified sessions": "Сакриј потврђене сесије",
"Remove recent messages by %(user)s": "Уклони недавне поруке корисника %(user)s",
"Remove recent messages": "Уклони недавне поруке",
@ -958,7 +958,7 @@
"Suggestions": "Предлози",
"Invite someone using their name, username (like <userId/>), email address or <a>share this room</a>.": "Позовите некога уз помоћ њихово имена, корисничког имена (типа <userId/>), мејл адресе или <a>поделите ову собу</a>.",
"Report bugs & give feedback": "Пријави грешке и пошаљи повратне податке",
"Report Content to Your Homeserver Administrator": "Пријави садржај администратору вашег кућног сервера",
"Report Content to Your Homeserver Administrator": "Пријави садржај администратору вашег домаћег сервера",
"Room Settings - %(roomName)s": "Подешавања собе - %(roomName)s",
"Terms of Service": "Услови коришћења",
"To continue you need to accept the terms of this service.": "За наставак, морате прихватити услове коришћења ове услуге.",
@ -971,7 +971,7 @@
"Notification settings": "Подешавања обавештења",
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Инсталирајте <chromeLink>Хром</chromeLink>, <firefoxLink>Фајерфокс</firefoxLink>, или <safariLink>Сафари</safariLink> за најбољи доживљај.",
"%(creator)s created and configured the room.": "Корисник %(creator)s је направио и подесио собу.",
"Preview": "Претпреглед",
"Preview": "Преглед",
"Switch to light mode": "Пребаци на светлу тему",
"Switch to dark mode": "Пребаци на тамну тему",
"Security & privacy": "Безбедност и приватност",
@ -1022,7 +1022,7 @@
"No recently visited rooms": "Нема недавно посећених соба",
"Appearance": "Изглед",
"Show rooms with unread messages first": "Прво прикажи собе са непрочитаним порукама",
"Show previews of messages": "Прикажи претпрегледе порука",
"Show previews of messages": "Прикажи прегледе порука",
"Sort by": "Поређај по",
"Activity": "Активности",
"A-Z": "А-Ш",
@ -1035,13 +1035,408 @@
"Looks good": "Изгледа добро",
"Show advanced": "Прикажи напредно",
"Recent Conversations": "Недавни разговори",
"Recently Direct Messaged": "Недавно послате непосредне поруке",
"Recently Direct Messaged": "Недавне директне поруке",
"Start a conversation with someone using their name, username (like <userId/>) or email address.": "Започните разговор са неким користећи њихово име, корисничко име (као нпр.: <userId/>) или мејл адресу.",
"Go": "Напред",
"Go to Element": "Иди у Елемент",
"Were excited to announce Riot is now Element!": "Са одушевљењем објављујемо да је Рајот (Riot) сада Елемент (Element)!",
"Learn more at <a>element.io/previously-riot</a>": "Сазнајте више на страници <a>element.io/previously-riot</a>",
"Looks good!": "Изгледа добро!",
"Send a Direct Message": "Пошаљи непосредну поруку",
"Switch theme": "Промени тему"
"Send a Direct Message": "Пошаљи директну поруку",
"Switch theme": "Промени тему",
"Error upgrading room": "Грешка при надоградњи собе",
"You do not have the required permissions to use this command.": "Немате потребне дозволе за коришћење ове команде.",
"Sends a message as html, without interpreting it as markdown": "Шаље поруку као ХТМЛ, без маркдаун интерпретације",
"Sends a message as plain text, without interpreting it as markdown": "Шаље поруку као обичан текст, без маркдаун интерпретације",
"Prepends ( ͡° ͜ʖ ͡°) to a plain-text message": "Придодаје ( ͡° ͜ʖ ͡°) обичној поруци",
"Prepends ┬──┬ ( ゜-゜ノ) to a plain-text message": "Придодаје ┬──┬ ( ゜-゜ノ) обичној поруци",
"Prepends (╯°□°)╯︵ ┻━┻ to a plain-text message": "Придодаје (╯°□°)╯︵ ┻━┻ обичној поруци",
"Prepends ¯\\_(ツ)_/¯ to a plain-text message": "Придодаје ¯\\_(ツ)_/¯ обичној поруци",
"Other": "Остало",
"Effects": "Ефекти",
"Actions": "Радње",
"Messages": "Поруке",
"Setting up keys": "Постављам кључеве",
"Are you sure you want to cancel entering passphrase?": "Заиста желите да откажете унос фразе?",
"Cancel entering passphrase?": "Отказати унос фразе?",
"Custom (%(level)s)": "Посебан %(level)s",
"Sign In": "Пријави се",
"Create Account": "Направи налог",
"Use your account or create a new one to continue.": "Користите постојећи или направите нови да наставите.",
"Sign In or Create Account": "Пријавите се или направите налог",
"Zimbabwe": "Зимбабве",
"Zambia": "Замбија",
"Yemen": "Јемен",
"Western Sahara": "Западна Сахара",
"Wallis & Futuna": "Валис и Футуна",
"Vietnam": "Вијетнам",
"Venezuela": "Венезуела",
"Vatican City": "Ватикан",
"Vanuatu": "Вануату",
"Uzbekistan": "Узбекистан",
"Uruguay": "Уругвај",
"United Arab Emirates": "Уједињени Арапски Емирати",
"Ukraine": "Украјина",
"Uganda": "Уганда",
"U.S. Virgin Islands": "Америчка Девичанска острва",
"Tuvalu": "Тувалу",
"Turks & Caicos Islands": "Туркс и Кајкос острва",
"Turkmenistan": "Туркменистан",
"Turkey": "Турска",
"Tunisia": "Тунис",
"Trinidad & Tobago": "Тринидад и Тобаго",
"Tonga": "Тонга",
"Tokelau": "Токелау",
"Togo": "Того",
"Timor-Leste": "Источни Тимор",
"Thailand": "Тајланд",
"Tanzania": "Танзанија",
"Tajikistan": "Таџикистан",
"Taiwan": "Тајван",
"São Tomé & Príncipe": "Сао Томе и Принципе",
"Syria": "Сирија",
"Switzerland": "Швајцарска",
"Sweden": "Шведска",
"Swaziland": "Свазиленд",
"Svalbard & Jan Mayen": "Свалбард и Јан Мајен",
"Suriname": "Суринам",
"Sudan": "Судан",
"St. Vincent & Grenadines": "Ст. Винсент и Гренадини",
"St. Pierre & Miquelon": "Ст. Пјер и Микелон",
"St. Martin": "Ст. Мартин",
"St. Lucia": "Ст. Луција",
"St. Kitts & Nevis": "Ст. Китс и Невис",
"St. Helena": "Ст. Хелена",
"St. Barthélemy": "Ст. Бартоломеј",
"Sri Lanka": "Шри Ланка",
"Spain": "Шпанија",
"South Sudan": "Јужни Судан",
"South Korea": "Јужна Кореја",
"South Georgia & South Sandwich Islands": "Јужна Џорџија и Јужна Сендвич острва",
"South Africa": "Јужна Африка",
"Somalia": "Сомалија",
"Solomon Islands": "Соломонова острва",
"Slovenia": "Словенија",
"Slovakia": "Словачка",
"Sint Maarten": "Свети Мартин",
"Singapore": "Сингапур",
"Sierra Leone": "Сијера Леоне",
"Seychelles": "Сејшели",
"Serbia": "Србија",
"Senegal": "Сенегал",
"Saudi Arabia": "Саудијска Арабија",
"San Marino": "Сан Марино",
"Samoa": "Самоа",
"Rwanda": "Руанда",
"Russia": "Русија",
"Romania": "Румунија",
"Qatar": "Катар",
"Puerto Rico": "Порторико",
"Portugal": "Португалија",
"Poland": "Пољска",
"Pitcairn Islands": "Питкарнова острва",
"Philippines": "Филипини",
"Peru": "Перу",
"Paraguay": "Парагвај",
"Papua New Guinea": "Папуа Нова Гвинеја",
"Panama": "Панама",
"Palestine": "Палестина",
"Palau": "Палау",
"Pakistan": "Пакистан",
"Oman": "Оман",
"Norway": "Норвешка",
"Northern Mariana Islands": "Северна Маријанска острва",
"North Korea": "Северна Кореја",
"Norfolk Island": "Норфолк",
"Niue": "Ниуе",
"Nigeria": "Нигерија",
"Niger": "Нигер",
"Nicaragua": "Никарагва",
"New Zealand": "Нови Зеланд",
"New Caledonia": "Нова Каледонија",
"Netherlands": "Холандија",
"Nepal": "Непал",
"Nauru": "Науру",
"Namibia": "Намибија",
"Myanmar": "Мјанмар",
"Mozambique": "Мозамбик",
"Morocco": "Мароко",
"Montserrat": "Монсерат",
"Montenegro": "Црна Гора",
"Mongolia": "Монголија",
"Monaco": "Монако",
"Moldova": "Молдавија",
"Micronesia": "Микронезија",
"Mexico": "Мексико",
"Mayotte": "Мајот",
"Mauritius": "Маурицијус",
"Mauritania": "Мауританија",
"Martinique": "Мартиник",
"Marshall Islands": "Маршалова острва",
"Malta": "Малта",
"Mali": "Мали",
"Maldives": "Малдиви",
"Malaysia": "Малезија",
"Malawi": "Малави",
"Madagascar": "Мадагаскар",
"Macedonia": "Македонија",
"Macau": "Макао",
"Luxembourg": "Луксембург",
"Lithuania": "Литванија",
"Liechtenstein": "Лихтенштајн",
"Libya": "Либија",
"Liberia": "Либерија",
"Lesotho": "Лесото",
"Lebanon": "Либан",
"Latvia": "Летонија",
"Laos": "Лаос",
"Kyrgyzstan": "Киргистан",
"Kuwait": "Кувајт",
"Kiribati": "Кирибати",
"Kenya": "Кенија",
"Kazakhstan": "Казахстан",
"Jordan": "Јордан",
"Jersey": "Џерси",
"Japan": "Јапан",
"Jamaica": "Јамајка",
"Italy": "Италија",
"Israel": "Израел",
"Isle of Man": "Острво Ман",
"Ireland": "Ирска",
"Iraq": "Ирак",
"Iran": "Иран",
"Indonesia": "Индонезија",
"India": "Индија",
"Iceland": "Исланд",
"Hungary": "Мађарска",
"Hong Kong": "Хонг Конг",
"Honduras": "Хондурас",
"Heard & McDonald Islands": "Хердова и Мекдоналдсова острва",
"Haiti": "Хаити",
"Guyana": "Гвајана",
"Guinea-Bissau": "Гвинеја Бисау",
"Guinea": "Гвинеја",
"Guernsey": "Гернзи",
"Guatemala": "Гватемала",
"Guam": "Гуам",
"Guadeloupe": "Гвадалупе",
"Grenada": "Гренада",
"Greenland": "Гренланд",
"Greece": "Грчка",
"Gibraltar": "Гибралтар",
"Ghana": "Гана",
"Germany": "Немачка",
"Georgia": "Грузија",
"Gambia": "Гамбија",
"Gabon": "Габон",
"French Southern Territories": "Француске јужне територије",
"French Polynesia": "Француска Полинезија",
"French Guiana": "Француска Гвајана",
"France": "Француска",
"Finland": "Финска",
"Fiji": "Фиџи",
"Faroe Islands": "Фарска острва",
"Falkland Islands": "Фокландска острва",
"Ethiopia": "Етиопија",
"Estonia": "Естонија",
"Eritrea": "Еритреја",
"Equatorial Guinea": "Екваторијална Гвинеја",
"El Salvador": "Ел Салвадор",
"Egypt": "Египат",
"Ecuador": "Еквадор",
"Dominican Republic": "Доминиканска република",
"Dominica": "Доминикана",
"Djibouti": "Џибути",
"Denmark": "Данска",
"Côte dIvoire": "Обала Слоноваче",
"Czech Republic": "Чешка република",
"Cyprus": "Кипар",
"Curaçao": "Курасао",
"Cuba": "Куба",
"Croatia": "Хрватска",
"Costa Rica": "Костарика",
"Cook Islands": "Кукова острва",
"Congo - Kinshasa": "Конго - Киншаса",
"Congo - Brazzaville": "Конго - Бразавил",
"Comoros": "Комори",
"Colombia": "Колумбија",
"Cocos (Keeling) Islands": "Кокосова (Килинг) острва",
"Christmas Island": "Божићна острва",
"China": "Кина",
"Chile": "Чиле",
"Chad": "Чад",
"Central African Republic": "Централно-афричка република",
"Cayman Islands": "Кајманска острва",
"Caribbean Netherlands": "Холандски Кариби",
"Cape Verde": "Зеленортска острва",
"Canada": "Канада",
"Cameroon": "Камерун",
"Cambodia": "Камбоџа",
"Burundi": "Бурунди",
"Burkina Faso": "Буркина Фасо",
"Bulgaria": "Бугарска",
"Brunei": "Брунеји",
"British Virgin Islands": "Британска Девичанска острва",
"British Indian Ocean Territory": "Британска територија индијског океана",
"Brazil": "Бразил",
"Bouvet Island": "Буветска острва",
"Botswana": "Боцвана",
"Bosnia": "Босна",
"Bolivia": "Боливија",
"Bhutan": "Бутан",
"Bermuda": "Бермуда",
"Benin": "Бенин",
"Belize": "Белиз",
"Belgium": "Белгија",
"Belarus": "Белорусија",
"Barbados": "Барбадос",
"Bangladesh": "Бангладеш",
"Bahrain": "Бахреин",
"Bahamas": "Бахами",
"Azerbaijan": "Азербејџан",
"Austria": "Аустрија",
"Australia": "Аустралија",
"Aruba": "Аруба",
"Armenia": "Јерменија",
"Argentina": "Аргентина",
"Antigua & Barbuda": "Антигва и Барбуда",
"Antarctica": "Антарктик",
"Anguilla": "Ангила",
"Angola": "Ангола",
"Andorra": "Андора",
"American Samoa": "Америчка Самоа",
"Algeria": "Алжир",
"Albania": "Албанија",
"Åland Islands": "Аландска острва",
"Afghanistan": "Авганистан",
"United States": "Сједињене Америчке Државе",
"United Kingdom": "Уједињено Краљевство",
"%(name)s is requesting verification": "%(name)s тражи верификацију",
"Trust": "Веруј",
"Only continue if you trust the owner of the 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.": "Ова радња захтева приступ серверу идентитета <server /> за валидацију адресе е-поште или телефонског броја али изгледа да сервер нема „услове услуге“.",
"Name or Matrix ID": "Име или Матрикс ИД",
"The server does not support the room version specified.": "Сервер не подржава наведену верзију собе.",
"The file '%(fileName)s' failed to upload.": "Фајл „%(fileName)s“ није отпремљен.",
"At this time it is not possible to reply with a file. Would you like to upload this file without replying?": "Тренутно није могуће одговорити и приложити фајл. Желите ли да пошаљете само фајл без одговора?",
"Replying With Files": "Одговори са фајловима",
"This will end the conference for everyone. Continue?": "Ово ће завршити конференцију за све. Да наставим?",
"End conference": "Завршите конференцију",
"You've reached the maximum number of simultaneous calls.": "Достигли сте максималан број истовремених позива.",
"Too Many Calls": "Превише позива",
"No other application is using the webcam": "Друга апликације не користи камеру",
"Call failed because webcam or microphone could not be accessed. Check that:": "Позив није успео јер камера или микрофон нису доступни. Проверите да:",
"Permission is granted to use the webcam": "Постоји дозвола за коришћење камере",
"A microphone and webcam are plugged in and set up correctly": "Микрофон и камера су прикључени и исправно подешени",
"Call failed because microphone could not be accessed. Check that a microphone is plugged in and set up correctly.": "Позив није успео јер микрофон није доступан. Проверите да ли је прикључен и исправно подешен.",
"Unable to access webcam / microphone": "Не могу да приступим камери/микрофону",
"Unable to access microphone": "Не могу да приступим микрофону",
"The call was answered on another device.": "На позив је одговорено на другом уређају.",
"Answered Elsewhere": "Одговорен другде",
"The call could not be established": "Позив није могао да се успостави",
"The other party declined the call.": "Друга страна је одбила позив.",
"Call Declined": "Позив одбијен",
"Your user agent": "Ваш кориснички агент",
"Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Било да користите %(brand)s на уређају где је додир главни начин уноса",
"Add Phone Number": "Додај број телефона",
"Click the button below to confirm adding this phone number.": "Кликните на дугме испод за потврду додавања броја телефона.",
"Confirm adding phone number": "Потврда додавања броја телефона",
"Confirm adding this phone number by using Single Sign On to prove your identity.": "Потврдите додавање броја телефона помоћу јединствене пријаве да докажете свој идентитет.",
"About": "О програму",
"Homeserver": "Домаћи сервер",
"The homeserver the user youre verifying is connected to": "Домаћи сервер корисника којег верификујете",
"Your homeserver": "Ваш домаћи сервер",
"Your homeserver does not support session management.": "Ваш домаћи сервер не подржава управљање сесијама.",
"Your homeserver does not support cross-signing.": "Ваш домаћи сервер не подржава међу-потписивање.",
"Communities v2 prototypes. Requires compatible homeserver. Highly experimental - use with caution.": "Прототипови заједница вер.2 захтевају компатибилан сервер. Експериментална опција — користите са опрезом.",
"Please contact your homeserver administrator.": "Контактирајте администратора вашег сервера.",
"Sorry, your homeserver is too old to participate in this room.": "Нажалост, ваш домаћи сервер је престар да бисте учествовали у овој соби.",
"Your homeserver has exceeded one of its resource limits.": "Ваш домаћи сервер је прекорачио ограничење неког ресурса.",
"Your homeserver has exceeded its user limit.": "Ваш домаћи сервер је прекорачио ограничење корисника.",
"The user's homeserver does not support the version of the room.": "Корисников домаћи сервер не подржава верзију собе.",
"Unable to connect to Homeserver. Retrying...": "Не могу да се повежем са сервером. Покушавам поново…",
"This homeserver has exceeded one of its resource limits.": "Овај сервер је достигао ограничење неког свог ресурса.",
"Unexpected error resolving homeserver configuration": "Неочекивана грешка при откривању подешавања сервера",
"No homeserver URL provided": "Није наведен УРЛ сервера",
"Cannot reach homeserver": "Сервер недоступан",
"%(senderName)s added the alternative addresses %(addresses)s for this room.|other": "%(senderName)s додаде алтернативну адресу %(addresses)s за ову собу.",
"%(senderName)s removed the main address for this room.": "%(senderName)s уклони главну адресу за ову собу.",
"%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s постави главну адресу собе на %(address)s.",
"🎉 All servers are banned from participating! This room can no longer be used.": "🎉 Свим серверима је забрањено да учествују! Ова соба се више не може користити.",
"%(senderDisplayName)s changed guest access to %(rule)s": "%(senderDisplayName)s измени гостински приступ на %(rule)s",
"%(senderDisplayName)s has prevented guests from joining the room.": "%(senderDisplayName)s спречи госте да се придруже у соби.",
"%(senderDisplayName)s has allowed guests to join the room.": "%(senderDisplayName)s дозволи гостима да се придруже у собу.",
"%(senderDisplayName)s changed the join rule to %(rule)s": "%(senderDisplayName)s измени правило придруживања на %(rule)s",
"%(senderDisplayName)s made the room invite only.": "%(senderDisplayName)s учини собу доступном само позивницом.",
"%(senderDisplayName)s made the room public to whoever knows the link.": "%(senderDisplayName)s учини собу јавном за све који знају везу.",
"%(senderDisplayName)s changed the room name from %(oldRoomName)s to %(newRoomName)s.": "%(senderDisplayName)s измени назив собе из %(oldRoomName)s у %(newRoomName)s.",
"%(senderName)s made no change.": "%(senderName)s не направи измене.",
"Takes the call in the current room off hold": "Узима позив са чекања у тренутној соби",
"Places the call in the current room on hold": "Ставља позив на чекање у тренутној соби",
"Sends a message to the given user": "Шаље поруку наведеном кориснику",
"Opens chat with the given user": "Отвара ћаскање са наведеним корисником",
"Displays information about a user": "Приказује податке о кориснику",
"Displays list of commands with usages and descriptions": "Приказује списак команди са употребом и описом",
"Sends the given message coloured as a rainbow": "Шаље наведену поруку у дугиним бојама",
"WARNING: Session already verified, but keys do NOT MATCH!": "УПОЗОРЕЊЕ: Сесија је већ верификована али се кључеви НЕ ПОКЛАПАЈУ!",
"Session already verified!": "Сесија је већ верификована!",
"Unknown (user, session) pair:": "Непознат пар (корисник, сесија):",
"You cannot modify widgets in this room.": "Не можете мењати виџете у овој соби.",
"Please supply a https:// or http:// widget URL": "Наведите https:// или http:// УРЛ виџета",
"Please supply a widget URL or embed code": "Наведите УРЛ виџета или убаците код",
"Adds a custom widget by URL to the room": "У собу додаје посебан виџет помоћу УРЛ-а",
"Could not find user in room": "Не налазим корисника у соби",
"Command failed": "Команда неуспешна",
"Unbans user with given ID": "Скида забрану са корисника са датим ИД",
"Unrecognised room address:": "Непозната адреса собе:",
"Joins room with given address": "Придружује се соби са датом адресом",
"Use an identity server to invite by email. Manage in Settings.": "Користите сервер идентитета за позивнице е-поштом. Управљајте у поставкама.",
"Use an identity server": "Користи сервер идентитета",
"Failed to set topic": "Нисам успео да поставим тему",
"Removing…": "Уклањам…",
"Clear all data in this session?": "Да очистим све податке у овој сесији?",
"Reason (optional)": "Разлог (опционо)",
"An image will help people identify your community.": "Слика помаже да људи препознају вашу заједницу.",
"Add image (optional)": "Додај слику (опционо)",
"Disable": "Искључи",
"If disabled, messages from encrypted rooms won't appear in search results.": "Ако је искључено, поруке из шифрованих соба неће се приказивати у резултатима.",
"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.": "Ако нисте ви уклонили начин опоравка, нападач можда покушава да приступи вашем налогу. Промените своју лозинку и поставите нови начин опоравка у поставкама, одмах.",
"If you did this accidentally, you can setup Secure Messages on this session which will re-encrypt this session's message history with a new recovery method.": "Ако сте то случајно учинили, безбедне поруке можете подесити у овој сесији, која ће поново шифровати историју порука сесије помоћу новог начина опоравка.",
"This session has detected that your Security Phrase and key for Secure Messages have been removed.": "Сесија је открила да су ваша безбедносна фраза и кључ за безбедне поруке уклоњени.",
"Cancel autocomplete": "Откажи ауто-довршавање",
"Direct message": "Директна порука",
"Hide sessions": "Сакриј сесије",
"Trusted": "поуздан",
"Not trusted": "није поуздан",
"Room settings": "Поставке собе",
"Show files": "Прикажи фајлове",
"Not encrypted": "Није шифровано",
"Add widgets, bridges & bots": "Додај виџете, мостове и ботове",
"Edit widgets, bridges & bots": "Уреди виџете, мостове и ботове",
"Widgets": "Виџети",
"Set my room layout for everyone": "Постави мој распоред собе за сваког",
"Error changing power level requirement": "Грешка при промени захтеваног нивоа снаге",
"Error changing power level": "Грешка при промени нивоа снаге",
"Power level": "Ниво снаге",
"Explore rooms": "Истражи собе",
"%(senderName)s has updated the widget layout": "%(senderName)s освежи распоред виџета",
"%(senderName)s revoked the invitation for %(targetDisplayName)s to join the room.": "%(senderName)s повуче позивницу за приступ соби кориснику %(targetDisplayName)s.",
"%(senderName)s declined the call.": "%(senderName)s одби позив.",
"(an error occurred)": "(дошло је до грешке)",
"(their device couldn't start the camera / microphone)": "(туђи уређај не може да покрене камеру / микрофон)",
"(connection failed)": "(неуспела веза)",
"%(senderName)s changed the addresses for this room.": "%(senderName)s измени адресе за ову собу.",
"%(senderName)s changed the main and alternative addresses for this room.": "%(senderName)s измени главну и алтернативне адресе за ову собу.",
"%(senderName)s changed the alternative addresses for this room.": "%(senderName)s измени алтернативне адресе за ову собу.",
"%(senderName)s removed the alternative addresses %(addresses)s for this room.|other": "%(senderName)s уклони алтернативне адресе %(addresses)s за ову собу.",
"%(senderName)s removed the alternative addresses %(addresses)s for this room.|one": "%(senderName)s уклони алтернативну адресу %(addresses)s за ову собу.",
"%(senderName)s added the alternative addresses %(addresses)s for this room.|one": "%(senderName)s додаде алтернативну адресу %(addresses)s за ову собу.",
"Converts the room to a DM": "Претвара собу у директно дописивање",
"Converts the DM to a room": "Претвара директно дописивање у собу",
"Changes your avatar in this current room only": "Мења ваш аватар само у тренутној соби",
"Changes the avatar of the current room": "Мења аватар тренутне собе",
"Changes your display nickname in the current room only": "Мења ваше приказно име само у тренутној соби",
"Try again": "Покушај поново",
"We couldn't log you in": "Не могу да вас пријавим",
"Double check that your server supports the room version chosen and try again.": "Добро проверите да ли сервер подржава изабрану верзију собе и пробајте поново."
}

View file

@ -2921,5 +2921,67 @@
"Start a Conversation": "Starta en konversation",
"Dial pad": "Knappsats",
"There was an error looking up the phone number": "Ett fel inträffade vid uppslagning av telefonnumret",
"Unable to look up phone number": "Kunde inte slå upp telefonnumret"
"Unable to look up phone number": "Kunde inte slå upp telefonnumret",
"Invalid Security Key": "Ogiltig säkerhetsnyckel",
"Wrong Security Key": "Fel säkerhetsnyckel",
"Remember this": "Kom ihåg det här",
"The widget will verify your user ID, but won't be able to perform actions for you:": "Den här widgeten kommer att verifiera ditt användar-ID, men kommer inte kunna utföra handlingar som dig:",
"Allow this widget to verify your identity": "Tillåt att den här widgeten verifierar din identitet",
"We recommend you change your password and Security Key in Settings immediately": "Vi rekommenderar att du ändrar ditt lösenord och din säkerhetsnyckel i inställningarna omedelbart",
"Set my room layout for everyone": "Sätt mitt rumsarrangemang för alla",
"Back up your encryption keys with your account data in case you lose access to your sessions. Your keys will be secured with a unique Security Key.": "Säkerhetskopiera dina krypteringsnycklar med din kontodata ifall du skulle förlora åtkomst till dina sessioner. Dina nycklar kommer att säkras med en unik säkerhetsnyckel.",
"Channel: <channelLink/>": "Kanal: <channelLink/>",
"Workspace: <networkLink/>": "Arbetsyta: <networkLink/>",
"Use Ctrl + F to search": "Använd Ctrl + F för att söka",
"Use Command + F to search": "Använd kommando (⌘) + F för att söka",
"Change which room, message, or user you're viewing": "Ändra vilket rum, vilket meddelande eller vilken användare du ser",
"%(senderName)s has updated the widget layout": "%(senderName)s har uppdaterat widgetarrangemanget",
"Converts the DM to a room": "Konverterar DMet till ett rum",
"Converts the room to a DM": "Konverterar rummet till ett DM",
"Use app for a better experience": "Använd appen för en bättre upplevelse",
"Element Web is experimental on mobile. For a better experience and the latest features, use our free native app.": "Element Web är experimentell på mobiler. För en bättre upplevelse och de senaste funktionerna, använd våran app.",
"Use app": "Använd app",
"Great! This Security Phrase looks strong enough.": "Fantastiskt! Den här säkerhetsfrasen ser tillräckligt stark ut.",
"Set up with a Security Key": "Ställ in med en säkerhetsnyckel",
"Please enter your Security Phrase a second time to confirm.": "Vänligen ange din säkerhetsfras en gång till för att bekräfta.",
"Repeat your Security Phrase...": "Repetera din säkerhetsfras…",
"Your Security Key is a safety net - you can use it to restore access to your encrypted messages if you forget your Security Phrase.": "Din säkerhetsnyckel är ett skyddsnät - du kan använda den för att återfå åtkomst till dina krypterade meddelanden om du glömmer din säkerhetsfras.",
"Your Security Key": "Din säkerhetsnyckel",
"Your Security Key has been <b>copied to your clipboard</b>, paste it to:": "Din säkerhetsnyckel har <b>kopierats till ditt klippbord</b>, klistra in den för att:",
"Your Security Key is in your <b>Downloads</b> folder.": "Din säkerhetsnyckel finns i din hämtningsmapp.",
"Secure your backup with a Security Phrase": "Säkra din säkerhetskopia med en säkerhetsfras",
"Confirm your Security Phrase": "Bekräfta din säkerhetsfras",
"Make a copy of your Security Key": "Kopiera din säkerhetsnyckel",
"A new Security Phrase and key for Secure Messages have been detected.": "En ny säkerhetsfras och -nyckel för säkra meddelanden har detekterats.",
"This session has detected that your Security Phrase and key for Secure Messages have been removed.": "Den här sessionen har detekterat att din säkerhetsfras och -nyckel för säkra meddelanden har tagits bort.",
"Search (must be enabled)": "Sök (måste vara aktiverat)",
"Unable to access secret storage. Please verify that you entered the correct Security Phrase.": "Kan inte komma åt hemlig lagring. Vänligen verifiera att du angav rätt säkerhetsfras.",
"Security Key mismatch": "Säkerhetsnyckeln matchade inte",
"Backup could not be decrypted with this Security Key: please verify that you entered the correct Security Key.": "Säkerhetskopian kunde inte avkrypteras med den här säkerhetsnyckeln: vänligen verifiera att du har angett rätt säkerhetsnyckel.",
"Incorrect Security Phrase": "Felaktig säkerhetsfras",
"Backup could not be decrypted with this Security Phrase: please verify that you entered the correct Security Phrase.": "Säkerhetskopian kunde inte avkrypteras med den här säkerhetsfrasen: vänligen verifiera att du har angett rätt säkerhetsfras.",
"Enter Security Phrase": "Ange säkerhetsfras",
"Access your secure message history and set up secure messaging by entering your Security Phrase.": "Kom åt din säkra meddelandehistorik och ställ in säker meddelandehantering genom att ange din säkerhetsfras.",
"If you've forgotten your Security Phrase you can <button1>use your Security Key</button1> or <button2>set up new recovery options</button2>": "Om du har glömt din säkerhetsfras så kan du <button1>använda din säkerhetsnyckel</button1> eller <button2>ställa in nya återställningsalternativ</button2>",
"Enter Security Key": "Ange säkerhetsnyckel",
"This looks like a valid Security Key!": "Det här ser ut som en giltig säkerhetsnyckel!",
"Not a valid Security Key": "Inte en giltig säkerhetsnyckel",
"Access your secure message history and set up secure messaging by entering your Security Key.": "Kom åt din säkre meddelandehistorik och ställ in säker meddelandehantering genom att ange din säkerhetsnyckel.",
"If you've forgotten your Security Key you can <button>set up new recovery options</button>": "Om du har glömt din säkerhetsnyckel så kan du <button>ställa in nya återställningsalternativ</button>",
"Something went wrong in confirming your identity. Cancel and try again.": "Något gick fel vid bekräftelse av din identitet. Avbryt och försök igen.",
"Use Security Key or Phrase": "Använd säkerhetsnyckel eller -fras",
"Use Security Key": "Använd säkerhetsnyckel",
"We'll store an encrypted copy of your keys on our server. Secure your backup with a Security Phrase.": "Vi kommer att lagra en krypterad kopia av dina nycklar på våran server. Säkra din säkerhetskopia med en säkerhetsfras.",
"Windows": "Fönster",
"Screens": "Skärmar",
"Share your screen": "Dela din skärm",
"Recently visited rooms": "Nyligen besökta rum",
"Show line numbers in code blocks": "Visa radnummer i kodblock",
"Expand code blocks by default": "Expandera kodblock för förval",
"Show stickers button": "Visa dekalknapp",
"Your homeserver rejected your log in attempt. This could be due to things just taking too long. Please try again. If this continues, please contact your homeserver administrator.": "Din hemserver avslog ditt inloggningsförsök. Detta kan ha hänt för att det tog för lång tid. Vänligen försök igen. Om det här fortsätter, vänligen kontakta administratören för din hemserver.",
"Your homeserver was unreachable and was not able to log you in. Please try again. If this continues, please contact your homeserver administrator.": "Din hemserver kunde inte nås så du kunde inte loggas in. Vänligen försök igen. Om det här fortsätter, vänligen kontakta administratören för din hemserver.",
"Try again": "Försök igen",
"We asked the browser to remember which homeserver you use to let you sign in, but unfortunately your browser has forgotten it. Go to the sign in page and try again.": "Vi bad webbläsaren att komma ihåg vilken hemserver du använder för att logga in, men tyvärr har din webbläsare glömt det. Gå till inloggningssidan och försök igen.",
"We couldn't log you in": "Vi kunde inte logga in dig"
}

View file

@ -592,7 +592,7 @@
"Preparing to send logs": "Loglar gönderilmek için hazırlanıyor",
"Logs sent": "Loglar gönderiliyor",
"Thank you!": "Teşekkürler!",
"Failed to send logs: ": "Loglarıb gönderilmesi başarısız: ",
"Failed to send logs: ": "Logların gönderilmesi başarısız: ",
"GitHub issue": "GitHub sorunu",
"Notes": "Notlar",
"Removing…": "Siliniyor…",
@ -2277,5 +2277,152 @@
"This bridge was provisioned by <user />.": "Bu köprü <user /> tarafından sağlandı.",
"Render LaTeX maths in messages": "Mesajlarda LaTex maths işleyin",
"See <b>%(eventType)s</b> events posted to this room": "Bu odaya gönderilen <b>%(eventType)s</b> türü etkinlikleri gör",
"with state key %(stateKey)s": "%(stateKey)s durum anahtarı ile"
"with state key %(stateKey)s": "%(stateKey)s durum anahtarı ile",
"Verify all users in a room to ensure it's secure.": "Güvenli olduğuna emin olmak için odadaki tüm kullanıcıları onaylayın.",
"No recent messages by %(user)s found": "",
"Show %(count)s more|one": "%(count)s adet daha fazla göster",
"Show %(count)s more|other": "%(count)s adet daha fazla göster",
"Activity": "Aktivite",
"Show previews of messages": "Mesajların ön izlemelerini göster",
"Show rooms with unread messages first": "Önce okunmamış mesajları olan odaları göster",
"Use the + to make a new room or explore existing ones below": "Yeni bir oda kurmak yada olan var olan odaları keşfetmek için aşağıdaki + yı kullanın",
"Topic: %(topic)s (<a>edit</a>)": "Konu: %(topic)s (<a>düzenle</a>)",
"Key share requests are sent to your other sessions automatically. If you rejected or dismissed the key share request on your other sessions, click here to request the keys for this session again.": " ",
"Your key share request has been sent - please check your other sessions for key share requests.": "Anahtar paylaşma isteğiniz gönderildi - anahtar paylaşma istekleri için lütfen diğer oturumlarınızı kontrol ediniz.",
"We've sent you an email to verify your address. Please follow the instructions there and then click the button below.": "Onaylamanız için size e-posta gönderdik. Lütfen yönergeleri takip edin ve sonra aşağıdaki butona tıklayın.",
"Customise your appearance": "Görünüşü özelleştir",
"Custom theme URL": "Özel tema URLsi",
"Secure Backup": "Güvenli yedekleme",
"User settings": "Kullanıcı ayarları",
"Community settings": "Topluluk ayarları",
"Room settings": "Oda ayarları",
"Show files": "Dosyaları göster",
"%(count)s people|other": "%(count)s kişi",
"%(count)s people|one": "%(count)s kişi",
"Not encrypted": "Şifrelenmemiş",
"Room Info": "Oda bilgisi",
"Backup version:": "Yedekleme sürümü:",
"Autocomplete": "Otomatik Tamamlama",
"Navigation": "Navigasyon",
"User Autocomplete": "Kullanıcı Otomatik Tamamlama",
"Room Autocomplete": "Otomatik Oda Tamamlama",
"Notification Autocomplete": "Otomatik Bildirim Tamamlama",
"Away": "Uzakta",
"Share Permalink": "Permalink'i Paylaş",
"Resend removal": "Kaldırmayı yeniden gönder",
"Resend edit": "Düzenlemeyi yeniden gönder",
"Quick Reactions": "Hızlı Tepkiler",
"Widgets": "Widgetlar",
"Unpin": "Sabitlemeyi kaldır",
"Create community": "Topluluk oluştur",
"Enter name": "İsim gir",
"Download logs": "Günlükleri indir",
"%(brand)s Android": "%(brand)s Android",
"%(brand)s iOS": "%(brand)s iOS",
"%(brand)s Desktop": "%(brand)s Masaüstü",
"%(brand)s Web": "%(brand)s Ağı",
"User menu": "Kullanıcı menüsü",
"Notification options": "Bildirim ayarları",
"Use default": "Varsayılanı kullan",
"Looks good!": "İyi görünüyor!",
"Security Key": "Güvenlik anahtarı",
"List options": "Liste seçenekleri",
"Sort by": "Göre sırala",
"All settings": "Tüm ayarlar",
"Switch theme": "Temayı değiştir",
"QR Code": "Kare kod (QR)",
"Keys restored": "Anahtarlar geri yüklendi",
"Submit logs": "Günlükleri kaydet",
"Signing In...": "Giriş yapılıyor...",
"Page Down": "Sayfa aşağı",
"Page Up": "Sayfa yukarı",
"New line": "Yeni satır",
"Alt Gr": "Alt Gr",
"Room List": "Oda listesi",
"Matrix rooms": "Matrix odaları",
"%(networkName)s rooms": "%(networkName)s odalar",
"Server name": "Sunucu adı",
"Remove server": "Sunucuyu kaldır",
"Your server": "Senin sunucun",
"All rooms": "Tüm odalar",
"Looks good": "İyi görünüyor",
"Declining …": "Reddediliyor…",
"Accepting …": "Kabul ediliyor…",
"Topic (optional)": "Konu (isteğe bağlı)",
"Featured Users:": "Öne çıkan kullanıcılar:",
"Featured Rooms:": "Öne çıkan odalar:",
"Transfer": "Aktar",
"Hold": "Beklet",
"Resume": "Devam et",
"Approve": "Onayla",
"Show": "Göster",
"Homeserver": "Ana sunucu",
"Information": "Bilgi",
"Role": "Rol",
"About": "Hakkında",
"Modern": "Modern",
"Ctrl": "Ctrl",
"Shift": "Shift",
"Alt": "Alt",
"Calls": "Aramalar",
"Disable": "Devre dışı bırak",
"Syncing...": "Senkronize ediliyor...",
"Feedback": "Geri bildirim",
"Matrix": "Matrix",
"Categories": "Kategoriler",
"Accepting…": "Kabul ediliyor…",
"A-Z": "A-Z",
"Appearance": "Görünüm",
"Room avatar": "Oda avatarı",
"Room options": "Oda ayarları",
"Leave Room": "Odadan ayrıl",
"Forget Room": "Odayı unut",
"Open dial pad": "Arama tuşlarını aç",
"Start a Conversation": "Bir sohbet başlat",
"Mod": "Mod",
"Revoke": "İptal et",
"Complete": "Tamamla",
"Where youre logged in": "Giriş yaptığınız yer",
"Privacy": "Gizlilik",
"New version available. <a>Update now.</a>": "Yeni sürüm mevcut: <a> Şimdi güncelle.</a>",
"Compact": "Kompakt",
"Message layout": "Mesaj düzeni",
"Use between %(min)s pt and %(max)s pt": "%(min)s ile %(max)s arasında girin",
"Custom font size can only be between %(min)s pt and %(max)s pt": "Özel yazı tipi boyutu %(min)s ile %(max)s arasında olmalı",
"Size must be a number": "Boyut bir sayı olmalıdır",
"Hey you. You're the best!": "Hey sen. Sen en iyisisin!",
"You should:": "Şunu yapmalısınız:",
"not ready": "hazır değil",
"ready": "hazır",
"Secret storage:": "Gizli depolama:",
"Backup key cached:": "Yedekleme anahtarı önbelleğe alındı:",
"Backup key stored:": "Yedekleme anahtarı depolandı:",
"Back up your encryption keys with your account data in case you lose access to your sessions. Your keys will be secured with a unique Recovery Key.": "Oturumlarınıza erişimi kaybetmeniz ihtimaline karşı, şifreleme anahtarlarınızı hesap verilerinizle yedekleyin. Anahtarlarınız benzersiz bir Kurtarma Anahtarı ile korunacaktır.",
"unexpected type": "Bilinmeyen tür",
"Back up your keys before signing out to avoid losing them.": "Anahtarlarını kaybetmemek için, çıkış yapmadan önce önleri yedekle.",
"Algorithm:": "Algoritma:",
"Backup has a <validity>valid</validity> signature from <verify>unverified</verify> session <device></device>": "Yedekleme,<verify>onaylanmamış</verify> oturumdan <validity>geçerli</validity> bir imzaya sahip",
"Backup has a <validity>valid</validity> signature from <verify>verified</verify> session <device></device>": "Yedekleme, <verify>onaylanmış</verify> oturumdan <validity>geçerli</validity> bir imzaya sahip<device></device>",
"Backup has an <validity>invalid</validity> signature from this session": "Yedekleme, bu oturumdan <validity>geçersiz</validity> bir imzaya sahip",
"Backup has a <validity>valid</validity> signature from this session": "Yedekleme bu oturumdan <validity>geçerli</validity> bir imzaya sahip",
"Backup has a signature from <verify>unknown</verify> session with ID %(deviceId)s": "Yedeklemede, <verify>bilinmeyen</verify> %(deviceId)s ID'sine sahip bir oturumdan imza var",
"Backup has a signature from <verify>unknown</verify> user with ID %(deviceId)s": "Yedeklemede, %(deviceId)s ID'sine sahip <verify>bilinmeyen</verify> bir kullanıcı tarafından imza var.",
"Connect this session to key backup before signing out to avoid losing any keys that may only be on this session.": "Yalnızca bu oturumda olabilecek anahtarları kaybetmemek için, oturumu kapatmadan önce bu oturumu anahtar yedeklemeye bağlayın.",
"%(brand)s can't securely cache encrypted messages locally while running in a web browser. Use <desktopLink>%(brand)s Desktop</desktopLink> for encrypted messages to appear in search results.": "%(brand)s internet tarayıcısında çalışıyorken şifrelenmiş mesajları güvenli bir şekilde önbelleğe alamaz. Şifrelenmiş mesajların arama sonucunda görünmesi için <desktopLink>%(brand)s Masaüstü</desktopLink> kullanın.",
"%(brand)s is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom %(brand)s Desktop with <nativeLink>search components added</nativeLink>.": "%(brand)s, şifrelenmiş iletileri yerel olarak güvenli bir şekilde önbelleğe almak için gereken bazı bileşenlerden yoksun. Bu özelliği denemek istiyorsanız, <nativeLink> arama bileşenlerinin eklendiği</nativeLink> özel bir masaüstü oluşturun.",
"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.": "Bu oturum <b> anahtarlarınızı yedeklemiyor</b>, ama zaten geri yükleyebileceğiniz ve ileride ekleyebileceğiniz bir yedeğiniz var.",
"Converts the room to a DM": "Odayı birebir mesajlaşmaya dönüştürür",
"Converts the DM to a room": "Birebir mesajlaşmayı odaya çevirir",
"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.": "O sırada ne yaptığınız, oda kimlikleri, kullanıcı kimlikleri vb.gibi sorunu analiz etmede yardımcı olacak ek öğe varsa lütfen buraya ekleyin.",
"Continue with %(provider)s": "%(provider)s ile devam et",
"Sign in with single sign-on": "Çoklu oturum açma ile giriş yap",
"Enter a server name": "Sunucu adı girin",
"Can't find this server or its room list": "Sunucuda veya oda listesinde bulunamıyor",
"Are you sure you want to remove <b>%(serverName)s</b>": "<b>%(serverName)s</b> Sunucusunu silmek istediğinizden eminmisiniz",
"Add a new server": "Yeni sunucu ekle",
"Enter the name of a new server you want to explore.": "Keşfetmek istediğiniz sunucunun adını girin.",
"Add a new server...": "Yeni sunucu ekle...",
"Preparing to download logs": "Loglar indirilmeye hazırlanıyor",
"Reminder: Your browser is unsupported, so your experience may be unpredictable.": "Hatırlatma:Tarayıcınız desteklenmiyor, deneyiminiz öngörülemiyor.",
"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.": "Hata ayıklama günlükleri, kullanıcı adınız, ziyaret ettiğiniz oda veya grupların kimlikleri veya takma adları ve diğer kullanıcıların kullanıcı adları dahil olmak üzere uygulama kullanım verilerini içerir. Mesaj içermezler."
}

View file

@ -449,7 +449,7 @@
"Name or Matrix ID": "Імʼя або Matrix ID",
"Identity server has no terms of service": "Сервер ідентифікації не має умов надання послуг",
"This action requires accessing the default identity server <server /> to validate an email address or phone number, but the server does not have any terms of service.": "Щоб підтвердити адресу е-пошти або телефон ця дія потребує доступу до типового серверу ідентифікації <server />, але сервер не має жодних умов надання послуг.",
"Only continue if you trust the owner of the server.": "Продовжуйте тільки якщо довіряєте власнику сервера.",
"Only continue if you trust the owner of the server.": "Продовжуйте лише якщо довіряєте власнику сервера.",
"Trust": "Довіра",
"Unable to load! Check your network connectivity and try again.": "Завантаження неможливе! Перевірте інтернет-зʼєднання та спробуйте ще.",
"Failed to invite users to the room:": "Не вдалося запросити користувачів до кімнати:",
@ -587,8 +587,8 @@
"This will make your account permanently unusable. You will not be able to log in, and no one will be able to re-register the same user ID. This will cause your account to leave all rooms it is participating in, and it will remove your account details from your identity server. <b>This action is irreversible.</b>": "Ваш обліковий запис стане назавжди невикористовним. Ви не матимете змоги увійти в нього і ніхто не зможе перереєструватись під цим користувацьким ID. Це призведе до виходу вашого облікового запису з усіх кімнат та до видалення деталей вашого облікового запису з вашого серверу ідентифікації. <b>Ця дія є безповоротною.</b>",
"Verify session": "Звірити сесію",
"Session name": "Назва сесії",
"Session ID": "ID сесії",
"Session key": "Ключ сесії",
"Session ID": "ID сеансу",
"Session key": "Ключ сеансу",
"%(count)s of your messages have not been sent.|one": "Ваше повідомлення не було надіслано.",
"%(count)s <resendText>Resend all</resendText> or <cancelText>cancel all</cancelText> now. You can also select individual messages to resend or cancel.|other": "<resendText>Перенадіслати усе</resendText> або <cancelText>скасувати усе</cancelText> зараз. Ви також можете перенадіслати або скасувати окремі повідомлення.",
"%(count)s <resendText>Resend all</resendText> or <cancelText>cancel all</cancelText> now. You can also select individual messages to resend or cancel.|one": "<resendText>Перенадіслати повідомлення</resendText> або <cancelText>скасувати повідомлення</cancelText> зараз.",
@ -631,7 +631,7 @@
"A text message has been sent to +%(msisdn)s. Please enter the verification code it contains.": "Текстове повідомлення було відправлено на номер +%(msisdn)s. Будь ласка, введіть звірювальний код, який воно містить.",
"Messages in this room are secured with end-to-end encryption. Only you and the recipient(s) have the keys to read these messages.": "Повідомлення у цій кімнаті захищені наскрізним шифруванням. Тільки ви та одержувачі мають ключі для прочитання цих повідомлень.",
"Messages in this room are end-to-end encrypted.": "Повідомлення у цій кімнаті наскрізно зашифровані.",
"Messages in this room are not end-to-end encrypted.": "Повідомлення у цій кімнаті не є наскрізно зашифрованими.",
"Messages in this room are not end-to-end encrypted.": "Повідомлення у цій кімнаті не захищено наскрізним шифруванням.",
"Encryption enabled": "Шифрування увімкнено",
"Messages in this room are end-to-end encrypted. Learn more & verify this user in their user profile.": "Повідомлення у цій кімнаті наскрізно зашифровані. Дізнайтеся більше та звіртеся з цим користувачем через його профіль.",
"You sent a verification request": "Ви відправили звірювальний запит",
@ -694,9 +694,9 @@
"%(senderName)s created a rule banning servers matching %(glob)s for %(reason)s": "%(senderName)s створив(-ла) правило блокування серверів зі збігом з %(glob)s через %(reason)s",
"Light": "Світла",
"Dark": "Темна",
"You signed in to a new session without verifying it:": "Ви увійшли в нову сесію, не підтвердивши її:",
"Verify your other session using one of the options below.": "Перевірте іншу сесію, використвуючи один із варіантів нижче.",
"%(name)s (%(userId)s) signed in to a new session without verifying it:": "%(name)s (%(userId)s) почав(ла) нову сесію без її підтвердження:",
"You signed in to a new session without verifying it:": "Ви увійшли в новий сеанс, не підтвердивши його:",
"Verify your other session using one of the options below.": "Перевірте інший сеанс за допомогою одного із варіантів знизу.",
"%(name)s (%(userId)s) signed in to a new session without verifying it:": "%(name)s (%(userId)s) починає новий сеанс без його підтвердження:",
"Ask this user to verify their session, or manually verify it below.": "Попросіть цього користувача підтвердити сесію, або підтвердіть її власноруч нижче.",
"Not Trusted": "Недовірене",
"Manually Verify by Text": "Ручна перевірка за допомогою тексту",
@ -729,7 +729,7 @@
"%(num)s days from now": "%(num)s днів по тому",
"Unrecognised address": "Нерозпізнана адреса",
"You do not have permission to invite people to this room.": "У вас немає прав запрошувати людей у цю кімнату.",
"User %(userId)s is already in the room": "Користувач %(userId)s вже знаходиться серед вас",
"User %(userId)s is already in the room": "Користувач %(userId)s вже перебуває в кімнаті",
"User %(user_id)s does not exist": "Користувача %(user_id)s не існує",
"The user must be unbanned before they can be invited.": "Користувач має бути розблокованим(ою), перед тим як може бути запрошений(ая).",
"The user's homeserver does not support the version of the room.": "Домашній сервер користувача не підтримує версію кімнати.",
@ -1097,7 +1097,7 @@
"%(senderDisplayName)s enabled flair for %(newGroups)s and disabled flair for %(oldGroups)s in this room.": "%(senderDisplayName)s увімкнув(-ла) значок для %(newGroups)s та вимкнув(-ла) значок для %(oldGroups)s у цій кімнаті.",
"New version available. <a>Update now.</a>": "Доступна нова версія. <a>Оновити зараз</a>",
"Upgrade public room": "Поліпшити відкриту кімнату",
"Restore your key backup to upgrade your encryption": "Відновіть резервну копію вашого ключа щоб поліпшити шифрування",
"Restore your key backup to upgrade your encryption": "Відновіть резервну копію вашого ключа, щоб поліпшити шифрування",
"You'll need to authenticate with the server to confirm the upgrade.": "Ви матимете пройти розпізнання на сервері щоб підтвердити поліпшування.",
"Upgrade this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "Поліпште цей сеанс щоб уможливити звіряння інших сеансів, надаючи їм доступ до зашифрованих повідомлень та позначуючи їх довіреними для інших користувачів.",
"Upgrade your encryption": "Поліпшити ваше шифрування",
@ -1155,7 +1155,7 @@
"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.": "Скарження на це повідомлення надішле його унікальний 'ідентифікатор події (event ID)' адміністраторові вашого домашнього сервера. Якщо повідомлення у цій кімнаті зашифровані, то адміністратор не зможе бачити ані тексту повідомлень, ані жодних файлів чи зображень.",
"Some session data, including encrypted message keys, is missing. Sign out and sign in to fix this, restoring keys from backup.": "Бракує деяких даних сеансу, включно з ключами зашифрованих повідомлень. Вийдіть та зайдіть знову щоб виправити цю проблему, відновлюючи ключі з дубля.",
"Data from an older version of %(brand)s has been detected. This will have caused end-to-end cryptography to malfunction in the older version. End-to-end encrypted messages exchanged recently whilst using the older version may not be decryptable in this version. This may also cause messages exchanged with this version to fail. If you experience problems, log out and back in again. To retain message history, export and re-import your keys.": "Було виявлено дані зі старої версії %(brand)s. Це призведе до збоїння наскрізного шифрування у старій версії. Наскрізно зашифровані повідомлення, що обмінювані нещодавно, під час використання старої версії, можуть бути недешифровними у цій версії. Це може призвести до збоїв повідомлень, обмінюваних також і з цією версією. У разі виникнення проблем вийдіть з програми та зайдіть знову. Задля збереження історії повідомлень експортуйте та переімпортуйте ваші ключі.",
"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.": "Змінення паролю скине усі ключі наскрізного шифрування в усіх ваших сеансах, роблячи зашифровану історію листувань непрочитною. Налагодьте дублювання ключів або експортуйте ключі кімнат з іншого сеансу перед скиданням паролю.",
"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.": "Змінення паролю скине всі ключі наскрізного шифрування в усіх ваших сеансах, роблячи зашифровану історію листувань нечитабельною. Налагодьте дублювання ключів або експортуйте ключі кімнат з іншого сеансу перед скиданням пароля.",
"Confirm your identity by verifying this login from one of your other sessions, granting it access to encrypted messages.": "Підтвердьте вашу особу шляхом звіряння цього входу з одного з інших ваших сеансів, надаючи йому доступ до зашифрованих повідомлень.",
"Enable big emoji in chat": "Увімкнути великі емодзі у балачках",
"Show typing notifications": "Сповіщати про друкування",
@ -1575,5 +1575,26 @@
"%(oneUser)sjoined %(count)s times|other": "%(oneUser)sприєднується %(count)s разів",
"%(severalUsers)sjoined %(count)s times|one": "%(severalUsers)sприєдналися",
"%(severalUsers)sjoined %(count)s times|other": "%(severalUsers)sприєдналися %(count)s разів",
"Members only (since they joined)": "Лише учасники (від часу приєднання)"
"Members only (since they joined)": "Лише учасники (від часу приєднання)",
"This room is not accessible by remote Matrix servers": "Ця кімната недоступна для віддалених серверів Matrix",
"Manually verify all remote sessions": "Перевірити всі сеанси власноруч",
"Explore rooms": "Каталог кімнат",
"Session key:": "Ключ сеансу:",
"If you didnt sign in to this session, your account may be compromised.": "Якщо ви не входили в цей сеанс, можливо ваш обліковий запис зламано.",
"Hide sessions": "Сховати сеанси",
"Hide verified sessions": "Сховати підтверджені сеанси",
"Session ID:": "ID сеансу:",
"Click the button below to confirm setting up encryption.": "Клацніть на кнопку внизу, щоб підтвердити налаштування шифрування.",
"Confirm encryption setup": "Підтвердити налаштування шифрування",
"Enable end-to-end encryption": "Увімкнути наскрізне шифрування",
"Your server requires encryption to be enabled in private rooms.": "Ваш сервер вимагає увімкнення шифрування приватних кімнат.",
"Widgets do not use message encryption.": "Віджети не використовують шифрування повідомлень.",
"The encryption used by this room isn't supported.": "Шифрування, використане цією кімнатою не підтримується.",
"Encryption not enabled": "Шифрування не ввімкнено",
"Ignored attempt to disable encryption": "Знехтувані спроби вимкнути шифрування",
"This client does not support end-to-end encryption.": "Цей клієнт не підтримує наскрізного шифрування.",
"<requestLink>Re-request encryption keys</requestLink> from your other sessions.": "<requestLink>Повторно запитати ключі шифрування</requestLink> з інших сеансів.",
"Enable encryption?": "Увімкнути шифрування?",
"Enable room encryption": "Увімкнути шифрування кімнати",
"Encryption": "Шифрування"
}

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