Merge branch 'develop' into fix-4963
This commit is contained in:
commit
678ec52035
98 changed files with 3426 additions and 1564 deletions
84
CHANGELOG.md
84
CHANGELOG.md
|
@ -1,3 +1,87 @@
|
|||
Changes in [3.14.0](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v3.14.0) (2021-02-16)
|
||||
=====================================================================================================
|
||||
[Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v3.14.0-rc.1...v3.14.0)
|
||||
|
||||
* Upgrade to JS SDK 9.7.0
|
||||
* [Release] Use config for host signup branding
|
||||
[\#5651](https://github.com/matrix-org/matrix-react-sdk/pull/5651)
|
||||
|
||||
Changes in [3.14.0-rc.1](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v3.14.0-rc.1) (2021-02-10)
|
||||
===============================================================================================================
|
||||
[Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v3.13.1...v3.14.0-rc.1)
|
||||
|
||||
* Upgrade to JS SDK 9.7.0-rc.1
|
||||
* Translations update from Weblate
|
||||
[\#5636](https://github.com/matrix-org/matrix-react-sdk/pull/5636)
|
||||
* Add host signup modal with iframe
|
||||
[\#5450](https://github.com/matrix-org/matrix-react-sdk/pull/5450)
|
||||
* Fix duplication of codeblock elements
|
||||
[\#5633](https://github.com/matrix-org/matrix-react-sdk/pull/5633)
|
||||
* Handle undefined call stats
|
||||
[\#5632](https://github.com/matrix-org/matrix-react-sdk/pull/5632)
|
||||
* Avoid delayed displaying of sources in source picker
|
||||
[\#5631](https://github.com/matrix-org/matrix-react-sdk/pull/5631)
|
||||
* Give breadcrumbs toolbar an accessibility label.
|
||||
[\#5628](https://github.com/matrix-org/matrix-react-sdk/pull/5628)
|
||||
* Fix the %s in logs
|
||||
[\#5627](https://github.com/matrix-org/matrix-react-sdk/pull/5627)
|
||||
* Fix jumpy notifications settings UI
|
||||
[\#5625](https://github.com/matrix-org/matrix-react-sdk/pull/5625)
|
||||
* Improve displaying of code blocks
|
||||
[\#5559](https://github.com/matrix-org/matrix-react-sdk/pull/5559)
|
||||
* Fix desktop Matrix screen sharing and add a screen/window picker
|
||||
[\#5525](https://github.com/matrix-org/matrix-react-sdk/pull/5525)
|
||||
* Call "MatrixClientPeg.get()" only once in method "findOverrideMuteRule"
|
||||
[\#5498](https://github.com/matrix-org/matrix-react-sdk/pull/5498)
|
||||
* Close current modal when session is logged out
|
||||
[\#5616](https://github.com/matrix-org/matrix-react-sdk/pull/5616)
|
||||
* Switch room explorer list to CSS grid
|
||||
[\#5551](https://github.com/matrix-org/matrix-react-sdk/pull/5551)
|
||||
* Improve SSO login start screen and 3pid invite handling somewhat
|
||||
[\#5622](https://github.com/matrix-org/matrix-react-sdk/pull/5622)
|
||||
* Don't jump to bottom on reaction
|
||||
[\#5621](https://github.com/matrix-org/matrix-react-sdk/pull/5621)
|
||||
* Fix several profile settings oddities
|
||||
[\#5620](https://github.com/matrix-org/matrix-react-sdk/pull/5620)
|
||||
* Add option to hide the stickers button in the composer
|
||||
[\#5530](https://github.com/matrix-org/matrix-react-sdk/pull/5530)
|
||||
* Fix confusing right panel button behaviour
|
||||
[\#5598](https://github.com/matrix-org/matrix-react-sdk/pull/5598)
|
||||
* Fix jumping timestamp if hovering a message with e2e indicator bar
|
||||
[\#5601](https://github.com/matrix-org/matrix-react-sdk/pull/5601)
|
||||
* Fix avatar and trash alignment
|
||||
[\#5614](https://github.com/matrix-org/matrix-react-sdk/pull/5614)
|
||||
* Fix z-index of stickerpicker
|
||||
[\#5617](https://github.com/matrix-org/matrix-react-sdk/pull/5617)
|
||||
* Fix permalink via parsing for rooms
|
||||
[\#5615](https://github.com/matrix-org/matrix-react-sdk/pull/5615)
|
||||
* Fix "Terms and Conditions" checkbox alignment
|
||||
[\#5613](https://github.com/matrix-org/matrix-react-sdk/pull/5613)
|
||||
* Fix flair height after accent changes
|
||||
[\#5611](https://github.com/matrix-org/matrix-react-sdk/pull/5611)
|
||||
* Iterate Social Logins work around edge cases and branding
|
||||
[\#5609](https://github.com/matrix-org/matrix-react-sdk/pull/5609)
|
||||
* Lock widget room ID when added
|
||||
[\#5607](https://github.com/matrix-org/matrix-react-sdk/pull/5607)
|
||||
* Better errors for SSO failures
|
||||
[\#5605](https://github.com/matrix-org/matrix-react-sdk/pull/5605)
|
||||
* Increase language search bar width
|
||||
[\#5549](https://github.com/matrix-org/matrix-react-sdk/pull/5549)
|
||||
* Scroll to bottom on message_sent
|
||||
[\#5565](https://github.com/matrix-org/matrix-react-sdk/pull/5565)
|
||||
* Fix new rooms being titled 'Empty Room'
|
||||
[\#5587](https://github.com/matrix-org/matrix-react-sdk/pull/5587)
|
||||
* Fix saving the collapsed state of the left panel
|
||||
[\#5593](https://github.com/matrix-org/matrix-react-sdk/pull/5593)
|
||||
* Fix app-url hint in the e2e-test run script output
|
||||
[\#5600](https://github.com/matrix-org/matrix-react-sdk/pull/5600)
|
||||
* Fix RoomView re-mounting breaking peeking
|
||||
[\#5602](https://github.com/matrix-org/matrix-react-sdk/pull/5602)
|
||||
* Tweak a few room ID checks
|
||||
[\#5592](https://github.com/matrix-org/matrix-react-sdk/pull/5592)
|
||||
* Remove pills from event permalinks with text
|
||||
[\#5575](https://github.com/matrix-org/matrix-react-sdk/pull/5575)
|
||||
|
||||
Changes in [3.13.1](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v3.13.1) (2021-02-04)
|
||||
=====================================================================================================
|
||||
[Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v3.13.0...v3.13.1)
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "matrix-react-sdk",
|
||||
"version": "3.13.1",
|
||||
"version": "3.14.0",
|
||||
"description": "SDK for matrix.org using React",
|
||||
"author": "matrix.org",
|
||||
"repository": {
|
||||
|
@ -86,7 +86,6 @@
|
|||
"pako": "^2.0.3",
|
||||
"parse5": "^6.0.1",
|
||||
"png-chunks-extract": "^1.0.0",
|
||||
"project-name-generator": "^2.1.9",
|
||||
"prop-types": "^15.7.2",
|
||||
"qrcode": "^1.4.4",
|
||||
"qs": "^6.9.6",
|
||||
|
|
|
@ -128,7 +128,7 @@ limitations under the License.
|
|||
}
|
||||
|
||||
.mx_UserMenu_contextMenu {
|
||||
width: 247px;
|
||||
width: 258px;
|
||||
|
||||
// These override the styles already present on the user menu rather than try to
|
||||
// define a new menu. They are specifically for the stacked menu when a community
|
||||
|
|
|
@ -223,3 +223,54 @@ limitations under the License.
|
|||
content: ":";
|
||||
}
|
||||
}
|
||||
|
||||
.mx_DevTools_SettingsExplorer {
|
||||
table {
|
||||
width: 100%;
|
||||
table-layout: fixed;
|
||||
border-collapse: collapse;
|
||||
|
||||
th {
|
||||
// Colour choice: first one autocomplete gave me.
|
||||
border-bottom: 1px solid $accent-color;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
td, th {
|
||||
width: 360px; // "feels right" number
|
||||
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
td + td, th + th {
|
||||
width: auto;
|
||||
}
|
||||
|
||||
tr:hover {
|
||||
// Colour choice: first one autocomplete gave me.
|
||||
background-color: $accent-color-50pct;
|
||||
}
|
||||
}
|
||||
|
||||
.mx_DevTools_SettingsExplorer_mutable {
|
||||
background-color: $accent-color;
|
||||
}
|
||||
|
||||
.mx_DevTools_SettingsExplorer_immutable {
|
||||
background-color: $warning-color;
|
||||
}
|
||||
|
||||
.mx_DevTools_SettingsExplorer_edit {
|
||||
float: right;
|
||||
margin-right: 16px;
|
||||
}
|
||||
|
||||
.mx_DevTools_SettingsExplorer_warning {
|
||||
border: 2px solid $warning-color;
|
||||
border-radius: 4px;
|
||||
padding: 4px;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -257,17 +257,13 @@ $left-gutter: 64px;
|
|||
display: inline-block;
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
top: 29px;
|
||||
// This aligns the avatar with the last line of the
|
||||
// message. We want to move it one line up - 2.2rem
|
||||
top: -2.2rem;
|
||||
user-select: none;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.mx_EventTile_continuation .mx_EventTile_readAvatars,
|
||||
.mx_EventTile_info .mx_EventTile_readAvatars,
|
||||
.mx_EventTile_emote .mx_EventTile_readAvatars {
|
||||
top: 7px;
|
||||
}
|
||||
|
||||
.mx_EventTile_readAvatars .mx_BaseAvatar {
|
||||
position: absolute;
|
||||
display: inline-block;
|
||||
|
@ -531,14 +527,14 @@ $left-gutter: 64px;
|
|||
display: inline-block;
|
||||
visibility: hidden;
|
||||
cursor: pointer;
|
||||
top: 6px;
|
||||
right: 12px;
|
||||
top: 8px;
|
||||
right: 8px;
|
||||
width: 19px;
|
||||
height: 19px;
|
||||
background-color: $message-action-bar-fg-color;
|
||||
}
|
||||
.mx_EventTile_buttonBottom {
|
||||
top: 31px;
|
||||
top: 33px;
|
||||
}
|
||||
.mx_EventTile_copyButton {
|
||||
mask-image: url($copy-button-url);
|
||||
|
|
|
@ -227,18 +227,6 @@ limitations under the License.
|
|||
mask-image: url('$(res)/img/element-icons/room/composer/attach.svg');
|
||||
}
|
||||
|
||||
.mx_MessageComposer_hangup::before {
|
||||
mask-image: url('$(res)/img/element-icons/call/hangup.svg');
|
||||
}
|
||||
|
||||
.mx_MessageComposer_voicecall::before {
|
||||
mask-image: url('$(res)/img/element-icons/call/voice-call.svg');
|
||||
}
|
||||
|
||||
.mx_MessageComposer_videocall::before {
|
||||
mask-image: url('$(res)/img/element-icons/call/video-call.svg');
|
||||
}
|
||||
|
||||
.mx_MessageComposer_emoji::before {
|
||||
mask-image: url('$(res)/img/element-icons/room/composer/emoji.svg');
|
||||
}
|
||||
|
|
|
@ -252,6 +252,19 @@ limitations under the License.
|
|||
mask-image: url('$(res)/img/element-icons/room/search-inset.svg');
|
||||
}
|
||||
|
||||
.mx_RoomHeader_voiceCallButton::before {
|
||||
mask-image: url('$(res)/img/element-icons/call/voice-call.svg');
|
||||
|
||||
// The call button SVG is padded slightly differently, so match it up to the size
|
||||
// of the other icons
|
||||
mask-size: 20px;
|
||||
mask-position: center;
|
||||
}
|
||||
|
||||
.mx_RoomHeader_videoCallButton::before {
|
||||
mask-image: url('$(res)/img/element-icons/call/video-call.svg');
|
||||
}
|
||||
|
||||
.mx_RoomHeader_showPanel {
|
||||
height: 16px;
|
||||
}
|
||||
|
|
|
@ -197,6 +197,9 @@ limitations under the License.
|
|||
|
||||
.mx_RoomSublist_resizerHandles {
|
||||
flex: 0 0 4px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
// Class name comes from the ResizableBox component
|
||||
|
@ -207,17 +210,12 @@ limitations under the License.
|
|||
border-radius: 3px;
|
||||
|
||||
// Override styles from library
|
||||
width: unset !important;
|
||||
max-width: 64px;
|
||||
height: 4px !important; // Update RESIZE_HANDLE_HEIGHT if this changes
|
||||
|
||||
// This is positioned directly below the 'show more' button.
|
||||
position: absolute;
|
||||
position: relative !important;
|
||||
bottom: 0 !important; // override from library
|
||||
|
||||
// Together, these make the bar 64px wide
|
||||
// These are also overridden from the library
|
||||
left: calc(50% - 32px) !important;
|
||||
right: calc(50% - 32px) !important;
|
||||
}
|
||||
|
||||
&:hover, &.mx_RoomSublist_hasMenuOpen {
|
||||
|
|
|
@ -16,6 +16,7 @@ limitations under the License.
|
|||
|
||||
.mx_VideoFeed_remote {
|
||||
width: 100%;
|
||||
max-height: 100%;
|
||||
background-color: #000;
|
||||
z-index: 50;
|
||||
}
|
||||
|
|
|
@ -259,6 +259,11 @@ $composer-shadow-color: rgba(0, 0, 0, 0.28);
|
|||
.mx_EventTile_content .markdown-body pre:hover {
|
||||
border-color: #808080 !important; // inverted due to rules below
|
||||
scrollbar-color: rgba(0, 0, 0, 0.2) transparent; // copied from light theme due to inversion below
|
||||
// the code above works only in Firefox, this is for other browsers
|
||||
// see https://developer.mozilla.org/en-US/docs/Web/CSS/scrollbar-color
|
||||
&::-webkit-scrollbar-thumb {
|
||||
background-color: rgba(0, 0, 0, 0.2); // copied from light theme due to inversion below
|
||||
}
|
||||
}
|
||||
.mx_EventTile_content .markdown-body {
|
||||
pre, code {
|
||||
|
|
2
src/@types/global.d.ts
vendored
2
src/@types/global.d.ts
vendored
|
@ -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 {
|
||||
|
|
|
@ -165,6 +165,9 @@ export function avatarUrlForRoom(room: Room, width: number, height: number, resi
|
|||
return explicitRoomAvatar;
|
||||
}
|
||||
|
||||
// space rooms cannot be DMs so skip the rest
|
||||
if (room.isSpaceRoom()) return null;
|
||||
|
||||
let otherMember = null;
|
||||
const otherUserId = DMRoomMap.shared().getUserIdForRoomId(room.roomId);
|
||||
if (otherUserId) {
|
||||
|
|
|
@ -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";
|
||||
|
@ -84,10 +83,19 @@ 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 { randomUppercaseString, randomLowercaseString } 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',
|
||||
|
@ -96,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
|
||||
|
@ -126,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) {
|
||||
|
@ -140,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() {
|
||||
|
@ -163,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() {
|
||||
|
@ -177,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
|
||||
|
@ -550,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);
|
||||
|
@ -681,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':
|
||||
|
@ -779,8 +861,9 @@ export default class CallHandler {
|
|||
// https://github.com/matrix-org/prosody-mod-auth-matrix-user-verification
|
||||
confId = base32.stringify(Buffer.from(roomId), { pad: false });
|
||||
} else {
|
||||
// Create a random human readable conference ID
|
||||
confId = `JitsiConference${generateHumanReadableId()}`;
|
||||
// Create a random conference ID
|
||||
const random = randomUppercaseString(1) + randomLowercaseString(23);
|
||||
confId = 'Jitsi' + random;
|
||||
}
|
||||
|
||||
let widgetUrl = WidgetUtils.getLocalJitsiWrapperUrl({auth: jitsiAuth});
|
||||
|
@ -796,6 +879,7 @@ export default class CallHandler {
|
|||
isAudioOnly: type === 'voice',
|
||||
domain: jitsiDomain,
|
||||
auth: jitsiAuth,
|
||||
roomName: room.name,
|
||||
};
|
||||
|
||||
const widgetId = (
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -1,113 +0,0 @@
|
|||
/*
|
||||
Copyright 2016 OpenMarket Ltd
|
||||
Copyright 2019 The Matrix.org Foundation C.I.C.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
* For two objects of the form { key: [val1, val2, val3] }, work out the added/removed
|
||||
* values. Entirely new keys will result in the entire value array being added.
|
||||
* @param {Object} before
|
||||
* @param {Object} after
|
||||
* @return {Object[]} An array of objects with the form:
|
||||
* { key: $KEY, val: $VALUE, place: "add|del" }
|
||||
*/
|
||||
export function getKeyValueArrayDiffs(before, after) {
|
||||
const results = [];
|
||||
const delta = {};
|
||||
Object.keys(before).forEach(function(beforeKey) {
|
||||
delta[beforeKey] = delta[beforeKey] || 0; // init to 0 initially
|
||||
delta[beforeKey]--; // keys present in the past have -ve values
|
||||
});
|
||||
Object.keys(after).forEach(function(afterKey) {
|
||||
delta[afterKey] = delta[afterKey] || 0; // init to 0 initially
|
||||
delta[afterKey]++; // keys present in the future have +ve values
|
||||
});
|
||||
|
||||
Object.keys(delta).forEach(function(muxedKey) {
|
||||
switch (delta[muxedKey]) {
|
||||
case 1: // A new key in after
|
||||
after[muxedKey].forEach(function(afterVal) {
|
||||
results.push({ place: "add", key: muxedKey, val: afterVal });
|
||||
});
|
||||
break;
|
||||
case -1: // A before key was removed
|
||||
before[muxedKey].forEach(function(beforeVal) {
|
||||
results.push({ place: "del", key: muxedKey, val: beforeVal });
|
||||
});
|
||||
break;
|
||||
case 0: {// A mix of added/removed keys
|
||||
// compare old & new vals
|
||||
const itemDelta = {};
|
||||
before[muxedKey].forEach(function(beforeVal) {
|
||||
itemDelta[beforeVal] = itemDelta[beforeVal] || 0;
|
||||
itemDelta[beforeVal]--;
|
||||
});
|
||||
after[muxedKey].forEach(function(afterVal) {
|
||||
itemDelta[afterVal] = itemDelta[afterVal] || 0;
|
||||
itemDelta[afterVal]++;
|
||||
});
|
||||
|
||||
Object.keys(itemDelta).forEach(function(item) {
|
||||
if (itemDelta[item] === 1) {
|
||||
results.push({ place: "add", key: muxedKey, val: item });
|
||||
} else if (itemDelta[item] === -1) {
|
||||
results.push({ place: "del", key: muxedKey, val: item });
|
||||
} else {
|
||||
// itemDelta of 0 means it was unchanged between before/after
|
||||
}
|
||||
});
|
||||
break;
|
||||
}
|
||||
default:
|
||||
console.error("Calculated key delta of " + delta[muxedKey] + " - this should never happen!");
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
return results;
|
||||
}
|
||||
|
||||
/**
|
||||
* Shallow-compare two objects for equality: each key and value must be identical
|
||||
* @param {Object} objA First object to compare against the second
|
||||
* @param {Object} objB Second object to compare against the first
|
||||
* @return {boolean} whether the two objects have same key=values
|
||||
*/
|
||||
export function shallowEqual(objA, objB) {
|
||||
if (objA === objB) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (typeof objA !== 'object' || objA === null ||
|
||||
typeof objB !== 'object' || objB === null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const keysA = Object.keys(objA);
|
||||
const keysB = Object.keys(objB);
|
||||
|
||||
if (keysA.length !== keysB.length) {
|
||||
return false;
|
||||
}
|
||||
|
||||
for (let i = 0; i < keysA.length; i++) {
|
||||
const key = keysA[i];
|
||||
if (!objB.hasOwnProperty(key) || objA[key] !== objB[key]) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
|
@ -1,51 +0,0 @@
|
|||
/*
|
||||
Copyright 2018 New Vector Ltd
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
import SdkConfig from './SdkConfig';
|
||||
import {hashCode} from './utils/FormattingUtils';
|
||||
|
||||
export function phasedRollOutExpiredForUser(username, feature, now, rollOutConfig = SdkConfig.get().phasedRollOut) {
|
||||
if (!rollOutConfig) {
|
||||
console.log(`no phased rollout configuration, so enabling ${feature}`);
|
||||
return true;
|
||||
}
|
||||
const featureConfig = rollOutConfig[feature];
|
||||
if (!featureConfig) {
|
||||
console.log(`${feature} doesn't have phased rollout configured, so enabling`);
|
||||
return true;
|
||||
}
|
||||
if (!Number.isFinite(featureConfig.offset) || !Number.isFinite(featureConfig.period)) {
|
||||
console.error(`phased rollout of ${feature} is misconfigured, ` +
|
||||
`offset and/or period are not numbers, so disabling`, featureConfig);
|
||||
return false;
|
||||
}
|
||||
|
||||
const hash = hashCode(username);
|
||||
//ms -> min, enable users at minute granularity
|
||||
const bucketRatio = 1000 * 60;
|
||||
const bucketCount = featureConfig.period / bucketRatio;
|
||||
const userBucket = hash % bucketCount;
|
||||
const userMs = userBucket * bucketRatio;
|
||||
const enableAt = featureConfig.offset + userMs;
|
||||
const result = now >= enableAt;
|
||||
const bucketStr = `(bucket ${userBucket}/${bucketCount})`;
|
||||
if (result) {
|
||||
console.log(`${feature} enabled for ${username} ${bucketStr}`);
|
||||
} else {
|
||||
console.log(`${feature} will be enabled for ${username} in ${Math.ceil((enableAt - now)/1000)}s ${bucketStr}`);
|
||||
}
|
||||
return result;
|
||||
}
|
|
@ -98,11 +98,27 @@ async function getSecretStorageKey(
|
|||
{ keys: keyInfos }: { keys: Record<string, ISecretStorageKeyInfo> },
|
||||
ssssItemName,
|
||||
): Promise<[string, Uint8Array]> {
|
||||
const keyInfoEntries = Object.entries(keyInfos);
|
||||
if (keyInfoEntries.length > 1) {
|
||||
throw new Error("Multiple storage key requests not implemented");
|
||||
const cli = MatrixClientPeg.get();
|
||||
let keyId = await cli.getDefaultSecretStorageKeyId();
|
||||
let keyInfo;
|
||||
if (keyId) {
|
||||
// use the default SSSS key if set
|
||||
keyInfo = keyInfos[keyId];
|
||||
if (!keyInfo) {
|
||||
// if the default key is not available, pretend the default key
|
||||
// isn't set
|
||||
keyId = undefined;
|
||||
}
|
||||
}
|
||||
if (!keyId) {
|
||||
// if no default SSSS key is set, fall back to a heuristic of using the
|
||||
// only available key, if only one key is set
|
||||
const keyInfoEntries = Object.entries(keyInfos);
|
||||
if (keyInfoEntries.length > 1) {
|
||||
throw new Error("Multiple storage key requests not implemented");
|
||||
}
|
||||
[keyId, keyInfo] = keyInfoEntries[0];
|
||||
}
|
||||
const [keyId, keyInfo] = keyInfoEntries[0];
|
||||
|
||||
// Check the in-memory cache
|
||||
if (isCachingAllowed() && secretStorageKeys[keyId]) {
|
||||
|
|
|
@ -1040,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");
|
||||
}
|
||||
|
@ -1182,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) {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -299,7 +299,7 @@ export class ContextMenu extends React.PureComponent<IProps, IState> {
|
|||
// such that it does not leave the (padded) window.
|
||||
if (contextMenuRect) {
|
||||
const padding = 10;
|
||||
adjusted = Math.min(position.top, document.body.clientHeight - contextMenuRect.height + padding);
|
||||
adjusted = Math.min(position.top, document.body.clientHeight - contextMenuRect.height - padding);
|
||||
}
|
||||
|
||||
position.top = adjusted;
|
||||
|
@ -390,7 +390,7 @@ export class ContextMenu extends React.PureComponent<IProps, IState> {
|
|||
}
|
||||
|
||||
// Placement method for <ContextMenu /> to position context menu to right of elementRect with chevronOffset
|
||||
export const toRightOf = (elementRect: DOMRect, chevronOffset = 12) => {
|
||||
export const toRightOf = (elementRect: Pick<DOMRect, "right" | "top" | "height">, chevronOffset = 12) => {
|
||||
const left = elementRect.right + window.pageXOffset + 3;
|
||||
let top = elementRect.top + (elementRect.height / 2) + window.pageYOffset;
|
||||
top -= chevronOffset + 8; // where 8 is half the height of the chevron
|
||||
|
|
|
@ -21,6 +21,7 @@ import {
|
|||
} from "../views/context_menus/IconizedContextMenu";
|
||||
import { _t } from "../../languageHandler";
|
||||
import { HostSignupStore } from "../../stores/HostSignupStore";
|
||||
import SdkConfig from "../../SdkConfig";
|
||||
|
||||
interface IProps {}
|
||||
|
||||
|
@ -32,11 +33,21 @@ export default class HostSignupAction extends React.PureComponent<IProps, IState
|
|||
}
|
||||
|
||||
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 pro")}
|
||||
label={_t(
|
||||
"Upgrade to %(hostSignupBrand)s",
|
||||
{
|
||||
hostSignupBrand: hostSignupConfig.brand,
|
||||
},
|
||||
)}
|
||||
onClick={this.openDialog}
|
||||
/>
|
||||
</IconizedContextMenuOptionList>
|
||||
|
|
|
@ -107,7 +107,9 @@ interface IState {
|
|||
errcode: string;
|
||||
};
|
||||
};
|
||||
usageLimitDismissed: boolean;
|
||||
usageLimitEventContent?: IUsageLimit;
|
||||
usageLimitEventTs?: number;
|
||||
useCompactLayout: boolean;
|
||||
}
|
||||
|
||||
|
@ -151,6 +153,7 @@ class LoggedInView extends React.Component<IProps, IState> {
|
|||
syncErrorData: undefined,
|
||||
// use compact timeline view
|
||||
useCompactLayout: SettingsStore.getValue('useCompactLayout'),
|
||||
usageLimitDismissed: false,
|
||||
};
|
||||
|
||||
// stash the MatrixClient in case we log out before we are unmounted
|
||||
|
@ -302,14 +305,27 @@ class LoggedInView extends React.Component<IProps, IState> {
|
|||
}
|
||||
};
|
||||
|
||||
private onUsageLimitDismissed = () => {
|
||||
this.setState({
|
||||
usageLimitDismissed: true,
|
||||
});
|
||||
}
|
||||
|
||||
_calculateServerLimitToast(syncError: IState["syncErrorData"], usageLimitEventContent?: IUsageLimit) {
|
||||
const error = syncError && syncError.error && syncError.error.errcode === "M_RESOURCE_LIMIT_EXCEEDED";
|
||||
if (error) {
|
||||
usageLimitEventContent = syncError.error.data;
|
||||
}
|
||||
|
||||
if (usageLimitEventContent) {
|
||||
showServerLimitToast(usageLimitEventContent.limit_type, usageLimitEventContent.admin_contact, error);
|
||||
// usageLimitDismissed is true when the user has explicitly hidden the toast
|
||||
// and it will be reset to false if a *new* usage alert comes in.
|
||||
if (usageLimitEventContent && this.state.usageLimitDismissed) {
|
||||
showServerLimitToast(
|
||||
usageLimitEventContent.limit_type,
|
||||
this.onUsageLimitDismissed,
|
||||
usageLimitEventContent.admin_contact,
|
||||
error,
|
||||
);
|
||||
} else {
|
||||
hideServerLimitToast();
|
||||
}
|
||||
|
@ -320,10 +336,12 @@ class LoggedInView extends React.Component<IProps, IState> {
|
|||
if (!serverNoticeList) return [];
|
||||
|
||||
const events = [];
|
||||
let pinnedEventTs = 0;
|
||||
for (const room of serverNoticeList) {
|
||||
const pinStateEvent = room.currentState.getStateEvents("m.room.pinned_events", "");
|
||||
|
||||
if (!pinStateEvent || !pinStateEvent.getContent().pinned) continue;
|
||||
pinnedEventTs = pinStateEvent.getTs();
|
||||
|
||||
const pinnedEventIds = pinStateEvent.getContent().pinned.slice(0, MAX_PINNED_NOTICES_PER_ROOM);
|
||||
for (const eventId of pinnedEventIds) {
|
||||
|
@ -333,6 +351,11 @@ class LoggedInView extends React.Component<IProps, IState> {
|
|||
}
|
||||
}
|
||||
|
||||
if (pinnedEventTs && this.state.usageLimitEventTs > pinnedEventTs) {
|
||||
// We've processed a newer event than this one, so ignore it.
|
||||
return;
|
||||
}
|
||||
|
||||
const usageLimitEvent = events.find((e) => {
|
||||
return (
|
||||
e && e.getType() === 'm.room.message' &&
|
||||
|
@ -341,7 +364,12 @@ class LoggedInView extends React.Component<IProps, IState> {
|
|||
});
|
||||
const usageLimitEventContent = usageLimitEvent && usageLimitEvent.getContent();
|
||||
this._calculateServerLimitToast(this.state.syncErrorData, usageLimitEventContent);
|
||||
this.setState({ usageLimitEventContent });
|
||||
this.setState({
|
||||
usageLimitEventContent,
|
||||
usageLimitEventTs: pinnedEventTs,
|
||||
// This is a fresh toast, we can show toasts again
|
||||
usageLimitDismissed: false,
|
||||
});
|
||||
};
|
||||
|
||||
_onPaste = (ev) => {
|
||||
|
|
|
@ -27,6 +27,7 @@ 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";
|
||||
|
@ -136,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);
|
||||
|
||||
|
@ -623,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>
|
||||
|
@ -821,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}
|
||||
|
|
|
@ -34,11 +34,10 @@ import ResizeNotifier from '../../utils/ResizeNotifier';
|
|||
import ContentMessages from '../../ContentMessages';
|
||||
import Modal from '../../Modal';
|
||||
import * as sdk from '../../index';
|
||||
import CallHandler from '../../CallHandler';
|
||||
import CallHandler, { PlaceCallType } from '../../CallHandler';
|
||||
import dis from '../../dispatcher/dispatcher';
|
||||
import Tinter from '../../Tinter';
|
||||
import rateLimitedFunc from '../../ratelimitedfunc';
|
||||
import * as ObjectUtils from '../../ObjectUtils';
|
||||
import * as Rooms from '../../Rooms';
|
||||
import eventSearch, { searchPagination } from '../../Searching';
|
||||
import { isOnlyCtrlOrCmdIgnoreShiftKeyEvent, Key } from '../../Keyboard';
|
||||
|
@ -48,6 +47,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";
|
||||
|
@ -79,6 +79,7 @@ import Notifier from "../../Notifier";
|
|||
import { showToast as showNotificationsToast } from "../../toasts/DesktopNotificationsToast";
|
||||
import { RoomNotificationStateStore } from "../../stores/notifications/RoomNotificationStateStore";
|
||||
import { Container, WidgetLayoutStore } from "../../stores/widgets/WidgetLayoutStore";
|
||||
import { objectHasDiff } from "../../utils/objects";
|
||||
|
||||
const DEBUG = false;
|
||||
let debuglog = function(msg: string) {};
|
||||
|
@ -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,7 +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);
|
||||
this.layoutWatcherRef = SettingsStore.watchSetting("layout", null, this.onLayoutChange);
|
||||
}
|
||||
|
||||
private onWidgetStoreUpdate = () => {
|
||||
|
@ -522,8 +523,7 @@ export default class RoomView extends React.Component<IProps, IState> {
|
|||
}
|
||||
|
||||
shouldComponentUpdate(nextProps, nextState) {
|
||||
return (!ObjectUtils.shallowEqual(this.props, nextProps) ||
|
||||
!ObjectUtils.shallowEqual(this.state, nextState));
|
||||
return (objectHasDiff(this.props, nextProps) || objectHasDiff(this.state, nextState));
|
||||
}
|
||||
|
||||
componentDidUpdate() {
|
||||
|
@ -638,7 +638,7 @@ export default class RoomView extends React.Component<IProps, IState> {
|
|||
|
||||
private onLayoutChange = () => {
|
||||
this.setState({
|
||||
useIRCLayout: SettingsStore.getValue("useIRCLayout"),
|
||||
layout: SettingsStore.getValue("layout"),
|
||||
});
|
||||
};
|
||||
|
||||
|
@ -1352,6 +1352,14 @@ export default class RoomView extends React.Component<IProps, IState> {
|
|||
SettingsStore.setValue("PinnedEvents.isOpen", roomId, SettingLevel.ROOM_DEVICE, nowShowingPinned);
|
||||
};
|
||||
|
||||
private onCallPlaced = (type: PlaceCallType) => {
|
||||
dis.dispatch({
|
||||
action: 'place_call',
|
||||
type: type,
|
||||
room_id: this.state.room.roomId,
|
||||
});
|
||||
};
|
||||
|
||||
private onSettingsClick = () => {
|
||||
dis.dispatch({ action: "open_room_settings" });
|
||||
};
|
||||
|
@ -1945,8 +1953,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);
|
||||
|
@ -1969,7 +1977,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;
|
||||
|
@ -2031,6 +2039,7 @@ export default class RoomView extends React.Component<IProps, IState> {
|
|||
e2eStatus={this.state.e2eStatus}
|
||||
onAppsClick={this.state.hasPinnedWidgets ? this.onAppsClick : null}
|
||||
appsShown={this.state.showApps}
|
||||
onCallPlaced={this.onCallPlaced}
|
||||
/>
|
||||
<MainSplit panel={rightPanel} resizeNotifier={this.props.resizeNotifier}>
|
||||
<div className="mx_RoomView_body">
|
||||
|
|
|
@ -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';
|
||||
|
@ -25,7 +26,6 @@ import {EventTimeline} from "matrix-js-sdk";
|
|||
import * as Matrix from "matrix-js-sdk";
|
||||
import { _t } from '../../languageHandler';
|
||||
import {MatrixClientPeg} from "../../MatrixClientPeg";
|
||||
import * as ObjectUtils from "../../ObjectUtils";
|
||||
import UserActivity from "../../UserActivity";
|
||||
import Modal from "../../Modal";
|
||||
import dis from "../../dispatcher/dispatcher";
|
||||
|
@ -36,6 +36,7 @@ import shouldHideEvent from '../../shouldHideEvent';
|
|||
import EditorStateTransfer from '../../utils/EditorStateTransfer';
|
||||
import {haveTileForEvent} from "../views/rooms/EventTile";
|
||||
import {UIFeature} from "../../settings/UIFeature";
|
||||
import {objectHasDiff} from "../../utils/objects";
|
||||
|
||||
const PAGINATE_SIZE = 20;
|
||||
const INITIAL_SIZE = 20;
|
||||
|
@ -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
|
||||
|
@ -260,7 +261,7 @@ class TimelinePanel extends React.Component {
|
|||
}
|
||||
|
||||
shouldComponentUpdate(nextProps, nextState) {
|
||||
if (!ObjectUtils.shallowEqual(this.props, nextProps)) {
|
||||
if (objectHasDiff(this.props, nextProps)) {
|
||||
if (DEBUG) {
|
||||
console.group("Timeline.shouldComponentUpdate: props change");
|
||||
console.log("props before:", this.props);
|
||||
|
@ -270,7 +271,7 @@ class TimelinePanel extends React.Component {
|
|||
return true;
|
||||
}
|
||||
|
||||
if (!ObjectUtils.shallowEqual(this.state, nextState)) {
|
||||
if (objectHasDiff(this.state, nextState)) {
|
||||
if (DEBUG) {
|
||||
console.group("Timeline.shouldComponentUpdate: state change");
|
||||
console.log("state before:", this.state);
|
||||
|
@ -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)}
|
||||
/>
|
||||
);
|
||||
|
|
|
@ -103,11 +103,15 @@ export default class UserMenu extends React.Component<IProps, IState> {
|
|||
};
|
||||
|
||||
private isUserOnDarkTheme(): boolean {
|
||||
const theme = SettingsStore.getValue("theme");
|
||||
if (theme.startsWith("custom-")) {
|
||||
return getCustomTheme(theme.substring("custom-".length)).is_dark;
|
||||
if (SettingsStore.getValue("use_system_theme")) {
|
||||
return window.matchMedia("(prefers-color-scheme: dark)").matches;
|
||||
} else {
|
||||
const theme = SettingsStore.getValue("theme");
|
||||
if (theme.startsWith("custom-")) {
|
||||
return getCustomTheme(theme.substring("custom-".length)).is_dark;
|
||||
}
|
||||
return theme === "dark";
|
||||
}
|
||||
return theme === "dark";
|
||||
}
|
||||
|
||||
private onProfileUpdate = async () => {
|
||||
|
@ -300,7 +304,7 @@ export default class UserMenu extends React.Component<IProps, IState> {
|
|||
const hostSignupDomains = hostSignupConfig.domains || [];
|
||||
const mxDomain = MatrixClientPeg.get().getDomain();
|
||||
const validDomains = hostSignupDomains.filter(d => (d === mxDomain || mxDomain.endsWith(`.${d}`)));
|
||||
if (!hostSignupDomains || validDomains.length > 0) {
|
||||
if (!hostSignupConfig.domains || validDomains.length > 0) {
|
||||
topSection = <div onClick={this.onCloseMenu}>
|
||||
<HostSignupAction />
|
||||
</div>;
|
||||
|
|
|
@ -13,7 +13,7 @@ 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 React, {ComponentProps} from 'react';
|
||||
import Room from 'matrix-js-sdk/src/models/room';
|
||||
import {getHttpUriForMxc} from 'matrix-js-sdk/src/content-repo';
|
||||
|
||||
|
@ -24,7 +24,7 @@ import Modal from '../../../Modal';
|
|||
import * as Avatar from '../../../Avatar';
|
||||
import {ResizeMethod} from "../../../Avatar";
|
||||
|
||||
interface IProps {
|
||||
interface IProps extends Omit<ComponentProps<typeof BaseAvatar>, "name" | "idName" | "url" | "onClick">{
|
||||
// Room may be left unset here, but if it is,
|
||||
// oobData.avatarUrl should be set (else there
|
||||
// would be nowhere to get the avatar from)
|
||||
|
|
|
@ -34,6 +34,10 @@ import {
|
|||
} from "matrix-js-sdk/src/crypto/verification/request/VerificationRequest";
|
||||
import WidgetStore from "../../../stores/WidgetStore";
|
||||
import {UPDATE_EVENT} from "../../../stores/AsyncStore";
|
||||
import {SETTINGS} from "../../../settings/Settings";
|
||||
import SettingsStore, {LEVEL_ORDER} from "../../../settings/SettingsStore";
|
||||
import Modal from "../../../Modal";
|
||||
import ErrorDialog from "./ErrorDialog";
|
||||
|
||||
class GenericEditor extends React.PureComponent {
|
||||
// static propTypes = {onBack: PropTypes.func.isRequired};
|
||||
|
@ -794,6 +798,286 @@ class WidgetExplorer extends React.Component {
|
|||
}
|
||||
}
|
||||
|
||||
class SettingsExplorer extends React.Component {
|
||||
static getLabel() {
|
||||
return _t("Settings Explorer");
|
||||
}
|
||||
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
||||
this.state = {
|
||||
query: '',
|
||||
editSetting: null, // set to a setting ID when editing
|
||||
viewSetting: null, // set to a setting ID when exploring in detail
|
||||
|
||||
explicitValues: null, // stringified JSON for edit view
|
||||
explicitRoomValues: null, // stringified JSON for edit view
|
||||
};
|
||||
}
|
||||
|
||||
onQueryChange = (ev) => {
|
||||
this.setState({query: ev.target.value});
|
||||
};
|
||||
|
||||
onExplValuesEdit = (ev) => {
|
||||
this.setState({explicitValues: ev.target.value});
|
||||
};
|
||||
|
||||
onExplRoomValuesEdit = (ev) => {
|
||||
this.setState({explicitRoomValues: ev.target.value});
|
||||
};
|
||||
|
||||
onBack = () => {
|
||||
if (this.state.editSetting) {
|
||||
this.setState({editSetting: null});
|
||||
} else if (this.state.viewSetting) {
|
||||
this.setState({viewSetting: null});
|
||||
} else {
|
||||
this.props.onBack();
|
||||
}
|
||||
};
|
||||
|
||||
onViewClick = (ev, settingId) => {
|
||||
ev.preventDefault();
|
||||
this.setState({viewSetting: settingId});
|
||||
};
|
||||
|
||||
onEditClick = (ev, settingId) => {
|
||||
ev.preventDefault();
|
||||
this.setState({
|
||||
editSetting: settingId,
|
||||
explicitValues: this.renderExplicitSettingValues(settingId, null),
|
||||
explicitRoomValues: this.renderExplicitSettingValues(settingId, this.props.room.roomId),
|
||||
});
|
||||
};
|
||||
|
||||
onSaveClick = async () => {
|
||||
try {
|
||||
const settingId = this.state.editSetting;
|
||||
const parsedExplicit = JSON.parse(this.state.explicitValues);
|
||||
const parsedExplicitRoom = JSON.parse(this.state.explicitRoomValues);
|
||||
for (const level of Object.keys(parsedExplicit)) {
|
||||
console.log(`[Devtools] Setting value of ${settingId} at ${level} from user input`);
|
||||
try {
|
||||
const val = parsedExplicit[level];
|
||||
await SettingsStore.setValue(settingId, null, level, val);
|
||||
} catch (e) {
|
||||
console.warn(e);
|
||||
}
|
||||
}
|
||||
const roomId = this.props.room.roomId;
|
||||
for (const level of Object.keys(parsedExplicit)) {
|
||||
console.log(`[Devtools] Setting value of ${settingId} at ${level} in ${roomId} from user input`);
|
||||
try {
|
||||
const val = parsedExplicitRoom[level];
|
||||
await SettingsStore.setValue(settingId, roomId, level, val);
|
||||
} catch (e) {
|
||||
console.warn(e);
|
||||
}
|
||||
}
|
||||
this.setState({
|
||||
viewSetting: settingId,
|
||||
editSetting: null,
|
||||
});
|
||||
} catch (e) {
|
||||
Modal.createTrackedDialog('Devtools - Failed to save settings', '', ErrorDialog, {
|
||||
title: _t("Failed to save settings"),
|
||||
description: e.message,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
renderSettingValue(val) {
|
||||
// Note: we don't .toString() a string because we want JSON.stringify to inject quotes for us
|
||||
const toStringTypes = ['boolean', 'number'];
|
||||
if (toStringTypes.includes(typeof(val))) {
|
||||
return val.toString();
|
||||
} else {
|
||||
return JSON.stringify(val);
|
||||
}
|
||||
}
|
||||
|
||||
renderExplicitSettingValues(setting, roomId) {
|
||||
const vals = {};
|
||||
for (const level of LEVEL_ORDER) {
|
||||
try {
|
||||
vals[level] = SettingsStore.getValueAt(level, setting, roomId, true, true);
|
||||
if (vals[level] === undefined) {
|
||||
vals[level] = null;
|
||||
}
|
||||
} catch (e) {
|
||||
console.warn(e);
|
||||
}
|
||||
}
|
||||
return JSON.stringify(vals, null, 4);
|
||||
}
|
||||
|
||||
renderCanEditLevel(roomId, level) {
|
||||
const canEdit = SettingsStore.canSetValue(this.state.editSetting, roomId, level);
|
||||
const className = canEdit ? 'mx_DevTools_SettingsExplorer_mutable' : 'mx_DevTools_SettingsExplorer_immutable';
|
||||
return <td className={className}><code>{canEdit.toString()}</code></td>;
|
||||
}
|
||||
|
||||
render() {
|
||||
const room = this.props.room;
|
||||
|
||||
if (!this.state.viewSetting && !this.state.editSetting) {
|
||||
// view all settings
|
||||
const allSettings = Object.keys(SETTINGS)
|
||||
.filter(n => this.state.query ? n.toLowerCase().includes(this.state.query.toLowerCase()) : true);
|
||||
return (
|
||||
<div>
|
||||
<div className="mx_Dialog_content mx_DevTools_SettingsExplorer">
|
||||
<Field
|
||||
label={_t('Filter results')} autoFocus={true} size={64}
|
||||
type="text" autoComplete="off" value={this.state.query} onChange={this.onQueryChange}
|
||||
className="mx_TextInputDialog_input mx_DevTools_RoomStateExplorer_query"
|
||||
/>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{_t("Setting ID")}</th>
|
||||
<th>{_t("Value")}</th>
|
||||
<th>{_t("Value in this room")}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{allSettings.map(i => (
|
||||
<tr key={i}>
|
||||
<td>
|
||||
<a href="" onClick={(e) => this.onViewClick(e, i)}>
|
||||
<code>{i}</code>
|
||||
</a>
|
||||
<a href="" onClick={(e) => this.onEditClick(e, i)}
|
||||
className='mx_DevTools_SettingsExplorer_edit'
|
||||
>
|
||||
✏
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
<code>{this.renderSettingValue(SettingsStore.getValue(i))}</code>
|
||||
</td>
|
||||
<td>
|
||||
<code>
|
||||
{this.renderSettingValue(SettingsStore.getValue(i, room.roomId))}
|
||||
</code>
|
||||
</td>
|
||||
</tr>
|
||||
))}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div className="mx_Dialog_buttons">
|
||||
<button onClick={this.onBack}>{_t("Back")}</button>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
} else if (this.state.editSetting) {
|
||||
return (
|
||||
<div>
|
||||
<div className="mx_Dialog_content mx_DevTools_SettingsExplorer">
|
||||
<h3>{_t("Setting:")} <code>{this.state.editSetting}</code></h3>
|
||||
|
||||
<div className='mx_DevTools_SettingsExplorer_warning'>
|
||||
<b>{_t("Caution:")}</b> {_t(
|
||||
"This UI does NOT check the types of the values. Use at your own risk.",
|
||||
)}
|
||||
</div>
|
||||
|
||||
<div>
|
||||
{_t("Setting definition:")}
|
||||
<pre><code>{JSON.stringify(SETTINGS[this.state.editSetting], null, 4)}</code></pre>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{_t("Level")}</th>
|
||||
<th>{_t("Settable at global")}</th>
|
||||
<th>{_t("Settable at room")}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{LEVEL_ORDER.map(lvl => (
|
||||
<tr key={lvl}>
|
||||
<td><code>{lvl}</code></td>
|
||||
{this.renderCanEditLevel(null, lvl)}
|
||||
{this.renderCanEditLevel(room.roomId, lvl)}
|
||||
</tr>
|
||||
))}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<Field
|
||||
id="valExpl" label={_t("Values at explicit levels")} type="text"
|
||||
className="mx_DevTools_textarea" element="textarea"
|
||||
autoComplete="off" value={this.state.explicitValues}
|
||||
onChange={this.onExplValuesEdit}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<Field
|
||||
id="valExpl" label={_t("Values at explicit levels in this room")} type="text"
|
||||
className="mx_DevTools_textarea" element="textarea"
|
||||
autoComplete="off" value={this.state.explicitRoomValues}
|
||||
onChange={this.onExplRoomValuesEdit}
|
||||
/>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div className="mx_Dialog_buttons">
|
||||
<button onClick={this.onSaveClick}>{_t("Save setting values")}</button>
|
||||
<button onClick={this.onBack}>{_t("Back")}</button>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
} else if (this.state.viewSetting) {
|
||||
return (
|
||||
<div>
|
||||
<div className="mx_Dialog_content mx_DevTools_SettingsExplorer">
|
||||
<h3>{_t("Setting:")} <code>{this.state.viewSetting}</code></h3>
|
||||
|
||||
<div>
|
||||
{_t("Setting definition:")}
|
||||
<pre><code>{JSON.stringify(SETTINGS[this.state.viewSetting], null, 4)}</code></pre>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
{_t("Value:")}
|
||||
<code>{this.renderSettingValue(SettingsStore.getValue(this.state.viewSetting))}</code>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
{_t("Value in this room:")}
|
||||
<code>{this.renderSettingValue(SettingsStore.getValue(this.state.viewSetting, room.roomId))}</code>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
{_t("Values at explicit levels:")}
|
||||
<pre><code>{this.renderExplicitSettingValues(this.state.viewSetting, null)}</code></pre>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
{_t("Values at explicit levels in this room:")}
|
||||
<pre><code>{this.renderExplicitSettingValues(this.state.viewSetting, room.roomId)}</code></pre>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div className="mx_Dialog_buttons">
|
||||
<button onClick={(e) => this.onEditClick(e, this.state.viewSetting)}>{_t("Edit Values")}</button>
|
||||
<button onClick={this.onBack}>{_t("Back")}</button>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const Entries = [
|
||||
SendCustomEvent,
|
||||
RoomStateExplorer,
|
||||
|
@ -802,6 +1086,7 @@ const Entries = [
|
|||
ServersInRoomList,
|
||||
VerificationExplorer,
|
||||
WidgetExplorer,
|
||||
SettingsExplorer,
|
||||
];
|
||||
|
||||
export default class DevtoolsDialog extends React.PureComponent {
|
||||
|
|
|
@ -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>;
|
||||
|
|
|
@ -31,6 +31,7 @@ export default class PersistentApp extends React.Component {
|
|||
componentDidMount() {
|
||||
this._roomStoreToken = RoomViewStore.addListener(this._onRoomViewStoreUpdate);
|
||||
ActiveWidgetStore.on('update', this._onActiveWidgetStoreUpdate);
|
||||
MatrixClientPeg.get().on("Room.myMembership", this._onMyMembership);
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
|
@ -38,6 +39,9 @@ export default class PersistentApp extends React.Component {
|
|||
this._roomStoreToken.remove();
|
||||
}
|
||||
ActiveWidgetStore.removeListener('update', this._onActiveWidgetStoreUpdate);
|
||||
if (MatrixClientPeg.get()) {
|
||||
MatrixClientPeg.get().removeListener("Room.myMembership", this._onMyMembership);
|
||||
}
|
||||
}
|
||||
|
||||
_onRoomViewStoreUpdate = payload => {
|
||||
|
@ -53,16 +57,28 @@ export default class PersistentApp extends React.Component {
|
|||
});
|
||||
};
|
||||
|
||||
_onMyMembership = async (room, membership) => {
|
||||
const persistentWidgetInRoomId = ActiveWidgetStore.getRoomId(this.state.persistentWidgetId);
|
||||
if (membership !== "join") {
|
||||
// we're not in the room anymore - delete
|
||||
if (room.roomId === persistentWidgetInRoomId) {
|
||||
ActiveWidgetStore.destroyPersistentWidget(this.state.persistentWidgetId);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
render() {
|
||||
if (this.state.persistentWidgetId) {
|
||||
const persistentWidgetInRoomId = ActiveWidgetStore.getRoomId(this.state.persistentWidgetId);
|
||||
if (this.state.roomId !== persistentWidgetInRoomId) {
|
||||
const persistentWidgetInRoom = MatrixClientPeg.get().getRoom(persistentWidgetInRoomId);
|
||||
|
||||
// Sanity check the room - the widget may have been destroyed between render cycles, and
|
||||
// thus no room is associated anymore.
|
||||
if (!persistentWidgetInRoom) return null;
|
||||
const persistentWidgetInRoom = MatrixClientPeg.get().getRoom(persistentWidgetInRoomId);
|
||||
|
||||
// Sanity check the room - the widget may have been destroyed between render cycles, and
|
||||
// thus no room is associated anymore.
|
||||
if (!persistentWidgetInRoom) return null;
|
||||
|
||||
const myMembership = persistentWidgetInRoom.getMyMembership();
|
||||
if (this.state.roomId !== persistentWidgetInRoomId && myMembership === "join") {
|
||||
// get the widget data
|
||||
const appEvent = WidgetUtils.getRoomWidgets(persistentWidgetInRoom).find((ev) => {
|
||||
return ev.getStateKey() === ActiveWidgetStore.getPersistentWidgetId();
|
||||
|
|
|
@ -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()}
|
||||
/>
|
||||
|
|
|
@ -1,41 +0,0 @@
|
|||
/*
|
||||
Copyright 2017 Vector Creations Ltd
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
import React from 'react';
|
||||
import * as sdk from '../../../index';
|
||||
import PropTypes from 'prop-types';
|
||||
import { _t } from '../../../languageHandler';
|
||||
import {Action} from "../../../dispatcher/actions";
|
||||
|
||||
const RoomDirectoryButton = function(props) {
|
||||
const ActionButton = sdk.getComponent('elements.ActionButton');
|
||||
return (
|
||||
<ActionButton action={Action.ViewRoomDirectory}
|
||||
mouseOverAction={props.callout ? "callout_room_directory" : null}
|
||||
label={_t("Room directory")}
|
||||
iconPath={require("../../../../res/img/icons-directory.svg")}
|
||||
size={props.size}
|
||||
tooltip={props.tooltip}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
RoomDirectoryButton.propTypes = {
|
||||
size: PropTypes.string,
|
||||
tooltip: PropTypes.bool,
|
||||
};
|
||||
|
||||
export default RoomDirectoryButton;
|
40
src/components/views/elements/RoomName.tsx
Normal file
40
src/components/views/elements/RoomName.tsx
Normal file
|
@ -0,0 +1,40 @@
|
|||
/*
|
||||
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 {useEffect, useState} from "react";
|
||||
import {Room} from "matrix-js-sdk/src/models/room";
|
||||
|
||||
import {useEventEmitter} from "../../../hooks/useEventEmitter";
|
||||
|
||||
interface IProps {
|
||||
room: Room;
|
||||
children?(name: string): JSX.Element;
|
||||
}
|
||||
|
||||
const RoomName = ({ room, children }: IProps): JSX.Element => {
|
||||
const [name, setName] = useState(room?.name);
|
||||
useEventEmitter(room, "Room.name", () => {
|
||||
setName(room?.name);
|
||||
});
|
||||
useEffect(() => {
|
||||
setName(room?.name);
|
||||
}, [room]);
|
||||
|
||||
if (children) return children(name);
|
||||
return name || "";
|
||||
};
|
||||
|
||||
export default RoomName;
|
45
src/components/views/elements/RoomTopic.tsx
Normal file
45
src/components/views/elements/RoomTopic.tsx
Normal file
|
@ -0,0 +1,45 @@
|
|||
/*
|
||||
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, {useEffect, useState} from "react";
|
||||
import {EventType} from "matrix-js-sdk/src/@types/event";
|
||||
import {Room} from "matrix-js-sdk/src/models/room";
|
||||
|
||||
import {useEventEmitter} from "../../../hooks/useEventEmitter";
|
||||
import {linkifyElement} from "../../../HtmlUtils";
|
||||
|
||||
interface IProps {
|
||||
room?: Room;
|
||||
children?(topic: string, ref: (element: HTMLElement) => void): JSX.Element;
|
||||
}
|
||||
|
||||
export const getTopic = room => room?.currentState?.getStateEvents(EventType.RoomTopic, "")?.getContent()?.topic;
|
||||
|
||||
const RoomTopic = ({ room, children }: IProps): JSX.Element => {
|
||||
const [topic, setTopic] = useState(getTopic(room));
|
||||
useEventEmitter(room.currentState, "RoomState.events", () => {
|
||||
setTopic(getTopic(room));
|
||||
});
|
||||
useEffect(() => {
|
||||
setTopic(getTopic(room));
|
||||
}, [room]);
|
||||
|
||||
const ref = e => e && linkifyElement(e);
|
||||
if (children) return children(topic, ref);
|
||||
return <span ref={ref}>{ topic }</span>;
|
||||
};
|
||||
|
||||
export default RoomTopic;
|
|
@ -1,40 +0,0 @@
|
|||
/*
|
||||
Copyright 2017 Vector Creations Ltd
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
import React from 'react';
|
||||
import * as sdk from '../../../index';
|
||||
import PropTypes from 'prop-types';
|
||||
import { _t } from '../../../languageHandler';
|
||||
|
||||
const StartChatButton = function(props) {
|
||||
const ActionButton = sdk.getComponent('elements.ActionButton');
|
||||
return (
|
||||
<ActionButton action="view_create_chat"
|
||||
mouseOverAction={props.callout ? "callout_start_chat" : null}
|
||||
label={_t("Start chat")}
|
||||
iconPath={require("../../../../res/img/icons-people.svg")}
|
||||
size={props.size}
|
||||
tooltip={props.tooltip}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
StartChatButton.propTypes = {
|
||||
size: PropTypes.string,
|
||||
tooltip: PropTypes.bool,
|
||||
};
|
||||
|
||||
export default StartChatButton;
|
|
@ -1,63 +0,0 @@
|
|||
/*
|
||||
Copyright 2017 New Vector Ltd
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import TintableSvg from './TintableSvg';
|
||||
import AccessibleButton from './AccessibleButton';
|
||||
|
||||
export default class TintableSvgButton extends React.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
}
|
||||
|
||||
render() {
|
||||
let classes = "mx_TintableSvgButton";
|
||||
if (this.props.className) {
|
||||
classes += " " + this.props.className;
|
||||
}
|
||||
return (
|
||||
<span
|
||||
width={this.props.width}
|
||||
height={this.props.height}
|
||||
className={classes}>
|
||||
<TintableSvg
|
||||
src={this.props.src}
|
||||
width={this.props.width}
|
||||
height={this.props.height}
|
||||
></TintableSvg>
|
||||
<AccessibleButton
|
||||
onClick={this.props.onClick}
|
||||
element='span'
|
||||
title={this.props.title}
|
||||
/>
|
||||
</span>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
TintableSvgButton.propTypes = {
|
||||
src: PropTypes.string,
|
||||
title: PropTypes.string,
|
||||
className: PropTypes.string,
|
||||
width: PropTypes.string.isRequired,
|
||||
height: PropTypes.string.isRequired,
|
||||
onClick: PropTypes.func,
|
||||
};
|
||||
|
||||
TintableSvgButton.defaultProps = {
|
||||
onClick: function() {},
|
||||
};
|
|
@ -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" />
|
||||
|
|
|
@ -99,6 +99,10 @@ export default class TextualBody extends React.Component {
|
|||
// 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;
|
||||
// Add code element if it's missing since we depend on it
|
||||
if (pres[i].getElementsByTagName("code").length == 0) {
|
||||
this._addCodeElement(pres[i]);
|
||||
}
|
||||
// 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]);
|
||||
|
@ -128,6 +132,12 @@ export default class TextualBody extends React.Component {
|
|||
}
|
||||
}
|
||||
|
||||
_addCodeElement(pre) {
|
||||
const code = document.createElement("code");
|
||||
code.append(...pre.childNodes);
|
||||
pre.appendChild(code);
|
||||
}
|
||||
|
||||
_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.
|
||||
|
|
|
@ -19,7 +19,6 @@ import {MatrixClientPeg} from "../../../MatrixClientPeg";
|
|||
import { Room } from 'matrix-js-sdk/src/models/room'
|
||||
import * as sdk from '../../../index';
|
||||
import dis from "../../../dispatcher/dispatcher";
|
||||
import * as ObjectUtils from '../../../ObjectUtils';
|
||||
import AppsDrawer from './AppsDrawer';
|
||||
import { _t } from '../../../languageHandler';
|
||||
import classNames from 'classnames';
|
||||
|
@ -29,6 +28,7 @@ import AutoHideScrollbar from "../../structures/AutoHideScrollbar";
|
|||
import {UIFeature} from "../../../settings/UIFeature";
|
||||
import { ResizeNotifier } from "../../../utils/ResizeNotifier";
|
||||
import CallViewForRoom from '../voip/CallViewForRoom';
|
||||
import {objectHasDiff} from "../../../utils/objects";
|
||||
|
||||
interface IProps {
|
||||
// js-sdk room object
|
||||
|
@ -89,8 +89,7 @@ export default class AuxPanel extends React.Component<IProps, IState> {
|
|||
}
|
||||
|
||||
shouldComponentUpdate(nextProps, nextState) {
|
||||
return (!ObjectUtils.shallowEqual(this.props, nextProps) ||
|
||||
!ObjectUtils.shallowEqual(this.state, nextState));
|
||||
return objectHasDiff(this.props, nextProps) || objectHasDiff(this.state, nextState);
|
||||
}
|
||||
|
||||
componentDidUpdate(prevProps, prevState) {
|
||||
|
|
|
@ -27,17 +27,18 @@ 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';
|
||||
import {ALL_RULE_TYPES} from "../../../mjolnir/BanList";
|
||||
import * as ObjectUtils from "../../../ObjectUtils";
|
||||
import MatrixClientContext from "../../../contexts/MatrixClientContext";
|
||||
import {E2E_STATE} from "./E2EIcon";
|
||||
import {toRem} from "../../../utils/units";
|
||||
import {WidgetType} from "../../../widgets/WidgetType";
|
||||
import RoomAvatar from "../avatars/RoomAvatar";
|
||||
import {WIDGET_LAYOUT_EVENT_TYPE} from "../../../stores/widgets/WidgetLayoutStore";
|
||||
import {objectHasDiff} from "../../../utils/objects";
|
||||
|
||||
const eventTileTypes = {
|
||||
'm.room.message': 'messages.MessageEvent',
|
||||
|
@ -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,
|
||||
|
@ -293,7 +294,7 @@ export default class EventTile extends React.Component {
|
|||
}
|
||||
|
||||
shouldComponentUpdate(nextProps, nextState) {
|
||||
if (!ObjectUtils.shallowEqual(this.state, nextState)) {
|
||||
if (objectHasDiff(this.state, nextState)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -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,16 +945,13 @@ 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
|
||||
return (
|
||||
<div className={classes} tabIndex={-1} aria-live={ariaLive} aria-atomic="true">
|
||||
{ ircTimestamp }
|
||||
<div className="mx_EventTile_msgOption">
|
||||
{ readAvatars }
|
||||
</div>
|
||||
{ sender }
|
||||
{ ircPadlock }
|
||||
<div className="mx_EventTile_line">
|
||||
|
@ -971,6 +970,9 @@ export default class EventTile extends React.Component {
|
|||
{ reactionsRow }
|
||||
{ actionBar }
|
||||
</div>
|
||||
<div className="mx_EventTile_msgOption">
|
||||
{ readAvatars }
|
||||
</div>
|
||||
{
|
||||
// The avatar goes after the event tile as it's absolutely positioned to be over the
|
||||
// event tile line, so needs to be later in the DOM so it appears on top (this avoids
|
||||
|
|
|
@ -450,17 +450,7 @@ export default class MemberList extends React.Component {
|
|||
let inviteButton;
|
||||
|
||||
if (room && room.getMyMembership() === 'join') {
|
||||
// assume we can invite until proven false
|
||||
let canInvite = true;
|
||||
|
||||
const plEvent = room.currentState.getStateEvents("m.room.power_levels", "");
|
||||
const me = room.getMember(cli.getUserId());
|
||||
if (plEvent && me) {
|
||||
const content = plEvent.getContent();
|
||||
if (content && content.invite > me.powerLevel) {
|
||||
canInvite = false;
|
||||
}
|
||||
}
|
||||
const canInvite = room.canInvite(cli.getUserId());
|
||||
|
||||
let inviteButtonText = _t("Invite to this room");
|
||||
const chat = CommunityPrototypeStore.instance.getSelectedCommunityGeneralChat();
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
/*
|
||||
Copyright 2015, 2016 OpenMarket Ltd
|
||||
Copyright 2017, 2018 New Vector Ltd
|
||||
Copyright 2020 The Matrix.org Foundation C.I.C.
|
||||
Copyright 2015-2018, 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.
|
||||
|
@ -19,7 +17,6 @@ import React, {createRef} from 'react';
|
|||
import classNames from 'classnames';
|
||||
import PropTypes from 'prop-types';
|
||||
import { _t } from '../../../languageHandler';
|
||||
import CallHandler from '../../../CallHandler';
|
||||
import {MatrixClientPeg} from '../../../MatrixClientPeg';
|
||||
import * as sdk from '../../../index';
|
||||
import dis from '../../../dispatcher/dispatcher';
|
||||
|
@ -33,11 +30,8 @@ import AccessibleTooltipButton from "../elements/AccessibleTooltipButton";
|
|||
import ReplyPreview from "./ReplyPreview";
|
||||
import {UIFeature} from "../../../settings/UIFeature";
|
||||
import WidgetStore from "../../../stores/WidgetStore";
|
||||
import WidgetUtils from "../../../utils/WidgetUtils";
|
||||
import {UPDATE_EVENT} from "../../../stores/AsyncStore";
|
||||
import ActiveWidgetStore from "../../../stores/ActiveWidgetStore";
|
||||
import { PlaceCallType } from "../../../CallHandler";
|
||||
import { CallState } from 'matrix-js-sdk/src/webrtc/call';
|
||||
|
||||
function ComposerAvatar(props) {
|
||||
const MemberStatusMessageAvatar = sdk.getComponent('avatars.MemberStatusMessageAvatar');
|
||||
|
@ -64,97 +58,6 @@ SendButton.propTypes = {
|
|||
onClick: PropTypes.func.isRequired,
|
||||
};
|
||||
|
||||
function CallButton(props) {
|
||||
const onVoiceCallClick = (ev) => {
|
||||
dis.dispatch({
|
||||
action: 'place_call',
|
||||
type: PlaceCallType.Voice,
|
||||
room_id: props.roomId,
|
||||
});
|
||||
};
|
||||
|
||||
return (<AccessibleTooltipButton
|
||||
className="mx_MessageComposer_button mx_MessageComposer_voicecall"
|
||||
onClick={onVoiceCallClick}
|
||||
title={_t('Voice call')}
|
||||
/>);
|
||||
}
|
||||
|
||||
CallButton.propTypes = {
|
||||
roomId: PropTypes.string.isRequired,
|
||||
};
|
||||
|
||||
function VideoCallButton(props) {
|
||||
const onCallClick = (ev) => {
|
||||
dis.dispatch({
|
||||
action: 'place_call',
|
||||
type: ev.shiftKey ? PlaceCallType.ScreenSharing : PlaceCallType.Video,
|
||||
room_id: props.roomId,
|
||||
});
|
||||
};
|
||||
|
||||
return <AccessibleTooltipButton
|
||||
className="mx_MessageComposer_button mx_MessageComposer_videocall"
|
||||
onClick={onCallClick}
|
||||
title={_t('Video call')}
|
||||
/>;
|
||||
}
|
||||
|
||||
VideoCallButton.propTypes = {
|
||||
roomId: PropTypes.string.isRequired,
|
||||
};
|
||||
|
||||
function HangupButton(props) {
|
||||
const onHangupClick = () => {
|
||||
if (props.isConference) {
|
||||
dis.dispatch({
|
||||
action: props.canEndConference ? 'end_conference' : 'hangup_conference',
|
||||
room_id: props.roomId,
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
const call = CallHandler.sharedInstance().getCallForRoom(props.roomId);
|
||||
if (!call) {
|
||||
return;
|
||||
}
|
||||
|
||||
const action = call.state === CallState.Ringing ? 'reject' : 'hangup';
|
||||
|
||||
dis.dispatch({
|
||||
action,
|
||||
// hangup the call for this room. NB. We use the room in props as the room ID
|
||||
// as call.roomId may be the 'virtual room', and the dispatch actions always
|
||||
// use the user-facing room (there was a time when we deliberately used
|
||||
// call.roomId and *not* props.roomId, but that was for the old
|
||||
// style Freeswitch conference calls and those times are gone.)
|
||||
room_id: props.roomId,
|
||||
});
|
||||
};
|
||||
|
||||
let tooltip = _t("Hangup");
|
||||
if (props.isConference && props.canEndConference) {
|
||||
tooltip = _t("End conference");
|
||||
}
|
||||
|
||||
const canLeaveConference = !props.isConference ? true : props.isInConference;
|
||||
return (
|
||||
<AccessibleTooltipButton
|
||||
className="mx_MessageComposer_button mx_MessageComposer_hangup"
|
||||
onClick={onHangupClick}
|
||||
title={tooltip}
|
||||
disabled={!canLeaveConference}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
HangupButton.propTypes = {
|
||||
roomId: PropTypes.string.isRequired,
|
||||
isConference: PropTypes.bool.isRequired,
|
||||
canEndConference: PropTypes.bool,
|
||||
isInConference: PropTypes.bool,
|
||||
};
|
||||
|
||||
const EmojiButton = ({addEmoji}) => {
|
||||
const [menuDisplayed, button, openMenu, closeMenu] = useContextMenu();
|
||||
|
||||
|
@ -279,7 +182,6 @@ export default class MessageComposer extends React.Component {
|
|||
this.state = {
|
||||
tombstone: this._getRoomTombstone(),
|
||||
canSendMessages: this.props.room.maySendMessage(),
|
||||
showCallButtons: SettingsStore.getValue("showCallButtonsInComposer"),
|
||||
hasConference: WidgetStore.instance.doesRoomHaveConference(this.props.room),
|
||||
joinedConference: WidgetStore.instance.isJoinedToConferenceIn(this.props.room),
|
||||
isComposerEmpty: true,
|
||||
|
@ -430,12 +332,7 @@ export default class MessageComposer extends React.Component {
|
|||
];
|
||||
|
||||
if (!this.state.tombstone && this.state.canSendMessages) {
|
||||
// This also currently includes the call buttons. Really we should
|
||||
// check separately for whether we can call, but this is slightly
|
||||
// complex because of conference calls.
|
||||
|
||||
const SendMessageComposer = sdk.getComponent("rooms.SendMessageComposer");
|
||||
const callInProgress = this.props.callState && this.props.callState !== 'ended';
|
||||
|
||||
controls.push(
|
||||
<SendMessageComposer
|
||||
|
@ -457,30 +354,6 @@ export default class MessageComposer extends React.Component {
|
|||
controls.push(<Stickerpicker key="stickerpicker_controls_button" room={this.props.room} />);
|
||||
}
|
||||
|
||||
if (this.state.showCallButtons) {
|
||||
if (this.state.hasConference) {
|
||||
const canEndConf = WidgetUtils.canUserModifyWidgets(this.props.room.roomId);
|
||||
controls.push(
|
||||
<HangupButton
|
||||
key="controls_hangup"
|
||||
roomId={this.props.room.roomId}
|
||||
isConference={true}
|
||||
canEndConference={canEndConf}
|
||||
isInConference={this.state.joinedConference}
|
||||
/>,
|
||||
);
|
||||
} else if (callInProgress) {
|
||||
controls.push(
|
||||
<HangupButton key="controls_hangup" roomId={this.props.room.roomId} isConference={false} />,
|
||||
);
|
||||
} else {
|
||||
controls.push(
|
||||
<CallButton key="controls_call" roomId={this.props.room.roomId} />,
|
||||
<VideoCallButton key="controls_videocall" roomId={this.props.room.roomId} />,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (!this.state.isComposerEmpty) {
|
||||
controls.push(
|
||||
<SendButton key="controls_send" onClick={this.sendMessage} />,
|
||||
|
|
|
@ -100,15 +100,8 @@ const NewRoomIntro = () => {
|
|||
});
|
||||
}
|
||||
|
||||
let canInvite = inRoom;
|
||||
const powerLevels = room.currentState.getStateEvents(EventType.RoomPowerLevels, "")?.getContent();
|
||||
const me = room.getMember(cli.getUserId());
|
||||
if (powerLevels && me && powerLevels.invite > me.powerLevel) {
|
||||
canInvite = false;
|
||||
}
|
||||
|
||||
let buttons;
|
||||
if (canInvite) {
|
||||
if (room.canInvite(cli.getUserId())) {
|
||||
const onInviteClick = () => {
|
||||
dis.dispatch({ action: "view_invite", roomId });
|
||||
};
|
||||
|
|
|
@ -15,14 +15,13 @@ See the License for the specific language governing permissions and
|
|||
limitations under the License.
|
||||
*/
|
||||
|
||||
import React, {createRef} from 'react';
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import classNames from 'classnames';
|
||||
import { _t } from '../../../languageHandler';
|
||||
import {MatrixClientPeg} from '../../../MatrixClientPeg';
|
||||
import RateLimitedFunc from '../../../ratelimitedfunc';
|
||||
|
||||
import { linkifyElement } from '../../../HtmlUtils';
|
||||
import {CancelButton} from './SimpleRoomHeader';
|
||||
import SettingsStore from "../../../settings/SettingsStore";
|
||||
import RoomHeaderButtons from '../right_panel/RoomHeaderButtons';
|
||||
|
@ -30,6 +29,9 @@ import E2EIcon from './E2EIcon';
|
|||
import DecoratedRoomAvatar from "../avatars/DecoratedRoomAvatar";
|
||||
import {DefaultTagID} from "../../../stores/room-list/models";
|
||||
import AccessibleTooltipButton from "../elements/AccessibleTooltipButton";
|
||||
import RoomTopic from "../elements/RoomTopic";
|
||||
import RoomName from "../elements/RoomName";
|
||||
import {PlaceCallType} from "../../../CallHandler";
|
||||
|
||||
export default class RoomHeader extends React.Component {
|
||||
static propTypes = {
|
||||
|
@ -44,6 +46,7 @@ export default class RoomHeader extends React.Component {
|
|||
e2eStatus: PropTypes.string,
|
||||
onAppsClick: PropTypes.func,
|
||||
appsShown: PropTypes.bool,
|
||||
onCallPlaced: PropTypes.func, // (PlaceCallType) => void;
|
||||
};
|
||||
|
||||
static defaultProps = {
|
||||
|
@ -52,35 +55,13 @@ export default class RoomHeader extends React.Component {
|
|||
onCancelClick: null,
|
||||
};
|
||||
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
||||
this._topic = createRef();
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
const cli = MatrixClientPeg.get();
|
||||
cli.on("RoomState.events", this._onRoomStateEvents);
|
||||
cli.on("Room.accountData", this._onRoomAccountData);
|
||||
|
||||
// When a room name occurs, RoomState.events is fired *before*
|
||||
// room.name is updated. So we have to listen to Room.name as well as
|
||||
// RoomState.events.
|
||||
if (this.props.room) {
|
||||
this.props.room.on("Room.name", this._onRoomNameChange);
|
||||
}
|
||||
}
|
||||
|
||||
componentDidUpdate() {
|
||||
if (this._topic.current) {
|
||||
linkifyElement(this._topic.current);
|
||||
}
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
if (this.props.room) {
|
||||
this.props.room.removeListener("Room.name", this._onRoomNameChange);
|
||||
}
|
||||
const cli = MatrixClientPeg.get();
|
||||
if (cli) {
|
||||
cli.removeListener("RoomState.events", this._onRoomStateEvents);
|
||||
|
@ -109,10 +90,6 @@ export default class RoomHeader extends React.Component {
|
|||
this.forceUpdate();
|
||||
}, 500);
|
||||
|
||||
_onRoomNameChange = (room) => {
|
||||
this.forceUpdate();
|
||||
};
|
||||
|
||||
_hasUnreadPins() {
|
||||
const currentPinEvent = this.props.room.currentState.getStateEvents("m.room.pinned_events", '');
|
||||
if (!currentPinEvent) return false;
|
||||
|
@ -170,29 +147,28 @@ export default class RoomHeader extends React.Component {
|
|||
}
|
||||
}
|
||||
|
||||
let roomName = _t("Join Room");
|
||||
let oobName = _t("Join Room");
|
||||
if (this.props.oobData && this.props.oobData.name) {
|
||||
roomName = this.props.oobData.name;
|
||||
} else if (this.props.room) {
|
||||
roomName = this.props.room.name;
|
||||
oobName = this.props.oobData.name;
|
||||
}
|
||||
|
||||
const textClasses = classNames('mx_RoomHeader_nametext', { mx_RoomHeader_settingsHint: settingsHint });
|
||||
const name =
|
||||
<div className="mx_RoomHeader_name" onClick={this.props.onSettingsClick}>
|
||||
<div dir="auto" className={textClasses} title={roomName}>{ roomName }</div>
|
||||
<RoomName room={this.props.room}>
|
||||
{(name) => {
|
||||
const roomName = name || oobName;
|
||||
return <div dir="auto" className={textClasses} title={roomName}>{ roomName }</div>;
|
||||
}}
|
||||
</RoomName>
|
||||
{ searchStatus }
|
||||
</div>;
|
||||
|
||||
let topic;
|
||||
if (this.props.room) {
|
||||
const ev = this.props.room.currentState.getStateEvents('m.room.topic', '');
|
||||
if (ev) {
|
||||
topic = ev.getContent().topic;
|
||||
}
|
||||
}
|
||||
const topicElement =
|
||||
<div className="mx_RoomHeader_topic" ref={this._topic} title={topic} dir="auto">{ topic }</div>;
|
||||
const topicElement = <RoomTopic room={this.props.room}>
|
||||
{(topic, ref) => <div className="mx_RoomHeader_topic" ref={ref} title={topic} dir="auto">
|
||||
{ topic }
|
||||
</div>}
|
||||
</RoomTopic>;
|
||||
|
||||
let roomAvatar;
|
||||
if (this.props.room) {
|
||||
|
@ -252,8 +228,26 @@ export default class RoomHeader extends React.Component {
|
|||
title={_t("Search")} />;
|
||||
}
|
||||
|
||||
let voiceCallButton;
|
||||
let videoCallButton;
|
||||
if (this.props.inRoom && SettingsStore.getValue("showCallButtonsInComposer")) {
|
||||
voiceCallButton =
|
||||
<AccessibleTooltipButton
|
||||
className="mx_RoomHeader_button mx_RoomHeader_voiceCallButton"
|
||||
onClick={() => this.props.onCallPlaced(PlaceCallType.Voice)}
|
||||
title={_t("Voice call")} />;
|
||||
videoCallButton =
|
||||
<AccessibleTooltipButton
|
||||
className="mx_RoomHeader_button mx_RoomHeader_videoCallButton"
|
||||
onClick={(ev) => this.props.onCallPlaced(
|
||||
ev.shiftKey ? PlaceCallType.ScreenSharing : PlaceCallType.Video)}
|
||||
title={_t("Video call")} />;
|
||||
}
|
||||
|
||||
const rightRow =
|
||||
<div className="mx_RoomHeader_buttons">
|
||||
{ videoCallButton }
|
||||
{ voiceCallButton }
|
||||
{ pinnedEventsButton }
|
||||
{ forgetButton }
|
||||
{ appsButton }
|
||||
|
|
|
@ -178,19 +178,23 @@ export default class EmailAddresses extends React.Component {
|
|||
e.preventDefault();
|
||||
|
||||
this.setState({continueDisabled: true});
|
||||
this.state.addTask.checkEmailLinkClicked().then(() => {
|
||||
const email = this.state.newEmailAddress;
|
||||
this.state.addTask.checkEmailLinkClicked().then(([finished]) => {
|
||||
let newEmailAddress = this.state.newEmailAddress;
|
||||
if (finished) {
|
||||
const email = this.state.newEmailAddress;
|
||||
const emails = [
|
||||
...this.props.emails,
|
||||
{ address: email, medium: "email" },
|
||||
];
|
||||
this.props.onEmailsChange(emails);
|
||||
newEmailAddress = "";
|
||||
}
|
||||
this.setState({
|
||||
addTask: null,
|
||||
continueDisabled: false,
|
||||
verifying: false,
|
||||
newEmailAddress: "",
|
||||
newEmailAddress,
|
||||
});
|
||||
const emails = [
|
||||
...this.props.emails,
|
||||
{ address: email, medium: "email" },
|
||||
];
|
||||
this.props.onEmailsChange(emails);
|
||||
}).catch((err) => {
|
||||
this.setState({continueDisabled: false});
|
||||
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
|
|
|
@ -177,21 +177,25 @@ export default class PhoneNumbers extends React.Component {
|
|||
this.setState({continueDisabled: true});
|
||||
const token = this.state.newPhoneNumberCode;
|
||||
const address = this.state.verifyMsisdn;
|
||||
this.state.addTask.haveMsisdnToken(token).then(() => {
|
||||
this.state.addTask.haveMsisdnToken(token).then(([finished]) => {
|
||||
let newPhoneNumber = this.state.newPhoneNumber;
|
||||
if (finished) {
|
||||
const msisdns = [
|
||||
...this.props.msisdns,
|
||||
{ address, medium: "msisdn" },
|
||||
];
|
||||
this.props.onMsisdnsChange(msisdns);
|
||||
newPhoneNumber = "";
|
||||
}
|
||||
this.setState({
|
||||
addTask: null,
|
||||
continueDisabled: false,
|
||||
verifying: false,
|
||||
verifyMsisdn: "",
|
||||
verifyError: null,
|
||||
newPhoneNumber: "",
|
||||
newPhoneNumber,
|
||||
newPhoneNumberCode: "",
|
||||
});
|
||||
const msisdns = [
|
||||
...this.props.msisdns,
|
||||
{ address, medium: "msisdn" },
|
||||
];
|
||||
this.props.onMsisdnsChange(msisdns);
|
||||
}).catch((err) => {
|
||||
this.setState({continueDisabled: false});
|
||||
if (err.errcode !== 'M_THREEPID_AUTH_FAILED') {
|
||||
|
|
|
@ -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}
|
||||
|
|
|
@ -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"),
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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",
|
||||
}
|
||||
|
|
|
@ -851,7 +851,7 @@
|
|||
"Your message wasn't sent because this homeserver has exceeded a resource limit. Please <a>contact your service administrator</a> to continue using the service.": "Съобщението Ви не бе изпратено, защото този сървър е някой от лимитите си. Моля, <a>свържете се с администратора на услугата</a> за да продължите да я използвате.",
|
||||
"Please <a>contact your service administrator</a> to continue using this service.": "Моля, <a>свържете се с администратора на услугата</a> за да продължите да я използвате.",
|
||||
"Sorry, your homeserver is too old to participate in this room.": "Съжаляваме, вашият сървър е прекалено стар за да участва в тази стая.",
|
||||
"Please contact your homeserver administrator.": "Моля, свържете се се със сървърния администратор.",
|
||||
"Please contact your homeserver administrator.": "Моля, свържете се със сървърния администратор.",
|
||||
"Legal": "Юридически",
|
||||
"Unable to connect to Homeserver. Retrying...": "Неуспешно свързване със сървъра. Опитване отново...",
|
||||
"This room has been replaced and is no longer active.": "Тази стая е била заменена и вече не е активна.",
|
||||
|
@ -1612,11 +1612,11 @@
|
|||
"%(senderName)s removed the rule banning rooms matching %(glob)s": "%(senderName)s премахна правилото блокиращо достъпа до стаи отговарящи на %(glob)s",
|
||||
"%(senderName)s removed the rule banning servers matching %(glob)s": "%(senderName)s премахна правилото блокиращо достъпа до сървъри отговарящи на %(glob)s",
|
||||
"%(senderName)s removed a ban rule matching %(glob)s": "%(senderName)s премахна правилото блокиращо достъпа неща отговарящи на %(glob)s",
|
||||
"%(senderName)s updated an invalid ban rule": "%(senderName)s обнови невалидно правило за блокиране",
|
||||
"%(senderName)s updated the rule banning users matching %(glob)s for %(reason)s": "%(senderName)s премахна правилото блокиращо достъпа на потребители отговарящи на %(glob)s поради %(reason)s",
|
||||
"%(senderName)s updated the rule banning rooms matching %(glob)s for %(reason)s": "%(senderName)s премахна правилото блокиращо достъпа до стаи отговарящи на %(glob)s поради %(reason)s",
|
||||
"%(senderName)s updated the rule banning servers matching %(glob)s for %(reason)s": "%(senderName)s премахна правилото блокиращо достъпа до сървъри отговарящи на %(glob)s поради %(reason)s",
|
||||
"%(senderName)s updated a ban rule matching %(glob)s for %(reason)s": "%(senderName)s премахна правилото блокиращо достъпа неща отговарящи на %(glob)s поради %(reason)s",
|
||||
"%(senderName)s updated an invalid ban rule": "%(senderName)s промени невалидно правило за блокиране",
|
||||
"%(senderName)s updated the rule banning users matching %(glob)s for %(reason)s": "%(senderName)s промени правилото блокиращо достъпа на потребители отговарящи на %(glob)s поради %(reason)s",
|
||||
"%(senderName)s updated the rule banning rooms matching %(glob)s for %(reason)s": "%(senderName)s промени правилото блокиращо достъпа до стаи отговарящи на %(glob)s поради %(reason)s",
|
||||
"%(senderName)s updated the rule banning servers matching %(glob)s for %(reason)s": "%(senderName)s промени правилото блокиращо достъпа до сървъри отговарящи на %(glob)s поради %(reason)s",
|
||||
"%(senderName)s updated a ban rule matching %(glob)s for %(reason)s": "%(senderName)s промени правило блокиращо достъпа неща отговарящи на %(glob)s поради %(reason)s",
|
||||
"%(senderName)s created a rule banning users matching %(glob)s for %(reason)s": "%(senderName)s създаде правило блокиращо достъпа на потребители отговарящи на %(glob)s поради %(reason)s",
|
||||
"%(senderName)s created a rule banning rooms matching %(glob)s for %(reason)s": "%(senderName)s създаде правило блокиращо достъпа до стаи отговарящи на %(glob)s поради %(reason)s",
|
||||
"%(senderName)s created a rule banning servers matching %(glob)s for %(reason)s": "%(senderName)s създаде правило блокиращо достъпа до сървъри отговарящи на %(glob)s поради %(reason)s",
|
||||
|
@ -1949,7 +1949,7 @@
|
|||
"Accepting…": "Приемане…",
|
||||
"Start Verification": "Започни верификация",
|
||||
"Your messages are secured and only you and the recipient have the unique keys to unlock them.": "Съобщенията ви са защитени и само вие и получателят имате уникалните ключове за да ги отключите.",
|
||||
"In encrypted rooms, your messages are secured and only you and the recipient have the unique keys to unlock them.": "В шифровани стаи, съобщенията ви са защитени и само вие и получателят имате уникалните ключове за да ги отключите.",
|
||||
"In encrypted rooms, your messages are secured and only you and the recipient have the unique keys to unlock them.": "В шифровани стаи, съобщенията ви са защитени и само вие и получателят имате уникалните ключове за да ги отключите.",
|
||||
"Verify User": "Потвърди потребителя",
|
||||
"For extra security, verify this user by checking a one-time code on both of your devices.": "За допълнителна сигурност, потвърдете този потребител като проверите еднократен код на устройствата ви.",
|
||||
"Your messages are not secure": "Съобщенията ви не са защитени",
|
||||
|
@ -2530,5 +2530,306 @@
|
|||
"%(brand)s Desktop": "%(brand)s Desktop",
|
||||
"%(brand)s Web": "Уеб версия на %(brand)s",
|
||||
"Enter the location of your Element Matrix Services homeserver. It may use your own domain name or be a subdomain of <a>element.io</a>.": "Въведете адреса на вашия Element Matrix Services сървър. Той или използва ваш собствен домейн или е поддомейн на <a>element.io</a>.",
|
||||
"You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use %(brand)s with an existing Matrix account on a different homeserver.": "Може да използвате опцията за собствен сървър, за да влезете в друг Matrix сървър, чрез указване на адреса му. Това позволява да използвате %(brand)s с Matrix профил съществуващ на друг сървър."
|
||||
"You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use %(brand)s with an existing Matrix account on a different homeserver.": "Може да използвате опцията за собствен сървър, за да влезете в друг Matrix сървър, чрез указване на адреса му. Това позволява да използвате %(brand)s с Matrix профил съществуващ на друг сървър.",
|
||||
"Forgot password?": "Забравена парола?",
|
||||
"Search (must be enabled)": "Търсене (трябва да е включено)",
|
||||
"Go to Home View": "Отиване на начален изглед",
|
||||
"%(creator)s created this DM.": "%(creator)s създаде този директен чат.",
|
||||
"You have no visible notifications.": "Нямате видими уведомления.",
|
||||
"Filter rooms and people": "Филтриране на стаи и хора",
|
||||
"Got an account? <a>Sign in</a>": "Имате профил? <a>Влезте от тук</a>",
|
||||
"New here? <a>Create an account</a>": "Вие сте нов тук? <a>Създайте профил</a>",
|
||||
"There was a problem communicating with the homeserver, please try again later.": "Възникна проблем при комуникацията със Home сървъра, моля опитайте отново по-късно.",
|
||||
"New? <a>Create account</a>": "Вие сте нов? <a>Създайте профил</a>",
|
||||
"That username already exists, please try another.": "Това потребителско име е вече заето, моля опитайте с друго.",
|
||||
"Continue with %(ssoButtons)s": "Продължаване с %(ssoButtons)s",
|
||||
"%(ssoButtons)s Or %(usernamePassword)s": "%(ssoButtons)s Или %(usernamePassword)s",
|
||||
"Already have an account? <a>Sign in here</a>": "Вече имате профил? <a>Влезте от тук</a>",
|
||||
"We'll store an encrypted copy of your keys on our server. Secure your backup with a Security Phrase.": "Ние ще запазим шифровано копие на вашите ключове на нашият сървър. Защитете вашето резервно копие с фраза за сигурност.",
|
||||
"Your Security Key has been <b>copied to your clipboard</b>, paste it to:": "Ключа за сигурност беше <b>копиран в клиборда</b>, поставете го в:",
|
||||
"This session has detected that your Security Phrase and key for Secure Messages have been removed.": "Тази сесия откри, че вашата фраза за сигурност и ключ за защитени съобщения бяха премахнати.",
|
||||
"A new Security Phrase and key for Secure Messages have been detected.": "Новa фраза за сигурност и ключ за защитени съобщения бяха открити.",
|
||||
"Use Security Key or Phrase": "Използване на ключ или фраза за сигурност",
|
||||
"Use Security Key": "Използване на ключ за сигурност",
|
||||
"Great! This Security Phrase looks strong enough.": "Чудесно! Тази фраза за сигурност изглежда достатъчно силна.",
|
||||
"Set up with a Security Key": "Настройка със ключ за сигурност",
|
||||
"Please enter your Security Phrase a second time to confirm.": "Моля въведете фразата си за сигурност повторно за да потвърдите.",
|
||||
"Repeat your Security Phrase...": "Повторете фразата си за сигурност...",
|
||||
"Your Security Key is in your <b>Downloads</b> folder.": "Ключа за сигурност е във вашата папка <b>Изтегляния</b>.",
|
||||
"Your Security Key": "Вашият ключ за сигурност",
|
||||
"Secure your backup with a Security Phrase": "Защитете вашето резервно копие с фраза за сигурност",
|
||||
"Make a copy of your Security Key": "Направете копие на вашият ключ за сигурност",
|
||||
"Confirm your Security Phrase": "Потвърдете вашата фраза за сигурност",
|
||||
"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": "Задържа повикването в текущата стая",
|
||||
"Permission is granted to use the webcam": "Разрешение за използване на уеб камерата е дадено",
|
||||
"Call failed because webcam or microphone could not be accessed. Check that:": "Неуспешно повикване поради неуспешен достъп до уеб камера или микрофон. Проверете дали:",
|
||||
"A microphone and webcam are plugged in and set up correctly": "Микрофон и уеб камера са включени и настроени правилно",
|
||||
"We couldn't log you in": "Не можахме да ви впишем",
|
||||
"You've reached the maximum number of simultaneous calls.": "Достигнахте максималният брой едновременни повиквания.",
|
||||
"No other application is using the webcam": "Никое друго приложение не използва уеб камерата",
|
||||
"Unable to access webcam / microphone": "Неуспешен достъп до уеб камера / микрофон",
|
||||
"Unable to access microphone": "Неуспешен достъп до микрофон",
|
||||
"Failed to connect to your homeserver. Please close this dialog and try again.": "Неуспешно свързване към вашият Home сървър. Моля затворете този прозорец и опитайте отново.",
|
||||
"Abort": "Прекрати",
|
||||
"%(hostSignupBrand)s Setup": "Настройка на %(hostSignupBrand)s",
|
||||
"Maximize dialog": "Максимизирай прозореца",
|
||||
"Minimize dialog": "Минимизирай прозореца",
|
||||
"Learn more in our <privacyPolicyLink />, <termsOfServiceLink /> and <cookiePolicyLink />.": "Научете повече в нашите <privacyPolicyLink />, <termsOfServiceLink /> и <cookiePolicyLink />.",
|
||||
"Cookie Policy": "Политика за бисквитките",
|
||||
"Privacy Policy": "Политика за поверителност",
|
||||
"Prepends ┬──┬ ノ( ゜-゜ノ) to a plain-text message": "Добавя ┬──┬ ノ( ゜-゜ノ) в началото на съобщението",
|
||||
"Prepends (╯°□°)╯︵ ┻━┻ to a plain-text message": "Добавя (╯°□°)╯︵ ┻━┻ в началото на съобщението",
|
||||
"Effects": "Ефекти",
|
||||
"Anguilla": "Ангила",
|
||||
"British Indian Ocean Territory": "Британска територия в Индийския океан",
|
||||
"Pitcairn Islands": "острови Питкерн",
|
||||
"Heard & McDonald Islands": "острови Хърд и Макдоналд",
|
||||
"Cook Islands": "острови Кук",
|
||||
"Christmas Island": "остров Рождество",
|
||||
"Brunei": "Бруней Даруссалам",
|
||||
"Bouvet Island": "остров Буве",
|
||||
"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": "Тонга",
|
||||
"Timor-Leste": "Източен Тимор",
|
||||
"Tokelau": "Токелау",
|
||||
"Togo": "Того",
|
||||
"Thailand": "Тайланд",
|
||||
"Tanzania": "Танзания",
|
||||
"Tajikistan": "Таджикистан",
|
||||
"Taiwan": "Тайван",
|
||||
"São Tomé & Príncipe": "Сао Томе и Принсипи",
|
||||
"Syria": "Сирия",
|
||||
"Switzerland": "Швейцария",
|
||||
"Sweden": "Швеция",
|
||||
"Swaziland": "Есватини",
|
||||
"Svalbard & Jan Mayen": "Свалбард и Ян Майен",
|
||||
"Suriname": "Суринам",
|
||||
"Sudan": "Судан",
|
||||
"St. Vincent & Grenadines": "Сейнт Винсънт и Гренадини",
|
||||
"St. Pierre & Miquelon": "Сен Пиер и Микелон",
|
||||
"St. Martin": "Сен Мартен",
|
||||
"St. Lucia": "Сейнт Лусия",
|
||||
"St. Kitts & Nevis": "Сейнт Китс и Невис",
|
||||
"St. Helena": "Света Елена",
|
||||
"St. Barthélemy": "Сен Бартелеми",
|
||||
"Sri Lanka": "Шри Ланка",
|
||||
"Spain": "Испания",
|
||||
"South Sudan": "Южен Судан",
|
||||
"South Korea": "Южна Корея",
|
||||
"South Georgia & South Sandwich Islands": "Южна Джорджия и Южни Сандвичеви острови",
|
||||
"South Africa": "Южна Африка",
|
||||
"Somalia": "Сомалия",
|
||||
"Solomon Islands": "Соломонови острови",
|
||||
"Slovenia": "Словения",
|
||||
"Slovakia": "Словакия",
|
||||
"Sint Maarten": "Синт Мартен",
|
||||
"Singapore": "Сингапур",
|
||||
"Sierra Leone": "Сиера Леоне",
|
||||
"Seychelles": "Сейшели",
|
||||
"Serbia": "Сърбия",
|
||||
"Senegal": "Сенегал",
|
||||
"Saudi Arabia": "Саудитска Арабия",
|
||||
"San Marino": "Сан Марино",
|
||||
"Samoa": "Самоа",
|
||||
"Réunion": "Реюнион",
|
||||
"Rwanda": "Руанда",
|
||||
"Russia": "Русия",
|
||||
"Romania": "Румъния",
|
||||
"Qatar": "Катар",
|
||||
"Puerto Rico": "Пуерто Рико",
|
||||
"Portugal": "Португалия",
|
||||
"Poland": "Полша",
|
||||
"Philippines": "Филипини",
|
||||
"Peru": "Перу",
|
||||
"Paraguay": "Парагвай",
|
||||
"Papua New Guinea": "Папуа-Нова Гвинея",
|
||||
"Panama": "Панама",
|
||||
"Palestine": "Палестина",
|
||||
"Palau": "Палау",
|
||||
"Pakistan": "Пакистан",
|
||||
"Oman": "Оман",
|
||||
"Norway": "Норвегия",
|
||||
"Northern Mariana Islands": "Северни Мариански острови",
|
||||
"North Korea": "Северна Корея",
|
||||
"Norfolk Island": "остров Норфолк",
|
||||
"Niue": "Ниуе",
|
||||
"Nigeria": "Нигерия",
|
||||
"Niger": "Нигер",
|
||||
"Nicaragua": "Никарагуа",
|
||||
"New Zealand": "Нова Зеландия",
|
||||
"New Caledonia": "Нова Каледония",
|
||||
"Netherlands": "Нидерландия",
|
||||
"Nepal": "Непал",
|
||||
"Nauru": "Науру",
|
||||
"Namibia": "Намибия",
|
||||
"Myanmar": "Мианмар (Бирма)",
|
||||
"Mozambique": "Мозамбик",
|
||||
"Morocco": "Мароко",
|
||||
"Montserrat": "Монтсерат",
|
||||
"Montenegro": "Черна гора",
|
||||
"Mongolia": "Монголия",
|
||||
"Monaco": "Монако",
|
||||
"Moldova": "Молдова",
|
||||
"Micronesia": "Микронезия",
|
||||
"Mexico": "Мексико",
|
||||
"Mayotte": "Майот",
|
||||
"Mauritius": "Мавриций",
|
||||
"Mauritania": "Мавритания",
|
||||
"Martinique": "Мартиника",
|
||||
"Marshall Islands": "Маршалови острови",
|
||||
"Malta": "Малта",
|
||||
"Mali": "Мали",
|
||||
"Maldives": "Малдиви",
|
||||
"Malaysia": "Малайзия",
|
||||
"Malawi": "Малави",
|
||||
"Madagascar": "Мадагаскар",
|
||||
"Macedonia": "Северна Македония",
|
||||
"Macau": "Макао",
|
||||
"Luxembourg": "Люксембург",
|
||||
"Lithuania": "Литва",
|
||||
"Liechtenstein": "Лихтенщайн",
|
||||
"Libya": "Либия",
|
||||
"Liberia": "Либерия",
|
||||
"Lesotho": "Лесото",
|
||||
"Lebanon": "Ливан",
|
||||
"Latvia": "Латвия",
|
||||
"Laos": "Лаос",
|
||||
"Kyrgyzstan": "Киргизстан",
|
||||
"Kuwait": "Кувейт",
|
||||
"Kosovo": "Косово",
|
||||
"Kiribati": "Кирибати",
|
||||
"Kenya": "Кения",
|
||||
"Kazakhstan": "Казахстан",
|
||||
"Jordan": "Йордания",
|
||||
"Jersey": "Джърси",
|
||||
"Japan": "Япония",
|
||||
"Jamaica": "Ямайка",
|
||||
"Italy": "Италия",
|
||||
"Israel": "Израел",
|
||||
"Isle of Man": "остров Ман",
|
||||
"Ireland": "Ирландия",
|
||||
"Iraq": "Ирак",
|
||||
"Iran": "Иран",
|
||||
"Indonesia": "Индонезия",
|
||||
"India": "Индия",
|
||||
"Iceland": "Исландия",
|
||||
"Hungary": "Унгария",
|
||||
"Hong Kong": "Хонконг",
|
||||
"Honduras": "Хондурас",
|
||||
"Haiti": "Хаити",
|
||||
"Guyana": "Гаяна",
|
||||
"Guinea-Bissau": "Гвинея-Бисау",
|
||||
"Guinea": "Гвинея",
|
||||
"Guernsey": "Гърнзи",
|
||||
"Guatemala": "Гватемала",
|
||||
"Guam": "Гуам",
|
||||
"Guadeloupe": "Гваделупа",
|
||||
"Grenada": "Гренада",
|
||||
"Greenland": "Гренландия",
|
||||
"Greece": "Гърция",
|
||||
"Gibraltar": "Гибралтар",
|
||||
"Ghana": "Гана",
|
||||
"Germany": "Германия",
|
||||
"Georgia": "Грузия",
|
||||
"Gambia": "Гамбия",
|
||||
"Gabon": "Габон",
|
||||
"French Southern Territories": "Френски южни територии",
|
||||
"French Polynesia": "Френска Полинезия",
|
||||
"French Guiana": "Френска Гвиана",
|
||||
"France": "Франция",
|
||||
"Finland": "Финландия",
|
||||
"Fiji": "Фиджи",
|
||||
"Faroe Islands": "Фарьорски острови",
|
||||
"Falkland Islands": "Фолкландски острови",
|
||||
"Ethiopia": "Етиопия",
|
||||
"Estonia": "Естония",
|
||||
"Eritrea": "Еритрея",
|
||||
"Equatorial Guinea": "Екваториална Гвинея",
|
||||
"El Salvador": "Салвадор",
|
||||
"Egypt": "Египет",
|
||||
"Ecuador": "Еквадор",
|
||||
"Dominican Republic": "Доминиканска република",
|
||||
"Dominica": "Доминика",
|
||||
"Djibouti": "Джибути",
|
||||
"Denmark": "Дания",
|
||||
"Côte d’Ivoire": "Кот д’Ивоар",
|
||||
"Czech Republic": "Чешка република",
|
||||
"Cyprus": "Кипър",
|
||||
"Curaçao": "Кюрасао",
|
||||
"Cuba": "Куба",
|
||||
"Croatia": "Хърватия",
|
||||
"Costa Rica": "Коста Рика",
|
||||
"Congo - Kinshasa": "Конго (Киншаса)",
|
||||
"Congo - Brazzaville": "Конго (Бразавил)",
|
||||
"Comoros": "Коморски острови",
|
||||
"Colombia": "Колумбия",
|
||||
"Cocos (Keeling) Islands": "Кокосови острови",
|
||||
"China": "Китай",
|
||||
"Chile": "Чили",
|
||||
"Chad": "Чад",
|
||||
"Central African Republic": "Централноафриканска република",
|
||||
"Cayman Islands": "Кайманови острови",
|
||||
"Caribbean Netherlands": "Карибска Нидерландия",
|
||||
"Cape Verde": "Кабо Верде",
|
||||
"Canada": "Канада",
|
||||
"Cameroon": "Камерун",
|
||||
"Cambodia": "Камбоджа",
|
||||
"Burundi": "Бурунди",
|
||||
"Burkina Faso": "Буркина Фасо",
|
||||
"Bulgaria": "България",
|
||||
"British Virgin Islands": "Британски Вирджински острови",
|
||||
"Brazil": "Бразилия",
|
||||
"Botswana": "Ботсвана",
|
||||
"Bosnia": "Босна и Херцеговина",
|
||||
"Bolivia": "Боливия",
|
||||
"Bhutan": "Бутан",
|
||||
"Bermuda": "Бермудски острови",
|
||||
"Benin": "Бенин",
|
||||
"Belize": "Белиз",
|
||||
"Belgium": "Белгия",
|
||||
"Belarus": "Беларус",
|
||||
"Barbados": "Барбадос",
|
||||
"Bangladesh": "Бангладеш",
|
||||
"Bahrain": "Бахрейн",
|
||||
"Bahamas": "Бахамски острови",
|
||||
"Azerbaijan": "Азербайджан",
|
||||
"Austria": "Австрия",
|
||||
"Australia": "Австралия",
|
||||
"Aruba": "Аруба",
|
||||
"Armenia": "Армения",
|
||||
"Argentina": "Аржентина",
|
||||
"Antigua & Barbuda": "Антигуа и Барбуда",
|
||||
"Antarctica": "Антарктика",
|
||||
"Angola": "Ангола",
|
||||
"Andorra": "Андора",
|
||||
"American Samoa": "Американска Самоа",
|
||||
"Algeria": "Алжир",
|
||||
"Albania": "Албания",
|
||||
"Åland Islands": "Оландски острови",
|
||||
"Afghanistan": "Афганистан",
|
||||
"United States": "Съединените щати",
|
||||
"United Kingdom": "Обединеното кралство"
|
||||
}
|
||||
|
|
|
@ -55,7 +55,7 @@
|
|||
"Custom Server Options": "Vlastní nastavení serveru",
|
||||
"Add a widget": "Přidat widget",
|
||||
"Accept": "Přijmout",
|
||||
"%(targetName)s accepted an invitation.": "%(targetName)s přijal/a 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.": "%(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“.",
|
||||
"%(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,8 +113,8 @@
|
|||
"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.": "%(senderName)s ukončil/a hovor.",
|
||||
"Enter passphrase": "Zadejte heslo",
|
||||
"%(senderName)s ended the call.": "%(senderName)s ukončil(a) hovor.",
|
||||
"Enter passphrase": "Zadejte přístupovou frázi",
|
||||
"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.",
|
||||
"Existing Call": "Probíhající hovor",
|
||||
|
@ -136,18 +136,18 @@
|
|||
"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": "%(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",
|
||||
"%(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.": "%(senderName)s přijal/a 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.",
|
||||
"Homeserver is": "Domovský server je",
|
||||
"Identity Server is": "Server identity je",
|
||||
"I have verified my email address": "Ověřil/a jsem svou e-mailovou adresu",
|
||||
"I have verified my email address": "Ověřil(a) jsem svou e-mailovou adresu",
|
||||
"Import": "Importovat",
|
||||
"Import E2E room keys": "Importovat end-to-end klíče místností",
|
||||
"Incoming call from %(name)s": "Příchozí hovor od %(name)s",
|
||||
|
@ -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.": "%(senderName)s pozval/a 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.": "%(targetName)s vstoupil/a do místnosti.",
|
||||
"%(senderName)s kicked %(targetName)s.": "%(senderName)s vykopl/a 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.": "%(senderName)s změnil/a ú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.": "%(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.",
|
||||
"%(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.": "%(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.",
|
||||
"%(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.": "%(targetName)s přijal/a 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.": "%(senderName)s vykázal/a 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.": "%(senderName)s přijal/a 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.": "%(targetName)s opustil/a 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.": "%(senderName)s odstranil/a svůj profilový obrázek.",
|
||||
"%(targetName)s rejected the invitation.": "%(targetName)s odmítl/a 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).": "%(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.",
|
||||
"%(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.": "%(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/>",
|
||||
"%(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": "%(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",
|
||||
"%(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,16 +398,16 @@
|
|||
"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": "%(senderDisplayName)s změnil/a 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",
|
||||
"Passphrases must match": "Hesla se musí shodovat",
|
||||
"Passphrase must not be empty": "Heslo nesmí být prázdné",
|
||||
"Passphrases must match": "Přístupové fráze se musí shodovat",
|
||||
"Passphrase must not be empty": "Přístupová fráze nesmí být prázdná",
|
||||
"Export room keys": "Exportovat klíče místnosti",
|
||||
"This process allows you to export the keys for messages you have received in encrypted rooms to a local file. You will then be able to import the file into another Matrix client in the future, so that client will also be able to decrypt these messages.": "Tento proces vám umožňuje exportovat do souboru klíče ke zprávám, které jste dostali v šifrovaných místnostech. Když pak tento soubor importujete do jiného Matrix klienta, všechny tyto zprávy bude možné opět dešifrovat.",
|
||||
"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.": "Kdokoliv, kdo získá přístup k exportovanému souboru, bude moci dešifrovat všechny vaše přijaté zprávy, a proto je třeba dbát zvýšenou pozornost jeho zabezpečení. Z toho důvodu byste měli do kolonky níže zadat heslo, se kterým exportovaná data zašifrujeme. Import pak bude možný pouze se znalostí zadaného hesla.",
|
||||
"Confirm passphrase": "Potvrďte heslo",
|
||||
"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.": "Kdokoliv, kdo získá přístup k exportovanému souboru, bude moci dešifrovat všechny vaše přijaté zprávy, a proto je třeba dbát zvýšenou pozornost jeho zabezpečení. Z toho důvodu byste měli do kolonky níže zadat přístupovou frázi, se kterým exportovaná data zašifrujeme. Import pak bude možný pouze se znalostí zadané přístupové fráze.",
|
||||
"Confirm passphrase": "Potvrďte přístupovou frázi",
|
||||
"Import room keys": "Importovat klíče místnosti",
|
||||
"Call Timeout": "Časový limit hovoru",
|
||||
"Show these rooms to non-members on the community page and room list?": "Zobrazovat tyto místnosti na domovské stránce skupiny a v seznamu místností i pro nečleny?",
|
||||
|
@ -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/a",
|
||||
"%(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 a opustil/a",
|
||||
"%(oneUser)sjoined and left %(count)s times|one": "%(oneUser)svstoupil/a a opustil/a",
|
||||
"%(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 a znovu vstoupil/a",
|
||||
"%(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í",
|
||||
|
@ -505,12 +505,12 @@
|
|||
"was kicked %(count)s times|one": "byl vyhozen",
|
||||
"%(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",
|
||||
"%(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(a) 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)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",
|
||||
"%(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/a",
|
||||
"%(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": "%(inviter)s vás pozval/a 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!",
|
||||
|
@ -606,7 +606,7 @@
|
|||
"Notify the whole room": "Oznámení pro celou místnost",
|
||||
"Room Notification": "Oznámení místnosti",
|
||||
"This process allows you to import encryption keys that you had previously exported from another Matrix client. You will then be able to decrypt any messages that the other client could decrypt.": "Tento proces vás provede importem šifrovacích klíčů, které jste si stáhli z jiného Matrix klienta. Po úspěšném naimportování budete v tomto klientovi moci dešifrovat všechny zprávy, které jste mohli dešifrovat v původním klientovi.",
|
||||
"The export file will be protected with a passphrase. You should enter the passphrase here, to decrypt the file.": "Stažený soubor je chráněn heslem. Soubor můžete naimportovat pouze pokud zadáte odpovídající heslo.",
|
||||
"The export file will be protected with a passphrase. You should enter the passphrase here, to decrypt the file.": "Stažený soubor je chráněn přístupovou frází. Soubor můžete naimportovat pouze pokud zadáte odpovídající přístupovou frázi.",
|
||||
"Call Failed": "Hovor selhal",
|
||||
"Send": "Odeslat",
|
||||
"collapse": "sbalit",
|
||||
|
@ -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/a 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",
|
||||
|
@ -771,7 +771,7 @@
|
|||
"System Alerts": "Systémová varování",
|
||||
"Muted Users": "Umlčení uživatelé",
|
||||
"Only room administrators will see this warning": "Toto varování uvidí jen správci místnosti",
|
||||
"You don't currently have any stickerpacks enabled": "Momentálně nemáte aktívní žádné balíčky s nálepkami",
|
||||
"You don't currently have any stickerpacks enabled": "Momentálně nemáte aktivní žádné balíčky s nálepkami",
|
||||
"Stickerpack": "Balíček s nálepkami",
|
||||
"Hide Stickers": "Skrýt nálepky",
|
||||
"Show Stickers": "Zobrazit nálepky",
|
||||
|
@ -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.": "%(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.",
|
||||
"%(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 …",
|
||||
|
@ -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.": "%(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.",
|
||||
"%(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": "%(memberName)s vás vykopl/a 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": "%(memberName)s vás vykázal/a 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": "<userName/> vás pozval/a",
|
||||
"<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>": "<reactors/><reactedWith> reagoval/a 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": "%(name)s zrušil/a ověření",
|
||||
"%(name)s cancelled verifying": "%(name)s zrušil(a) ověření",
|
||||
"You accepted": "Přijali jste",
|
||||
"%(name)s accepted": "%(name)s přijal/a",
|
||||
"%(name)s accepted": "%(name)s přijal(a)",
|
||||
"You cancelled": "Zrušili jste",
|
||||
"%(name)s cancelled": "%(name)s zrušil/a",
|
||||
"%(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",
|
||||
|
@ -1532,8 +1532,8 @@
|
|||
"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": "%(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",
|
||||
"%(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 a nakonfiguroval/a 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…",
|
||||
|
@ -1589,27 +1589,27 @@
|
|||
"Custom (%(level)s)": "Vlastní (%(level)s)",
|
||||
"Error upgrading room": "Chyba při upgrade místnosti",
|
||||
"Double check that your server supports the room version chosen and try again.": "Zkontrolujte, že váš server opravdu podporuje zvolenou verzi místnosti.",
|
||||
"%(senderName)s placed a voice call.": "%(senderName)s spustil hovor.",
|
||||
"%(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 odstranil/a pravidlo blokující uživatele odpovídající %(glob)s",
|
||||
"%(senderName)s placed a voice call.": "%(senderName)s zahájil(a) hovor.",
|
||||
"%(senderName)s placed a voice call. (not supported by this browser)": "%(senderName)s zahájil(a) hovor. (není podporováno tímto prohlížečem)",
|
||||
"%(senderName)s placed a video call.": "%(senderName)s zahájil(a) videohovor.",
|
||||
"%(senderName)s placed a video call. (not supported by this browser)": "%(senderName)s zahájil(a) videohovor. (není podporováno tímto prohlížečem)",
|
||||
"%(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/a 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/a 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/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",
|
||||
"%(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",
|
||||
|
@ -1873,7 +1873,7 @@
|
|||
"New session": "Nová relace",
|
||||
"Use this session to verify your new one, granting it access to encrypted messages:": "Použijte tuto relaci pro ověření nové a udělení jí přístupu k vašim šifrovaným zprávám:",
|
||||
"If you didn’t sign in to this session, your account may be compromised.": "Pokud jste se do této nové relace nepřihlásili, váš účet může být kompromitován.",
|
||||
"This wasn't me": "To jsem nebyl/a já",
|
||||
"This wasn't me": "To jsem nebyl(a) já",
|
||||
"This will allow you to return to your account after signing out, and sign in on other sessions.": "Toto vám umožní se přihlásit do dalších relací a vrátit se ke svému účtu poté, co se odhlásíte.",
|
||||
"Recovery key mismatch": "Obnovovací klíč neodpovídá",
|
||||
"Incorrect recovery passphrase": "Nesprávné heslo pro obnovení",
|
||||
|
@ -1893,7 +1893,7 @@
|
|||
"Warning: Your personal data (including encryption keys) is still stored in this session. Clear it if you're finished using this session, or want to sign in to another account.": "Varování: Vaše osobní data (včetně šifrovacích klíčů) jsou tu pořád uložena. Smažte je, pokud chcete tuto relaci zahodit, nebo se přihlaste pod jiný účet.",
|
||||
"If you cancel now, you won't complete verifying the other user.": "Pokud teď proces zrušíte, tak nebude druhý uživatel ověřen.",
|
||||
"If you cancel now, you won't complete verifying your other session.": "Pokud teď proces zrušíte, tak nebude druhá relace ověřena.",
|
||||
"Cancel entering passphrase?": "Zrušit zadávání hesla?",
|
||||
"Cancel entering passphrase?": "Zrušit zadávání přístupové fráze?",
|
||||
"Setting up keys": "Příprava klíčů",
|
||||
"%(brand)s is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom %(brand)s Desktop with <nativeLink>search components added</nativeLink>.": "%(brand)su chybí nějaké komponenty, které jsou potřeba pro vyhledávání v zabezpečených místnostech. Pokud chcete s touto funkcí experimentovat, tak si pořiďte vlastní %(brand)s Desktop s <nativeLink>přidanými komponentami</nativeLink>.",
|
||||
"Subscribing to a ban list will cause you to join it!": "Odebíráním seznamu zablokovaných uživatelů se přidáte do jeho místnosti!",
|
||||
|
@ -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": "%(name)s odmítl/a",
|
||||
"%(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",
|
||||
|
@ -1948,7 +1948,7 @@
|
|||
"Show shortcuts to recently viewed rooms above the room list": "Zobrazovat zkratky do nedávno zobrazených místností navrchu",
|
||||
"Cancelling…": "Rušení…",
|
||||
"Your homeserver does not support cross-signing.": "Váš domovský server nepodporuje cross-signing.",
|
||||
"Homeserver feature support:": "Funkce podporované domovským serverem:",
|
||||
"Homeserver feature support:": "Funkce podporovaná domovským serverem:",
|
||||
"Accepting…": "Přijímání…",
|
||||
"Accepting …": "Přijímání…",
|
||||
"Declining …": "Odmítání…",
|
||||
|
@ -1963,14 +1963,14 @@
|
|||
"Mark all as read": "Označit vše jako přečtené",
|
||||
"Not currently indexing messages for any room.": "Aktuálně neindexujeme žádné zprávy.",
|
||||
"%(doneRooms)s out of %(totalRooms)s": "%(doneRooms)s z %(totalRooms)s",
|
||||
"%(senderDisplayName)s changed the room name from %(oldRoomName)s to %(newRoomName)s.": "%(senderDisplayName)s změnil/a jméno místnosti z %(oldRoomName)s na %(newRoomName)s.",
|
||||
"%(senderName)s added the alternative addresses %(addresses)s for this room.|other": "%(senderName)s přidal/a této místnosti alternativní adresy %(addresses)s.",
|
||||
"%(senderName)s added the alternative addresses %(addresses)s for this room.|one": "%(senderName)s přidal/a této místnosti alternativní adresu %(addresses)s.",
|
||||
"%(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 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.",
|
||||
"%(senderDisplayName)s changed the room name from %(oldRoomName)s to %(newRoomName)s.": "%(senderDisplayName)s změnil(a) jméno místnosti z %(oldRoomName)s na %(newRoomName)s.",
|
||||
"%(senderName)s added the alternative addresses %(addresses)s for this room.|other": "%(senderName)s přidal(a) této místnosti alternativní adresy %(addresses)s.",
|
||||
"%(senderName)s added the alternative addresses %(addresses)s for this room.|one": "%(senderName)s přidal(a) této místnosti alternativní adresu %(addresses)s.",
|
||||
"%(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) 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",
|
||||
|
@ -2044,7 +2044,7 @@
|
|||
"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í.",
|
||||
"%(displayName)s cancelled verification.": "%(displayName)s zrušil(a) proces ověření.",
|
||||
"You cancelled verification.": "Zrušili jste proces ověření.",
|
||||
"Message deleted": "Zpráva smazána",
|
||||
"Message deleted by %(name)s": "Zpráva smazána uživatelem %(name)s",
|
||||
|
@ -2104,7 +2104,7 @@
|
|||
"Restart": "Restartovat",
|
||||
"Upgrade your %(brand)s": "Aktualizovat %(brand)s",
|
||||
"A new version of %(brand)s is available!": "Je dostupná nová verze %(brand)su!",
|
||||
"Are you sure you want to cancel entering passphrase?": "Chcete určitě zrušit zadávání hesla?",
|
||||
"Are you sure you want to cancel entering passphrase?": "Chcete určitě zrušit zadávání přístupové fráze?",
|
||||
"Use your account to sign in to the latest version": "Přihlašte se za pomoci svého účtu do nejnovější verze",
|
||||
"Riot is now Element!": "Riot je nyní Element!",
|
||||
"Learn More": "Zjistit více",
|
||||
|
@ -2172,7 +2172,7 @@
|
|||
"%(senderName)s left the call": "%(senderName)s opustil/a hovor",
|
||||
"Call ended": "Hovor skončil",
|
||||
"You started a call": "Začali jste hovor",
|
||||
"%(senderName)s started a call": "%(senderName)s začal/a hovor",
|
||||
"%(senderName)s started a call": "%(senderName)s začal(a) hovor",
|
||||
"Waiting for answer": "Čekání na odpověď",
|
||||
"%(senderName)s is calling": "%(senderName)s volá",
|
||||
"* %(senderName)s %(emote)s": "* %(senderName)s %(emote)s",
|
||||
|
@ -2193,7 +2193,7 @@
|
|||
"Incoming call": "Příchozí hovor",
|
||||
"Your server isn't responding to some <a>requests</a>.": "Váš server neodpovídá na některé <a>požadavky</a>.",
|
||||
"Master private key:": "Hlavní soukromý klíč:",
|
||||
"%(brand)s can't securely cache encrypted messages locally while running in a web browser. Use <desktopLink>%(brand)s Desktop</desktopLink> for encrypted messages to appear in search results.": "%(brand)s nemůže v prohlížeči lokálně bezpečně uložit zprávy. Použijte <desktopLink>%(brand)s Desktop</desktopLink> aby fungovalo vyhledávání v šifrovaných zprávách.",
|
||||
"%(brand)s can't securely cache encrypted messages locally while running in a web browser. Use <desktopLink>%(brand)s Desktop</desktopLink> for encrypted messages to appear in search results.": "%(brand)s nemůže bezpečně ukládat šifrované zprávy lokálně v prohlížeči. Pro zobrazení šifrovaných zpráv ve výsledcích vyhledávání použijte <desktopLink>%(brand)s Desktop</desktopLink>.",
|
||||
"Your server admin has disabled end-to-end encryption by default in private rooms & Direct Messages.": "Váš administrátor vypnul šifrování ve výchozím nastavení soukromých místností a přímých chatů.",
|
||||
"To link to this room, please add an address.": "Přidejte prosím místnosti adresu aby na ní šlo odkazovat.",
|
||||
"The authenticity of this encrypted message can't be guaranteed on this device.": "Pravost této šifrované zprávy nelze na tomto zařízení ověřit.",
|
||||
|
@ -2256,7 +2256,7 @@
|
|||
"Start a new chat": "Založit novou konverzaci",
|
||||
"Which officially provided instance you are using, if any": "Kterou oficiální instanci Riot.im používáte (a jestli vůbec)",
|
||||
"Change the topic of this room": "Změnit téma této místnosti",
|
||||
"%(senderName)s declined the call.": "%(senderName)s odmítl/a hovor.",
|
||||
"%(senderName)s declined the call.": "%(senderName)s odmítl(a) hovor.",
|
||||
"(an error occurred)": "(došlo k chybě)",
|
||||
"(their device couldn't start the camera / microphone)": "(zařízení druhé strany nemohlo spustit kameru / mikrofon)",
|
||||
"(connection failed)": "(spojení selhalo)",
|
||||
|
@ -2295,7 +2295,7 @@
|
|||
"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 osob",
|
||||
"About": "O",
|
||||
"You’re 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í.",
|
||||
|
@ -2333,10 +2333,10 @@
|
|||
"Switch to light mode": "Přepnout do světlého režimu",
|
||||
"User settings": "Uživatelská nastavení",
|
||||
"Community settings": "Nastavení skupiny",
|
||||
"Confirm your recovery passphrase": "Potvrďte vaši frázi pro obnovení",
|
||||
"Confirm your recovery passphrase": "Potvrďte vaši přístupovou frázi pro obnovení",
|
||||
"Repeat your recovery passphrase...": "Opakujte přístupovou frázi pro obnovení...",
|
||||
"Please enter your recovery passphrase a second time to confirm.": "Potvrďte prosím podruhé svou frázi pro obnovení.",
|
||||
"Use a different passphrase?": "Použít jinou frázi?",
|
||||
"Use a different passphrase?": "Použít jinou přístupovou frázi?",
|
||||
"Great! This recovery passphrase looks strong enough.": "Skvělé! Tato fráze pro obnovení vypadá dostatečně silně.",
|
||||
"Enter a recovery passphrase": "Zadejte frázi pro obnovení",
|
||||
"%(ssoButtons)s Or %(usernamePassword)s": "%(ssoButtons)s nebo %(usernamePassword)s",
|
||||
|
@ -2356,7 +2356,7 @@
|
|||
"delete the address.": "smazat adresu.",
|
||||
"Delete the room address %(alias)s and remove %(name)s from the directory?": "Smazat adresu místnosti %(alias)s a odebrat %(name)s z adresáře?",
|
||||
"Self-verification request": "Požadavek na sebeověření",
|
||||
"%(creator)s created this DM.": "%(creator)s vytvořil tuto přímou zprávu.",
|
||||
"%(creator)s created this DM.": "%(creator)s vytvořil(a) tuto přímou zprávu.",
|
||||
"You do not have permission to create rooms in this community.": "Nemáte oprávnění k vytváření místností v této skupině.",
|
||||
"Cannot create rooms in this community": "V této skupině nelze vytvořit místnosti",
|
||||
"Great, that'll help people know it's you": "Skvělé, to pomůže lidem zjistit, že jste to vy",
|
||||
|
@ -2439,7 +2439,7 @@
|
|||
"There are two ways you can provide feedback and help us improve %(brand)s.": "Jsou dva způsoby, jak můžete poskytnout zpětnou vazbu a pomoci nám vylepšit %(brand)s.",
|
||||
"Rate %(brand)s": "Ohodnotit %(brand)s",
|
||||
"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.": "V této relaci jste již dříve používali novější verzi %(brand)s. Chcete-li tuto verzi znovu použít s šifrováním, budete se muset odhlásit a znovu přihlásit.",
|
||||
"Homeserver": "Homeserver",
|
||||
"Homeserver": "Domovský server",
|
||||
"Continue with %(provider)s": "Pokračovat s %(provider)s",
|
||||
"Server Options": "Možnosti serveru",
|
||||
"This version of %(brand)s does not support viewing some encrypted files": "Tato verze %(brand)s nepodporuje zobrazení některých šifrovaných souborů",
|
||||
|
@ -2644,7 +2644,7 @@
|
|||
"Enter name": "Zadejte jméno",
|
||||
"Ignored attempt to disable encryption": "Ignorovaný pokus o deaktivaci šifrování",
|
||||
"Show chat effects": "Zobrazit efekty chatu",
|
||||
"%(count)s people|one": "%(count)s člověk",
|
||||
"%(count)s people|one": "%(count)s osoba",
|
||||
"Takes the call in the current room off hold": "Zruší podržení hovoru v aktuální místnosti",
|
||||
"Places the call in the current room on hold": "Podrží hovor v aktuální místnosti",
|
||||
"Zimbabwe": "Zimbabwe",
|
||||
|
@ -2789,7 +2789,7 @@
|
|||
"Fill Screen": "Vyplnit obrazovku",
|
||||
"Voice Call": "Hlasový hovor",
|
||||
"Video Call": "Videohovor",
|
||||
"%(senderName)s ended the call": "%(senderName)s ukončil/a 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/a 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",
|
||||
|
@ -2968,5 +2968,18 @@
|
|||
"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"
|
||||
"Recently visited rooms": "Nedávno navštívené místnosti",
|
||||
"Upgrade to pro": "Upgradujte na profesionální verzi",
|
||||
"Minimize dialog": "Minimalizovat dialog",
|
||||
"Maximize dialog": "Maximalizovat dialog",
|
||||
"%(hostSignupBrand)s Setup": "Nastavení %(hostSignupBrand)s",
|
||||
"You should know": "Měli byste vědět",
|
||||
"Privacy Policy": "Zásady ochrany osobních údajů",
|
||||
"Cookie Policy": "Zásady používání souborů cookie",
|
||||
"Learn more in our <privacyPolicyLink />, <termsOfServiceLink /> and <cookiePolicyLink />.": "Další informace najdete v našich <privacyPolicyLink />, <termsOfServiceLink /> a <cookiePolicyLink />.",
|
||||
"Continuing temporarily allows the %(hostSignupBrand)s setup process to access your account to fetch verified email addresses. This data is not stored.": "Dočasné pokračování umožňuje procesu nastavení %(hostSignupBrand)s přístup k vašemu účtu za účelem načtení ověřených e-mailových adres. Tato data se neukládají.",
|
||||
"Failed to connect to your homeserver. Please close this dialog and try again.": "Připojení k domovskému serveru se nezdařilo. Zavřete toto dialogové okno a zkuste to znovu.",
|
||||
"Abort": "Přerušit",
|
||||
"Are you sure you wish to abort creation of the host? The process cannot be continued.": "Opravdu chcete přerušit vytváření hostitele? Proces nemůže být navázán.",
|
||||
"Confirm abort of host creation": "Potvrďte přerušení vytváření hostitele"
|
||||
}
|
||||
|
|
|
@ -12,10 +12,10 @@
|
|||
"Name": "Name",
|
||||
"Session ID": "Sitzungs-ID",
|
||||
"Displays action": "Zeigt Aktionen an",
|
||||
"Bans user with given id": "Verbannt den Benutzer mit der angegebenen ID",
|
||||
"Deops user with given id": "Setzt das Berechtigungslevel beim Benutzer mit der angegebenen ID zurück",
|
||||
"Invites user with given id to current room": "Lädt den Benutzer mit der angegebenen ID in den aktuellen Raum ein",
|
||||
"Kicks user with given id": "Benutzer mit der angegebenen ID kicken",
|
||||
"Bans user with given id": "Verbannt den/die Benutzer:in mit der angegebenen ID",
|
||||
"Deops user with given id": "Setzt das Berechtigungslevel des/der Benutzer:in mit der angegebenen ID zurück",
|
||||
"Invites user with given id to current room": "Lädt den/die Benutzer:in mit der angegebenen ID in den aktuellen Raum ein",
|
||||
"Kicks user with given id": "Benutzer:in mit der angegebenen ID kicken",
|
||||
"Changes your display nickname": "Ändert deinen angezeigten Nicknamen",
|
||||
"Change Password": "Passwort ändern",
|
||||
"Searches DuckDuckGo for results": "Verwendet DuckDuckGo für Suchergebnisse",
|
||||
|
@ -35,7 +35,7 @@
|
|||
"Deactivate Account": "Benutzerkonto deaktivieren",
|
||||
"Failed to send email": "Fehler beim Senden der E-Mail",
|
||||
"Account": "Benutzerkonto",
|
||||
"Click here to fix": "Zum reparieren hier klicken",
|
||||
"Click here to fix": "Zum Reparieren hier klicken",
|
||||
"Default": "Standard",
|
||||
"Export E2E room keys": "E2E-Raum-Schlüssel exportieren",
|
||||
"Failed to change password. Is your password correct?": "Passwortänderung fehlgeschlagen. Ist dein Passwort richtig?",
|
||||
|
@ -83,13 +83,13 @@
|
|||
"Server may be unavailable, overloaded, or you hit a bug.": "Server ist nicht verfügbar, überlastet oder du bist auf einen Softwarefehler gestoßen.",
|
||||
"Labs": "Labor",
|
||||
"Unable to add email address": "E-Mail-Adresse konnte nicht hinzugefügt werden",
|
||||
"Unable to remove contact information": "Die Kontakt-Informationen konnten nicht gelöscht werden",
|
||||
"Unable to remove contact information": "Die Kontaktinformationen können nicht gelöscht werden",
|
||||
"Unable to verify email address.": "Die E-Mail-Adresse konnte nicht verifiziert werden.",
|
||||
"Unban": "Verbannung aufheben",
|
||||
"unknown error code": "Unbekannter Fehlercode",
|
||||
"Upload avatar": "Profilbild hochladen",
|
||||
"Upload file": "Datei hochladen",
|
||||
"Users": "Benutzer",
|
||||
"Users": "Nutzer:innen",
|
||||
"Verification Pending": "Verifizierung ausstehend",
|
||||
"Video call": "Videoanruf",
|
||||
"Voice call": "Sprachanruf",
|
||||
|
@ -131,7 +131,7 @@
|
|||
"Jun": "Jun",
|
||||
"Jul": "Juli",
|
||||
"Aug": "Aug",
|
||||
"Sep": "Sep",
|
||||
"Sep": "Sept",
|
||||
"Oct": "Okt",
|
||||
"Nov": "Nov",
|
||||
"Dec": "Dez",
|
||||
|
@ -160,7 +160,7 @@
|
|||
"%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s hat den zukünftigen Chatverlauf für alle Raum-Mitglieder sichtbar gemacht (ab dem Zeitpunkt, an dem sie eingeladen wurden).",
|
||||
"%(senderName)s made future room history visible to all room members, from the point they joined.": "%(senderName)s hat den zukünftigen Chatverlauf für alle Raum-Mitglieder sichtbar gemacht (ab dem Zeitpunkt, an dem sie beigetreten sind).",
|
||||
"%(senderName)s made future room history visible to all room members.": "%(senderName)s hat den zukünftigen Chatverlauf sichtbar gemacht für: Alle Raum-Mitglieder.",
|
||||
"%(senderName)s made future room history visible to anyone.": "%(senderName)s hat den zukünftigen Chatverlauf sichtbar gemacht für: Alle.",
|
||||
"%(senderName)s made future room history visible to anyone.": "%(senderName)s hat den zukünftigen Chatverlauf für alle sichtbar gemacht.",
|
||||
"%(senderName)s made future room history visible to unknown (%(visibility)s).": "%(senderName)s hat den zukünftigen Chatverlauf für Unbekannte sichtbar gemacht (%(visibility)s).",
|
||||
"Missing room_id in request": "Fehlende room_id in Anfrage",
|
||||
"Missing user_id in request": "Fehlende user_id in Anfrage",
|
||||
|
@ -181,7 +181,7 @@
|
|||
"%(senderName)s unbanned %(targetName)s.": "%(senderName)s hat die Verbannung von %(targetName)s aufgehoben.",
|
||||
"Usage": "Verwendung",
|
||||
"%(senderName)s withdrew %(targetName)s's invitation.": "%(senderName)s hat die Einladung für %(targetName)s zurückgezogen.",
|
||||
"You need to be able to invite users to do that.": "Du musst die Berechtigung haben, Benutzer einzuladen, um diese Aktion ausführen zu können.",
|
||||
"You need to be able to invite users to do that.": "Du brauchst die Berechtigung Benutzer:innen einzuladen haben, um diese Aktion ausführen zu können.",
|
||||
"You need to be logged in.": "Du musst angemeldet sein.",
|
||||
"There are no visible files in this room": "Es gibt keine sichtbaren Dateien in diesem Raum",
|
||||
"Connectivity to the server has been lost.": "Verbindung zum Server wurde unterbrochen.",
|
||||
|
@ -285,7 +285,7 @@
|
|||
"Error decrypting video": "Video-Entschlüsselung fehlgeschlagen",
|
||||
"Import room keys": "Raum-Schlüssel importieren",
|
||||
"File to import": "Zu importierende Datei",
|
||||
"Failed to invite the following users to the %(roomName)s room:": "Folgende Benutzer konnten nicht in den Raum \"%(roomName)s\" eingeladen werden:",
|
||||
"Failed to invite the following users to the %(roomName)s room:": "Folgende Benutzer:innen konnten nicht in den Raum \"%(roomName)s\" eingeladen werden:",
|
||||
"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.": "Bist du sicher, dass du dieses Ereignis entfernen (löschen) möchtest? Wenn du die Änderung eines Raum-Namens oder eines Raum-Themas löscht, kann dies dazu führen, dass die ursprüngliche Änderung rückgängig gemacht wird.",
|
||||
"This process allows you to export the keys for messages you have received in encrypted rooms to a local file. You will then be able to import the file into another Matrix client in the future, so that client will also be able to decrypt these messages.": "Dieser Prozess erlaubt es dir, die Schlüssel für die in verschlüsselten Räumen empfangenen Nachrichten in eine lokale Datei zu exportieren. In Zukunft wird es möglich sein, diese Datei in einen anderen Matrix-Client zu importieren, sodass dieser Client diese Nachrichten ebenfalls entschlüsseln kann.",
|
||||
"The exported file will allow anyone who can read it to decrypt any encrypted messages that you can see, so you should be careful to keep it secure. To help with this, you should enter a passphrase below, which will be used to encrypt the exported data. It will only be possible to import the data by using the same passphrase.": "Mit der exportierten Datei kann jeder, der diese Datei lesen kann, jede verschlüsselte Nachricht entschlüsseln, die für dich lesbar ist. Du solltest die Datei also unbedingt sicher verwahren. Um den Vorgang sicherer zu gestalten, solltest du unten eine Passphrase eingeben, die dazu verwendet wird, die exportierten Daten zu verschlüsseln. Anschließend wird es nur möglich sein, die Daten zu importieren, wenn dieselbe Passphrase verwendet wird.",
|
||||
|
@ -311,7 +311,7 @@
|
|||
"No Microphones detected": "Keine Mikrofone erkannt",
|
||||
"No media permissions": "Keine Medienberechtigungen",
|
||||
"You may need to manually permit %(brand)s to access your microphone/webcam": "Gegebenenfalls kann es notwendig sein, dass du %(brand)s manuell den Zugriff auf dein Mikrofon bzw. deine Webcam gewähren musst",
|
||||
"Default Device": "Standard-Gerät",
|
||||
"Default Device": "Standardgerät",
|
||||
"Microphone": "Mikrofon",
|
||||
"Camera": "Kamera",
|
||||
"Export": "Exportieren",
|
||||
|
@ -357,7 +357,7 @@
|
|||
"Custom": "Erweitert",
|
||||
"Decline": "Ablehnen",
|
||||
"Drop File Here": "Lasse Datei hier los",
|
||||
"Failed to upload profile picture!": "Hochladen des Profilbild's fehlgeschlagen!",
|
||||
"Failed to upload profile picture!": "Hochladen des Profilbilds fehlgeschlagen!",
|
||||
"Incoming call from %(name)s": "Eingehender Anruf von %(name)s",
|
||||
"Incoming video call from %(name)s": "Eingehender Videoanruf von %(name)s",
|
||||
"Incoming voice call from %(name)s": "Eingehender Sprachanruf von %(name)s",
|
||||
|
@ -416,31 +416,31 @@
|
|||
"You are now ignoring %(userId)s": "%(userId)s wird jetzt ignoriert",
|
||||
"You are no longer ignoring %(userId)s": "%(userId)s wird nicht mehr ignoriert",
|
||||
"Leave": "Verlassen",
|
||||
"Failed to invite the following users to %(groupId)s:": "Die folgenden Benutzer konnten nicht in die Gruppe %(groupId)s eingeladen werden:",
|
||||
"Failed to invite the following users to %(groupId)s:": "Die folgenden Benutzer:innen konnten nicht in die Gruppe %(groupId)s eingeladen werden:",
|
||||
"Leave %(groupName)s?": "%(groupName)s verlassen?",
|
||||
"Add a Room": "Raum hinzufügen",
|
||||
"Add a User": "Benutzer hinzufügen",
|
||||
"Add a User": "Benutzer:in hinzufügen",
|
||||
"You have entered an invalid address.": "Du hast eine ungültige Adresse eingegeben.",
|
||||
"Matrix ID": "Matrix-ID",
|
||||
"Unignore": "Nicht mehr ignorieren",
|
||||
"Unignored user": "Benutzer nicht mehr ignoriert",
|
||||
"Ignored user": "Benutzer ignoriert",
|
||||
"Unignored user": "Benutzer:in nicht mehr ignoriert",
|
||||
"Ignored user": "Benutzer:in ignoriert",
|
||||
"Stops ignoring a user, showing their messages going forward": "Beendet das Ignorieren eines Benutzers, nachfolgende Nachrichten werden wieder angezeigt",
|
||||
"Ignores a user, hiding their messages from you": "Ignoriert einen Benutzer und verbirgt dessen Nachrichten",
|
||||
"Ignores a user, hiding their messages from you": "Ignoriert eine:n Benutzer:in und verbirgt dessen/deren Nachrichten",
|
||||
"Banned by %(displayName)s": "Verbannt von %(displayName)s",
|
||||
"Description": "Beschreibung",
|
||||
"Unable to accept invite": "Einladung kann nicht angenommen werden",
|
||||
"Failed to invite users to %(groupId)s": "Benutzer konnten nicht in %(groupId)s eingeladen werden",
|
||||
"Failed to invite users to %(groupId)s": "Benutzer:innen konnten nicht in %(groupId)s eingeladen werden",
|
||||
"Unable to reject invite": "Einladung konnte nicht abgelehnt werden",
|
||||
"Who would you like to add to this summary?": "Wen möchtest zu dieser Übersicht hinzufügen?",
|
||||
"Add to summary": "Zur Übersicht hinzufügen",
|
||||
"Failed to add the following users to the summary of %(groupId)s:": "Die folgenden Benutzer konnten nicht zur Übersicht von %(groupId)s hinzugefügt werden:",
|
||||
"Failed to add the following users to the summary of %(groupId)s:": "Die folgenden Benutzer:innen konnten nicht zur Übersicht von %(groupId)s hinzugefügt werden:",
|
||||
"Which rooms would you like to add to this summary?": "Welche Räume möchtest du zu dieser Übersicht hinzufügen?",
|
||||
"Failed to add the following rooms to the summary of %(groupId)s:": "Die folgenden Räume konnten nicht zur Übersicht von %(groupId)s hinzugefügt werden:",
|
||||
"Failed to remove the room from the summary of %(groupId)s": "Der Raum konnte nicht aus der Übersicht von %(groupId)s entfernt werden",
|
||||
"The room '%(roomName)s' could not be removed from the summary.": "Der Raum '%(roomName)s' konnte nicht aus der Übersicht entfernt werden.",
|
||||
"Failed to remove a user from the summary of %(groupId)s": "Benutzer konnte nicht aus der Übersicht von %(groupId)s entfernt werden",
|
||||
"The user '%(displayName)s' could not be removed from the summary.": "Der Benutzer '%(displayName)s' konnte nicht aus der Übersicht entfernt werden.",
|
||||
"Failed to remove a user from the summary of %(groupId)s": "Benutzer:in konnte nicht aus der Übersicht von %(groupId)s entfernt werden",
|
||||
"The user '%(displayName)s' could not be removed from the summary.": "Der Benutzer:in '%(displayName)s' konnte nicht aus der Übersicht entfernt werden.",
|
||||
"Unknown": "Unbekannt",
|
||||
"Failed to add the following rooms to %(groupId)s:": "Die folgenden Räume konnten nicht zu %(groupId)s hinzugefügt werden:",
|
||||
"Matrix Room ID": "Matrix-Raum-ID",
|
||||
|
@ -469,7 +469,7 @@
|
|||
"Which rooms would you like to add to this community?": "Welche Räume sollen zu dieser Community hinzugefügt werden?",
|
||||
"Add rooms to the community": "Räume zur Community hinzufügen",
|
||||
"Add to community": "Zur Community hinzufügen",
|
||||
"Failed to invite users to community": "Benutzer konnten nicht in die Community eingeladen werden",
|
||||
"Failed to invite users to community": "Benutzer:innen konnten nicht in die Community eingeladen werden",
|
||||
"Communities": "Communities",
|
||||
"Invalid community ID": "Ungültige Community-ID",
|
||||
"'%(groupId)s' is not a valid community ID": "'%(groupId)s' ist keine gültige Community-ID",
|
||||
|
@ -485,20 +485,20 @@
|
|||
"Community ID": "Community-ID",
|
||||
"example": "Beispiel",
|
||||
"Add rooms to the community summary": "Fügt Räume zur Community-Übersicht hinzu",
|
||||
"Add users to the community summary": "Füge Benutzer zur Community-Übersicht hinzu",
|
||||
"Add users to the community summary": "Füge Benutzer:innen zur Community-Übersicht hinzu",
|
||||
"Failed to update community": "Aktualisieren der Community fehlgeschlagen",
|
||||
"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 Mitglied dieser Community",
|
||||
"You are an administrator of this community": "Du bist ein Administrator dieser Community",
|
||||
"You are an administrator of this community": "Du bist ein:e Administrator:in dieser Community",
|
||||
"Community %(groupId)s not found": "Community '%(groupId)s' nicht gefunden",
|
||||
"Failed to load %(groupId)s": "'%(groupId)s' konnte nicht geladen werden",
|
||||
"Error whilst fetching joined communities": "Fehler beim Laden beigetretener Communities",
|
||||
"Create a new community": "Neue Community erstellen",
|
||||
"Your Communities": "Deine Communities",
|
||||
"You're not currently a member of any communities.": "Du gehörst aktuell keiner Community an.",
|
||||
"Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "Erstelle eine Community, um Benutzer und Räume miteinander zu verbinden! Erstelle zusätzlich eine eigene Homepage, um deinen individuellen Bereich im Matrix-Universum zu gestalten.",
|
||||
"Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "Erstelle eine Community, um Benutzer:innen und Räume miteinander zu verbinden! Erstelle zusätzlich eine eigene Homepage, um deinen individuellen Bereich im Matrix-Universum zu gestalten.",
|
||||
"Something went wrong whilst creating your community": "Beim Erstellen deiner Community ist ein Fehler aufgetreten",
|
||||
"And %(count)s more...|other": "Und %(count)s weitere...",
|
||||
"Delete Widget": "Widget löschen",
|
||||
|
@ -550,17 +550,17 @@
|
|||
"%(severalUsers)schanged their avatar %(count)s times|one": "%(severalUsers)shaben das Profilbild geändert",
|
||||
"%(oneUser)schanged their avatar %(count)s times|other": "%(oneUser)shat das Profilbild %(count)s-mal geändert",
|
||||
"%(oneUser)schanged their avatar %(count)s times|one": "%(oneUser)shat das Profilbild geändert",
|
||||
"Disinvite this user?": "Einladung für diesen Benutzer zurückziehen?",
|
||||
"Kick this user?": "Diesen Benutzer kicken?",
|
||||
"Unban this user?": "Verbannung für diesen Benutzer aufheben?",
|
||||
"Ban this user?": "Diesen Benutzer verbannen?",
|
||||
"Disinvite this user?": "Einladung für diese:n Benutzer:in zurückziehen?",
|
||||
"Kick this user?": "Diese:n Benutzer:in kicken?",
|
||||
"Unban this user?": "Verbannung für diese:n Benutzer:in aufheben?",
|
||||
"Ban this user?": "Diese:n Benutzer:in verbannen?",
|
||||
"Members only (since the point in time of selecting this option)": "Nur Mitglieder (ab dem Zeitpunkt, an dem diese Option ausgewählt wird)",
|
||||
"Members only (since they were invited)": "Nur Mitglieder (ab dem Zeitpunkt, an dem sie eingeladen wurden)",
|
||||
"Members only (since they joined)": "Nur Mitglieder (ab dem Zeitpunkt, an dem sie beigetreten sind)",
|
||||
"An email has been sent to %(emailAddress)s": "Eine E-Mail wurde an %(emailAddress)s gesendet",
|
||||
"A text message has been sent to %(msisdn)s": "Eine Textnachricht wurde an %(msisdn)s gesendet",
|
||||
"Disinvite this user from community?": "Community-Einladung für diesen Benutzer zurückziehen?",
|
||||
"Remove this user from community?": "Diesen Benutzer aus der Community entfernen?",
|
||||
"Disinvite this user from community?": "Community-Einladung für diese:n Benutzer:in zurückziehen?",
|
||||
"Remove this user from community?": "Diese:n Benutzer:in aus der Community entfernen?",
|
||||
"%(severalUsers)srejected their invitations %(count)s times|other": "%(severalUsers)shaben ihre Einladungen %(count)s-mal abgelehnt",
|
||||
"%(oneUser)srejected their invitation %(count)s times|other": "%(oneUser)shat die Einladung %(count)s-mal abgelehnt",
|
||||
"%(oneUser)srejected their invitation %(count)s times|one": "%(oneUser)shat die Einladung abgelehnt",
|
||||
|
@ -629,7 +629,7 @@
|
|||
"Whether or not you're using the Richtext mode of the Rich Text Editor": "Ob du den Richtext-Modus des Editors benutzt oder nicht",
|
||||
"Your homeserver's URL": "Deine Homeserver-URL",
|
||||
"%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s",
|
||||
"You will not be able to undo this change as you are demoting yourself, if you are the last privileged user in the room it will be impossible to regain privileges.": "Du wirst nicht in der Lage sein, die Änderung zurückzusetzen, da du dich degradierst. Wenn du der letze Nutzer mit Berechtigungen bist, wird es unmöglich sein die Privilegien zurückzubekommen.",
|
||||
"You will not be able to undo this change as you are demoting yourself, if you are the last privileged user in the room it will be impossible to regain privileges.": "Du wirst nicht in der Lage sein, die Änderung zurückzusetzen, da du dich degradierst. Wenn du der/die letze Nutzer:in mit Berechtigungen bist, wird es unmöglich sein die Privilegien zurückzubekommen.",
|
||||
"Community IDs cannot be empty.": "Community-IDs können nicht leer sein.",
|
||||
"Learn more about how we use analytics.": "Lerne mehr darüber, wie wir die Analysedaten nutzen.",
|
||||
"Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Wenn diese Seite identifizierbare Informationen wie Raum-, Nutzer- oder Gruppen-ID enthält, werden diese Daten entfernt bevor sie an den Server gesendet werden.",
|
||||
|
@ -644,7 +644,7 @@
|
|||
"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.",
|
||||
"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 meldest, 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:innen. Sie enthalten keine Nachrichten.",
|
||||
"Submit debug logs": "Fehlerberichte einreichen",
|
||||
"Code": "Code",
|
||||
"Opens the Developer Tools dialog": "Öffnet die Entwickler-Werkzeuge",
|
||||
|
@ -759,7 +759,7 @@
|
|||
"Unhide Preview": "Vorschau wieder anzeigen",
|
||||
"Unable to join network": "Es ist nicht möglich, dem Netzwerk beizutreten",
|
||||
"Sorry, your browser is <b>not</b> able to run %(brand)s.": "Es tut uns leid, aber dein Browser kann %(brand)s <b>nicht</b> ausführen.",
|
||||
"Messages in group chats": "Nachrichten in Gruppen-Chats",
|
||||
"Messages in group chats": "Nachrichten in Gruppenchats",
|
||||
"Yesterday": "Gestern",
|
||||
"Error encountered (%(errorDetail)s).": "Es ist ein Fehler aufgetreten (%(errorDetail)s).",
|
||||
"Low Priority": "Niedrige Priorität",
|
||||
|
@ -802,14 +802,14 @@
|
|||
"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>": "Dies wird deinen Account permanent unbenutzbar machen. Du wirst nicht in der Lage sein, dich anzumelden und keiner wird dieselbe Benutzer-ID erneut registrieren können. Alle Räume, in denen der Account ist, werden verlassen und deine Account-Daten werden vom Identitätsserver gelöscht. <b>Diese Aktion ist unumkehrbar.</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.": "Standardmäßig werden <b>die von dir gesendeten Nachrichten beim Deaktiveren nicht gelöscht</b>. Wenn du dies von uns möchtest, aktivere das Auswalfeld unten.",
|
||||
"Message visibility in Matrix is similar to email. Our forgetting your messages means that messages you have sent will not be shared with any new or unregistered users, but registered users who already have access to these messages will still have access to their copy.": "Die Sichtbarkeit der Nachrichten in Matrix ist vergleichbar mit E-Mails: Wenn wir deine Nachrichten vergessen heißt das, dass diese nicht mit neuen oder nicht registrierten Nutzern teilen werden, aber registrierte Nutzer, die bereits zugriff haben, werden Zugriff auf ihre Kopie behalten.",
|
||||
"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)": "Bitte vergesst alle Nachrichten, die ich gesendet habe, wenn mein Account deaktiviert wird. (<b>Warnung:</b> Zukünftige Nutzer werden eine unvollständige Konversation sehen)",
|
||||
"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)": "Bitte vergesst alle Nachrichten, die ich gesendet habe, wenn mein Account deaktiviert wird. (<b>Warnung:</b> Zukünftige Nutzer:innen werden eine unvollständige Konversation sehen)",
|
||||
"To continue, please enter your password:": "Um fortzufahren, bitte Passwort eingeben:",
|
||||
"Can't leave Server Notices room": "Du kannst den Raum für Server-Notizen nicht verlassen",
|
||||
"This room is used for important messages from the Homeserver, so you cannot leave it.": "Du kannst diesen Raum nicht verlassen, da dieser Raum für wichtige Nachrichten vom Heimserver verwendet wird.",
|
||||
"Terms and Conditions": "Geschäftsbedingungen",
|
||||
"To continue using the %(homeserverDomain)s homeserver you must review and agree to our terms and conditions.": "Um den %(homeserverDomain)s -Heimserver weiter zu verwenden, musst du die Geschäftsbedingungen sichten und ihnen zustimmen.",
|
||||
"Review terms and conditions": "Geschäftsbedingungen anzeigen",
|
||||
"Share Link to User": "Link zum Benutzer teilen",
|
||||
"Share Link to User": "Link zum/r Benutzer:in teilen",
|
||||
"Share room": "Raum teilen",
|
||||
"Share Room": "Raum teilen",
|
||||
"Link to most recent message": "Link zur aktuellsten Nachricht",
|
||||
|
@ -819,8 +819,8 @@
|
|||
"Link to selected message": "Link zur ausgewählten Nachricht",
|
||||
"COPY": "KOPIEREN",
|
||||
"Share Message": "Nachricht teilen",
|
||||
"No Audio Outputs detected": "Keine Ton-Ausgabe erkannt",
|
||||
"Audio Output": "Ton-Ausgabe",
|
||||
"No Audio Outputs detected": "Keine Audioausgabe erkannt",
|
||||
"Audio Output": "Audioausgabe",
|
||||
"In encrypted rooms, like this one, URL previews are disabled by default to ensure that your homeserver (where the previews are generated) cannot gather information about links you see in this room.": "In verschlüsselten Räumen, wie diesem, ist die Link-Vorschau standardmäßig deaktiviert damit dein Heimserver (auf dem die Vorschau erzeugt wird) keine Informationen über Links in diesem Raum bekommt.",
|
||||
"When someone puts a URL in their message, a URL preview can be shown to give more information about that link such as the title, description, and an image from the website.": "Wenn jemand eine URL in seine Nachricht einfügt, kann eine URL-Vorschau angezeigt werden, um mehr Informationen über diesen Link zu erhalten, wie z.B. den Titel, die Beschreibung und ein Bild von der Website.",
|
||||
"The email field must not be blank.": "Das E-Mail-Feld darf nicht leer sein.",
|
||||
|
@ -851,7 +851,7 @@
|
|||
"Your message wasn't sent because this homeserver has exceeded a resource limit. Please <a>contact your service administrator</a> to continue using the service.": "Deine Nachricht wurde nicht gesendet, weil dieser Heimserver ein Ressourcen-Limit erreicht hat. Bitte <a>kontaktiere deinen Systemadministrator</a> um diesen Dienst weiter zu nutzen.",
|
||||
"Please <a>contact your service administrator</a> to continue using this service.": "Bitte <a>kontaktiere deinen Systemadministrator</a> um diesen Dienst weiter zu nutzen.",
|
||||
"Sorry, your homeserver is too old to participate in this room.": "Sorry, dein Homeserver ist zu alt, um an diesem Raum teilzunehmen.",
|
||||
"Please contact your homeserver administrator.": "Bitte setze dich mit dem Administrator deines Homeservers in Verbindung.",
|
||||
"Please contact your homeserver administrator.": "Bitte setze dich mit der Administration deines Homeservers in Verbindung.",
|
||||
"Legal": "Rechtliches",
|
||||
"This room has been replaced and is no longer active.": "Dieser Raum wurde ersetzt und ist nicht länger aktiv.",
|
||||
"The conversation continues here.": "Die Konversation wird hier fortgesetzt.",
|
||||
|
@ -865,7 +865,7 @@
|
|||
"%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s setzte die Hauptadresse zu diesem Raum auf %(address)s.",
|
||||
"%(senderName)s removed the main address for this room.": "%(senderName)s entfernte die Hauptadresse von diesem Raum.",
|
||||
"Before submitting logs, you must <a>create a GitHub issue</a> to describe your problem.": "Bevor du Log-Dateien übermittelst, musst du ein <a>GitHub-Issue erstellen</a> um dein Problem zu beschreiben.",
|
||||
"%(brand)s now uses 3-5x less memory, by only loading information about other users when needed. Please wait whilst we resynchronise with the server!": "%(brand)s benutzt nun 3-5-mal weniger Arbeitsspeicher, indem Informationen über andere Nutzer erst bei Bedarf geladen werden. Bitte warte, während die Daten erneut mit dem Server abgeglichen werden!",
|
||||
"%(brand)s now uses 3-5x less memory, by only loading information about other users when needed. Please wait whilst we resynchronise with the server!": "%(brand)s benutzt nun 3 - 5-mal weniger Arbeitsspeicher, indem Informationen über andere Nutzer:innen erst bei Bedarf geladen werden. Bitte warte, während die Daten erneut mit dem Server abgeglichen werden!",
|
||||
"Updating %(brand)s": "Aktualisiere %(brand)s",
|
||||
"You've previously used %(brand)s on %(host)s with lazy loading of members enabled. In this version lazy loading is disabled. As the local cache is not compatible between these two settings, %(brand)s needs to resync your account.": "Du hast zuvor %(brand)s auf %(host)s ohne das verzögerte Laden von Mitgliedern genutzt. In dieser Version war das verzögerte Laden deaktiviert. Da die lokal zwischengespeicherten Daten zwischen diesen Einstellungen nicht kompatibel sind, muss %(brand)s dein Konto neu synchronisieren.",
|
||||
"If the other version of %(brand)s is still open in another tab, please close it as using %(brand)s on the same host with both lazy loading enabled and disabled simultaneously will cause issues.": "Wenn %(brand)s mit der alten Version in einem anderen Tab geöffnet ist, schließe dies bitte, da das parallele Nutzen von %(brand)s auf demselben Host mit aktivierten und deaktivierten verzögertem Laden, Probleme verursachen wird.",
|
||||
|
@ -873,9 +873,9 @@
|
|||
"Clear cache and resync": "Zwischenspeicher löschen und erneut synchronisieren",
|
||||
"Please review and accept the policies of this homeserver:": "Bitte sieh dir alle Bedingungen dieses Heimservers an und akzeptiere sie:",
|
||||
"Add some now": "Jemanden jetzt hinzufügen",
|
||||
"You are an administrator of this community. You will not be able to rejoin without an invite from another administrator.": "Du bist ein Administrator dieser Community. Du wirst nicht erneut hinzutreten können, wenn du nicht von einem anderen Administrator eingeladen wirst.",
|
||||
"Open Devtools": "Öffne Entwickler-Werkzeuge",
|
||||
"Show developer tools": "Zeige Entwickler-Werkzeuge",
|
||||
"You are an administrator of this community. You will not be able to rejoin without an invite from another administrator.": "Du bist ein:e Administrator:in dieser Community. Du wirst nicht erneut hinzutreten können, wenn du nicht von einem/r anderen Administrator:in eingeladen wirst.",
|
||||
"Open Devtools": "Entwicklerwerkzeuge öffnen",
|
||||
"Show developer tools": "Zeige Entwicklerwerkzeuge",
|
||||
"Unable to load! Check your network connectivity and try again.": "Konnte nicht geladen werden! Überprüfe die Netzwerkverbindung und versuche es erneut.",
|
||||
"Delete Backup": "Sicherung löschen",
|
||||
"Backup version: ": "Sicherungsversion: ",
|
||||
|
@ -909,7 +909,7 @@
|
|||
"All-uppercase is almost as easy to guess as all-lowercase": "Alles groß zu geschrieben ist fast genauso schnell zu raten, wie alles klein zu schreiben",
|
||||
"Reversed words aren't much harder to guess": "Umgedrehte Worte sind nicht schwerer zu erraten",
|
||||
"Predictable substitutions like '@' instead of 'a' don't help very much": "Vorhersagbare Ersetzungen wie '@' anstelle von 'a' helfen nicht viel",
|
||||
"Add another word or two. Uncommon words are better.": "Füge ein weiteres wort hinzu - oder mehr. Ungewöhnliche Worte sind besser.",
|
||||
"Add another word or two. Uncommon words are better.": "Füge ein weiteres Wort - oder mehr - hinzu. Ungewöhnliche Worte sind besser.",
|
||||
"Repeats like \"aaa\" are easy to guess": "Wiederholungen wie \"aaa\" sind einfach zu erraten",
|
||||
"Repeats like \"abcabcabc\" are only slightly harder to guess than \"abc\"": "Wiederholungen wie \"abcabcabc\" sind nur leicht schwerer zu raten als \"abc\"",
|
||||
"Sequences like abc or 6543 are easy to guess": "Sequenzen wie \"abc\" oder \"6543\" sind leicht zu raten",
|
||||
|
@ -923,12 +923,12 @@
|
|||
"Names and surnames by themselves are easy to guess": "Namen und Familiennamen alleine sind einfach zu erraten",
|
||||
"Common names and surnames are easy to guess": "Häufige Namen und Familiennamen sind einfach zu erraten",
|
||||
"You do not have permission to invite people to this room.": "Du hast keine Berechtigung um Personen in diesen Raum einzuladen.",
|
||||
"User %(user_id)s does not exist": "Benutzer %(user_id)s existiert nicht",
|
||||
"Unknown server error": "Unbekannter Server-Fehler",
|
||||
"Failed to invite users to the room:": "Konnte Benutzer nicht in den Raum einladen:",
|
||||
"User %(user_id)s does not exist": "Benutzer:in %(user_id)s existiert nicht",
|
||||
"Unknown server error": "Unbekannter Serverfehler",
|
||||
"Failed to invite users to the room:": "Konnte Benutzer:innen nicht in den Raum einladen:",
|
||||
"Short keyboard patterns are easy to guess": "Kurze Tastaturmuster sind einfach zu erraten",
|
||||
"Show a reminder to enable Secure Message Recovery in encrypted rooms": "Zeige eine Erinnerung um die Sichere Nachrichten-Wiederherstellung in verschlüsselten Räumen zu aktivieren",
|
||||
"Messages containing @room": "Nachrichten die \"@room\" enthalten",
|
||||
"Messages containing @room": "Nachrichten, die \"@room\" enthalten",
|
||||
"Encrypted messages in one-to-one chats": "Verschlüsselte Nachrichten in 1:1 Chats",
|
||||
"Encrypted messages in group chats": "Verschlüsselte Nachrichten in Gruppenchats",
|
||||
"Use a longer keyboard pattern with more turns": "Nutze ein längeres Tastaturmuster mit mehr Abwechslung",
|
||||
|
@ -962,9 +962,9 @@
|
|||
"Go to Settings": "Gehe zu Einstellungen",
|
||||
"Sign in with single sign-on": "Melde dich mit „Single Sign-On“ an",
|
||||
"Unrecognised address": "Nicht erkannte Adresse",
|
||||
"User %(user_id)s may or may not exist": "Existenz der Benutzer %(user_id)s unsicher",
|
||||
"Prompt before sending invites to potentially invalid matrix IDs": "Nachfragen bevor Einladungen zu möglichen ungültigen Matrix IDs gesendet werden",
|
||||
"The following users may not exist": "Eventuell existieren folgende Benutzer nicht",
|
||||
"User %(user_id)s may or may not exist": "Existenz des/der Benutzers/in %(user_id)s unsicher",
|
||||
"Prompt before sending invites to potentially invalid matrix IDs": "Nachfragen, bevor Einladungen zu möglichen ungültigen Matrix-IDs gesendet werden",
|
||||
"The following users may not exist": "Eventuell existieren folgende Benutzer:innen nicht",
|
||||
"Unable to find profiles for the Matrix IDs listed below - would you like to invite them anyway?": "Profile für die unteren Matrix IDs wurden nicht gefunden - willst Du sie trotzdem einladen?",
|
||||
"Invite anyway and never warn me again": "Trotzdem einladen und mich nicht mehr warnen",
|
||||
"Invite anyway": "Trotzdem einladen",
|
||||
|
@ -989,10 +989,10 @@
|
|||
"Messages containing my username": "Nachrichten, die meinen Benutzernamen enthalten",
|
||||
"The other party cancelled the verification.": "Die Gegenstelle hat die Überprüfung abgebrochen.",
|
||||
"Verified!": "Verifiziert!",
|
||||
"You've successfully verified this user.": "Du hast diesen Benutzer erfolgreich verifiziert.",
|
||||
"Secure messages with this user are end-to-end encrypted and not able to be read by third parties.": "Sichere Nachrichten mit diesem Benutzer sind Ende-zu-Ende-verschlüsselt und können nicht von Dritten gelesen werden.",
|
||||
"You've successfully verified this user.": "Du hast diese:n Benutzer:in erfolgreich verifiziert.",
|
||||
"Secure messages with this user are end-to-end encrypted and not able to be read by third parties.": "Sichere Nachrichten mit diesem/r Benutzer:in sind Ende-zu-Ende-verschlüsselt und können nicht von Dritten gelesen werden.",
|
||||
"Got It": "Verstanden",
|
||||
"Verify this user by confirming the following number appears on their screen.": "Verifiziere diese Nutzer!n, indem du bestätigst, dass die folgende Nummer auf dessen Bildschirm erscheint.",
|
||||
"Verify this user by confirming the following number appears on their screen.": "Verifiziere diese Nutzer:in, indem du bestätigst, dass die folgende Nummer auf dessen Bildschirm erscheint.",
|
||||
"Yes": "Ja",
|
||||
"No": "Nein",
|
||||
"We've sent you an email to verify your address. Please follow the instructions there and then click the button below.": "Wir haben dir eine E-Mail geschickt, um deine Adresse zu überprüfen. Bitte folge den Anweisungen dort und klicke dann auf die Schaltfläche unten.",
|
||||
|
@ -1006,9 +1006,9 @@
|
|||
"Profile picture": "Profilbild",
|
||||
"Display Name": "Anzeigename",
|
||||
"Room information": "Rauminformationen",
|
||||
"Internal room ID:": "Interne Raum ID:",
|
||||
"Room version": "Raum Version",
|
||||
"Room version:": "Raum-Version:",
|
||||
"Internal room ID:": "Interne Raum-ID:",
|
||||
"Room version": "Raumversion",
|
||||
"Room version:": "Raumversion:",
|
||||
"Developer options": "Entwickleroptionen",
|
||||
"General": "Allgemein",
|
||||
"Set a new account password...": "Neues Benutzerkonto-Passwort festlegen...",
|
||||
|
@ -1031,13 +1031,13 @@
|
|||
"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",
|
||||
"This room has no topic.": "Dieser Raum hat kein Thema.",
|
||||
"%(senderDisplayName)s made the room public to whoever knows the link.": "%(senderDisplayName)s machte den Raum für jeden, der den Link kennt öffentlich.",
|
||||
"%(senderDisplayName)s made the room invite only.": "%(senderDisplayName)s hat den Raum auf eingeladene User beschränkt.",
|
||||
"%(senderDisplayName)s made the room invite only.": "%(senderDisplayName)s hat den Raum auf eingeladene Benutzer beschränkt.",
|
||||
"%(senderDisplayName)s changed the join rule to %(rule)s": "%(senderDisplayName)s änderte die Zutrittsregel auf '%(rule)s'",
|
||||
"%(senderDisplayName)s has allowed guests to join the room.": "%(senderDisplayName)s erlaubte Gäste diesem Raum beizutreten.",
|
||||
"%(senderDisplayName)s has prevented guests from joining the room.": "%(senderDisplayName)s hat Gästen verboten diesem Raum beizutreten.",
|
||||
"%(senderDisplayName)s has prevented guests from joining the room.": "%(senderDisplayName)s hat Gästen verboten, diesem Raum beizutreten.",
|
||||
"%(senderDisplayName)s changed guest access to %(rule)s": "%(senderDisplayName)s änderte den Gastzugriff auf '%(rule)s'",
|
||||
"Group & filter rooms by custom tags (refresh to apply changes)": "Gruppiere & filtere Räume nach eigenen Tags (neu laden um Änderungen zu übernehmen)",
|
||||
"Unable to find a supported verification method.": "Konnte kein unterstützte Verifikationsmethode finden.",
|
||||
"Unable to find a supported verification method.": "Konnte keine unterstützte Verifikationsmethode finden.",
|
||||
"Dog": "Hund",
|
||||
"Cat": "Katze",
|
||||
"Lion": "Löwe",
|
||||
|
@ -1045,7 +1045,7 @@
|
|||
"Unicorn": "Einhorn",
|
||||
"Pig": "Schwein",
|
||||
"Elephant": "Elefant",
|
||||
"Rabbit": "Kaninchen",
|
||||
"Rabbit": "Hase",
|
||||
"Panda": "Panda",
|
||||
"Rooster": "Hahn",
|
||||
"Penguin": "Pinguin",
|
||||
|
@ -1073,7 +1073,7 @@
|
|||
"Hat": "Hut",
|
||||
"Glasses": "Brille",
|
||||
"Spanner": "Schraubenschlüssel",
|
||||
"Santa": "Nikolaus",
|
||||
"Santa": "Weihnachtsmann",
|
||||
"Thumbs up": "Daumen hoch",
|
||||
"Umbrella": "Regenschirm",
|
||||
"Hourglass": "Sanduhr",
|
||||
|
@ -1103,7 +1103,7 @@
|
|||
"Timeline": "Chatverlauf",
|
||||
"Autocomplete delay (ms)": "Verzögerung zur Autovervollständigung (ms)",
|
||||
"Roles & Permissions": "Rollen & Berechtigungen",
|
||||
"Changes to who can read history will only apply to future messages in this room. The visibility of existing history will be unchanged.": "Änderungen daran, wer den Chatverlauf lesen kann werden nur zukünftige Nachrichten in diesem Raum angewendet. Die Sichtbarkeit der existierenden Historie bleibt unverändert.",
|
||||
"Changes to who can read history will only apply to future messages in this room. The visibility of existing history will be unchanged.": "Änderungen daran, wer den Chatverlauf lesen kann werden nur zukünftige Nachrichten in diesem Raum angewendet. Die Sichtbarkeit des existierenden Verlaufs bleibt unverändert.",
|
||||
"Security & Privacy": "Sicherheit & Datenschutz",
|
||||
"Encryption": "Verschlüsselung",
|
||||
"Once enabled, encryption cannot be disabled.": "Sobald aktiviert, kann die Verschlüsselung nicht mehr deaktiviert werden.",
|
||||
|
@ -1111,7 +1111,7 @@
|
|||
"Ignored users": "Ignorierte Benutzer",
|
||||
"Key backup": "Schlüsselsicherung",
|
||||
"Gets or sets the room topic": "Frage das Thema des Raums ab oder setze es",
|
||||
"Verify this user by confirming the following emoji appear on their screen.": "Verifiziere diese Nutzer!n, indem du bestätigst, dass folgendes Emoji auf dessen Bildschirm erscheint.",
|
||||
"Verify this user by confirming the following emoji appear on their screen.": "Verifiziere diese Nutzer:in, indem du bestätigst, dass folgende Emojis auf dessen Bildschirm erscheinen.",
|
||||
"Missing media permissions, click the button below to request.": "Fehlende Medienberechtigungen. Drücke auf den Knopf unten, um sie anzufordern.",
|
||||
"Request media permissions": "Medienberechtigungen anfordern",
|
||||
"Main address": "Primäre Adresse",
|
||||
|
@ -1194,8 +1194,8 @@
|
|||
"%(senderDisplayName)s enabled flair for %(groups)s in this room.": "%(senderDisplayName)s aktivierte Abzeichen der Gruppen %(groups)s für diesen Raum.",
|
||||
"%(senderDisplayName)s disabled flair for %(groups)s in this room.": "%(senderDisplayName)s deaktivierte Abzeichen der Gruppen %(groups)s in diesem Raum.",
|
||||
"%(senderDisplayName)s enabled flair for %(newGroups)s and disabled flair for %(oldGroups)s in this room.": "%(senderDisplayName)s aktivierte Abzeichen von %(newGroups)s und deaktivierte die Abzeichen von %(oldGroups)s in diesem Raum.",
|
||||
"User %(userId)s is already in the room": "Nutzer %(userId)s ist bereits im Raum",
|
||||
"The user must be unbanned before they can be invited.": "Nutzer müssen entbannt werden, bevor sie eingeladen werden können.",
|
||||
"User %(userId)s is already in the room": "Nutzer:in %(userId)s ist bereits im Raum",
|
||||
"The user must be unbanned before they can be invited.": "Die Verbannung des/der Nutzer:in muss aufgehoben werden, bevor er/sie eingeladen werden kann.",
|
||||
"Show read receipts sent by other users": "Zeige Lesebestätigungen anderer Benutzer",
|
||||
"Scissors": "Scheren",
|
||||
"<a>Upgrade</a> to your own domain": "<a>Upgrade</a> zu deiner eigenen Domain",
|
||||
|
@ -1208,15 +1208,15 @@
|
|||
"Change topic": "Ändere das Thema",
|
||||
"Modify widgets": "Ändere Widgets",
|
||||
"Default role": "Standard Rolle",
|
||||
"Send messages": "Sende Nachrichten",
|
||||
"Invite users": "Benutzer einladen",
|
||||
"Change settings": "Ändere Einstellungen",
|
||||
"Kick users": "Benutzer kicken",
|
||||
"Ban users": "Benutzer verbannen",
|
||||
"Send messages": "Nachrichten senden",
|
||||
"Invite users": "Benutzer:innen einladen",
|
||||
"Change settings": "Einstellungen ändern",
|
||||
"Kick users": "Benutzer:innen kicken",
|
||||
"Ban users": "Benutzer:innen verbannen",
|
||||
"Remove messages": "Nachrichten löschen",
|
||||
"Notify everyone": "Jeden Benachrichtigen",
|
||||
"Send %(eventType)s events": "Sende %(eventType)s-Ereignisse",
|
||||
"Select the roles required to change various parts of the room": "Wähle Rollen die benötigt werden um einige Teile des Raumes zu ändern",
|
||||
"Notify everyone": "Jeden benachrichtigen",
|
||||
"Send %(eventType)s events": "%(eventType)s-Ereignisse senden",
|
||||
"Select the roles required to change various parts of the room": "Wähle Rollen, die benötigt werden, um einige Teile des Raumes zu ändern",
|
||||
"Enable encryption?": "Verschlüsselung aktivieren?",
|
||||
"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",
|
||||
|
@ -1235,7 +1235,7 @@
|
|||
"Your Matrix account on %(serverName)s": "Dein Matrixkonto auf %(serverName)s",
|
||||
"Name or Matrix ID": "Name oder Matrix ID",
|
||||
"Your %(brand)s is misconfigured": "Dein %(brand)s ist falsch konfiguriert",
|
||||
"You cannot modify widgets in this room.": "Du kannst in diesem Raum keine Widgets verändern.",
|
||||
"You cannot modify widgets in this room.": "Du darfst in diesem Raum keine Widgets verändern.",
|
||||
"Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "Ob du die \"Breadcrumbs\"-Funktion nutzt oder nicht (Avatare oberhalb der Raumliste)",
|
||||
"The server does not support the room version specified.": "Der Server unterstützt die angegebene Raumversion nicht.",
|
||||
"<b>Warning</b>: Upgrading a room will <i>not automatically migrate room members to the new version of the room.</i> We'll post a link to the new room in the old version of the room - room members will have to click this link to join the new room.": "<b>Achtung</b>: Ein Raum-Upgrade wird <i>die Mitglieder des Raumes nicht automatisch auf die neue Version migrieren.</i> Wir werden in der alten Raumversion einen Link zum neuen Raum posten - Raum-Mitglieder müssen dann auf diesen Link klicken um dem neuen Raum beizutreten.",
|
||||
|
@ -1243,7 +1243,7 @@
|
|||
"At this time it is not possible to reply with a file. Would you like to upload this file without replying?": "Momentan ist es nicht möglich mit einer Datei zu antworten. Möchtest Du die Datei hochladen ohne zu antworten?",
|
||||
"The file '%(fileName)s' failed to upload.": "Die Datei \"%(fileName)s\" konnte nicht hochgeladen werden.",
|
||||
"Changes your avatar in this current room only": "Ändert deinen Avatar für diesen Raum",
|
||||
"Unbans user with given ID": "Entbannt den Benutzer mit der angegebenen ID",
|
||||
"Unbans user with given ID": "Hebt die Verbannung des/der Benutzer:in mit der angegebenen ID auf",
|
||||
"Sends the given message coloured as a rainbow": "Sendet die Nachricht in Regenbogenfarben",
|
||||
"Adds a custom widget by URL to the room": "Fügt ein Benutzer-Widget über eine URL zum Raum hinzu",
|
||||
"Please supply a https:// or http:// widget URL": "Bitte gib eine https:// oder http:// Widget-URL an",
|
||||
|
@ -1301,9 +1301,9 @@
|
|||
"Multiple integration managers": "Mehrere Integrationsmanager",
|
||||
"Public Name": "Öffentlicher Name",
|
||||
"Identity Server URL must be HTTPS": "Die Identity Server-URL muss HTTPS sein",
|
||||
"Could not connect to Identity Server": "Verbindung zum Identity Server konnte nicht hergestellt werden",
|
||||
"Could not connect to Identity Server": "Verbindung zum Identitätsserver konnte nicht hergestellt werden",
|
||||
"Checking server": "Server wird überprüft",
|
||||
"Identity server has no terms of service": "Für den Identity Server gelten keine Nutzungsbedingungen",
|
||||
"Identity server has no terms of service": "Der Identitätsserver hat keine Nutzungsbedingungen",
|
||||
"Disconnect": "Trennen",
|
||||
"Identity Server": "Identitätsserver",
|
||||
"Use an identity server": "Benutze einen Identitätsserver",
|
||||
|
@ -1317,7 +1317,7 @@
|
|||
"Enter a new identity server": "Gib einen neuen Identitätsserver ein",
|
||||
"Clear personal data": "Persönliche Daten löschen",
|
||||
"Disconnecting from your identity server will mean you won't be discoverable by other users and you won't be able to invite others by email or phone.": "Wenn du die Verbindung zu deinem Identitätsserver trennst, heißt das, dass du nicht mehr von anderen Benutzern gefunden werden und auch andere nicht mehr per E-Mail oder Telefonnummer einladen kannst.",
|
||||
"Please ask the administrator of your homeserver (<code>%(homeserverDomain)s</code>) to configure a TURN server in order for calls to work reliably.": "Bitte frage den Administrator deines Heimservers (<code>%(homeserverDomain)s</code>) darum, einen TURN-Server einzurichten, damit Anrufe zuverlässig funktionieren.",
|
||||
"Please ask the administrator of your homeserver (<code>%(homeserverDomain)s</code>) to configure a TURN server in order for calls to work reliably.": "Bitte frage die Administration deines Heimservers (<code>%(homeserverDomain)s</code>) darum, einen TURN-Server einzurichten, damit Anrufe zuverlässig funktionieren.",
|
||||
"Disconnect from the identity server <idserver />?": "Verbindung zum Identitätsserver <idserver /> trennen?",
|
||||
"Add Email Address": "E-Mail-Adresse hinzufügen",
|
||||
"Add Phone Number": "Telefonnummer hinzufügen",
|
||||
|
@ -1328,7 +1328,7 @@
|
|||
"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 du teilst deine IP-Adresse mit diesem Server. 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.",
|
||||
"Trust": "Vertrauen",
|
||||
|
@ -1339,7 +1339,7 @@
|
|||
"Try out new ways to ignore people (experimental)": "Versuche neue Möglichkeiten, um Menschen zu ignorieren (experimentell)",
|
||||
"Send read receipts for messages (requires compatible homeserver to disable)": "Lesebestätigungen für Nachrichten senden (Deaktivieren erfordert einen kompatiblen Heimserver)",
|
||||
"My Ban List": "Meine Bannliste",
|
||||
"This is your list of users/servers you have blocked - don't leave the room!": "Dies ist die Liste von Benutzer*innen/Servern, die du blockiert hast - verlasse den Raum nicht!",
|
||||
"This is your list of users/servers you have blocked - don't leave the room!": "Dies ist die Liste von Benutzer:innen und Servern, die du blockiert hast - verlasse diesen Raum nicht!",
|
||||
"Accept <policyLink /> to continue:": "Akzeptiere <policyLink />, um fortzufahren:",
|
||||
"Change identity server": "Wechsle den Identitätsserver",
|
||||
"You should <b>remove your personal data</b> from identity server <idserver /> before disconnecting. Unfortunately, identity server <idserver /> is currently offline or cannot be reached.": "Du solltest deine <b>persönlichen Daten</b> vom Identitätsserver <idserver /> entfernen, bevor du die Verbindung trennst. Leider ist der Identitätsserver <idserver /> derzeit offline oder kann nicht erreicht werden.",
|
||||
|
@ -1370,7 +1370,7 @@
|
|||
"%(num)s days from now": "in %(num)s Tagen",
|
||||
"Show info about bridges in room settings": "Information über Bridges in den Raumeinstellungen anzeigen",
|
||||
"Enable message search in encrypted rooms": "Nachrichtensuche in verschlüsselten Räumen aktivieren",
|
||||
"Lock": "Sperren",
|
||||
"Lock": "Schloss",
|
||||
"Later": "Später",
|
||||
"Review": "Überprüfen",
|
||||
"Verify": "Verifizieren",
|
||||
|
@ -1384,24 +1384,24 @@
|
|||
"Cannot connect to integration manager": "Verbindung zum Integrationsmanager fehlgeschlagen",
|
||||
"The integration manager is offline or it cannot reach your homeserver.": "Der Integrationsmanager ist offline oder er kann den Heimserver nicht erreichen.",
|
||||
"not stored": "nicht gespeichert",
|
||||
"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 has a signature from <verify>unknown</verify> user with ID %(deviceId)s": "Die Sicherung hat eine Signatur von <verify>unbekanntem/r</verify> Nutzer:in 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?": "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",
|
||||
"contact the administrators of identity server <idserver />": "Administration 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.": "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.",
|
||||
"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 Stickerpacks 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",
|
||||
"Agree to the identity server (%(serverName)s) Terms of Service to allow yourself to be discoverable by email address or phone number.": "Stimme den Nutzungsbedingungen des Identitätsservers %(serverName)s zu, um dich per Email Adresse und Telefonnummer auffindbar zu machen.",
|
||||
"Agree to the identity server (%(serverName)s) Terms of Service to allow yourself to be discoverable by email address or phone number.": "Stimme den Nutzungsbedingungen des Identitätsservers %(serverName)s zu, um dich per E-Mail-Adresse und Telefonnummer auffindbar zu machen.",
|
||||
"Clear cache and reload": "Zwischenspeicher löschen und neu laden",
|
||||
"Customise your experience with experimental labs features. <a>Learn more</a>.": "Passe deine Erfahrung mit experimentellen Lab Funktionen an. <a>Mehr erfahren</a>.",
|
||||
"Customise your experience with experimental labs features. <a>Learn more</a>.": "Passe deine Erfahrung mit experimentellen Funktionen an. <a>Mehr erfahren</a>.",
|
||||
"Ignored/Blocked": "Ignoriert/Blockiert",
|
||||
"Something went wrong. Please try again or view your console for hints.": "Etwas ist schief gelaufen. Bitte versuche es erneut oder sieh für weitere Hinweise in deiner Konsole nach.",
|
||||
"Error subscribing to list": "Fehler beim Abonnieren der Liste",
|
||||
|
@ -1413,10 +1413,10 @@
|
|||
"You have not ignored anyone.": "Du hast niemanden ignoriert.",
|
||||
"You are currently ignoring:": "Du ignorierst momentan:",
|
||||
"Unsubscribe": "Deabonnieren",
|
||||
"View rules": "Regeln betrachten",
|
||||
"View rules": "Regeln öffnen",
|
||||
"You are currently subscribed to:": "Du abonnierst momentan:",
|
||||
"⚠ These settings are meant for advanced users.": "⚠ Diese Einstellungen sind für fortgeschrittene Nutzer gedacht.",
|
||||
"Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Ob du %(brand)s auf einem Gerät verwendest, bei dem Berührung der primäre Eingabemechanismus ist",
|
||||
"⚠ These settings are meant for advanced users.": "⚠ Diese Einstellungen sind für fortgeschrittene Nutzer:innen gedacht.",
|
||||
"Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Ob du %(brand)s auf einem Gerät verwendest, bei dem Touch das primäre Eingabegerät ist",
|
||||
"Whether you're using %(brand)s as an installed Progressive Web App": "Ob du %(brand)s als installierte progressive Web-App verwendest",
|
||||
"Your user agent": "Dein User-Agent",
|
||||
"If you cancel now, you won't complete verifying the other user.": "Wenn Sie jetzt abbrechen, werden Sie die Verifizierung des anderen Nutzers nicht beenden können.",
|
||||
|
@ -1427,14 +1427,14 @@
|
|||
"Verifies a user, session, and pubkey tuple": "Verifiziert einen Benutzer, eine Sitzung und Pubkey-Tupel",
|
||||
"Unknown (user, session) pair:": "Unbekanntes (Nutzer-, Sitzungs-) Paar:",
|
||||
"Session already verified!": "Sitzung bereits verifiziert!",
|
||||
"WARNING: Session already verified, but keys do NOT MATCH!": "ACHTUNG: Sitzung bereits verifiziert, aber die Schlüssel passen NICHT ZUSAMMEN!",
|
||||
"WARNING: Session already verified, but keys do NOT MATCH!": "WARNUNG: Die Sitzung wurde bereits verifiziert, aber die Schlüssel passen NICHT ZUSAMMEN!",
|
||||
"WARNING: KEY VERIFICATION FAILED! The signing key for %(userId)s and session %(deviceId)s is \"%(fprint)s\" which does not match the provided key \"%(fingerprint)s\". This could mean your communications are being intercepted!": "ACHTUNG: SCHLÜSSEL-VERIFIZIERUNG FEHLGESCHLAGEN! Der Signierschlüssel für %(userId)s und Sitzung %(deviceId)s ist \"%(fprint)s\", was nicht mit dem bereitgestellten Schlüssel \"%(fingerprint)s\" übereinstimmt. Das könnte bedeuten, dass deine Kommunikation abgehört wird!",
|
||||
"Never send encrypted messages to unverified sessions from this session": "Sende niemals verschlüsselte Nachrichten von dieser Sitzung zu unverifizierten Sitzungen",
|
||||
"Never send encrypted messages to unverified sessions in this room from this session": "Sende niemals verschlüsselte Nachrichten von dieser Sitzung zu unverifizierten Sitzungen in diesem Raum",
|
||||
"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.": "Durch die Änderung des Passworts werden derzeit alle Ende-zu-Ende-Verschlüsselungsschlüssel in allen Sitzungen zurückgesetzt, sodass der verschlüsselte Chat-Verlauf nicht mehr lesbar ist, es sei denn, du exportierst zuerst deine Raumschlüssel und importierst sie anschließend wieder. In Zukunft wird dies verbessert werden.",
|
||||
"Delete %(count)s sessions|other": "Lösche %(count)s Sitzungen",
|
||||
"Delete %(count)s sessions|other": "%(count)s Sitzungen löschen",
|
||||
"Backup is not signed by any of your sessions": "Die Sicherung wurde von keiner deiner Sitzungen unterzeichnet",
|
||||
"Your password was successfully changed. You will not receive push notifications on other sessions until you log back in to them": "Dein Passwort wurde erfolgreich geändert. Du erhälst keine Push-Benachrichtigungen zu anderen Sitzungen, bis du dich wieder bei diesen anmeldst",
|
||||
"Your password was successfully changed. You will not receive push notifications on other sessions until you log back in to them": "Dein Passwort wurde erfolgreich geändert. Du erhältst keine Push-Benachrichtigungen zu anderen Sitzungen, bis du dich wieder bei diesen anmeldest",
|
||||
"Notification sound": "Benachrichtigungston",
|
||||
"Set a new custom sound": "Setze einen neuen benutzerdefinierten Ton",
|
||||
"Browse": "Durchsuche",
|
||||
|
@ -1454,10 +1454,10 @@
|
|||
"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.",
|
||||
"You have verified this user. This user has verified all of their sessions.": "Du hast diese/n Nutzer!n verifiziert. Er/Sie hat alle seine/ihre Sitzungen verifiziert.",
|
||||
"This user has not verified all of their sessions.": "Diese:r Benutzer:in hat nicht alle seine/ihre Sitzungen verifiziert.",
|
||||
"You have verified this user. This user has verified all of their sessions.": "Du hast diese/n Nutzer:in verifiziert. Er/Sie hat alle seine/ihre Sitzungen verifiziert.",
|
||||
"Your key share request has been sent - please check your other sessions for key share requests.": "Deine Schlüsselanfrage wurde gesendet - sieh in deinen anderen Sitzungen nach der Schlüsselanfrage.",
|
||||
"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.": "Schlüsselanfragen werden automatisch an deine anderen Sitzungen gesendet. Wenn du sie abgelehnt oder ignoriert hast klicke hier, um die Schlüssel erneut anzufordern.",
|
||||
"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.": "Schlüsselanfragen werden automatisch an deine anderen Sitzungen gesendet. Wenn du sie abgelehnt oder ignoriert hast, klicke hier, um die Schlüssel erneut anzufordern.",
|
||||
"If your other sessions do not have the key for this message you will not be able to decrypt them.": "Wenn deine anderen Sitzungen nicht über den Schlüssel für diese Nachricht verfügen, kannst du die Nachricht nicht entschlüsseln.",
|
||||
"<requestLink>Re-request encryption keys</requestLink> from your other sessions.": "<requestLink>Fordere die Verschlüsselungsschlüssel aus deinen anderen Sitzungen erneut an</requestLink>.",
|
||||
"Room %(name)s": "Raum %(name)s",
|
||||
|
@ -1490,12 +1490,12 @@
|
|||
"Use bots, bridges, widgets and sticker packs": "Benutze Bots, Bridges, Widgets und Sticker-Packs",
|
||||
"Changing your password will reset any end-to-end encryption keys on all of your sessions, making encrypted chat history unreadable. Set up Key Backup or export your room keys from another session before resetting your password.": "Wenn du dein Passwort änderst, werden alle Ende-zu-Ende-Verschlüsselungsschlüssel für alle deine Sitzungen zurückgesetzt, sodass der verschlüsselte Chat-Verlauf nicht mehr lesbar ist. Richte ein Schlüssel-Backup ein oder exportiere deine Raumschlüssel aus einer anderen Sitzung, bevor du dein Passwort zurücksetzst.",
|
||||
"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.": "Du wurdest von allen Sitzungen abgemeldet und erhälst keine Push-Benachrichtigungen mehr. Um die Benachrichtigungen wieder zu aktivieren, melde dich auf jedem Gerät erneut an.",
|
||||
"Upgrade this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "Aktualisiere diese Sitzung, damit sie andere Sitzungen verifizieren kann, indem sie dir Zugang zu verschlüsselten Nachrichten gewährt und sie für andere Benutzer als vertrauenswürdig markiert.",
|
||||
"Upgrade this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "Aktualisiere diese Sitzung, damit sie andere Sitzungen verifizieren kann, indem sie dir Zugang zu verschlüsselten Nachrichten gewährt und sie für andere Benutzer:innen als vertrauenswürdig markiert.",
|
||||
"Sign out and remove encryption keys?": "Abmelden und Verschlüsselungsschlüssel entfernen?",
|
||||
"Sign in to your Matrix account on <underlinedServerName />": "Melde dich bei deinem Matrix-Konto auf <underlinedServerName /> an",
|
||||
"Enter your password to sign in and regain access to your account.": "Gib dein Passwort ein, um dich anzumelden und wieder Zugang zu deinem Konto zu erhalten.",
|
||||
"Sign in and regain access to your account.": "Melden dich an und erhalte wieder Zugang zu deinem Konto.",
|
||||
"You cannot sign in to your account. Please contact your homeserver admin for more information.": "Du kannst dich nicht bei deinem Konto anmelden. Bitte kontaktiere deinen Homeserver-Administrator für weitere Informationen.",
|
||||
"You cannot sign in to your account. Please contact your homeserver admin for more information.": "Du kannst dich nicht bei deinem Konto anmelden. Bitte kontaktiere deine Homeserver-Administration für weitere Informationen.",
|
||||
"Sign In or Create Account": "Anmelden oder Account erstellen",
|
||||
"Use your account or create a new one to continue.": "Benutze deinen Account oder erstellen einen neuen, um fortzufahren.",
|
||||
"Create Account": "Account erstellen",
|
||||
|
@ -1568,7 +1568,7 @@
|
|||
"%(senderName)s removed the alternative addresses %(addresses)s for this room.|other": "%(senderName)s hat die alternativen Adressen %(addresses)s für diesen Raum entfernt.",
|
||||
"%(senderName)s removed the alternative addresses %(addresses)s for this room.|one": "%(senderName)s hat die alternative Adresse %(addresses)s für diesen Raum entfernt.",
|
||||
"%(senderName)s changed the alternative addresses for this room.": "%(senderName)s hat die alternative Adresse für diesen Raum geändert.",
|
||||
"%(senderName)s changed the main and alternative addresses for this room.": "%(senderName)s hat die Haupt- und Alternativadresse für diesen Raum geändert.",
|
||||
"%(senderName)s changed the main and alternative addresses for this room.": "%(senderName)s hat die Haupt- und Alternativadressen für diesen Raum geändert.",
|
||||
"%(senderName)s removed the rule banning users matching %(glob)s": "%(senderName)s entfernte die Ausschluss-Regel für Nutzer!nnen, die %(glob)s entsprechen",
|
||||
"%(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",
|
||||
|
@ -1589,12 +1589,12 @@
|
|||
"%(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>sichert nicht deine Schlüssel</b>, aber du hast eine vorhandene Sicherung, die du wiederherstellen und in Zukunft hinzufügen kannst.",
|
||||
"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 deine Schlüssel nicht</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.": "Integrationsmanaager erhalten Konfigurationsdaten und können Widgets modifizieren, Raumeinladungen verschicken und in deinem Namen Einflusslevel setzen.",
|
||||
"Integration Managers receive configuration data, and can modify widgets, send room invites, and set power levels on your behalf.": "Integrationsmanager erhalten Konfigurationsdaten und können Widgets modifizieren, Raumeinladungen verschicken und in deinem Namen Berechtigungslevel 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:",
|
||||
|
@ -1643,9 +1643,9 @@
|
|||
"%(name)s is requesting verification": "%(name)s fordert eine Verifizierung an",
|
||||
"Failed to set topic": "Das Festlegen des Themas ist fehlgeschlagen",
|
||||
"Command failed": "Befehl fehlgeschlagen",
|
||||
"Could not find user in room": "Der Benutzer konnte im Raum nicht gefunden werden",
|
||||
"Could not find user in room": "Benutzer:in konnte nicht im Raum gefunden werden",
|
||||
"Click the button below to confirm adding this email address.": "Klicke unten auf die Schaltfläche, um die hinzugefügte E-Mail-Adresse zu bestätigen.",
|
||||
"Confirm adding phone number": "Bestätige hinzugefügte Telefonnummer",
|
||||
"Confirm adding phone number": "Hinzugefügte Telefonnummer bestätigen",
|
||||
"%(senderName)s changed a rule that was banning servers matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s ändert eine Ausschluss-Regel für Server von %(oldGlob)s nach %(newGlob)s wegen %(reason)s",
|
||||
"%(senderName)s updated a ban rule that was matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s erneuert eine Ausschluss-Regel von %(oldGlob)s nach %(newGlob)s wegen %(reason)s",
|
||||
"Not Trusted": "Nicht vertraut",
|
||||
|
@ -1679,8 +1679,8 @@
|
|||
"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.",
|
||||
"Click the button below to confirm deleting these sessions.|other": "Klicke den Knopf, um das Löschen dieser Sitzungen zu bestätigen.",
|
||||
"Click the button below to confirm deleting these sessions.|one": "Klicke den Knopf, um das Löschen dieser Sitzung zu bestätigen.",
|
||||
"Clear all data in this session?": "Alle Daten dieser Sitzung 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.",
|
||||
|
@ -1702,15 +1702,15 @@
|
|||
"Error adding ignored user/server": "Fehler beim Hinzufügen eines ignorierten Nutzers/Servers",
|
||||
"None": "Keine",
|
||||
"Ban list rules - %(roomName)s": "Verbotslistenregeln - %(roomName)s",
|
||||
"Add users and servers you want to ignore here. Use asterisks to have %(brand)s match any characters. For example, <code>@bot:*</code> would ignore all users that have the name 'bot' on any server.": "Füge hier Benutzer!nnen und Server hinzu, die du ignorieren willst. Verwende Sternchen, damit %(brand)s mit beliebigen Zeichen übereinstimmt. Bspw. würde <code>@bot: *</code> alle Benutzer!nnen ignorieren, die auf einem Server den Namen 'bot' haben.",
|
||||
"Ignoring people is done through ban lists which contain rules for who to ban. Subscribing to a ban list means the users/servers blocked by that list will be hidden from you.": "Ignorieren von Personen erfolgt über Sperrlisten. Wenn eine Sperrliste abonniert wird, werden die von dieser Liste blockierten Benutzer!nnen/Server ausgeblendet.",
|
||||
"Add users and servers you want to ignore here. Use asterisks to have %(brand)s match any characters. For example, <code>@bot:*</code> would ignore all users that have the name 'bot' on any server.": "Füge hier Benutzer!nnen und Server hinzu, die du ignorieren willst. Verwende Sternchen, damit %(brand)s mit beliebigen Zeichen übereinstimmt. Bspw. würde <code>@bot: *</code> alle Benutzer:innen ignorieren, die auf einem Server den Namen 'bot' haben.",
|
||||
"Ignoring people is done through ban lists which contain rules for who to ban. Subscribing to a ban list means the users/servers blocked by that list will be hidden from you.": "Das Ignorieren von Personen erfolgt über Sperrlisten. Wenn eine Sperrliste abonniert wird, werden die von dieser Liste blockierten Benutzer:innen und Server ausgeblendet.",
|
||||
"Personal ban list": "Persönliche Sperrliste",
|
||||
"Your personal ban list holds all the users/servers you personally don't want to see messages from. After ignoring your first user/server, a new room will show up in your room list named 'My Ban List' - stay in this room to keep the ban list in effect.": "Deine persönliche Sperrliste enthält alle Benutzer!nnen/Server, von denen du persönlich keine Nachrichten sehen willst. Nachdem du den ersten Benutzer/Server ignoriert hast, wird in der Raumliste \"Meine Sperrliste\" angezeigt - bleibe in diesem Raum, um die Sperrliste aufrecht zu halten.",
|
||||
"Your personal ban list holds all the users/servers you personally don't want to see messages from. After ignoring your first user/server, a new room will show up in your room list named 'My Ban List' - stay in this room to keep the ban list in effect.": "Deine persönliche Sperrliste enthält alle Benutzer:innen/Server, von denen du persönlich keine Nachrichten sehen willst. Nachdem du den ersten Benutzer/Server ignoriert hast, wird in der Raumliste \"Meine Sperrliste\" angezeigt - bleibe in diesem Raum, um die Sperrliste aufrecht zu halten.",
|
||||
"Server or user ID to ignore": "Zu ignorierende Server- oder Benutzer-ID",
|
||||
"eg: @bot:* or example.org": "z.B. @bot:* oder example.org",
|
||||
"Subscribed lists": "Abonnierte Listen",
|
||||
"Subscribing to a ban list will cause you to join it!": "Eine Verbotsliste abonnieren bedeutet ihr beizutreten!",
|
||||
"If this isn't what you want, please use a different tool to ignore users.": "Wenn dies nicht das ist, was du willst, verwende ein anderes Tool, um Benutzer!nnen zu ignorieren.",
|
||||
"If this isn't what you want, please use a different tool to ignore users.": "Wenn dies nicht das ist, was du willst, verwende ein anderes Tool, um Benutzer:innen zu ignorieren.",
|
||||
"Subscribe": "Abonnieren",
|
||||
"Always show the window menu bar": "Fenstermenüleiste immer anzeigen",
|
||||
"Show tray icon and minimize window to it on close": "Taskleistensymbol anzeigen und Fenster beim Schließen dorthin minimieren",
|
||||
|
@ -1728,7 +1728,7 @@
|
|||
"Verify all your sessions to ensure your account & messages are safe": "Verifiziere alle deine Sitzungen, um dein Konto und deine Nachrichten zu schützen",
|
||||
"Verify your other session using one of the options below.": "Verifiziere deine andere Sitzung mit einer der folgenden Optionen.",
|
||||
"You signed in to a new session without verifying it:": "Du hast dich in einer neuen Sitzung angemeldet ohne sie zu verifizieren:",
|
||||
"Other users may not trust it": "Andere Benutzer vertrauen ihr vielleicht nicht",
|
||||
"Other users may not trust it": "Andere Benutzer:innen vertrauen ihr vielleicht nicht",
|
||||
"Upgrade": "Hochstufen",
|
||||
"Verify the new login accessing your account: %(name)s": "Verifiziere die neue Anmeldung an deinem Konto: %(name)s",
|
||||
"From %(deviceName)s (%(deviceId)s)": "Von %(deviceName)s (%(deviceId)s)",
|
||||
|
@ -1752,8 +1752,8 @@
|
|||
"in account data": "in den Kontodaten",
|
||||
"Homeserver feature support:": "Home-Server-Funktionsunterstützung:",
|
||||
"exists": "existiert",
|
||||
"Delete sessions|other": "Lösche Sitzungen",
|
||||
"Delete sessions|one": "Lösche Sitzung",
|
||||
"Delete sessions|other": "Sitzungen löschen",
|
||||
"Delete sessions|one": "Sitzung löschen",
|
||||
"Individually verify each session used by a user to mark it as trusted, not trusting cross-signed devices.": "Alle Sitzungen einzeln verifizieren, anstatt auch Sitzungen zu vertrauen, die durch Cross-Signing verifiziert sind.",
|
||||
"Securely cache encrypted messages locally for them to appear in search results, using ": "Der Zwischenspeicher für die lokale Suche in verschlüsselten Nachrichten benötigt ",
|
||||
" to store messages from ": " um Nachrichten von ",
|
||||
|
@ -1766,7 +1766,7 @@
|
|||
"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.": "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.",
|
||||
"Invalid theme schema.": "Ungültiges Designschema.",
|
||||
"Error downloading theme information.": "Fehler beim herunterladen des Themas.",
|
||||
"Theme added!": "Design hinzugefügt!",
|
||||
"Custom theme URL": "URL des benutzerdefinierten Designs",
|
||||
|
@ -1781,11 +1781,11 @@
|
|||
"Complete": "Abschließen",
|
||||
"Revoke": "Widerrufen",
|
||||
"Share": "Teilen",
|
||||
"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",
|
||||
"You have not verified this user.": "Du hast diese:n Nutzer:in nicht verifiziert.",
|
||||
"Everyone in this room is verified": "Alle in diesem Raum sind verifiziert",
|
||||
"Mod": "Mod",
|
||||
"Invite only": "Nur auf Einladung",
|
||||
"Scroll to most recent messages": "Springe zur neusten Nachricht",
|
||||
"Scroll to most recent messages": "Zur neusten Nachricht springen",
|
||||
"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.",
|
||||
"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.",
|
||||
|
@ -1841,7 +1841,7 @@
|
|||
"No other published addresses yet, add one below": "Keine anderen öffentlichen Adressen vorhanden, füge unten eine hinzu",
|
||||
"New published address (e.g. #alias:server)": "Neue öffentliche Adresse (z.B. #alias:server)",
|
||||
"Local Addresses": "Lokale Adressen",
|
||||
"Set addresses for this room so users can find this room through your homeserver (%(localDomain)s)": "Erstelle Adressen für diesen Raum, damit andere Benutzer den Raum auf deinem Heimserver (%(localDomain)s) finden können",
|
||||
"Set addresses for this room so users can find this room through your homeserver (%(localDomain)s)": "Erstelle Adressen für diesen Raum, damit andere Nutzer:innen den Raum auf deinem Heimserver (%(localDomain)s) finden können",
|
||||
"Waiting for you to accept on your other session…": "Warte auf die Bestätigung in deiner anderen Sitzung…",
|
||||
"Waiting for %(displayName)s to accept…": "Warte auf die Annahme von %(displayName)s …",
|
||||
"Accepting…": "Annehmen…",
|
||||
|
@ -1861,8 +1861,8 @@
|
|||
"This client does not support end-to-end encryption.": "Diese Anwendung unterstützt keine Ende-zu-Ende-Verschlüsselung.",
|
||||
"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 it’s secure.": "Verifiziere alle Benutzer in verschlüsselten Räumen um die vollständige Sicherheit zu gewährleisten.",
|
||||
"Verify all users in a room to ensure it's secure.": "Verifiziere alle Benutzer:innen in einem Raum um die vollständige Sicherheit zu gewährleisten.",
|
||||
"In encrypted rooms, verify all users to ensure it’s secure.": "Verifiziere alle Benutzer:innen 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!",
|
||||
"Verified": "Verifiziert",
|
||||
"Start verification again from the notification.": "Starte die Verifikation aus der Benachrichtigung erneut.",
|
||||
|
@ -2052,8 +2052,8 @@
|
|||
"Continue with previous account": "Mit vorherigen Konto fortfahren",
|
||||
"<a>Log in</a> to your new account.": "Mit deinem neuen Konto <a>anmelden</a>.",
|
||||
"You can now close this window or <a>log in</a> to your new account.": "Du kannst dieses Fenster jetzt schließen oder dich mit deinem neuen Konto <a>anmelden</a>.",
|
||||
"Your new session is now verified. It has access to your encrypted messages, and other users will see it as trusted.": "Deine neue Sitzung ist nun verifiziert. Sie hat Zugriff auf deine verschlüsselten Nachrichten, und andere Benutzer sehen sie als vertrauenswürdig an.",
|
||||
"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.",
|
||||
"Your new session is now verified. It has access to your encrypted messages, and other users will see it as trusted.": "Deine neue Sitzung ist nun verifiziert. Sie hat Zugriff auf deine verschlüsselten Nachrichten, und andere Benutzer:innen sehen sie als vertrauenswürdig an.",
|
||||
"Your new session is now verified. Other users will see it as trusted.": "Deine neue Sitzung ist nun verifiziert. Andere Benutzer:innen 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>.": "Um ein Matrix-bezogenes Sicherheitsproblem zu melden, lies bitte die Matrix.org <a>Sicherheitsrichtlinien</a>.",
|
||||
|
@ -2074,7 +2074,7 @@
|
|||
"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.",
|
||||
"We couldn't create your DM. Please check the users you want to invite and try again.": "Wir konnten deine Direktnachricht nicht erstellen. Bitte überprüfe den Benutzer, den du einladen möchtest, und versuche es erneut.",
|
||||
"We couldn't invite those users. Please check the users you want to invite and try again.": "Wir konnten diese Benutzer nicht einladen. Bitte überprüfe sie und versuche es erneut.",
|
||||
"We couldn't invite those users. Please check the users you want to invite and try again.": "Wir konnten diese Benutzer:innen nicht einladen. Bitte überprüfe sie und versuche es erneut.",
|
||||
"Start a conversation with someone using their name, username (like <userId/>) or email address.": "Starte eine Unterhaltung mit jemandem indem du seinen Namen, Benutzernamen (z.B. <userId/>) oder E-Mail-Adresse eingibst.",
|
||||
"Invite someone using their name, username (like <userId/>), email address or <a>share this room</a>.": "Lade jemanden mit seinem Namen, Benutzernamen (z.B. <userId/>) oder E-Mail-Adresse ein oder <a>teile diesen Raum</a>.",
|
||||
"Upload completed": "Hochladen abgeschlossen",
|
||||
|
@ -2096,7 +2096,7 @@
|
|||
"Backup could not be decrypted with this recovery key: please verify that you entered the correct recovery key.": "Die Sicherung konnte nicht mit dem angegebenen Wiederherstellungsschlüssel entschlüsselt werden: Bitte überprüfe ob du den richtigen Wiederherstellungsschlüssel eingegeben hast.",
|
||||
"Backup could not be decrypted with this recovery passphrase: please verify that you entered the correct recovery passphrase.": "Die Sicherung konnte mit diesem Wiederherstellungsschlüssel nicht entschlüsselt werden: Bitte überprüfe ob du die richtige Wiederherstellungspassphrase eingegeben hast.",
|
||||
"Nice, strong password!": "Super, ein starkes Passwort!",
|
||||
"Other users can invite you to rooms using your contact details": "Andere Benutzer können dich mit deinen Kontaktdaten in Räume einladen",
|
||||
"Other users can invite you to rooms using your contact details": "Andere Benutzer:innen können dich mit deinen Kontaktdaten in Räume einladen",
|
||||
"Set an email for account recovery. Use email or phone to optionally be discoverable by existing contacts.": "Lege eine E-Mail für die Kontowiederherstellung fest. Verwende optional E-Mail oder Telefon, um von Anderen gefunden zu werden.",
|
||||
"Explore Public Rooms": "Öffentliche Räume erkunden",
|
||||
"If you've joined lots of rooms, this might take a while": "Du bist einer Menge Räumen beigetreten, das kann eine Weile dauern",
|
||||
|
@ -2136,7 +2136,7 @@
|
|||
"Jump to room search": "Springe zur Raumsuche",
|
||||
"Close dialog or context menu": "Schließe Dialog oder Kontextmenü",
|
||||
"Cancel autocomplete": "Deaktiviere Auto-Vervollständigung",
|
||||
"Unable to revoke sharing for email address": "Das Teilen der E-Mail-Adresse kann nicht widerrufen werden",
|
||||
"Unable to revoke sharing for email address": "Dem Teilen der E-Mail-Adresse kann nicht widerrufen werden",
|
||||
"Unable to validate homeserver/identity server": "Heimserver/Identitätsserver nicht validierbar",
|
||||
"Without completing security on this session, it won’t have access to encrypted messages.": "Ohne Abschluss der Sicherungseinrichtung in dieser Sitzung wird sie keinen Zugriff auf verschlüsselte Nachrichten erhalten.",
|
||||
"Disable": "Deaktivieren",
|
||||
|
@ -2174,7 +2174,7 @@
|
|||
"Toggle this dialog": "Diesen Dialog ein-/ausblenden",
|
||||
"Move autocomplete selection up/down": "Auto-Vervollständigung nach oben/unten verschieben",
|
||||
"Opens chat with the given user": "Öffnet einen Chat mit diesem Benutzer",
|
||||
"Sends a message to the given user": "Sendet diesem Benutzer eine Nachricht",
|
||||
"Sends a message to the given user": "Sendet diesem/r Benutzer:in eine Nachricht",
|
||||
"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",
|
||||
|
@ -2202,7 +2202,7 @@
|
|||
"I want to help": "Ich möchte helfen",
|
||||
"Your homeserver has exceeded its user limit.": "Dein Heimserver hat das Benutzerlimit erreicht.",
|
||||
"Your homeserver has exceeded one of its resource limits.": "Dein Heimserver hat eine seiner Ressourcengrenzen erreicht.",
|
||||
"Contact your <a>server admin</a>.": "Kontaktiere deinen <a>Heimserver Administrator</a>.",
|
||||
"Contact your <a>server admin</a>.": "Kontaktiere deine <a>Heimserver-Administration</a>.",
|
||||
"Ok": "Ok",
|
||||
"Set password": "Setze Passwort",
|
||||
"To return to your account in future you need to set a password": "Um dein Konto zukünftig wieder verwenden zu können, setze ein Passwort",
|
||||
|
@ -2225,7 +2225,7 @@
|
|||
"Address (optional)": "Adresse (optional)",
|
||||
"delete the address.": "lösche die Adresse.",
|
||||
"Use a different passphrase?": "Eine andere Passphrase verwenden?",
|
||||
"Your server admin has disabled end-to-end encryption by default in private rooms & Direct Messages.": "Dein Server-Administrator hat die Ende-zu-Ende-Verschlüsselung für private Räume und Direktnachrichten standardmäßig deaktiviert.",
|
||||
"Your server admin has disabled end-to-end encryption by default in private rooms & Direct Messages.": "Deine Server-Administration hat die Ende-zu-Ende-Verschlüsselung für private Räume und Direktnachrichten standardmäßig deaktiviert.",
|
||||
"People": "Personen",
|
||||
"There was an error removing that address. It may no longer exist or a temporary error occurred.": "Beim Entfernen dieser Adresse ist ein Fehler aufgetreten. Vielleicht existiert diese nicht mehr oder es kam zu einem temporären Fehler.",
|
||||
"Set a room address to easily share your room with other people.": "Vergebe eine Raum-Adresse, um diesen Raum auf einfache Weise mit anderen Personen teilen zu können.",
|
||||
|
@ -2333,7 +2333,7 @@
|
|||
"Incoming voice call": "Eingehender Sprachanruf",
|
||||
"Incoming video call": "Eingehender Videoanruf",
|
||||
"Incoming call": "Eingehender Anruf",
|
||||
"There are advanced notifications which are not shown here.": "Erweiterte Benachrichtigungen, werden hier nicht angezeigt.",
|
||||
"There are advanced notifications which are not shown here.": "Erweiterte Benachrichtigungen werden hier nicht angezeigt.",
|
||||
"Are you sure you want to cancel entering passphrase?": "Bist du sicher, dass du die Eingabe der Passphrase abbrechen möchtest?",
|
||||
"Use your account to sign in to the latest version": "Melde dich mit deinem Account in der neuesten Version an",
|
||||
"* %(senderName)s %(emote)s": "* %(senderName)s %(emote)s",
|
||||
|
@ -2378,7 +2378,7 @@
|
|||
"A connection error occurred while trying to contact the server.": "Beim Versuch, den Server zu kontaktieren, ist ein Verbindungsfehler aufgetreten.",
|
||||
"You might have configured them in a client other than %(brand)s. You cannot tune them in %(brand)s but they still apply.": "Du hast sie ggf. in einem anderen Client als %(brand)s konfiguriert. Du kannst sie nicht in %(brand)s verändern, aber sie werden trotzdem angewandt.",
|
||||
"Master private key:": "Privater Hauptschlüssel:",
|
||||
"Set the name of a font installed on your system & %(brand)s will attempt to use it.": "Setze den Schriftnamen auf eine in deinem System installierte Schriftart & %(brand)s werden versuchen sie zu verwenden.",
|
||||
"Set the name of a font installed on your system & %(brand)s will attempt to use it.": "Setze den Schriftnamen auf eine in deinem System installierte Schriftart & %(brand)s wird versuchen, sie zu verwenden.",
|
||||
"Custom Tag": "Benutzerdefinierter Tag",
|
||||
"You’re already signed in and good to go here, but you can also grab the latest versions of the app on all platforms at <a>element.io/get-started</a>.": "Du bist bereits eingeloggt und kannst loslegen. Allerdings kannst du auch die neuesten Versionen der App für alle Plattformen unter <a>element.io/get-started</a> herunterladen.",
|
||||
"You're all caught up.": "Alles gesichtet.",
|
||||
|
@ -2557,8 +2557,8 @@
|
|||
"Places the call in the current room on hold": "Den aktuellen Anruf halten",
|
||||
"Uzbekistan": "Usbekistan",
|
||||
"Send stickers into this room": "Stickers in diesen Raum senden",
|
||||
"Send stickers into your active room": "Stickers in deinen aktiven Raum senden",
|
||||
"Change which room you're viewing": "Ändern welchen Raum du siehst",
|
||||
"Send stickers into your active room": "Sticker in deinen aktiven Raum senden",
|
||||
"Change which room you're viewing": "Ändern, welchen Raum du siehst",
|
||||
"Change the topic of this room": "Das Thema von diesem Raum ändern",
|
||||
"See when the topic changes in this room": "Sehen wenn sich das Thema in diesem Raum ändert",
|
||||
"Change the topic of your active room": "Das Thema von deinem aktiven Raum ändern",
|
||||
|
@ -2574,7 +2574,7 @@
|
|||
"Send stickers to this room as you": "Einen Sticker in diesen Raum als du senden",
|
||||
"See when a sticker is posted in this room": "Sehe wenn ein Sticker in diesen Raum gesendet wird",
|
||||
"Send stickers to your active room as you": "Einen Sticker als du in deinen aktiven Raum senden",
|
||||
"See when anyone posts a sticker to your active room": "Sehen wenn jemand einen Sticker in deinen aktiven Raum sendet",
|
||||
"See when anyone posts a sticker to your active room": "Sehen, wenn jemand einen Sticker in deinen aktiven Raum sendet",
|
||||
"with an empty state key": "mit einem leeren Zustandsschlüssel",
|
||||
"with state key %(stateKey)s": "mit Zustandsschlüssel %(stateKey)s",
|
||||
"Send <b>%(eventType)s</b> events as you in this room": "<b>%(eventType)s</b>-Events als du in diesem Raum senden",
|
||||
|
@ -2583,33 +2583,33 @@
|
|||
"See <b>%(eventType)s</b> events posted to your active room": "In deinem aktiven Raum gesendete <b>%(eventType)s</b>-Events anzeigen",
|
||||
"The <b>%(capability)s</b> capability": "Die <b>%(capability)s</b> Fähigkeit",
|
||||
"Send messages as you in this room": "Nachrichten als du in diesem Raum senden",
|
||||
"Send messages as you in your active room": "Eine Nachricht als du in deinem aktiven Raum senden",
|
||||
"See messages posted to this room": "In diesem Raum gesendete Nachrichten anzeigen",
|
||||
"See messages posted to your active room": "In deinem aktiven Raum gesendete Nachrichten anzeigen",
|
||||
"Send text messages as you in this room": "Textnachrichten als du in diesem Raum senden",
|
||||
"Send text messages as you in your active room": "Textnachrichten als du in deinem aktiven Raum senden",
|
||||
"See text messages posted to this room": "In diesem Raum gesendete Textnachrichten anzeigen",
|
||||
"See text messages posted to your active room": "In deinem aktiven Raum gesendete Textnachrichten anzeigen",
|
||||
"Send emotes as you in this room": "Emojis als du in diesem Raum senden",
|
||||
"Send emotes as you in your active room": "Emojis als du in deinem aktiven Raum senden",
|
||||
"Send messages as you in your active room": "Eine Nachricht als du in deinen aktiven Raum senden",
|
||||
"See messages posted to this room": "In diesen Raum gesendete Nachrichten anzeigen",
|
||||
"See messages posted to your active room": "In deinen aktiven Raum gesendete Nachrichten anzeigen",
|
||||
"Send text messages as you in this room": "Textnachrichten als du in diesen Raum senden",
|
||||
"Send text messages as you in your active room": "Textnachrichten als du in deinen aktiven Raum senden",
|
||||
"See text messages posted to this room": "In diesen Raum gesendete Textnachrichten anzeigen",
|
||||
"See text messages posted to your active room": "In deinen aktiven Raum gesendete Textnachrichten anzeigen",
|
||||
"Send emotes as you in this room": "Emojis als du in diesen Raum senden",
|
||||
"Send emotes as you in your active room": "Emojis als du in deinen aktiven Raum senden",
|
||||
"See emotes posted to this room": "In diesem Raum gesendete Emojis anzeigen",
|
||||
"See emotes posted to your active room": "In deinem aktiven Raum gesendete Emojis anzeigen",
|
||||
"See videos posted to your active room": "In deinem aktiven Raum gesendete Videos anzeigen",
|
||||
"See videos posted to this room": "In diesem Raum gesendete Videos anzeigen",
|
||||
"Send images as you in this room": "Bilder als du in diesem Raum senden",
|
||||
"See emotes posted to your active room": "In deinen aktiven Raum gesendete Emojis anzeigen",
|
||||
"See videos posted to your active room": "In deinen aktiven Raum gesendete Videos anzeigen",
|
||||
"See videos posted to this room": "In diesen Raum gesendete Videos anzeigen",
|
||||
"Send images as you in this room": "Bilder als du in diesen Raum senden",
|
||||
"Send images as you in your active room": "Bilder als du in deinem aktiven Raum senden",
|
||||
"See images posted to this room": "In diesem Raum gesendete Bilder anzeigen",
|
||||
"See images posted to your active room": "In deinem aktiven Raum gesendete Bilder anzeigen",
|
||||
"Send videos as you in this room": "Videos als du in diesem Raum senden",
|
||||
"Send videos as you in your active room": "Videos als du in deinem aktiven Raum senden",
|
||||
"Send general files as you in this room": "Allgemeine Dateien als du in diesem Raum senden",
|
||||
"Send general files as you in your active room": "Allgemeine Dateien als du in deinem aktiven Raum senden",
|
||||
"See general files posted to your active room": "Allgemeine in deinem aktiven Raum gesendete Dateien anzeigen",
|
||||
"See general files posted to this room": "Allgemeine in diesem Raum gesendete Dateien anzeigen",
|
||||
"Send <b>%(msgtype)s</b> messages as you in this room": "Sende <b>%(msgtype)s</b> Nachrichten als du in diesem Raum",
|
||||
"Send <b>%(msgtype)s</b> messages as you in your active room": "Sende <b>%(msgtype)s</b> Nachrichten als du in deinem aktiven Raum",
|
||||
"See <b>%(msgtype)s</b> messages posted to this room": "Zeige <b>%(msgtype)s</b> Nachrichten, welche in diesem Raum gesendet worden sind",
|
||||
"See <b>%(msgtype)s</b> messages posted to your active room": "Zeige <b>%(msgtype)s</b> Nachrichten, welche in deinem aktiven Raum gesendet worden sind",
|
||||
"See images posted to this room": "In diesen Raum gesendete Bilder anzeigen",
|
||||
"See images posted to your active room": "In deinen aktiven Raum gesendete Bilder anzeigen",
|
||||
"Send videos as you in this room": "Videos als du in diesen Raum senden",
|
||||
"Send videos as you in your active room": "Videos als du in deinen aktiven Raum senden",
|
||||
"Send general files as you in this room": "Allgemeine Dateien als du in diesen Raum senden",
|
||||
"Send general files as you in your active room": "Allgemeine Dateien als du in deinen aktiven Raum senden",
|
||||
"See general files posted to your active room": "Allgemeine in deinen aktiven Raum gesendete Dateien anzeigen",
|
||||
"See general files posted to this room": "Allgemeine in diesen Raum gesendete Dateien anzeigen",
|
||||
"Send <b>%(msgtype)s</b> messages as you in this room": "Sende <b>%(msgtype)s</b> Nachrichten als du in diesen Raum",
|
||||
"Send <b>%(msgtype)s</b> messages as you in your active room": "Sende <b>%(msgtype)s</b> Nachrichten als du in deinen aktiven Raum",
|
||||
"See <b>%(msgtype)s</b> messages posted to this room": "Zeige <b>%(msgtype)s</b> Nachrichten, welche in diesen Raum gesendet worden sind",
|
||||
"See <b>%(msgtype)s</b> messages posted to your active room": "Zeige <b>%(msgtype)s</b> Nachrichten, welche in deinen aktiven Raum gesendet worden sind",
|
||||
"Don't miss a reply": "Verpasse keine Antwort",
|
||||
"Enable desktop notifications": "Aktiviere Desktopbenachrichtigungen",
|
||||
"Update %(brand)s": "Aktualisiere %(brand)s",
|
||||
|
@ -2619,8 +2619,8 @@
|
|||
"Use Command + Enter to send a message": "Benutze Betriebssystemtaste + Enter um eine Nachricht zu senden",
|
||||
"Use Ctrl + Enter to send a message": "Benutze Strg + Enter um eine Nachricht zu senden",
|
||||
"Call Paused": "Anruf pausiert",
|
||||
"Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(rooms)s rooms.|other": "Verschlüsselte Nachrichten sicher lokal zwischenspeichern um sie in Suchergebnissen finden zu können, benötigt %(size)s um die Nachrichten von den Räumen %(rooms)s zu speichern.",
|
||||
"Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(rooms)s rooms.|one": "Verschlüsselte Nachrichten sicher lokal zwischenspeichern um sie in Suchergebnissen finden zu können, benötigt %(size)s um die Nachrichten vom Raum %(rooms)s zu speichern.",
|
||||
"Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(rooms)s rooms.|other": "Verschlüsselte Nachrichten sicher lokal zwischenspeichern, um sie in Suchergebnissen finden zu können. Es werden %(size)s benötigt, um die Nachrichten von den Räumen %(rooms)s zu speichern.",
|
||||
"Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(rooms)s rooms.|one": "Verschlüsselte Nachrichten sicher lokal zwischenspeichern, um sie in Suchergebnissen finden zu können. Es werden %(size)s benötigt, um die Nachrichten vom Raum %(rooms)s zu speichern.",
|
||||
"Only the two of you are in this conversation, unless either of you invites anyone to join.": "Nur ihr zwei seid in dieser Konversation, außer einer von euch lädt jemanden neues ein.",
|
||||
"This is the beginning of your direct message history with <displayName/>.": "Dies ist der Beginn deiner Direktnachrichtenhistorie mit <displayName/>.",
|
||||
"Topic: %(topic)s (<a>edit</a>)": "Thema: %(topic)s (<a>ändern</a>)",
|
||||
|
@ -2641,7 +2641,7 @@
|
|||
"Please view <existingIssuesLink>existing bugs on Github</existingIssuesLink> first. No match? <newIssueLink>Start a new one</newIssueLink>.": "Bitte wirf einen Blick auf <existingIssuesLink>existierende Bugs auf Github</existingIssuesLink>. Keinen gefunden? <newIssueLink>Erstelle einen neuen</newIssueLink>.",
|
||||
"PRO TIP: If you start a bug, please submit <debugLogsLink>debug logs</debugLogsLink> to help us track down the problem.": "PRO TIPP: Wenn du einen Bug meldest, füge bitte <debugLogsLink>Debug-Logs</debugLogsLink> hinzu um uns zu helfen das Problem zu finden.",
|
||||
"Invite by email": "Via Email einladen",
|
||||
"Start a conversation with someone using their name, email address or username (like <userId/>).": "Beginne eine Konversation mit jemanden unter Benutzung des Namens, Email-Addresse oder Benutzername (siehe <userId/>).",
|
||||
"Start a conversation with someone using their name, email address or username (like <userId/>).": "Beginne eine Konversation mit jemanden unter Benutzung des Namens, der Email-Adresse oder der Matrix-ID (wie <userId/>).",
|
||||
"Invite someone using their name, email address, username (like <userId/>) or <a>share this room</a>.": "Lade jemanden unter Benutzung seines Namens, E-Mailaddresse oder Benutzername (siehe <userId/>) ein, oder <a>teile diesen Raum</a>.",
|
||||
"Approve widget permissions": "Rechte für das Widget genehmigen",
|
||||
"This widget would like to:": "Dieses Widget würde gerne:",
|
||||
|
@ -2963,7 +2963,7 @@
|
|||
"sends fireworks": "sendet Feuerwerk",
|
||||
"Sends the given message with fireworks": "Sendet die gewählte Nachricht mit Feuerwerk",
|
||||
"sends confetti": "sendet Konfetti",
|
||||
"Sends the given message with confetti": "Sendet die gewählte Nachricht ohne Konfetti",
|
||||
"Sends the given message with confetti": "Sendet die gewählte Nachricht mit Konfetti",
|
||||
"Show chat effects": "Chat-Effekte anzeigen",
|
||||
"Prepends ┬──┬ ノ( ゜-゜ノ) to a plain-text message": "Stellt ┬──┬ ノ( ゜-゜ノ) einer Klartextnachricht voran",
|
||||
"Prepends (╯°□°)╯︵ ┻━┻ to a plain-text message": "Stellt (╯°□°)╯︵ ┻━┻ einer Klartextnachricht voran",
|
||||
|
@ -2979,7 +2979,7 @@
|
|||
"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 eine:n einzelne:n Nutzer:in ü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",
|
||||
|
@ -3003,7 +3003,7 @@
|
|||
"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",
|
||||
"Change which room, message, or user you're viewing": "Ändere welchen Raum, Nachricht oder Nutzer:in 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.",
|
||||
|
@ -3049,5 +3049,15 @@
|
|||
"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"
|
||||
"Try again": "Erneut versuchen",
|
||||
"Upgrade to pro": "Hochstufen zu Pro",
|
||||
"Minimize dialog": "Dialog minimieren",
|
||||
"Maximize dialog": "Dialog maximieren",
|
||||
"%(hostSignupBrand)s Setup": "%(hostSignupBrand)s-Einrichtung",
|
||||
"You should know": "Du solltest wissen",
|
||||
"Privacy Policy": "Datenschutz-Richtlinie",
|
||||
"Cookie Policy": "Cookie-Richtlinie",
|
||||
"Learn more in our <privacyPolicyLink />, <termsOfServiceLink /> and <cookiePolicyLink />.": "Erfahren mehr in unserer <privacyPolicyLink />, <termsOfServiceLink /> und <cookiePolicyLink />.",
|
||||
"Failed to connect to your homeserver. Please close this dialog and try again.": "Verbindung zum Homeserver fehlgeschlagen. Bitte schließe diesen Dialog and versuche es erneut.",
|
||||
"Abort": "Abbrechen"
|
||||
}
|
||||
|
|
|
@ -777,6 +777,7 @@
|
|||
"%(senderName)s: %(reaction)s": "%(senderName)s: %(reaction)s",
|
||||
"%(senderName)s: %(stickerName)s": "%(senderName)s: %(stickerName)s",
|
||||
"Change notification settings": "Change notification settings",
|
||||
"Spaces prototype. Incompatible with Communities, Communities v2 and Custom Tags. Requires compatible homeserver for some features.": "Spaces prototype. Incompatible with Communities, Communities v2 and Custom Tags. Requires compatible homeserver for some features.",
|
||||
"Render LaTeX maths in messages": "Render LaTeX maths in messages",
|
||||
"Communities v2 prototypes. Requires compatible homeserver. Highly experimental - use with caution.": "Communities v2 prototypes. Requires compatible homeserver. Highly experimental - use with caution.",
|
||||
"New spinner design": "New spinner design",
|
||||
|
@ -844,8 +845,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",
|
||||
|
@ -1164,12 +1164,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",
|
||||
|
@ -1419,9 +1417,6 @@
|
|||
"Filter room members": "Filter room members",
|
||||
"%(userName)s (power %(powerLevelNumber)s)": "%(userName)s (power %(powerLevelNumber)s)",
|
||||
"Send message": "Send message",
|
||||
"Voice call": "Voice call",
|
||||
"Video call": "Video call",
|
||||
"Hangup": "Hangup",
|
||||
"Emoji picker": "Emoji picker",
|
||||
"Upload file": "Upload file",
|
||||
"Send an encrypted reply…": "Send an encrypted reply…",
|
||||
|
@ -1479,6 +1474,8 @@
|
|||
"Hide Widgets": "Hide Widgets",
|
||||
"Show Widgets": "Show Widgets",
|
||||
"Search": "Search",
|
||||
"Voice call": "Voice call",
|
||||
"Video call": "Video call",
|
||||
"Start a Conversation": "Start a Conversation",
|
||||
"Open dial pad": "Open dial pad",
|
||||
"Invites": "Invites",
|
||||
|
@ -1937,7 +1934,6 @@
|
|||
"Please provide a room address": "Please provide a room address",
|
||||
"This address is available to use": "This address is available to use",
|
||||
"This address is already in use": "This address is already in use",
|
||||
"Room directory": "Room directory",
|
||||
"Server Options": "Server Options",
|
||||
"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.": "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.",
|
||||
"Join millions for free on the largest public server": "Join millions for free on the largest public server",
|
||||
|
@ -2072,6 +2068,26 @@
|
|||
"Verification Requests": "Verification Requests",
|
||||
"Active Widgets": "Active Widgets",
|
||||
"There was an error finding this widget.": "There was an error finding this widget.",
|
||||
"Settings Explorer": "Settings Explorer",
|
||||
"Failed to save settings": "Failed to save settings",
|
||||
"Setting ID": "Setting ID",
|
||||
"Value": "Value",
|
||||
"Value in this room": "Value in this room",
|
||||
"Setting:": "Setting:",
|
||||
"Caution:": "Caution:",
|
||||
"This UI does NOT check the types of the values. Use at your own risk.": "This UI does NOT check the types of the values. Use at your own risk.",
|
||||
"Setting definition:": "Setting definition:",
|
||||
"Level": "Level",
|
||||
"Settable at global": "Settable at global",
|
||||
"Settable at room": "Settable at room",
|
||||
"Values at explicit levels": "Values at explicit levels",
|
||||
"Values at explicit levels in this room": "Values at explicit levels in this room",
|
||||
"Save setting values": "Save setting values",
|
||||
"Value:": "Value:",
|
||||
"Value in this room:": "Value in this room:",
|
||||
"Values at explicit levels:": "Values at explicit levels:",
|
||||
"Values at explicit levels in this room:": "Values at explicit levels in this room:",
|
||||
"Edit Values": "Edit Values",
|
||||
"Toolbox": "Toolbox",
|
||||
"Developer Tools": "Developer Tools",
|
||||
"There was an error updating your community. The server is unable to process your request.": "There was an error updating your community. The server is unable to process your request.",
|
||||
|
@ -2451,7 +2467,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 pro": "Upgrade to pro",
|
||||
"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",
|
||||
|
|
|
@ -370,10 +370,10 @@
|
|||
"%(severalUsers)sjoined and left %(count)s times|one": "%(severalUsers)saliĝis kaj foriris",
|
||||
"%(oneUser)sjoined and left %(count)s times|other": "%(oneUser)s%(count)s-foje aliĝis kaj foriris",
|
||||
"%(oneUser)sjoined and left %(count)s times|one": "%(oneUser)saliĝis kaj foriris",
|
||||
"%(severalUsers)sleft and rejoined %(count)s times|other": "%(severalUsers)s%(count)s-foje foriris kaj realiĝis",
|
||||
"%(severalUsers)sleft and rejoined %(count)s times|one": "%(severalUsers)sforiris kaj realiĝis",
|
||||
"%(oneUser)sleft and rejoined %(count)s times|other": "%(oneUser)s%(count)s-foje foriris kaj realiĝis",
|
||||
"%(oneUser)sleft and rejoined %(count)s times|one": "%(oneUser)sforiris kaj realiĝis",
|
||||
"%(severalUsers)sleft and rejoined %(count)s times|other": "%(severalUsers)s%(count)s-foje foriris kaj re-aliĝis",
|
||||
"%(severalUsers)sleft and rejoined %(count)s times|one": "%(severalUsers)s foriris kaj re-aliĝis",
|
||||
"%(oneUser)sleft and rejoined %(count)s times|other": "%(oneUser)s %(count)s-foje foriris kaj re-aliĝis",
|
||||
"%(oneUser)sleft and rejoined %(count)s times|one": "%(oneUser)s foriris kaj re-aliĝis",
|
||||
"%(severalUsers)srejected their invitations %(count)s times|other": "%(severalUsers)s%(count)s-foje rifuzis inviton",
|
||||
"%(severalUsers)srejected their invitations %(count)s times|one": "%(severalUsers)srifuzis inviton",
|
||||
"%(oneUser)srejected their invitation %(count)s times|other": "%(oneUser)s%(count)s-foje rifuzis inviton",
|
||||
|
@ -1081,10 +1081,10 @@
|
|||
"Account management": "Administrado de kontoj",
|
||||
"This event could not be displayed": "Ĉi tiu okazo ne povis montriĝi",
|
||||
"Please install <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, or <safariLink>Safari</safariLink> for the best experience.": "Bonvolu instali foliumilon <chromeLink>Chrome</chromeLink>, <firefoxLink>Firefox</firefoxLink>, aŭ <safariLink>Safari</safariLink>, por la plej bona sperto.",
|
||||
"You are an administrator of this community. You will not be able to rejoin without an invite from another administrator.": "Vi estas administranto de tiu ĉi komunumo. Sen invito de alia administranto vi ne povos realiĝi.",
|
||||
"You are an administrator of this community. You will not be able to rejoin without an invite from another administrator.": "Vi estas administranto de tiu ĉi komunumo. Sen invito de alia administranto vi ne povos re-aliĝi.",
|
||||
"Changes made to your community <bold1>name</bold1> and <bold2>avatar</bold2> might not be seen by other users for up to 30 minutes.": "Ŝanĝoj al viaj komunumaj <bold1>nomo</bold1> kaj <bold2>profilbildo</bold2> eble ne montriĝos al aliaj uzantoj ĝis 30 minutoj.",
|
||||
"Who can join this community?": "Kiu povas aliĝi al tiu ĉi komunumo?",
|
||||
"This room is not public. You will not be able to rejoin without an invite.": "Ĉi tiu ĉambro ne estas publika. Vi ne povos realiĝi sen invito.",
|
||||
"This room is not public. You will not be able to rejoin without an invite.": "Ĉi tiu ĉambro ne estas publika. Vi ne povos re-aliĝi sen invito.",
|
||||
"Can't leave Server Notices room": "Ne eblas eliri el ĉambro « Server Notices »",
|
||||
"Revoke invite": "Nuligi inviton",
|
||||
"Invited by %(sender)s": "Invitita de %(sender)s",
|
||||
|
@ -2859,5 +2859,152 @@
|
|||
"Call failed because webcam or microphone could not be accessed. Check that:": "Voko malsukcesis, ĉar retfilmilo aŭ mikrofono ne povis uziĝi. Kontrolu, ke:",
|
||||
"Unable to access webcam / microphone": "Ne povas aliri retfilmilon / mikrofonon",
|
||||
"Call failed because microphone could not be accessed. Check that a microphone is plugged in and set up correctly.": "Voko malsukcesis, ĉar mikrofono ne estis uzebla. Kontrolu, ĉu mikrofono estas ĝuste konektita kaj agordita.",
|
||||
"Unable to access microphone": "Ne povas aliri mikrofonon"
|
||||
"Unable to access microphone": "Ne povas aliri mikrofonon",
|
||||
"Invite by email": "Inviti per retpoŝto",
|
||||
"Minimize dialog": "Minimumigi interagujon",
|
||||
"Maximize dialog": "Maksimumigi interagujon",
|
||||
"Privacy Policy": "Politiko pri privateco",
|
||||
"Cookie Policy": "Politiko pri kuketoj",
|
||||
"There was an error finding this widget.": "Eraris serĉado de tiu ĉi fenestraĵo.",
|
||||
"Active Widgets": "Aktivaj fenestraĵoj",
|
||||
"Reason (optional)": "Kialo (malnepra)",
|
||||
"Continue with %(provider)s": "Daŭrigi per %(provider)s",
|
||||
"Homeserver": "Hejmservilo",
|
||||
"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.": "Vi povas uzi la proprajn elekteblojn de servilo por saluti aliajn servilojn de Matrix, specifigante la URL-on de alia hejmservilo. Tio ebligas uzi Elementon kun jama konto de Matrix ĉe alia hejmservilo.",
|
||||
"Server Options": "Elektebloj de servilo",
|
||||
"Windows": "Fenestroj",
|
||||
"Screens": "Ekranoj",
|
||||
"Share your screen": "Vidigu vian ekranon",
|
||||
"Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(rooms)s rooms.|one": "Sekure kaŝmemori ĉifritajn mesaĝojn loke por ke ili aperu inter serĉrezultoj, uzante %(size)s por deponi mesaĝojn el %(rooms)s ĉambroj.",
|
||||
"Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(rooms)s rooms.|other": "Sekure kaŝmemori ĉifritajn mesaĝojn loke por ke ili aperu inter serĉrezultoj, uzante %(size)s por deponi mesaĝojn el %(rooms)s ĉambroj.",
|
||||
"Channel: <channelLink/>": "Kanalo: <channelLink/>",
|
||||
"Remain on your screen while running": "Resti sur via ekrano rulante",
|
||||
"Remain on your screen when viewing another room, when running": "Resti sur via ekrano rulante, dum rigardo al alia ĉambro",
|
||||
"Go to Home View": "Iri al ĉefpaĝo",
|
||||
"Search (must be enabled)": "Serĉi (devas esti ŝaltita)",
|
||||
"This session has detected that your Security Phrase and key for Secure Messages have been removed.": "Tiu ĉi salutaĵo trovis, ke viaj Sekureca frazo kaj ŝlosilo por Sekuraj mesaĝoj foriĝis.",
|
||||
"A new Security Phrase and key for Secure Messages have been detected.": "Novaj Sekureca frazo kaj ŝlosilo por Sekuraj mesaĝoj troviĝis.",
|
||||
"Make a copy of your Security Key": "Faru kopion de via Sekureca ŝlosilo",
|
||||
"Confirm your Security Phrase": "Konfirmu vian Sekurecan frazon",
|
||||
"Secure your backup with a Security Phrase": "Sekurigu vian savkopion per Sekureca frazo",
|
||||
"Your Security Key is in your <b>Downloads</b> folder.": "Via Sekureca ŝlosilo estas en via dosierujo kun <b>Elŝutoj</b>.",
|
||||
"Your Security Key has been <b>copied to your clipboard</b>, paste it to:": "Via Sekureca ŝlosilo <b>kopiiĝis al via tondujo</b>, algluu ĝin al:",
|
||||
"Your Security Key": "Via Sekureca ŝlosilo",
|
||||
"Your Security Key is a safety net - you can use it to restore access to your encrypted messages if you forget your Security Phrase.": "Via Sekureca ŝlosilo estas speco de asekuro – vi povas uzi ĝin por rehavi aliron al viaj ĉifritaj mesaĝoj, se vi forgesas vian Sekurecan frazon.",
|
||||
"Repeat your Security Phrase...": "Ripetu vian Sekurecan frazon…",
|
||||
"Please enter your Security Phrase a second time to confirm.": "Bonvolu enigi vian Sekurecan frazon je dua fojo por konfirmi.",
|
||||
"Set up with a Security Key": "Agordi per Sekureca ŝlosilo",
|
||||
"Great! This Security Phrase looks strong enough.": "Bonege! La Sekureca frazo ŝajnas sufiĉe forta.",
|
||||
"We'll store an encrypted copy of your keys on our server. Secure your backup with a Security Phrase.": "Ni konservos ĉifritan kopion de viaj ŝlosiloj en nia servilo. Sekurigu vian savkopion per Sekureca frazo.",
|
||||
"Use Security Key": "Uzi Sekurecan ŝlosilon",
|
||||
"Use Security Key or Phrase": "Uzu Sekurecan ŝlosilon aŭ frazon",
|
||||
"Decide where your account is hosted": "Decidu, kie via konto gastiĝos",
|
||||
"Host account on": "Gastigi konton ĉe",
|
||||
"Already have an account? <a>Sign in here</a>": "Ĉu vi jam havas konton? <a>Salutu tie ĉi</a>",
|
||||
"%(ssoButtons)s Or %(usernamePassword)s": "%(ssoButtons)s aŭ %(usernamePassword)s",
|
||||
"Continue with %(ssoButtons)s": "Daŭrigi per %(ssoButtons)s",
|
||||
"That username already exists, please try another.": "Tiu uzantonomo jam ekzistas, bonvolu provi alian.",
|
||||
"New? <a>Create account</a>": "Ĉu vi novas? <a>Kreu konton</a>",
|
||||
"There was a problem communicating with the homeserver, please try again later.": "Eraris komunikado kun la hejmservilo, bonvolu reprovi poste.",
|
||||
"New here? <a>Create an account</a>": "Ĉu vi novas? <a>Kreu konton</a>",
|
||||
"Got an account? <a>Sign in</a>": "Ĉu vi havas konton? <a>Salutu</a>",
|
||||
"Filter rooms and people": "Filtri ĉambrojn kaj personojn",
|
||||
"You have no visible notifications.": "Vi havas neniujn videblajn sciigojn.",
|
||||
"Upgrade to pro": "Gradaltigu al profesionala versio",
|
||||
"Now, let's help you get started": "Nun, ni helpos al vi komenci",
|
||||
"Welcome %(name)s": "Bonvenu, %(name)s",
|
||||
"Add a photo so people know it's you.": "Aldonu foton, por ke oni vin rekonu.",
|
||||
"Great, that'll help people know it's you": "Bonege, tio helpos al aliuloj scii, ke temas pri vi",
|
||||
"Use email to optionally be discoverable by existing contacts.": "Uzu retpoŝtadreson por laŭplaĉe esti trovebla de jamaj kontaktoj.",
|
||||
"Use email or phone to optionally be discoverable by existing contacts.": "Uzu retpoŝtadreson aŭ telefonnumeron por laŭplaĉe esti trovebla de jamaj kontaktoj.",
|
||||
"Add an email to be able to reset your password.": "Aldonu retpoŝtadreson por ebligi rehavon de via pasvorto.",
|
||||
"Forgot password?": "Ĉu forgesis pasvorton?",
|
||||
"That phone number doesn't look quite right, please check and try again": "Tiu telefonnumero ne ŝajnas ĝusta, bonvolu kontroli kaj reprovi",
|
||||
"Enter phone number": "Enigu telefonnumeron",
|
||||
"Enter email address": "Enigu retpoŝtadreson",
|
||||
"Something went wrong in confirming your identity. Cancel and try again.": "Io misokazis dum konfirmado de via identeco. Nuligu kaj reprovu.",
|
||||
"Open the link in the email to continue registration.": "Por daŭrigi la registriĝon, malfermu la ligilon senditan en la retletero.",
|
||||
"A confirmation email has been sent to %(emailAddress)s": "Konfirma retletero sendiĝis al %(emailAddress)s",
|
||||
"Hold": "Paŭzigi",
|
||||
"Resume": "Daŭrigi",
|
||||
"If you've forgotten your Security Key you can <button>set up new recovery options</button>": "Se vi forgesis vian Sekurecan ŝlosilon, vi povas <button>agordi novajn elekteblojn de rehavo</button>",
|
||||
"Access your secure message history and set up secure messaging by entering your Security Key.": "Aliru vian historion de sekuraj mesaĝoj kaj agordu sekurajn mesaĝojn per enigo de via Sekureca ŝlosio.",
|
||||
"Not a valid Security Key": "Tio ne estas valida Sekureca ŝlosilo",
|
||||
"This looks like a valid Security Key!": "Tio ĉi ŝajnas esti valida Sekureca ŝlosilo!",
|
||||
"Enter Security Key": "Enigu Sekurecan ŝlosilon",
|
||||
"If you've forgotten your Security Phrase you can <button1>use your Security Key</button1> or <button2>set up new recovery options</button2>": "Se vi forgesis vian Sekurecan frazon, vi povas <button1>uzi vian Sekurecan ŝlosilon</button1> aŭ <button2>agordi novajn elekteblojn de rehavo</button2>",
|
||||
"Access your secure message history and set up secure messaging by entering your Security Phrase.": "Aliru vian historion de sekuraj mesaĝoj kaj agordu sekurigitajn mesaĝojn per enigo de via Sekureca frazo.",
|
||||
"Enter Security Phrase": "Enigu Sekurecan frazon",
|
||||
"Backup could not be decrypted with this Security Phrase: please verify that you entered the correct Security Phrase.": "Ne povis malĉifri savkopion per ĉi tiu Sekureca frazo: bonvolu kontroli, ĉu vi enigis la ĝustan Sekurecan frazon.",
|
||||
"Incorrect Security Phrase": "Malĝusta Sekureca frazo",
|
||||
"Backup could not be decrypted with this Security Key: please verify that you entered the correct Security Key.": "Ne povis malĉifri savkopion per ĉi tiu Sekureca ŝlosilo: bonvolu kontroli, ĉu vi enigis la ĝustan Sekurecan ŝlosilon.",
|
||||
"Security Key mismatch": "Malakordo de Sekureca ŝlosilo",
|
||||
"Unable to access secret storage. Please verify that you entered the correct Security Phrase.": "Ne povas akiri sekretandeponejon. Bonvolu kontroli, ĉu vi enigis la ĝustan Sekurecan frazon.",
|
||||
"Invalid Security Key": "Nevalida Sekureca ŝlosilo",
|
||||
"Wrong Security Key": "Malĝusta Sekureca ŝlosilo",
|
||||
"Remember this": "Memoru ĉi tion",
|
||||
"The widget will verify your user ID, but won't be able to perform actions for you:": "Ĉi tiu fenestraĵo kontrolos vian identigilon de uzanto, sed ne povos fari agojn por vi:",
|
||||
"Allow this widget to verify your identity": "Permesu al ĉi tiu fenestraĵo kontroli vian identecon",
|
||||
"Decline All": "Rifuzi ĉion",
|
||||
"Approve": "Aprobi",
|
||||
"This widget would like to:": "Ĉi tiu fenestraĵo volas:",
|
||||
"Approve widget permissions": "Aprobi rajtojn de fenestraĵo",
|
||||
"About homeservers": "Pri hejmserviloj",
|
||||
"Learn more": "Ekscii plion",
|
||||
"Use your preferred Matrix homeserver if you have one, or host your own.": "Uzu vian preferatan hejmservilon de Matrix se vi havas iun, aŭ gastigu vian propran.",
|
||||
"Other homeserver": "Alia hejmservilo",
|
||||
"We call the places where you can host your account ‘homeservers’.": "La lokojn, kie via konto povas gastiĝi, ni nomas «hejmserviloj».",
|
||||
"Sign into your homeserver": "Salutu vian hejmservilon",
|
||||
"Matrix.org is the biggest public homeserver in the world, so it’s a good place for many.": "Matrix.org estas la plej granda publika hejmservilo en la mondo, kaj estas do bona loko por multaj.",
|
||||
"Specify a homeserver": "Specifu hejmservilon",
|
||||
"%(hostSignupBrand)s Setup": "Agordoj de %(hostSignupBrand)s",
|
||||
"You should know": "Vi sciu",
|
||||
"Messages in this room are end-to-end encrypted. When people join, you can verify them in their profile, just tap on their avatar.": "Mesaĝoj en ĉi tiu ĉambro estas tutvoje ĉifrataj. Kiam oni aliĝas, vi povas kontroli ĝin per ĝia profilo; simple tuŝetu ĝian profilbildon.",
|
||||
"Messages here are end-to-end encrypted. Verify %(displayName)s in their profile - tap on their avatar.": "Mesaĝoj ĉi tie estas tutvoje ĉifritaj. Kontrolu uzanton %(displayName)s per ĝia profilo – tuŝetu ĝian profilbildon.",
|
||||
"Role": "Rolo",
|
||||
"Use the + to make a new room or explore existing ones below": "Uzu la simbolon + por krei novan ĉambron aŭ esplori jam ekzistantajn sube",
|
||||
"Start a new chat": "Komenci novan babilon",
|
||||
"Start a Conversation": "Komenci interparolon",
|
||||
"Recently visited rooms": "Freŝe vizititiaj ĉambroj",
|
||||
"This is the start of <roomName/>.": "Jen la komenco de <roomName/>.",
|
||||
"Add a photo, so people can easily spot your room.": "Aldonu foton, por ke oni facile trovu vian ĉambron.",
|
||||
"%(displayName)s created this room.": "%(displayName)s kreis ĉi tiun ĉambron.",
|
||||
"You created this room.": "Vi kreis ĉi tiun ĉambron.",
|
||||
"<a>Add a topic</a> to help people know what it is about.": "<a>Aldonu temon</a>, por ke oni sciu, pri kio temas.",
|
||||
"Topic: %(topic)s ": "Temo: %(topic)s ",
|
||||
"Topic: %(topic)s (<a>edit</a>)": "Temo: %(topic)s (<a>redakti</a>)",
|
||||
"This is the beginning of your direct message history with <displayName/>.": "Jen la komenco de historio de viaj rektaj mesaĝoj kun <displayName/>.",
|
||||
"Only the two of you are in this conversation, unless either of you invites anyone to join.": "Nur vi du partoprenas ĉi tiun interparolon, se neniu el vi invitos aliulon.",
|
||||
"There was an error looking up the phone number": "Eraris trovado de la telefonnumero",
|
||||
"Unable to look up phone number": "Ne povas trovi telefonnumeron",
|
||||
"sends snowfall": "sendas neĝadon",
|
||||
"Sends the given message with snowfall": "Sendas la mesaĝon kun neĝado",
|
||||
"sends fireworks": "sendas artfajraĵon",
|
||||
"Sends the given message with fireworks": "Sendas la mesaĝon kun artfajraĵo",
|
||||
"sends confetti": "sendas konfetojn",
|
||||
"Sends the given message with confetti": "Sendas la mesaĝon kun konfetoj",
|
||||
"Show chat effects": "Montri efektojn de babilujo",
|
||||
"Show line numbers in code blocks": "Montri numerojn de linioj en kodujoj",
|
||||
"Expand code blocks by default": "Implicite etendi kodujojn",
|
||||
"Show stickers button": "Butono por montri glumarkojn",
|
||||
"Use app": "Uzu aplikaĵon",
|
||||
"Use app for a better experience": "Uzu aplikaĵon por pli bona sperto",
|
||||
"Don't miss a reply": "Ne preterpasu respondon",
|
||||
"See emotes posted to your active room": "Vidi mienojn afiŝitajn al via aktiva ĉambro",
|
||||
"See emotes posted to this room": "Vidi mienojn afiŝitajn al ĉi tiu ĉambro",
|
||||
"Send emotes as you in your active room": "Sendi mienon kiel vi en via aktiva ĉambro",
|
||||
"Send emotes as you in this room": "Sendi mienon kiel vi en ĉi tiu ĉambro",
|
||||
"See text messages posted to your active room": "Vidi tekstajn mesaĝojn afiŝitajn al via aktiva ĉambro",
|
||||
"See text messages posted to this room": "Vidi tekstajn mesaĝojn afiŝitajn al ĉi tiu ĉambro",
|
||||
"Send text messages as you in your active room": "Sendi tekstajn mesaĝojn kiel vi en via aktiva ĉambro",
|
||||
"Send text messages as you in this room": "Sendi tekstajn mesaĝojn kiel vi en ĉi tiu ĉambro",
|
||||
"Change which room, message, or user you're viewing": "Ŝanĝu, kiun ĉambron, mesaĝon, aŭ uzanton vi rigardas",
|
||||
"%(senderName)s has updated the widget layout": "%(senderName)s ĝisdatigis la aranĝon de la fenestrajoj",
|
||||
"Converts the DM to a room": "Igas la ĉambron nerekta",
|
||||
"Converts the room to a DM": "Igas la ĉambron rekta",
|
||||
"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.": "Via hejmservilo rifuzis vian saluton. Eble tio okazis, ĉar ĝi simple daŭris tro longe. Bonvolu reprovi. Se tio daŭros, bonvolu kontakti la administranton de via hejmservilo.",
|
||||
"Your homeserver was unreachable and was not able to log you in. Please try again. If this continues, please contact your homeserver administrator.": "Via hejmservilo estis neatingebla kaj ne povis vin salutigi. Bonvolu reprovi. Se tio daŭros, bonvolu kontakti la administranton de via hejmservilo.",
|
||||
"Try again": "Reprovu",
|
||||
"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.": "Ni petis la foliumilon memori, kiun hejmservilon vi uzas por saluti, sed domaĝe, via foliumilo forgesis. Iru al la saluta paĝo kaj reprovu.",
|
||||
"We couldn't log you in": "Ni ne povis salutigi vin"
|
||||
}
|
||||
|
|
|
@ -13,8 +13,8 @@
|
|||
"A new password must be entered.": "Debes ingresar una contraseña nueva.",
|
||||
"%(senderName)s answered the call.": "%(senderName)s contestó la llamada.",
|
||||
"An error has occurred.": "Un error ha ocurrido.",
|
||||
"Anyone who knows the room's link, apart from guests": "Cualquier persona que conozca el enlace a esta sala, excepto huéspedes",
|
||||
"Anyone who knows the room's link, including guests": "Cualquier persona que conozca el enlace a esta sala, incluyendo huéspedes",
|
||||
"Anyone who knows the room's link, apart from guests": "Cualquier persona que conozca el enlace a esta sala, pero excluir a la gente sin cuenta",
|
||||
"Anyone who knows the room's link, including guests": "Cualquier persona que conozca el enlace a esta sala, incluyendo gente sin cuenta",
|
||||
"Are you sure?": "¿Estás seguro?",
|
||||
"Are you sure you want to reject the invitation?": "¿Estás seguro que quieres rechazar la invitación?",
|
||||
"Attachment": "Adjunto",
|
||||
|
@ -24,7 +24,7 @@
|
|||
"Banned users": "Usuarios vetados",
|
||||
"Bans user with given id": "Veta al usuario con la ID dada",
|
||||
"Call Timeout": "Tiempo de Espera de Llamada",
|
||||
"Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or <a>enable unsafe scripts</a>.": "No se puede conectar al servidor base a través de HTTP, cuando es necesario un enlace HTTPS en la barra de direcciones de tu navegador. Ya sea usando HTTPS o <a>habilitando los scripts inseguros</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>.": "No se ha podido conectar al servidor base a través de HTTP, cuando es necesario un enlace HTTPS en la barra de direcciones de tu navegador. Ya sea usando HTTPS o <a>activando los scripts inseguros</a>.",
|
||||
"Change Password": "Cambiar contraseña",
|
||||
"%(senderName)s changed their profile picture.": "%(senderName)s cambió su imagen de perfil.",
|
||||
"%(senderName)s changed the power level of %(powerLevelDiffText)s.": "%(senderName)s ha cambiado el nivel de acceso de %(powerLevelDiffText)s.",
|
||||
|
@ -215,7 +215,7 @@
|
|||
"No users have specific privileges in this room": "Ningún usuario tiene permisos específicos en esta sala",
|
||||
"OK": "Vale",
|
||||
"olm version:": "versión de olm:",
|
||||
"Only people who have been invited": "Solo personas que han sido invitadas",
|
||||
"Only people who have been invited": "Solo las personas que hayan sido invitadas",
|
||||
"Operation failed": "Falló la operación",
|
||||
"Password": "Contraseña",
|
||||
"Passwords can't be empty": "Las contraseñas no pueden estar en blanco",
|
||||
|
@ -278,7 +278,7 @@
|
|||
"Unable to verify email address.": "No es posible verificar la dirección de correo electrónico.",
|
||||
"Unban": "Quitar Veto",
|
||||
"Unable to capture screen": "No es posible capturar la pantalla",
|
||||
"Unable to enable Notifications": "No es posible habilitar las Notificaciones",
|
||||
"Unable to enable Notifications": "No se han podido activar las notificaciones",
|
||||
"unknown caller": "Persona que llama desconocida",
|
||||
"Unnamed Room": "Sala sin nombre",
|
||||
"Uploading %(filename)s and %(count)s others|zero": "Subiendo %(filename)s",
|
||||
|
@ -314,14 +314,14 @@
|
|||
"AM": "AM",
|
||||
"PM": "PM",
|
||||
"The maximum permitted number of widgets have already been added to this room.": "La cantidad máxima de widgets permitida ha sido alcanzada en esta sala.",
|
||||
"To use it, just wait for autocomplete results to load and tab through them.": "Para utilizarlo, tan solo espera a que se carguen los resultados de autocompletar y navega entre ellos.",
|
||||
"To use it, just wait for autocomplete results to load and tab through them.": "Para usarlo, tan solo espera a que se carguen los resultados de autocompletar y navega entre ellos.",
|
||||
"%(senderName)s unbanned %(targetName)s.": "%(senderName)s le quitó el veto a %(targetName)s.",
|
||||
"Unmute": "Dejar de silenciar",
|
||||
"%(userName)s (power %(powerLevelNumber)s)": "%(userName)s (nivel de permisos %(powerLevelNumber)s)",
|
||||
"You cannot place VoIP calls in this browser.": "No puedes realizar llamadas VoIP en este navegador.",
|
||||
"You do not have permission to post to this room": "No tienes permiso para publicar en esta sala",
|
||||
"You have <a>disabled</a> URL previews by default.": "Ha <a>deshabilitado</a> la vista previa de URL por defecto.",
|
||||
"You have <a>enabled</a> URL previews by default.": "Ha <a>habilitado</a> vista previa de URL por defecto.",
|
||||
"You have <a>disabled</a> URL previews by default.": "Has <a>desactivado</a> la vista previa de URLs por defecto.",
|
||||
"You have <a>enabled</a> URL previews by default.": "Has <a>activado</a> las vista previa de URLs por defecto.",
|
||||
"You have no visible notifications": "No tiene notificaciones visibles",
|
||||
"You must <a>register</a> to use this functionality": "Usted debe ser un <a>registrar</a> para usar esta funcionalidad",
|
||||
"You need to be able to invite users to do that.": "Debes ser capaz de invitar usuarios para realizar esa acción.",
|
||||
|
@ -374,7 +374,7 @@
|
|||
"Sunday": "Domingo",
|
||||
"Guests can join": "Los invitados se pueden unir",
|
||||
"Failed to add tag %(tagName)s to room": "Error al añadir la etiqueta %(tagName)s a la sala",
|
||||
"Notification targets": "Objetivos de notificación",
|
||||
"Notification targets": "Destinos de notificaciones",
|
||||
"Failed to set direct chat tag": "Error al establecer la etiqueta de conversación directa",
|
||||
"Today": "Hoy",
|
||||
"Files": "Archivos",
|
||||
|
@ -388,7 +388,7 @@
|
|||
"Leave": "Salir",
|
||||
"Uploaded on %(date)s by %(user)s": "Subido el %(date)s por %(user)s",
|
||||
"Send Custom Event": "Enviar evento personalizado",
|
||||
"All notifications are currently disabled for all targets.": "Las notificaciones están deshabilitadas para todos los objetivos.",
|
||||
"All notifications are currently disabled for all targets.": "Las notificaciones están desactivadas para todos los objetivos.",
|
||||
"Failed to send logs: ": "Error al enviar registros: ",
|
||||
"Forget": "Olvidar",
|
||||
"World readable": "Legible por todo el mundo",
|
||||
|
@ -409,19 +409,19 @@
|
|||
"An error occurred whilst saving your email notification preferences.": "Se ha producido un error al guardar las preferencias de notificación por email.",
|
||||
"Explore Room State": "Explorar Estado de la Sala",
|
||||
"Source URL": "URL de Origen",
|
||||
"Messages sent by bot": "Mensajes enviados por bot",
|
||||
"Messages sent by bot": "Mensajes enviados por bots",
|
||||
"Filter results": "Filtrar resultados",
|
||||
"Members": "Miembros",
|
||||
"No update available.": "No hay actualizaciones disponibles.",
|
||||
"Noisy": "Ruidoso",
|
||||
"Noisy": "Sonoro",
|
||||
"Collecting app version information": "Recolectando información de la versión de la aplicación",
|
||||
"Keywords": "Palabras clave",
|
||||
"Enable notifications for this account": "Habilitar notificaciones para esta cuenta",
|
||||
"Enable notifications for this account": "Activar notificaciones para esta cuenta",
|
||||
"Invite to this community": "Invitar a esta comunidad",
|
||||
"Messages containing <span>keywords</span>": "Mensajes que contienen <span>palabras clave</span>",
|
||||
"Error saving email notification preferences": "Error al guardar las preferencias de notificación por email",
|
||||
"Tuesday": "Martes",
|
||||
"Enter keywords separated by a comma:": "Introduzca palabras clave separadas por una coma:",
|
||||
"Enter keywords separated by a comma:": "Escribe palabras clave separadas por una coma:",
|
||||
"Search…": "Buscar…",
|
||||
"You have successfully set a password and an email address!": "¡Has establecido una nueva contraseña y dirección de correo electrónico!",
|
||||
"Remove %(name)s from the directory?": "¿Eliminar a %(name)s del directorio?",
|
||||
|
@ -448,14 +448,14 @@
|
|||
"Send": "Enviar",
|
||||
"Send logs": "Enviar registros",
|
||||
"All messages": "Todos los mensajes",
|
||||
"Call invitation": "Invitación a la llamada",
|
||||
"Call invitation": "Cuando me inviten a una llamada",
|
||||
"Thank you!": "¡Gracias!",
|
||||
"Downloading update...": "Descargando actualizaciones...",
|
||||
"State Key": "Clave de estado",
|
||||
"Failed to send custom event.": "Ha fallado el envio del evento personalizado.",
|
||||
"What's new?": "¿Qué hay de nuevo?",
|
||||
"Notify me for anything else": "Notificarme para cualquier otra cosa",
|
||||
"When I'm invited to a room": "Cuando soy invitado a una sala",
|
||||
"When I'm invited to a room": "Cuando me inviten a una sala",
|
||||
"Can't update user notification settings": "No se puede actualizar los ajustes de notificaciones del usuario",
|
||||
"Notify for all other messages/rooms": "Notificar para todos los demás mensajes/salas",
|
||||
"Unable to look up room ID from server": "No se puede buscar el ID de la sala desde el servidor",
|
||||
|
@ -469,7 +469,7 @@
|
|||
"Reply": "Responder",
|
||||
"Show message in desktop notification": "Mostrar mensaje en la notificación del escritorio",
|
||||
"Debug logs contain application usage data including your username, the IDs or aliases of the rooms or groups you have visited and the usernames of other users. They do not contain messages.": "Los registros de depuración contienen datos de uso de la aplicación como nombre de usuario, ID o alias de las salas o grupos que hayas visitado (y nombres de usuario de otros usuarios). No contienen mensajes.",
|
||||
"Unhide Preview": "Mostrar Vista Previa",
|
||||
"Unhide Preview": "Mostrar vista previa",
|
||||
"Unable to join network": "No se puede unir a la red",
|
||||
"Sorry, your browser is <b>not</b> able to run %(brand)s.": "¡Lo sentimos! Su navegador <b>no puede</b> ejecutar %(brand)s.",
|
||||
"Messages in group chats": "Mensajes en conversaciones grupales",
|
||||
|
@ -478,12 +478,12 @@
|
|||
"Low Priority": "Prioridad baja",
|
||||
"%(brand)s does not know how to join a room on this network": "%(brand)s no sabe cómo unirse a una sala en esta red",
|
||||
"Set Password": "Establecer contraseña",
|
||||
"Off": "Desactivado",
|
||||
"Off": "Apagado",
|
||||
"Mentions only": "Solo menciones",
|
||||
"Failed to remove tag %(tagName)s from room": "Error al eliminar la etiqueta %(tagName)s de la sala",
|
||||
"Wednesday": "Miércoles",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "Ahora puedes regresar a tu cuenta después de cerrar tu sesión, e iniciar sesión en otros dispositivos.",
|
||||
"Enable email notifications": "Habilitar notificaciones por email",
|
||||
"Enable email notifications": "Activar notificaciones por correo",
|
||||
"Event Type": "Tipo de Evento",
|
||||
"No rooms to show": "No hay salas para mostrar",
|
||||
"Download this file": "Descargar este archivo",
|
||||
|
@ -493,7 +493,7 @@
|
|||
"Developer Tools": "Herramientas de desarrollo",
|
||||
"View Source": "Ver fuente",
|
||||
"Event Content": "Contenido del Evento",
|
||||
"Unable to fetch notification target list": "No se puede obtener la lista de objetivos de notificación",
|
||||
"Unable to fetch notification target list": "No se puede obtener la lista de destinos de notificación",
|
||||
"Quote": "Citar",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "En su navegador actual, la apariencia y comportamiento de la aplicación puede ser completamente incorrecta, y algunas de las características podrían no funcionar. Si aún desea probarlo puede continuar, pero ¡no podremos ofrecer soporte por cualquier problema que pudiese tener!",
|
||||
"Checking for an update...": "Comprobando actualizaciones...",
|
||||
|
@ -540,8 +540,8 @@
|
|||
"Automatically replace plain text Emoji": "Reemplazar automáticamente texto por Emojis",
|
||||
"Mirror local video feed": "Clonar transmisión de video local",
|
||||
"Send analytics data": "Enviar datos de análisis de estadísticas",
|
||||
"Enable inline URL previews by default": "Habilitar vistas previas de URL en línea por defecto",
|
||||
"Enable URL previews for this room (only affects you)": "Activar vista previa de URL en esta sala (sólo le afecta a ud.)",
|
||||
"Enable inline URL previews by default": "Activar vistas previas de URLs en línea por defecto",
|
||||
"Enable URL previews for this room (only affects you)": "Activar vista previa de URL en esta sala (te afecta a ti)",
|
||||
"Enable URL previews by default for participants in this room": "Activar vista previa de URL por defecto para los participantes en esta sala",
|
||||
"Enable widget screenshots on supported widgets": "Activar capturas de pantalla de widget en los widgets soportados",
|
||||
"Drop file here to upload": "Soltar aquí el fichero a subir",
|
||||
|
@ -593,21 +593,21 @@
|
|||
"Members only (since the point in time of selecting this option)": "Solo miembros (desde el momento en que se selecciona esta opción)",
|
||||
"Members only (since they were invited)": "Solo miembros (desde que fueron invitados)",
|
||||
"Members only (since they joined)": "Solo miembros (desde que se unieron)",
|
||||
"You don't currently have any stickerpacks enabled": "Actualmente no tienes ningún paquete de pegatinas habilitado",
|
||||
"You don't currently have any stickerpacks enabled": "Actualmente no tienes ningún paquete de pegatinas activado",
|
||||
"Stickerpack": "Paquete de pegatinas",
|
||||
"Hide Stickers": "Ocultar Pegatinas",
|
||||
"Show Stickers": "Mostrar Pegatinas",
|
||||
"Invalid community ID": "ID de comunidad inválida",
|
||||
"'%(groupId)s' is not a valid community ID": "'%(groupId)s' no es una ID de comunidad válida",
|
||||
"Flair": "Insignia",
|
||||
"Showing flair for these communities:": "Mostrar insignias de estas comunidades:",
|
||||
"Showing flair for these communities:": "Mostrar insignias de las siguientes comunidades:",
|
||||
"This room is not showing flair for any communities": "Esta sala no está mostrando insignias para ninguna comunidad",
|
||||
"New community ID (e.g. +foo:%(localDomain)s)": "Nueva ID de comunidad (ej. +foo:%(localDomain)s)",
|
||||
"URL previews are enabled by default for participants in this room.": "La vista previa de URL se activa por defecto en los participantes de esta sala.",
|
||||
"URL previews are disabled by default for participants in this room.": "La vista previa se desactiva por defecto para los participantes de esta sala.",
|
||||
"In encrypted rooms, like this one, URL previews are disabled by default to ensure that your homeserver (where the previews are generated) cannot gather information about links you see in this room.": "En salas cifradas como ésta, la vista previa de las URL se desactiva por defecto para asegurar que el servidor base (donde se generan) no puede recopilar información de los enlaces que veas en esta sala.",
|
||||
"URL Previews": "Vista previa de URL",
|
||||
"When someone puts a URL in their message, a URL preview can be shown to give more information about that link such as the title, description, and an image from the website.": "Cuando alguien pone una URL en su mensaje, una vista previa se mostrará para ofrecer información sobre el enlace, tal como título, descripción, y una imagen del sitio Web.",
|
||||
"When someone puts a URL in their message, a URL preview can be shown to give more information about that link such as the title, description, and an image from the website.": "Cuando alguien incluye una URL en su mensaje, se mostrará una vista previa para ofrecer información sobre el enlace, que incluirá el título, descripción, y una imagen del sitio web.",
|
||||
"Error decrypting audio": "Error al descifrar el sonido",
|
||||
"Error decrypting image": "Error al descifrar imagen",
|
||||
"Error decrypting video": "Error al descifrar video",
|
||||
|
@ -927,14 +927,14 @@
|
|||
"Custom user status messages": "Mensajes de estado de usuario personalizados",
|
||||
"Group & filter rooms by custom tags (refresh to apply changes)": "Agrupa y filtra salas por etiquetas personalizadas (refresca para aplicar cambios)",
|
||||
"Render simple counters in room header": "Muestra contadores simples en la cabecera de la sala",
|
||||
"Enable Emoji suggestions while typing": "Habilitar sugerencia de Emojis mientras se teclea",
|
||||
"Enable Emoji suggestions while typing": "Activar sugerencias de emojis al escribir",
|
||||
"Show a placeholder for removed messages": "Mostrar una marca para los mensaje borrados",
|
||||
"Show join/leave messages (invites/kicks/bans unaffected)": "Mostrar mensajes de entrada/salida (no afecta a invitaciones/expulsiones/baneos)",
|
||||
"Show avatar changes": "Mostrar cambios de avatar",
|
||||
"Show display name changes": "Muestra cambios en los nombres",
|
||||
"Show a reminder to enable Secure Message Recovery in encrypted rooms": "Mostrar un recordatorio para habilitar 'Recuperación Segura de Mensajes' en sala cifradas",
|
||||
"Show avatars in user and room mentions": "Mostrar avatares en menciones a usuarios y salas",
|
||||
"Enable big emoji in chat": "Habilitar emojis grandes en el chat",
|
||||
"Enable big emoji in chat": "Activar emojis grandes en el chat",
|
||||
"Send typing notifications": "Enviar notificaciones de tecleo",
|
||||
"Allow Peer-to-Peer for 1:1 calls": "Permitir conexión de pares en llamadas individuales",
|
||||
"Prompt before sending invites to potentially invalid matrix IDs": "Pedir confirmación antes de enviar invitaciones a IDs de matrix que parezcan inválidas",
|
||||
|
@ -1033,7 +1033,7 @@
|
|||
"Profile picture": "Foto de perfil",
|
||||
"Display Name": "Nombre a mostrar",
|
||||
"Internal room ID:": "ID de Sala Interna:",
|
||||
"Open Devtools": "Abrir Devtools",
|
||||
"Open Devtools": "Abrir devtools",
|
||||
"General": "General",
|
||||
"Room Addresses": "Direcciones de sala",
|
||||
"Set a new account password...": "Establecer una nueva contraseña para la cuenta...",
|
||||
|
@ -1050,11 +1050,11 @@
|
|||
"Preferences": "Opciones",
|
||||
"Room list": "Lista de salas",
|
||||
"Autocomplete delay (ms)": "Retardo autocompletado (ms)",
|
||||
"Roles & Permissions": "Roles & Permisos",
|
||||
"Roles & Permissions": "Roles y permisos",
|
||||
"Changes to who can read history will only apply to future messages in this room. The visibility of existing history will be unchanged.": "Los cambios que se hagan sobre quien puede leer el historial se aplicarán solo a nuevos mensajes en esta sala. La visibilidad del historial actual no cambiará.",
|
||||
"Security & Privacy": "Seguridad y privacidad",
|
||||
"Encryption": "Cifrado",
|
||||
"Once enabled, encryption cannot be disabled.": "Después de activarlo, el cifrado no se puede desactivar.",
|
||||
"Once enabled, encryption cannot be disabled.": "Una vez activado, el cifrado no se puede desactivar.",
|
||||
"Encrypted": "Cifrado",
|
||||
"Ignored users": "Usuarios ignorados",
|
||||
"Bulk options": "Opciones generales",
|
||||
|
@ -1088,7 +1088,7 @@
|
|||
"%(senderDisplayName)s changed the join rule to %(rule)s": "%(senderDisplayName)s cambió la regla para unirse a %(rule)s",
|
||||
"%(senderDisplayName)s changed guest access to %(rule)s": "%(senderDisplayName)s cambió el acceso para invitados a %(rule)s",
|
||||
"Use a longer keyboard pattern with more turns": "Usa un patrón de tecleo largo con más vueltas",
|
||||
"Enable Community Filter Panel": "Habilitar el Panel de Filtro de Comunidad",
|
||||
"Enable Community Filter Panel": "Activar el panel de filtro de comunidad",
|
||||
"Verify this user by confirming the following emoji appear on their screen.": "Verifica este usuario confirmando que los siguientes emojis aparecen en su pantalla.",
|
||||
"Your %(brand)s is misconfigured": "Tu %(brand)s tiene un error de configuración",
|
||||
"Whether or not you're logged in (we don't record your username)": "Hayas o no iniciado sesión (no guardamos tu nombre de usuario)",
|
||||
|
@ -1107,9 +1107,9 @@
|
|||
"%(senderName)s made no change.": "%(senderName)s no hizo ningún cambio.",
|
||||
"Sends the given message coloured as a rainbow": "Envía el mensaje coloreado como un arcoiris",
|
||||
"Sends the given emote coloured as a rainbow": "Envía el emoji coloreado como un arcoiris",
|
||||
"%(senderDisplayName)s enabled flair for %(groups)s in this room.": "%(senderDisplayName)s ha habilitado las insignias para %(groups)s en esta sala.",
|
||||
"%(senderDisplayName)s disabled flair for %(groups)s in this room.": "%(senderDisplayName)s ha deshabilitado las insignias para %(groups)s en esta sala.",
|
||||
"%(senderDisplayName)s enabled flair for %(newGroups)s and disabled flair for %(oldGroups)s in this room.": "%(senderDisplayName)s ha habilitado las insignias para %(newGroups)s y las ha deshabilitado para %(oldGroups)s en esta sala.",
|
||||
"%(senderDisplayName)s enabled flair for %(groups)s in this room.": "%(senderDisplayName)s ha activado las insignias para %(groups)s en esta sala.",
|
||||
"%(senderDisplayName)s disabled flair for %(groups)s in this room.": "%(senderDisplayName)s ha desactivado las insignias para %(groups)s en esta sala.",
|
||||
"%(senderDisplayName)s enabled flair for %(newGroups)s and disabled flair for %(oldGroups)s in this room.": "%(senderDisplayName)s ha activado las insignias para %(newGroups)s y las ha desactivado para %(oldGroups)s en esta sala.",
|
||||
"%(senderName)s revoked the invitation for %(targetDisplayName)s to join the room.": "%(senderName)s ha revocado la invitación para que %(targetDisplayName)s se una a la sala.",
|
||||
"Cannot reach homeserver": "No se puede conectar con el servidor",
|
||||
"Ensure you have a stable internet connection, or get in touch with the server admin": "Asegúrate de tener conexión a internet, o contacta con el administrador del servidor",
|
||||
|
@ -1162,7 +1162,7 @@
|
|||
"%(senderName)s placed a video call. (not supported by this browser)": "%(senderName)s hizo una llamada de vídeo (no soportada por este navegador)",
|
||||
"%(name)s (%(userId)s)": "%(name)s (%(userId)s)",
|
||||
"Try out new ways to ignore people (experimental)": "Pruebe nuevas formas de ignorar a usuarios (experimental)",
|
||||
"Match system theme": "Utilizar el mismo tema que el sistema",
|
||||
"Match system theme": "Usar el mismo tema que el sistema",
|
||||
"Show previews/thumbnails for images": "Mostrar vistas previas para las imágenes",
|
||||
"When rooms are upgraded": "Cuando las salas son actualizadas",
|
||||
"My Ban List": "Mi lista de baneos",
|
||||
|
@ -1236,8 +1236,8 @@
|
|||
"Suggestions": "Sugerencias",
|
||||
"Recently Direct Messaged": "Enviado Mensaje Directo recientemente",
|
||||
"Go": "Ir",
|
||||
"You've previously used %(brand)s on %(host)s with lazy loading of members enabled. In this version lazy loading is disabled. As the local cache is not compatible between these two settings, %(brand)s needs to resync your account.": "Has usado %(brand)s anteriormente en %(host)s con carga diferida de usuarios habilitada. En esta versión la carga diferida está deshabilitada. Como el caché local no es compatible entre estas dos configuraciones, %(brand)s necesita resincronizar tu cuenta.",
|
||||
"If the other version of %(brand)s is still open in another tab, please close it as using %(brand)s on the same host with both lazy loading enabled and disabled simultaneously will cause issues.": "Si la otra versión de %(brand)s esta todavía abierta en otra pestaña, por favor, ciérrala, ya que usar %(brand)s en el mismo host con la opción de carga diferida habilitada y deshabilitada simultáneamente causará problemas.",
|
||||
"You've previously used %(brand)s on %(host)s with lazy loading of members enabled. In this version lazy loading is disabled. As the local cache is not compatible between these two settings, %(brand)s needs to resync your account.": "Has usado %(brand)s anteriormente en %(host)s con carga diferida de usuarios activada. En esta versión la carga diferida está desactivada. Como el caché local no es compatible entre estas dos configuraciones, %(brand)s tiene que resincronizar tu cuenta.",
|
||||
"If the other version of %(brand)s is still open in another tab, please close it as using %(brand)s on the same host with both lazy loading enabled and disabled simultaneously will cause issues.": "Si la otra versión de %(brand)s esta todavía abierta en otra pestaña, por favor, ciérrala, ya que usar %(brand)s en el mismo host con la opción de carga diferida activada y desactivada simultáneamente causará problemas.",
|
||||
"Incompatible local cache": "Caché local incompatible",
|
||||
"Clear cache and resync": "Limpiar la caché y resincronizar",
|
||||
"I don't want my encrypted messages": "No quiero mis mensajes cifrados",
|
||||
|
@ -1348,7 +1348,7 @@
|
|||
"Show typing notifications": "Mostrar notificaciones de escritura",
|
||||
"Never send encrypted messages to unverified sessions from this session": "No enviar nunca mensajes cifrados a sesiones sin verificar desde esta sesión",
|
||||
"Never send encrypted messages to unverified sessions in this room from this session": "No enviar nunca mensajes cifrados a sesiones sin verificar en esta sala desde esta sesión",
|
||||
"Enable message search in encrypted rooms": "Habilitar la búsqueda de mensajes en salas cifradas",
|
||||
"Enable message search in encrypted rooms": "Activar la búsqueda de mensajes en salas cifradas",
|
||||
"How fast should messages be downloaded.": "Con qué rapidez deben ser descargados los mensajes.",
|
||||
"Verify this session by completing one of the following:": "Verifica esta sesión completando uno de los siguientes:",
|
||||
"Scan this unique code": "Escanea este código único",
|
||||
|
@ -1376,7 +1376,7 @@
|
|||
"Sounds": "Sonidos",
|
||||
"Notification sound": "Sonido de notificación",
|
||||
"Set a new custom sound": "Usar un nuevo sonido personalizado",
|
||||
"Browse": "Navegar",
|
||||
"Browse": "Seleccionar",
|
||||
"Change room avatar": "Cambiar avatar de sala",
|
||||
"Change room name": "Cambiar nombre de sala",
|
||||
"Change main address for the room": "Cambiar la dirección principal para la sala",
|
||||
|
@ -1400,7 +1400,7 @@
|
|||
"Notify everyone": "Notificar a todos",
|
||||
"Send %(eventType)s events": "Enviar eventos %(eventType)s",
|
||||
"Select the roles required to change various parts of the room": "Selecciona los roles requeridos para cambiar varias partes de la sala",
|
||||
"Enable encryption?": "¿Habilitar cifrado?",
|
||||
"Enable encryption?": "¿Activar cifrado?",
|
||||
"Your email address hasn't been verified yet": "Tu dirección de email no ha sido verificada",
|
||||
"Verify the link in your inbox": "Verifica el enlace en tu bandeja de entrada",
|
||||
"Complete": "Completar",
|
||||
|
@ -1411,8 +1411,8 @@
|
|||
"Backup key stored: ": "Clave de seguridad almacenada: ",
|
||||
"Your keys are <b>not being backed up from this session</b>.": "<b>No se está haciendo una copia de seguridad de tus claves en esta sesión</b>.",
|
||||
"Clear notifications": "Limpiar notificaciones",
|
||||
"Enable desktop notifications for this session": "Habilitar notificaciones de escritorio para esta sesión",
|
||||
"Enable audible notifications for this session": "Habilitar notificaciones sonoras para esta sesión",
|
||||
"Enable desktop notifications for this session": "Activar notificaciones de escritorio para esta sesión",
|
||||
"Enable audible notifications for this session": "Activar notificaciones sonoras para esta sesión",
|
||||
"Checking server": "Comprobando servidor",
|
||||
"Change identity server": "Cambiar servidor de identidad",
|
||||
"Disconnect from the identity server <current /> and connect to <new /> instead?": "¿Desconectarse del servidor de identidad <current /> y conectarse a <new/>?",
|
||||
|
@ -1525,7 +1525,7 @@
|
|||
"Backup has a <validity>valid</validity> signature from <verify>unverified</verify> session <device></device>": "La copia de seguridad tiene una firma de <validity>válida</validity> de sesión <verify>no verificada</verify> <device></device>",
|
||||
"Backup has an <validity>invalid</validity> signature from <verify>verified</verify> session <device></device>": "La copia de seguridad tiene una firma de <validity>no válida</validity> de sesión <verify>verificada</verify> <device></device>",
|
||||
"Backup has an <validity>invalid</validity> signature from <verify>unverified</verify> session <device></device>": "La copia de seguridad tiene una firma de <validity>no válida</validity> de sesión <verify>no verificada</verify> <device></device>",
|
||||
"<a>Upgrade</a> to your own domain": "<a>Actualizar</a> a su propio dominio",
|
||||
"<a>Upgrade</a> to your own domain": "<a>Contratar</a> el uso de un dominio personalizado",
|
||||
"Identity Server URL must be HTTPS": "La URL del servidor de identidad debe ser tipo HTTPS",
|
||||
"Not a valid Identity Server (status code %(code)s)": "No es un servidor de identidad válido (código de estado %(code)s)",
|
||||
"Could not connect to Identity Server": "No se ha podido conectar al servidor de identidad",
|
||||
|
@ -1559,7 +1559,7 @@
|
|||
"Subscribe": "Suscribir",
|
||||
"Always show the window menu bar": "Siempre mostrar la barra de menú de la ventana",
|
||||
"Show tray icon and minimize window to it on close": "Mostrar el icono en el Área de Notificación y minimizar la ventana al cerrarla",
|
||||
"Composer": "Compositor",
|
||||
"Composer": "Editor",
|
||||
"Timeline": "Línea de tiempo",
|
||||
"Read Marker lifetime (ms)": "Permanencia del marcador de lectura (en ms)",
|
||||
"Read Marker off-screen lifetime (ms)": "Permanencia del marcador de lectura fuera de la pantalla (en ms)",
|
||||
|
@ -1641,12 +1641,12 @@
|
|||
"Please enter a name for the room": "Por favor, introduzca un nombre para la sala",
|
||||
"This room is private, and can only be joined by invitation.": "Esta sala es privada, y sólo se puede acceder a ella por invitación.",
|
||||
"Enable end-to-end encryption": "Activar el cifrado de extremo a extremo",
|
||||
"You can’t disable this later. Bridges & most bots won’t work yet.": "No puedes deshabilitar esto después. Los puentes y la mayoría de los bots no funcionarán todavía.",
|
||||
"You can’t disable this later. Bridges & most bots won’t work yet.": "No puedes desactivar esto después. Los puentes y la mayoría de los bots no funcionarán todavía.",
|
||||
"Create a public room": "Crear una sala pública",
|
||||
"Create a private room": "Crear una sala privada",
|
||||
"Topic (optional)": "Tema (opcional)",
|
||||
"Make this room public": "Convierte esta sala en pública",
|
||||
"Hide advanced": "Ocultar opciones avanzadas",
|
||||
"Hide advanced": "Ocultar ajustes avanzados",
|
||||
"Show advanced": "Mostrar ajustes avanzados",
|
||||
"Block users on other matrix homeservers from joining this room (This setting cannot be changed later!)": "Evitar que usuarios de otros servidores Matrix se unan a esta sala (¡Este ajuste no puede ser cambiada más tarde!)",
|
||||
"Server did not require any authentication": "El servidor no requirió ninguna autenticación",
|
||||
|
@ -1663,10 +1663,10 @@
|
|||
"Verifying this user will mark their session as trusted, and also mark your session as trusted to them.": "Verificar que este usuario marcará su sesión como de confianza, y también que marcará su sesión como de confianza para él.",
|
||||
"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.": "Verifique este dispositivo para marcarlo como confiable. Confiar en este dispositivo le da a usted y a otros usuarios tranquilidad adicional cuando utilizan mensajes cifrados de extremo a extremo.",
|
||||
"Verifying this device will mark it as trusted, and users who have verified with you will trust this device.": "La verificación de este dispositivo lo marcará como de confianza. Los usuarios que te han verificado confiarán en este dispositivo.",
|
||||
"Integrations are disabled": "Las integraciones están deshabilitadas",
|
||||
"Enable 'Manage Integrations' in Settings to do this.": "Habilita 'Gestionar Integraciones' en Ajustes para hacer esto.",
|
||||
"Integrations are disabled": "Las integraciones están desactivadas",
|
||||
"Enable 'Manage Integrations' in Settings to do this.": "Activa «Gestionar integraciones» en ajustes para hacer esto.",
|
||||
"Integrations not allowed": "Integraciones no están permitidas",
|
||||
"Your %(brand)s doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "Su %(brand)s no le permite utilizar un \"Administrador de Integración\" para hacer esto. Por favor, contacte con un administrador.",
|
||||
"Your %(brand)s doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "%(brand)s no utilizar un \"gestor de integración\" para hacer esto. Por favor, contacta con un administrador.",
|
||||
"Failed to invite the following users to chat: %(csvUsers)s": "Error invitando a los siguientes usuarios al chat: %(csvUsers)s",
|
||||
"We couldn't create your DM. Please check the users you want to invite and try again.": "No se ha podido crear el mensaje directo. Por favor, comprueba los usuarios que quieres invitar e inténtalo de nuevo.",
|
||||
"Start a conversation with someone using their name, username (like <userId/>) or email address.": "Iniciar una conversación con alguien usando su nombre, nombre de usuario (como <userId/>) o dirección de correo electrónico.",
|
||||
|
@ -1677,7 +1677,7 @@
|
|||
"a key signature": "un firma de clave",
|
||||
"%(brand)s encountered an error during upload of:": "%(brand)s encontró un error durante la carga de:",
|
||||
"End": "Fin",
|
||||
"Once enabled, encryption for a room cannot be disabled. Messages sent in an encrypted room cannot be seen by the server, only by the participants of the room. Enabling encryption may prevent many bots and bridges from working correctly. <a>Learn more about encryption.</a>": "Una vez habilitado, el cifrado de una sala no puede deshabilitarse. Los mensajes enviados a una sala cifrada no pueden ser vistos por el servidor, sólo lo verán los participantes de la sala. Habilitar el cifrado puede hacer que muchos bots y bridges no funcionen correctamente. <a>Aprende más de cifrado</a>",
|
||||
"Once enabled, encryption for a room cannot be disabled. Messages sent in an encrypted room cannot be seen by the server, only by the participants of the room. Enabling encryption may prevent many bots and bridges from working correctly. <a>Learn more about encryption.</a>": "Una vez activado, el cifrado de una sala no puede desactivarse. Los mensajes enviados a una sala cifrada no pueden ser vistos por el servidor, solo lo verán los participantes de la sala. Activar el cifrado puede hacer que muchos bots y bridges no funcionen correctamente. <a>Más información sobre el cifrado</a>",
|
||||
"Joining room …": "Uniéndose a sala …",
|
||||
"Loading …": "Cargando …",
|
||||
"Rejecting invite …": "Rechazando invitación …",
|
||||
|
@ -1762,7 +1762,7 @@
|
|||
"Published Addresses": "Direcciones publicadas",
|
||||
"Published addresses can be used by anyone on any server to join your room. To publish an address, it needs to be set as a local address first.": "Las direcciones publicadas pueden ser usadas por cualquier usuario en cualquier servidor para unirse a tu salas. Para publicar una dirección, primero hay que establecerla como una dirección local.",
|
||||
"Other published addresses:": "Otras direcciones publicadas:",
|
||||
"No other published addresses yet, add one below": "No tiene direcciones publicadas todavía, agregue una más abajo",
|
||||
"No other published addresses yet, add one below": "Todavía no hay direcciones publicadas, puedes añadir una más abajo",
|
||||
"New published address (e.g. #alias:server)": "Nueva dirección publicada (p.ej.. #alias:server)",
|
||||
"Local Addresses": "Direcciones locales",
|
||||
"Set addresses for this room so users can find this room through your homeserver (%(localDomain)s)": "Establecer las direcciones de esta sala para que los usuarios puedan encontrarla a través de tu servidor base (%(localDomain)s)",
|
||||
|
@ -1925,7 +1925,7 @@
|
|||
"Resend edit": "Reenviar la edición",
|
||||
"Resend %(unsentCount)s reaction(s)": "Reenviar %(unsentCount)s reacción(es)",
|
||||
"Resend removal": "Reenviar la eliminación",
|
||||
"Share Permalink": "Compartir Permalink",
|
||||
"Share Permalink": "Compartir enlace",
|
||||
"Report Content": "Reportar contenido",
|
||||
"Notification settings": "Configuración de notificaciones",
|
||||
"Clear status": "Borrar estado",
|
||||
|
@ -2004,10 +2004,10 @@
|
|||
"%(brand)s failed to get the public room list.": "%(brand)s no logró obtener la lista de salas públicas.",
|
||||
"The homeserver may be unavailable or overloaded.": "Es posible el servidor de base no esté disponible o esté sobrecargado.",
|
||||
"Preview": "Ver",
|
||||
"View": "Vista",
|
||||
"View": "Ver",
|
||||
"Find a room…": "Encuentre una sala…",
|
||||
"Find a room… (e.g. %(exampleRoom)s)": "Encontrar una sala una sala... (ej.: %(exampleRoom)s)",
|
||||
"If you can't find the room you're looking for, ask for an invite or <a>Create a new room</a>.": "Si no puedes encontrar la sala que buscas, pide que te inviten a ella o <a>crea una nueva</a>.",
|
||||
"Find a room… (e.g. %(exampleRoom)s)": "Encuentra una sala... (ej.: %(exampleRoom)s)",
|
||||
"If you can't find the room you're looking for, ask for an invite or <a>Create a new room</a>.": "Si no encuentras la sala que buscas, pide que te inviten a ella o <a>crea una nueva</a>.",
|
||||
"Explore rooms": "Explorar salas",
|
||||
"Jump to first invite.": "Salte a la primera invitación.",
|
||||
"Add room": "Añadir sala",
|
||||
|
@ -2100,10 +2100,10 @@
|
|||
"This session is encrypting history using the new recovery method.": "Esta sesión está cifrando el historial usando el nuevo método de recuperación.",
|
||||
"Change notification settings": "Cambiar los ajustes de notificaciones",
|
||||
"Communities v2 prototypes. Requires compatible homeserver. Highly experimental - use with caution.": "Prototipo de comunidades v2. Requiere un servidor compatible. Altamente experimental - usar con precuación.",
|
||||
"Font size": "Tamaño de la fuente",
|
||||
"Use custom size": "Utilizar un tamaño personalizado",
|
||||
"Font size": "Tamaño del texto",
|
||||
"Use custom size": "Usar un tamaño personalizado",
|
||||
"Use a more compact ‘Modern’ layout": "Usar un diseño más 'moderno' y compacto",
|
||||
"Use a system font": "Utilizar una fuente del sistema",
|
||||
"Use a system font": "Usar una fuente del sistema",
|
||||
"System font name": "Nombre de la fuente",
|
||||
"Enable experimental, compact IRC style layout": "Activar el diseño experimental de IRC compacto",
|
||||
"Uploading logs": "Subiendo registros",
|
||||
|
@ -2123,11 +2123,11 @@
|
|||
"Message layout": "Diseño del mensaje",
|
||||
"Compact": "Compacto",
|
||||
"Modern": "Moderno",
|
||||
"Set the name of a font installed on your system & %(brand)s will attempt to use it.": "Inserta el nombre de la fuente instalada en tu sistema y %(brand)s intentara utilizarla.",
|
||||
"Customise your appearance": "Personaliza tu apariencia",
|
||||
"Set the name of a font installed on your system & %(brand)s will attempt to use it.": "Introduce el nombre de la fuente instalada en tu sistema y %(brand)s intentará utilizarla.",
|
||||
"Customise your appearance": "Personaliza la apariencia",
|
||||
"Appearance Settings only affect this %(brand)s session.": "Cambiar las opciones de apariencia solo afecta esta %(brand)s sesión.",
|
||||
"Please verify the room ID or address and try again.": "Por favor, verifica la ID o dirección de esta sala e inténtalo de nuevo.",
|
||||
"Your server admin has disabled end-to-end encryption by default in private rooms & Direct Messages.": "El administrador del servidor base ha deshabilitado el cifrado de extremo a extremo en salas privadas y mensajes directos.",
|
||||
"Your server admin has disabled end-to-end encryption by default in private rooms & Direct Messages.": "El administrador del servidor base ha desactivado el cifrado de extremo a extremo en salas privadas y mensajes directos.",
|
||||
"To link to this room, please add an address.": "Para vincular esta sala, por favor añade una dirección.",
|
||||
"The authenticity of this encrypted message can't be guaranteed on this device.": "La autenticidad de este mensaje cifrado no puede ser garantizada en este dispositivo.",
|
||||
"No recently visited rooms": "No hay salas visitadas recientemente",
|
||||
|
@ -2144,7 +2144,7 @@
|
|||
"New spinner design": "Nuevo diseño de ruleta",
|
||||
"Show message previews for reactions in DMs": "Mostrar vistas previas de mensajes para reacciones en DM",
|
||||
"Show message previews for reactions in all rooms": "Mostrar vistas previas de mensajes para reacciones en todas las salas",
|
||||
"Enable advanced debugging for the room list": "Habilite la depuración avanzada para la lista de salas",
|
||||
"Enable advanced debugging for the room list": "Activar la depuración avanzada para la lista de salas",
|
||||
"IRC display name width": "Ancho del nombre de visualización de IRC",
|
||||
"Unknown caller": "Llamador desconocido",
|
||||
"Cross-signing is ready for use.": "La firma cruzada está lista para su uso.",
|
||||
|
@ -2220,7 +2220,7 @@
|
|||
"Send %(count)s invites|other": "Enviar %(count)s invitaciones",
|
||||
"Send %(count)s invites|one": "Enviar invitación a %(count)s",
|
||||
"Invite people to join %(communityName)s": "Invita a personas a unirse %(communityName)s",
|
||||
"There was an error creating your community. The name may be taken or the server is unable to process your request.": "Hubo un error al crear tu comunidad. El nombre puede ser tomado o el servidor no puede procesar su solicitud.",
|
||||
"There was an error creating your community. The name may be taken or the server is unable to process your request.": "Ha ocurrido un error al crear la comunidad. El nombre puede que ya esté siendo usado o el servidor no puede procesar la solicitud.",
|
||||
"Community ID: +<localpart />:%(domain)s": "ID de comunidad: +<localpart />:%(domain)s",
|
||||
"Use this when referencing your community to others. The community ID cannot be changed.": "Use esto cuando haga referencia a su comunidad con otras. La identificación de la comunidad no se puede cambiar.",
|
||||
"You can change this later if needed.": "Puede cambiar esto más tarde si es necesario.",
|
||||
|
@ -2235,7 +2235,7 @@
|
|||
"Create a room in %(communityName)s": "Crea una sala en %(communityName)s",
|
||||
"Block anyone not part of %(serverName)s from ever joining this room.": "Bloquea a cualquier persona que no sea parte de %(serverName)s para que no se una a esta sala.",
|
||||
"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.": "Anteriormente usaste una versión más nueva de %(brand)s con esta sesión. Para volver a utilizar esta versión con cifrado de extremo a extremo, deberá cerrar sesión y volver a iniciar sesión.",
|
||||
"There was an error updating your community. The server is unable to process your request.": "Hubo un error al actualizar tu comunidad. El servidor no puede procesar su solicitud.",
|
||||
"There was an error updating your community. The server is unable to process your request.": "Ha ocurrido un error al actualizar tu comunidad. El servidor no puede procesar la solicitud.",
|
||||
"Update community": "Actualizar comunidad",
|
||||
"To continue, use Single Sign On to prove your identity.": "Para continuar, utilice el inicio de sesión único para demostrar su identidad.",
|
||||
"Confirm to continue": "Confirmar para continuar",
|
||||
|
@ -2246,10 +2246,10 @@
|
|||
"Server isn't responding": "El servidor no responde",
|
||||
"Your server isn't responding to some of your requests. Below are some of the most likely reasons.": "Su servidor no responde a algunas de sus solicitudes. A continuación se presentan algunas de las razones más probables.",
|
||||
"The server (%(serverName)s) took too long to respond.": "El servidor (%(serverName)s) tardó demasiado en responder.",
|
||||
"Your firewall or anti-virus is blocking the request.": "Su firewall o antivirus está bloqueando la solicitud.",
|
||||
"A browser extension is preventing the request.": "Una extensión del navegador impide la solicitud.",
|
||||
"Your firewall or anti-virus is blocking the request.": "Tu firewall o antivirus está bloqueando la solicitud.",
|
||||
"A browser extension is preventing the request.": "Una extensión del navegador está impidiendo que se haga la solicitud.",
|
||||
"The server is offline.": "El servidor está desconectado.",
|
||||
"The server has denied your request.": "El servidor ha denegado su solicitud.",
|
||||
"The server has denied your request.": "El servidor ha rechazado la solicitud.",
|
||||
"Your area is experiencing difficulties connecting to the internet.": "Su área está experimentando dificultades para conectarse a Internet.",
|
||||
"A connection error occurred while trying to contact the server.": "Se produjo un error de conexión al intentar contactar con el servidor.",
|
||||
"The server is not configured to indicate what the problem is (CORS).": "El servidor no está configurado para indicar cuál es el problema (CORS).",
|
||||
|
@ -2396,7 +2396,7 @@
|
|||
"If you did this accidentally, you can setup Secure Messages on this session which will re-encrypt this session's message history with a new recovery method.": "Si hizo esto accidentalmente, puede configurar Mensajes seguros en esta sesión que volverá a cifrar el historial de mensajes de esta sesión con un nuevo método de recuperación.",
|
||||
"If you didn't remove the recovery method, an attacker may be trying to access your account. Change your account password and set a new recovery method immediately in Settings.": "Si no eliminó el método de recuperación, es posible que un atacante esté intentando acceder a su cuenta. Cambie la contraseña de su cuenta y configure un nuevo método de recuperación inmediatamente en Configuración.",
|
||||
"If disabled, messages from encrypted rooms won't appear in search results.": "Si está desactivado, los mensajes de las salas cifradas no aparecerán en los resultados de búsqueda.",
|
||||
"Disable": "Inhabilitar",
|
||||
"Disable": "Desactivar",
|
||||
"Not currently indexing messages for any room.": "Actualmente no indexa mensajes para ninguna sala.",
|
||||
"Currently indexing: %(currentRoom)s": "Actualmente indexando: %(currentRoom)s",
|
||||
"%(brand)s is securely caching encrypted messages locally for them to appear in search results:": "%(brand)s está almacenando en caché de forma segura los mensajes cifrados localmente para que aparezcan en los resultados de búsqueda:",
|
||||
|
@ -2419,8 +2419,8 @@
|
|||
"Toggle Quote": "Alternar Entrecomillar",
|
||||
"New line": "Nueva línea",
|
||||
"Navigate recent messages to edit": "Navegar por mensajes recientes para editar",
|
||||
"Jump to start/end of the composer": "Saltar al inicio / final del compositor",
|
||||
"Navigate composer history": "Navegar por el historial del compositor",
|
||||
"Jump to start/end of the composer": "Saltar al inicio o final del editor",
|
||||
"Navigate composer history": "Navegar por el historial del editor",
|
||||
"Cancel replying to a message": "Cancelar la respuesta a un mensaje",
|
||||
"Toggle microphone mute": "Alternar silencio del micrófono",
|
||||
"Toggle video on/off": "Activar/desactivar video",
|
||||
|
|
|
@ -3053,5 +3053,18 @@
|
|||
"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"
|
||||
"Recently visited rooms": "Hiljuti külastatud jututoad",
|
||||
"Continuing temporarily allows the %(hostSignupBrand)s setup process to access your account to fetch verified email addresses. This data is not stored.": "Jätkates ajutistel alustel, on sul võimalik %(hostSignupBrand)s seadistamisega edasi minna ning kontole ligipääsuka laadida verifitseeritud e-posti aadress. Seda teavet ei salvestata.",
|
||||
"Abort": "Katkesta",
|
||||
"Are you sure you wish to abort creation of the host? The process cannot be continued.": "Kas sa oled kindel, et soovid katkestada seoste loomise? Sel juhul me edasi ei jätka.",
|
||||
"Confirm abort of host creation": "Kinnita seoste loomise katkestamine",
|
||||
"Upgrade to pro": "Võta kasutusele tasuline teenus",
|
||||
"Minimize dialog": "Tee aken väikeseks",
|
||||
"Maximize dialog": "Tee aken suureks",
|
||||
"%(hostSignupBrand)s Setup": "%(hostSignupBrand)s seadistus",
|
||||
"You should know": "Sa peaksid teadma",
|
||||
"Privacy Policy": "Privaatsuspoliitika",
|
||||
"Cookie Policy": "Küpsiste kasutamine",
|
||||
"Learn more in our <privacyPolicyLink />, <termsOfServiceLink /> and <cookiePolicyLink />.": "Lisateavet leiad <privacyPolicyLink />, <termsOfServiceLink /> ja <cookiePolicyLink /> lehtedelt.",
|
||||
"Failed to connect to your homeserver. Please close this dialog and try again.": "Ei õnnestunud ühendada koduserveriga. Palun sulge see aken ja proovi uuesti."
|
||||
}
|
||||
|
|
|
@ -411,7 +411,7 @@
|
|||
"Unban this user?": "Poista tämän käyttäjän porttikielto?",
|
||||
"Ban this user?": "Anna porttikielto tälle käyttäjälle?",
|
||||
"Unignore": "Huomioi käyttäjä jälleen",
|
||||
"Ignore": "Jätä käyttäjä huomioimatta",
|
||||
"Ignore": "Sivuuta",
|
||||
"Jump to read receipt": "Hyppää lukukuittaukseen",
|
||||
"Mention": "Mainitse",
|
||||
"Invite": "Kutsu",
|
||||
|
@ -512,7 +512,7 @@
|
|||
"Please note you are logging into the %(hs)s server, not matrix.org.": "Huomaa että olet kirjautumassa palvelimelle %(hs)s, etkä palvelimelle matrix.org.",
|
||||
"Upload an avatar:": "Lataa profiilikuva:",
|
||||
"Deops user with given id": "Poistaa tunnuksen mukaiselta käyttäjältä ylläpito-oikeudet",
|
||||
"Ignores a user, hiding their messages from you": "Jättää käyttäjän huomioimatta, jotta hänen viestejään ei näytetä sinulle",
|
||||
"Ignores a user, hiding their messages from you": "Sivuuttaa käyttäjän, eli hänen viestejään ei näytetä sinulle",
|
||||
"Stops ignoring a user, showing their messages going forward": "Lopettaa käyttäjän huomiotta jättämisen, jotta hänen viestinsä näytetään sinulle",
|
||||
"Notify the whole room": "Ilmoita koko huoneelle",
|
||||
"Room Notification": "Huoneilmoitus",
|
||||
|
@ -521,7 +521,7 @@
|
|||
"%(weekDayName)s %(time)s": "%(weekDayName)s %(time)s",
|
||||
"%(weekDayName)s, %(monthName)s %(day)s %(time)s": "%(weekDayName)s %(day)s. %(monthName)s %(time)s",
|
||||
"%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s": "%(weekDayName)s %(day)s. %(monthName)s %(fullYear)s %(time)s",
|
||||
"Ignored user": "Estetty käyttäjä",
|
||||
"Ignored user": "Sivuutettu käyttäjä",
|
||||
"Unignored user": "Sallittu käyttäjä",
|
||||
"%(userId)s from %(fromPowerLevel)s to %(toPowerLevel)s": "%(userId)s tasolta %(fromPowerLevel)s tasolle %(toPowerLevel)s",
|
||||
"%(senderName)s changed the power level of %(powerLevelDiffText)s.": "%(senderName)s muutti %(powerLevelDiffText)s:n oikeustasoa.",
|
||||
|
@ -1047,7 +1047,7 @@
|
|||
"Bug reporting": "Virheiden raportointi",
|
||||
"If you've submitted a bug via GitHub, debug logs can help us track down the problem. Debug logs contain application usage data including your username, the IDs or aliases of the rooms or groups you have visited and the usernames of other users. They do not contain messages.": "Jos olet ilmoittanut virheestä Githubin kautta, debug-lokit voivat auttaa meitä ongelman jäljittämisessä. Debug-lokit sisältävät sovelluksen käyttödataa sisältäen käyttäjätunnuksen, vierailemiesi huoneiden tai ryhmien tunnukset tai aliakset ja muiden käyttäjien käyttäjätunnukset. Debug-lokit eivät sisällä viestejä.",
|
||||
"Autocomplete delay (ms)": "Automaattisen täydennyksen viive (ms)",
|
||||
"Ignored users": "Hiljennetyt käyttäjät",
|
||||
"Ignored users": "Sivuutetut käyttäjät",
|
||||
"Bulk options": "Massatoimintoasetukset",
|
||||
"Key backup": "Avainvarmuuskopio",
|
||||
"Missing media permissions, click the button below to request.": "Mediaoikeuksia puuttuu. Klikkaa painikkeesta pyytääksesi oikeuksia.",
|
||||
|
@ -1591,7 +1591,7 @@
|
|||
"Use an identity server to invite by email. Click continue to use the default identity server (%(defaultIdentityServerName)s) or manage in Settings.": "Voit käyttää identiteettipalvelinta lähettääksesi sähköpostikutsuja. Klikkaa Jatka käyttääksesi oletuspalvelinta (%(defaultIdentityServerName)s) tai syötä eri palvelin asetuksissa.",
|
||||
"Use an identity server to invite by email. Manage in Settings.": "Voit käyttää identiteettipalvelinta sähköpostikutsujen lähettämiseen.",
|
||||
"Multiple integration managers": "Useita integraatiolähteitä",
|
||||
"Try out new ways to ignore people (experimental)": "Kokeile uusia tapoja käyttäjien huomiotta jättämiseen (kokeellinen)",
|
||||
"Try out new ways to ignore people (experimental)": "Kokeile uusia tapoja käyttäjien sivuuttamiseen (kokeellinen)",
|
||||
"Match system theme": "Käytä järjestelmän teemaa",
|
||||
"Decline (%(counter)s)": "Hylkää (%(counter)s)",
|
||||
"Connecting to integration manager...": "Yhdistetään integraatioiden lähteeseen...",
|
||||
|
@ -1602,25 +1602,25 @@
|
|||
"Manage integrations": "Hallitse integraatioita",
|
||||
"Integration Managers receive configuration data, and can modify widgets, send room invites, and set power levels on your behalf.": "Integraatioiden lähteet vastaanottavat asetusdataa ja voivat muokata sovelmia, lähettää kutsuja huoneeseen ja asettaa oikeustasoja puolestasi.",
|
||||
"Discovery": "Käyttäjien etsintä",
|
||||
"Ignored/Blocked": "Jätetty huomiotta/estetty",
|
||||
"Error adding ignored user/server": "Ongelma huomiotta jätetyn käyttäjän/palvelimen lisäämisessä",
|
||||
"Ignored/Blocked": "Sivuutettu/estetty",
|
||||
"Error adding ignored user/server": "Virhe sivuutetun käyttäjän/palvelimen lisäämisessä",
|
||||
"Error subscribing to list": "Virhe listalle liityttäessä",
|
||||
"Error removing ignored user/server": "Ongelma huomiotta jätetyn käyttäjän/palvelimen poistamisessa",
|
||||
"Error removing ignored user/server": "Virhe sivuutetun käyttäjän/palvelimen poistamisessa",
|
||||
"Error unsubscribing from list": "Virhe listalta poistuttaessa",
|
||||
"Ban list rules - %(roomName)s": "Estolistan säännöt - %(roomName)s",
|
||||
"Server rules": "Palvelinehdot",
|
||||
"User rules": "Käyttäjäehdot",
|
||||
"You have not ignored anyone.": "Et ole jättänyt ketään huomiotta.",
|
||||
"You have not ignored anyone.": "Et ole sivuuttanut ketään.",
|
||||
"You are currently ignoring:": "Jätät tällä hetkellä huomiotta:",
|
||||
"You are not subscribed to any lists": "Et ole liittynyt yhteenkään listaan",
|
||||
"You are currently subscribed to:": "Olet tällä hetkellä liittynyt:",
|
||||
"Ignoring people is done through ban lists which contain rules for who to ban. Subscribing to a ban list means the users/servers blocked by that list will be hidden from you.": "Käyttäjien huomiotta jättäminen tapahtuu estolistojen kautta, joissa on tieto siitä, kenet pitää estää. Estolistalle liittyminen tarkoittaa, että ne käyttäjät/palvelimet, jotka tämä lista estää, eivät näy sinulle.",
|
||||
"Personal ban list": "Henkilökohtainen estolista",
|
||||
"Your personal ban list holds all the users/servers you personally don't want to see messages from. After ignoring your first user/server, a new room will show up in your room list named 'My Ban List' - stay in this room to keep the ban list in effect.": "Henkilökohtainen estolistasi sisältää kaikki käyttäjät/palvelimet, joilta et henkilökohtaisesti halua nähdä viestejä. Sen jälkeen, kun olet estänyt ensimmäisen käyttäjän/palvelimen, huonelistaan ilmestyy uusi huone nimeltä ”Tekemäni estot” (englanniksi ”My Ban List”). Pysy tässä huoneessa, jotta estolistasi pysyy voimassa.",
|
||||
"Server or user ID to ignore": "Huomiotta jätettävä palvelin tai käyttäjätunnus",
|
||||
"Server or user ID to ignore": "Sivuutettava palvelin tai käyttäjätunnus",
|
||||
"Subscribed lists": "Tilatut listat",
|
||||
"Subscribing to a ban list will cause you to join it!": "Estolistan käyttäminen saa sinut liittymään listalle!",
|
||||
"If this isn't what you want, please use a different tool to ignore users.": "Jos tämä ei ole mitä haluat, käytä eri työkalua käyttäjien huomiotta jättämiseen.",
|
||||
"If this isn't what you want, please use a different tool to ignore users.": "Jos et halua tätä, käytä eri työkalua käyttäjien sivuuttamiseen.",
|
||||
"Integration Manager": "Integraatioiden lähde",
|
||||
"Read Marker lifetime (ms)": "Viestin luetuksi merkkaamisen kesto (ms)",
|
||||
"Click the link in the email you received to verify and then click continue again.": "Klikkaa lähettämässämme sähköpostissa olevaa linkkiä vahvistaaksesi tunnuksesi. Klikkaa sen jälkeen tällä sivulla olevaa painiketta ”Jatka”.",
|
||||
|
@ -1636,7 +1636,7 @@
|
|||
"Messages in this room are not end-to-end encrypted.": "Tämän huoneen viestit eivät ole päästä päähän -salattuja.",
|
||||
"Messages in this room are end-to-end encrypted.": "Tämän huoneen viestit ovat päästä päähän -salattuja.",
|
||||
"Verify": "Varmenna",
|
||||
"You have ignored this user, so their message is hidden. <a>Show anyways.</a>": "Olet jättänyt tämän käyttäjän huomiotta, joten hänen viestit ovat piilotettu. <a>Näytä käyttäjän viestit.</a>",
|
||||
"You have ignored this user, so their message is hidden. <a>Show anyways.</a>": "Olet sivuuttanut tämän käyttäjän, joten hänen viestinsä on piilotettu. <a>Näytä silti.</a>",
|
||||
"You verified %(name)s": "Varmensit käyttäjän %(name)s",
|
||||
"You cancelled verifying %(name)s": "Peruutit käyttäjän %(name)s varmennuksen",
|
||||
"%(name)s cancelled verifying": "%(name)s peruutti varmennuksen",
|
||||
|
@ -2054,7 +2054,7 @@
|
|||
"Encrypted by an unverified session": "Salattu varmentamattoman istunnon toimesta",
|
||||
"Encrypted by a deleted session": "Salattu poistetun istunnon toimesta",
|
||||
"Create room": "Luo huone",
|
||||
"Reject & Ignore user": "Hylkää ja jätä käyttäjä huomiotta",
|
||||
"Reject & Ignore user": "Hylkää ja sivuuta käyttäjä",
|
||||
"Start Verification": "Aloita varmennus",
|
||||
"Your messages are secured and only you and the recipient have the unique keys to unlock them.": "Viestisi ovat turvattu, ja vain sinulla ja vastaanottajalla on avaimet viestien lukemiseen.",
|
||||
"In encrypted rooms, your messages are secured and only you and the recipient have the unique keys to unlock them.": "Salausta käyttävissä huoneissa viestisi on turvattu, ja vain sinulla ja vastaanottajilla on yksityiset avaimet viestien lukemiseen.",
|
||||
|
@ -2737,7 +2737,7 @@
|
|||
"Show message previews for reactions in DMs": "Näytä reaktioille esikatselu yksityisviesteissä",
|
||||
"Show message previews for reactions in all rooms": "Näytä reaktioille esikatselu kaikissa huoneissa",
|
||||
"New spinner design": "Uusi kehrääjä tyyli",
|
||||
"Render LaTeX maths in messages": "Suorita LaTeX-matematiikkaa viesteissä",
|
||||
"Render LaTeX maths in messages": "Piirrä LaTeX-matematiikka viesteissä",
|
||||
"* %(senderName)s %(emote)s": "* %(senderName)s %(emote)s",
|
||||
"Downloading logs": "Ladataan lokeja",
|
||||
"Uploading logs": "Lähetetään lokeja",
|
||||
|
@ -2854,5 +2854,21 @@
|
|||
"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"
|
||||
"Try again": "Yritä uudelleen",
|
||||
"Add users and servers you want to ignore here. Use asterisks to have %(brand)s match any characters. For example, <code>@bot:*</code> would ignore all users that have the name 'bot' on any server.": "Lisää tähän käyttäjät ja palvelimet, jotka haluat sivuuttaa. Asteriski täsmää mihin tahansa merkkiin. Esimerkiksi <code>@bot:*</code> sivuuttaa kaikki käyttäjät, joiden nimessä on \"bot\".",
|
||||
"Show stickers button": "Näytä tarrapainike",
|
||||
"Expand code blocks by default": "Laajenna koodilohkot oletuksena",
|
||||
"Show line numbers in code blocks": "Näytä rivinumerot koodilohkoissa",
|
||||
"Recently visited rooms": "Hiljattain vieraillut huoneet",
|
||||
"Screens": "Näytöt",
|
||||
"Share your screen": "Jaa näyttösi",
|
||||
"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.": "Voit kirjautua muille Matrix-palvelimille antamalla eri kotipalvelimen URL-osoitteen palvelinasetuksissa. Näin voit käyttää Elementiä eri kotipalvelimella olevan Matrix-tilin kanssa.",
|
||||
"You might disable this if the room will be used for collaborating with external teams who have their own homeserver. This cannot be changed later.": "Voi olla paikallaan poistaa tämä käytöstä, jos huonetta käyttävät myös ulkoiset tiimit joilla on oma kotipalvelimensa. Asetusta ei voi muuttaa myöhemmin.",
|
||||
"You might enable this if the room will only be used for collaborating with internal teams on your homeserver. This cannot be changed later.": "Voi olla paikallaan ottaa tämä käyttöön, jos huonetta käyttävät vain sisäiset tiimit kotipalvelimellasi. Asetusta ei voi muuttaa myöhemmin.",
|
||||
"Learn more in our <privacyPolicyLink />, <termsOfServiceLink /> and <cookiePolicyLink />.": "Lue lisää: <privacyPolicyLink />, <termsOfServiceLink /> ja <cookiePolicyLink />.",
|
||||
"Failed to connect to your homeserver. Please close this dialog and try again.": "Kotipalvelimeesi yhdistäminen ei onnistunut. Sulje tämä ikkuna ja yritä uudelleen.",
|
||||
"Privacy Policy": "Tietosuojakäytäntö",
|
||||
"Cookie Policy": "Evästekäytäntö",
|
||||
"Recent changes that have not yet been received": "Tuoreet muutokset, joita ei ole vielä otettu vastaan",
|
||||
"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.": "Pyysimme selainta muistamaan kirjautumista varten mitä kotipalvelinta käytät, mutta selain on unohtanut sen. Mene kirjautumissivulle ja yritä uudelleen."
|
||||
}
|
||||
|
|
|
@ -862,7 +862,7 @@
|
|||
"Upgrade this room to version %(version)s": "Mettre à niveau ce salon vers la version %(version)s",
|
||||
"Forces the current outbound group session in an encrypted room to be discarded": "Force la session de groupe sortante actuelle dans un salon chiffré à être rejetée",
|
||||
"Unable to connect to Homeserver. Retrying...": "Impossible de se connecter au serveur d'accueil. Reconnexion...",
|
||||
"%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s à défini l'adresse principale pour ce salon comme %(address)s.",
|
||||
"%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s a défini l'adresse principale pour ce salon comme %(address)s.",
|
||||
"%(senderName)s removed the main address for this room.": "%(senderName)s a supprimé l'adresse principale de ce salon.",
|
||||
"%(brand)s now uses 3-5x less memory, by only loading information about other users when needed. Please wait whilst we resynchronise with the server!": "%(brand)s utilise maintenant 3 à 5 fois moins de mémoire, en ne chargeant les informations des autres utilisateurs que quand elles sont nécessaires. Veuillez patienter pendant que l'on se resynchronise avec le serveur !",
|
||||
"Updating %(brand)s": "Mise à jour de %(brand)s",
|
||||
|
@ -970,7 +970,7 @@
|
|||
"Invite anyway": "Inviter quand même",
|
||||
"Whether or not you're logged in (we don't record your username)": "Si vous êtes connecté ou pas (votre nom d'utilisateur n'est pas enregistré)",
|
||||
"Upgrades a room to a new version": "Met à niveau un salon vers une nouvelle version",
|
||||
"Sets the room name": "Défini le nom du salon",
|
||||
"Sets the room name": "Définit le nom du salon",
|
||||
"%(senderDisplayName)s upgraded this room.": "%(senderDisplayName)s a mis à niveau ce salon.",
|
||||
"%(displayName)s is typing …": "%(displayName)s est en train d'écrire…",
|
||||
"%(names)s and %(count)s others are typing …|other": "%(names)s et %(count)s autres sont en train d'écrire…",
|
||||
|
@ -1085,7 +1085,7 @@
|
|||
"Recovery Method Removed": "Méthode de récupération supprimée",
|
||||
"If you didn't remove the recovery method, an attacker may be trying to access your account. Change your account password and set a new recovery method immediately in Settings.": "Si vous n'avez pas supprimé la méthode de récupération, un attaquant peut être en train d'essayer d'accéder à votre compte. Modifiez le mot de passe de votre compte et configurez une nouvelle méthode de récupération dans les réglages.",
|
||||
"The file '%(fileName)s' exceeds this homeserver's size limit for uploads": "Le fichier \"%(fileName)s\" dépasse la taille limite autorisée par ce serveur pour les téléchargements",
|
||||
"Gets or sets the room topic": "Récupère ou défini le sujet du salon",
|
||||
"Gets or sets the room topic": "Récupère ou définit le sujet du salon",
|
||||
"This room has no topic.": "Ce salon n'a pas de sujet.",
|
||||
"%(senderDisplayName)s made the room public to whoever knows the link.": "%(senderDisplayName)s a rendu le salon public à tous ceux qui en connaissent le lien.",
|
||||
"%(senderDisplayName)s made the room invite only.": "%(senderDisplayName)s a rendu le salon disponible sur invitation seulement.",
|
||||
|
@ -2547,7 +2547,7 @@
|
|||
"Private rooms can be found and joined by invitation only. Public rooms can be found and joined by anyone in this community.": "Les salons privés ne peuvent être trouvés et rejoints seulement par invitation. Les salons publics peut être trouvés et rejoints par n'importe qui dans cette communauté.",
|
||||
"Private rooms can be found and joined by invitation only. Public rooms can be found and joined by anyone.": "Les salons privés ne peuvent être trouvés et rejoints seulement par invitation. Les salons publics peut être trouvés et rejoints par n'importe qui.",
|
||||
"Start a new chat": "Commencer une nouvelle discussion",
|
||||
"Add a photo so people know it's you.": "Ajoutez une photo pour que les gens savent que c'est vous",
|
||||
"Add a photo so people know it's you.": "Ajoutez une photo pour que les gens sachent qu’il s’agit de vous.",
|
||||
"%(ssoButtons)s Or %(usernamePassword)s": "%(ssoButtons)s ou %(usernamePassword)s",
|
||||
"Decide where your account is hosted": "Décidez où votre compte est hébergé",
|
||||
"Go to Home View": "Revenir à la page d'accueil",
|
||||
|
@ -2820,11 +2820,11 @@
|
|||
"British Indian Ocean Territory": "Territoire britannique de l'océan Indien",
|
||||
"Brazil": "Brésil",
|
||||
"Bouvet Island": "Île Bouvet",
|
||||
"Botswana": "",
|
||||
"Botswana": "Botswana",
|
||||
"Bosnia": "Bosnie-Herzegovine",
|
||||
"Bolivia": "",
|
||||
"Bhutan": "",
|
||||
"Bermuda": "",
|
||||
"Bolivia": "Bolivie",
|
||||
"Bhutan": "Bhoutan",
|
||||
"Bermuda": "Bermudes",
|
||||
"with state key %(stateKey)s": "avec la ou les clés d'état %(stateKey)s",
|
||||
"with an empty state key": "avec une clé d'état vide",
|
||||
"See when anyone posts a sticker to your active room": "Voir quand n'importe qui envoye un sticker dans le salon actuel",
|
||||
|
@ -2837,7 +2837,7 @@
|
|||
"See when the topic changes in this room": "Voir quand le sujet change dans ce salon",
|
||||
"See when the topic changes in your active room": "Voir quand le sujet change dans le salon actuel",
|
||||
"Change the name of your active room": "Changer le nom du salon actuel",
|
||||
"See when the name changes in this room": "Traquer quand le nom change dans ce salon",
|
||||
"See when the name changes in this room": "Suivre quand le nom de ce salon change",
|
||||
"Change the name of this room": "Changer le nom de ce salon",
|
||||
"Change the topic of your active room": "Changer le sujet dans le salon actuel",
|
||||
"Change the topic of this room": "Changer le sujet de ce salon",
|
||||
|
@ -2894,7 +2894,7 @@
|
|||
"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 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érifier dans leur profil, tapez simplement 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",
|
||||
|
@ -2935,5 +2935,113 @@
|
|||
"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"
|
||||
"Send general files as you in this room": "Envoie des fichiers en tant que vous dans ce salon",
|
||||
"Search (must be enabled)": "Recherche (si activée)",
|
||||
"This session has detected that your Security Phrase and key for Secure Messages have been removed.": "Cette session a détecté que votre phrase de passe et clé de sécurité pour les messages sécurisés ont été supprimées.",
|
||||
"A new Security Phrase and key for Secure Messages have been detected.": "Une nouvelle phrase de passe et clé pour les messages sécurisés ont été détectées.",
|
||||
"Make a copy of your Security Key": "Faire une copie de votre Clé de Sécurité",
|
||||
"Confirm your Security Phrase": "Confirmez votre phrase de passe",
|
||||
"Secure your backup with a Security Phrase": "Protégez votre sauvegarde avec une Clé de Sécurité",
|
||||
"Your Security Key is in your <b>Downloads</b> folder.": "Votre Clé de Sécurité est dans le répertoire <b>Téléchargements</b>.",
|
||||
"Your Security Key has been <b>copied to your clipboard</b>, paste it to:": "Votre Clé de Sécurité a été <b>copiée dans votre presse-papier</b>, copiez la pour :",
|
||||
"Your Security Key": "Votre Clé de Sécurité",
|
||||
"Your Security Key is a safety net - you can use it to restore access to your encrypted messages if you forget your Security Phrase.": "Votre Clé de Sécurité est un filet de sécurité. Vous pouvez l’utiliser pour retrouver l’accès à vos messages chiffrés si vous oubliez votre phrase de passe.",
|
||||
"Repeat your Security Phrase...": "Répétez votre phrase de passe…",
|
||||
"Please enter your Security Phrase a second time to confirm.": "Merci de saisir votre phrase de passe une seconde fois pour confirmer.",
|
||||
"Set up with a Security Key": "Configurer avec une Clé de Sécurité",
|
||||
"Great! This Security Phrase looks strong enough.": "Super ! Cette phrase de passe a l’air assez solide.",
|
||||
"We'll store an encrypted copy of your keys on our server. Secure your backup with a Security Phrase.": "Nous avons stocké une copie chiffrée de vos clés sur notre serveur. Sécurisez vos sauvegardes avec une phrase de passe.",
|
||||
"Use Security Key": "Utiliser la Clé de Sécurité",
|
||||
"Use Security Key or Phrase": "Utilisez votre Clé de Sécurité ou phrase de passe",
|
||||
"You have no visible notifications.": "Vous n’avez aucune notification visible.",
|
||||
"Upgrade to pro": "Mettre à jour vers pro",
|
||||
"Great, that'll help people know it's you": "Super, ceci aidera des personnes à confirmer qu’il s’agit bien de vous",
|
||||
"<h1>HTML for your community's page</h1>\n<p>\n Use the long description to introduce new members to the community, or distribute\n some important <a href=\"foo\">links</a>\n</p>\n<p>\n You can even add images with Matrix URLs <img src=\"mxc://url\" />\n</p>\n": "<h1>HTML pour votre page de communauté</h1>\n<p>\n Utilisez la description longue pour présenter la communauté aux nouveaux membres\n ou pour diffuser des <a href=\"foo\">liens</a> importants\n</p>\n<p>\n Vous pouvez même ajouter des images avec des URL Matrix <img src=\"mxc://url\" />\n</p>\n",
|
||||
"Use email to optionally be discoverable by existing contacts.": "Utiliser une adresse e-mail pour pouvoir être découvert par des contacts existants.",
|
||||
"Use email or phone to optionally be discoverable by existing contacts.": "Utiliser une adresse e-mail ou un numéro de téléphone pour pouvoir être découvert par des contacts existants.",
|
||||
"Add an email to be able to reset your password.": "Ajouter une adresse e-mail pour pouvoir réinitialiser votre mot de passe.",
|
||||
"Forgot password?": "Mot de passe oublié ?",
|
||||
"That phone number doesn't look quite right, please check and try again": "Ce numéro de téléphone ne semble pas correct, merci de vérifier et réessayer",
|
||||
"Enter email address": "Saisir l’adresse e-mail",
|
||||
"Enter phone number": "Saisir le numéro de téléphone",
|
||||
"Something went wrong in confirming your identity. Cancel and try again.": "Une erreur s’est produite lors de la vérification de votre identité. Annulez et réessayez.",
|
||||
"Open the link in the email to continue registration.": "Ouvrez le lien dans l’e-mail pour poursuivre l’inscription.",
|
||||
"A confirmation email has been sent to %(emailAddress)s": "Un e-mail de confirmation a été envoyé à %(emailAddress)s",
|
||||
"Hold": "Mettre en pause",
|
||||
"Resume": "Reprendre",
|
||||
"If you've forgotten your Security Key you can <button>set up new recovery options</button>": "Si vous avez oublié votre Clé de Sécurité, vous pouvez <button>définir de nouvelles options de récupération</button>",
|
||||
"Access your secure message history and set up secure messaging by entering your Security Key.": "Accédez à votre historique de messages chiffrés et mettez en place la messagerie sécurisée en entrant votre Clé de Sécurité.",
|
||||
"Not a valid Security Key": "Clé de Sécurité invalide",
|
||||
"This looks like a valid Security Key!": "Ça ressemble à une Clé de Sécurité !",
|
||||
"Enter Security Key": "Saisir la clé de sécurité",
|
||||
"If you've forgotten your Security Phrase you can <button1>use your Security Key</button1> or <button2>set up new recovery options</button2>": "Si vous avez oublié votre phrase de passe vous pouvez <button1>utiliser votre Clé de Sécurité</button1> ou <button2>définir de nouvelles options de récupération</button2>",
|
||||
"Access your secure message history and set up secure messaging by entering your Security Phrase.": "Accédez à votre historique de messages chiffrés et mettez en place la messagerie sécurisée en entrant votre phrase de passe.",
|
||||
"Enter Security Phrase": "Saisir la phrase de passe",
|
||||
"Backup could not be decrypted with this Security Phrase: please verify that you entered the correct Security Phrase.": "La sauvegarde n’a pas pu être déchiffrée avec cette phrase de passe : merci de vérifier que vous avez saisi la bonne phrase de passe.",
|
||||
"Incorrect Security Phrase": "Phrase de passe incorrecte",
|
||||
"Backup could not be decrypted with this Security Key: please verify that you entered the correct Security Key.": "La sauvegarde n’a pas pu être déchiffrée avec cette Clé de Sécurité : merci de vérifier que vous avez saisi la bonne Clé de Sécurité.",
|
||||
"Security Key mismatch": "Pas de correspondance entre les Clés de Sécurité",
|
||||
"Unable to access secret storage. Please verify that you entered the correct Security Phrase.": "Impossible d’accéder à l’espace de stockage sécurisé. Merci de vérifier que vous avez saisi la bonne phrase de passe.",
|
||||
"Invalid Security Key": "Clé de Sécurité invalide",
|
||||
"Wrong Security Key": "Mauvaise Clé de Sécurité",
|
||||
"Remember this": "Mémoriser ceci",
|
||||
"The widget will verify your user ID, but won't be able to perform actions for you:": "Ce widget vérifiera votre identifiant d’utilisateur, mais ne pourra pas effectuer des actions en votre nom :",
|
||||
"Allow this widget to verify your identity": "Autoriser ce widget à vérifier votre identité",
|
||||
"Decline All": "Tout refuser",
|
||||
"Approve": "Approuver",
|
||||
"This widget would like to:": "Le widget voudrait :",
|
||||
"Approve widget permissions": "Approuver les permissions du widget",
|
||||
"We recommend you change your password and Security Key in Settings immediately": "Nous vous recommandons de changer votre mot de passe et Clé de Sécurité dans les Paramètres immédiatement",
|
||||
"Minimize dialog": "Réduire la modale",
|
||||
"Maximize dialog": "Maximiser la modale",
|
||||
"%(hostSignupBrand)s Setup": "Configuration de %(hostSignupBrand)s",
|
||||
"You should know": "Vous devriez connaître",
|
||||
"Privacy Policy": "Politique de confidentialité",
|
||||
"Cookie Policy": "Politique de gestion des cookies",
|
||||
"Learn more in our <privacyPolicyLink />, <termsOfServiceLink /> and <cookiePolicyLink />.": "Consultez nos <privacyPolicyLink />, <termsOfServiceLink /> et <cookiePolicyLink />.",
|
||||
"Continuing temporarily allows the %(hostSignupBrand)s setup process to access your account to fetch verified email addresses. This data is not stored.": "Continuer permettra temporairement au processus de configuration de %(hostSignupBrand)s d’accéder à votre compte pour récupérer les adresses email vérifiées. Les données ne sont pas stockées.",
|
||||
"Failed to connect to your homeserver. Please close this dialog and try again.": "Impossible de vous connecter à votre serveur d’accueil. Merci de fermer cette modale et de réessayer.",
|
||||
"Abort": "Annuler",
|
||||
"Are you sure you wish to abort creation of the host? The process cannot be continued.": "Êtes-vous sûr de vouloir annuler la création de cet hôte ? Le process ne pourra pas être repris.",
|
||||
"Confirm abort of host creation": "Confirmer l’annulation de la création de cet hôte",
|
||||
"There was an error finding this widget.": "Erreur lors de la récupération de ce widget.",
|
||||
"Windows": "Windows",
|
||||
"Screens": "Écrans",
|
||||
"Share your screen": "Partager votre écran",
|
||||
"Set my room layout for everyone": "Définir ma disposition de salon pour tout le monde",
|
||||
"Open dial pad": "Ouvrir le pavé de numérotation",
|
||||
"Start a Conversation": "Démarrer une conversation",
|
||||
"Recently visited rooms": "Salons visités récemment",
|
||||
"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.": "Sauvegardez vos clés de chiffrement et les données de votre compte au casoù vous perdiez l’accès à vos sessions. Vos clés seront sécurisés avec une Clé de Sécurité unique.",
|
||||
"Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(rooms)s rooms.|one": "Mettre en cache localement et de manière sécurisée les messages chiffrés pour qu’ils apparaissent dans les résultats de recherche, en utilisant %(size)s pour stocker les messages de %(rooms)s salons.",
|
||||
"Securely cache encrypted messages locally for them to appear in search results, using %(size)s to store messages from %(rooms)s rooms.|other": "Mettre en cache localement et de manière sécurisée les messages chiffrés pour qu’ils apparaissent dans les résultats de recherche, en utilisant %(size)s pour stocker les messages de %(rooms)s salons.",
|
||||
"Channel: <channelLink/>": "Canal : <channelLink/>",
|
||||
"Workspace: <networkLink/>": "Espace de travail : <networkLink/>",
|
||||
"Dial pad": "Pavé de numérotation",
|
||||
"There was an error looking up the phone number": "Erreur lors de la recherche de votre numéro de téléphone",
|
||||
"Unable to look up phone number": "Impossible de trouver votre numéro de téléphone",
|
||||
"Use Ctrl + F to search": "Utilisez Control + F pour rechercher",
|
||||
"Use Command + F to search": "Utilisez Commande + F pour rechercher",
|
||||
"Show line numbers in code blocks": "Afficher les numéros de ligne dans les blocs de code",
|
||||
"Expand code blocks by default": "Dérouler les blocs de code par défaut",
|
||||
"Show stickers button": "Afficher le bouton stickers",
|
||||
"Use app": "Utiliser l’application",
|
||||
"Element Web is experimental on mobile. For a better experience and the latest features, use our free native app.": "Element Web est expérimental sur téléphone. Pour une meilleure expérience et bénéficier des dernières fonctionnalités, utilisez notre application native gratuite.",
|
||||
"Use app for a better experience": "Utilisez une application pour une meilleure expérience",
|
||||
"See text messages posted to your active room": "Voir les messages textuels dans le salon actif",
|
||||
"See text messages posted to this room": "Voir les messages textuels envoyés dans ce salon",
|
||||
"Send text messages as you in your active room": "Envoyez des messages textuels en tant que vous-même dans le salon actif",
|
||||
"Send text messages as you in this room": "Envoyez des messages textuels en tant que vous-même dans ce salon",
|
||||
"See when the name changes in your active room": "Suivre les changements de nom dans le salon actif",
|
||||
"Change which room, message, or user you're viewing": "Changer le salon, message, ou la personne que vous visualisez",
|
||||
"Change which room you're viewing": "Changer le salon que vous visualisez",
|
||||
"Remain on your screen while running": "Restez sur votre écran pendant l’exécution",
|
||||
"%(senderName)s has updated the widget layout": "%(senderName)s a mis à jour la disposition du widget",
|
||||
"Converts the DM to a room": "Transformer le message privé en salon",
|
||||
"Converts the room to a DM": "Transformer le salon en message privé",
|
||||
"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.": "Votre serveur d’accueil a rejeté la demande de connexion. Ceci pourrait être dû à une connexion qui prend trop de temps. Si cela persiste, merci de contacter l’administrateur de votre serveur d’accueil.",
|
||||
"Your homeserver was unreachable and was not able to log you in. Please try again. If this continues, please contact your homeserver administrator.": "Votre serveur d’accueil n’est pas accessible, nous n’avons pas pu vous connecter. Merci de réessayer. Si cela persiste, merci de contacter l’administrateur de votre serveur d’accueil.",
|
||||
"Try again": "Réessayez",
|
||||
"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.": "Nous avons demandé à votre navigateur de mémoriser votre serveur d’accueil, mais il semble l’avoir oublié. Rendez-vous à la page de connexion et réessayez.",
|
||||
"We couldn't log you in": "Impossible de vous déconnecter"
|
||||
}
|
||||
|
|
|
@ -3052,5 +3052,18 @@
|
|||
"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"
|
||||
"Expand code blocks by default": "Por omsión despregar bloques de código",
|
||||
"Upgrade to pro": "Mellorar a pro",
|
||||
"Minimize dialog": "Minimizar ventá",
|
||||
"Maximize dialog": "Maximizar ventá",
|
||||
"%(hostSignupBrand)s Setup": "Configurar %(hostSignupBrand)s",
|
||||
"You should know": "Deberías saber",
|
||||
"Privacy Policy": "Política de Privacidade",
|
||||
"Cookie Policy": "Política de Cookies",
|
||||
"Learn more in our <privacyPolicyLink />, <termsOfServiceLink /> and <cookiePolicyLink />.": "Aprende máis na nosa <privacyPolicyLink />, <termsOfServiceLink /> e <cookiePolicyLink />.",
|
||||
"Continuing temporarily allows the %(hostSignupBrand)s setup process to access your account to fetch verified email addresses. This data is not stored.": "Ao continuar de xeito temporal permitirás que %(hostSignupBrand)s complete o acceso á túa conta para obter os enderezos de email verificados. Os datos non se almacenan.",
|
||||
"Failed to connect to your homeserver. Please close this dialog and try again.": "Fallou a conexión co teu servidor de inicio. Pecha esta información e inténtao outra vez.",
|
||||
"Abort": "Abortar",
|
||||
"Are you sure you wish to abort creation of the host? The process cannot be continued.": "Tes a certeza de querer cancelar a creación do servidor? O proceso non pode ser completado.",
|
||||
"Confirm abort of host creation": "Corfirma que cancelas a creación do servidor"
|
||||
}
|
||||
|
|
|
@ -46,7 +46,7 @@
|
|||
"Unpin Message": "שחרר צימוד הודעה",
|
||||
"Online": "מקוון",
|
||||
"Register": "רשום",
|
||||
"Rooms": "חדרי שיחוח",
|
||||
"Rooms": "חדרים",
|
||||
"Add rooms to this community": "הוסף חדר שיחוח לקהילה זו",
|
||||
"OK": "בסדר",
|
||||
"Operation failed": "פעולה נכשלה",
|
||||
|
@ -2774,5 +2774,16 @@
|
|||
"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": "שנה את החדר, ההודעה או המשתמש שאתה צופה בו"
|
||||
"Change which room, message, or user you're viewing": "שנה את החדר, ההודעה או המשתמש שאתה צופה בו",
|
||||
"Expand code blocks by default": "הרחב את בלוקי הקוד כברירת מחדל",
|
||||
"Show stickers button": "הצג את לחצן הסטיקרים",
|
||||
"Use app": "השתמש באפליקציה",
|
||||
"Element Web is experimental on mobile. For a better experience and the latest features, use our free native app.": "Element Web הוא ניסיוני במובייל. לקבלת חוויה טובה יותר והתכונות העדכניות ביותר, השתמש באפליקציה המקורית החינמית שלנו.",
|
||||
"Use app for a better experience": "השתמש באפליקציה לחוויה טובה יותר",
|
||||
"Converts the DM to a room": "המר את ה- DM לחדר שיחוח",
|
||||
"Converts the room to a DM": "המר את החדר ל- DM",
|
||||
"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": "לא הצלחנו להתחבר אליך"
|
||||
}
|
||||
|
|
|
@ -3058,5 +3058,7 @@
|
|||
"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"
|
||||
"Abort": "Megszakítás",
|
||||
"Are you sure you wish to abort creation of the host? The process cannot be continued.": "Biztos benne, hogy meg kívánja szakítani a gazdagép létrehozásának a folyamatát? A folyamat nem folytatható.",
|
||||
"Confirm abort of host creation": "Erősítse meg a gazdagép készítés megszakítását"
|
||||
}
|
||||
|
|
|
@ -3045,5 +3045,25 @@
|
|||
"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"
|
||||
"We couldn't log you in": "Non abbiamo potuto farti accedere",
|
||||
"Upgrade to pro": "Aggiorna a Pro",
|
||||
"Minimize dialog": "Riduci finestra",
|
||||
"Maximize dialog": "Espandi finestra",
|
||||
"%(hostSignupBrand)s Setup": "Configurazione di %(hostSignupBrand)s",
|
||||
"You should know": "Dovresti sapere",
|
||||
"Privacy Policy": "Informativa sulla privacy",
|
||||
"Cookie Policy": "Informativa sui cookie",
|
||||
"Learn more in our <privacyPolicyLink />, <termsOfServiceLink /> and <cookiePolicyLink />.": "Maggiori informazioni nella nostra <privacyPolicyLink />, <termsOfServiceLink /> e <cookiePolicyLink />.",
|
||||
"Continuing temporarily allows the %(hostSignupBrand)s setup process to access your account to fetch verified email addresses. This data is not stored.": "Continuando permetti temporaneamente al processo di configurazione di %(hostSignupBrand)s di accedere al tuo account per rilevare gli indirizzi email verificati. Questi dati non vengono memorizzati.",
|
||||
"Failed to connect to your homeserver. Please close this dialog and try again.": "Connessione al tuo homeserver fallita. Chiudi questo messaggio e riprova.",
|
||||
"Abort": "Annulla",
|
||||
"Are you sure you wish to abort creation of the host? The process cannot be continued.": "Vuoi veramente annullare la creazione dell'host? Il processo non può essere continuato.",
|
||||
"Confirm abort of host creation": "Conferma annullamento creazione host",
|
||||
"Windows": "Finestre",
|
||||
"Screens": "Schermi",
|
||||
"Share your screen": "Condividi lo schermo",
|
||||
"Recently visited rooms": "Stanze visitate di recente",
|
||||
"Show line numbers in code blocks": "Mostra numeri di riga nei blocchi di codice",
|
||||
"Expand code blocks by default": "Espandi blocchi di codice in modo predefinito",
|
||||
"Show stickers button": "Mostra pulsante adesivi"
|
||||
}
|
||||
|
|
|
@ -393,7 +393,7 @@
|
|||
"%(senderName)s sent a video": "%(senderName)s が動画を送信しました",
|
||||
"%(senderName)s uploaded a file": "%(senderName)s がファイルをアップロードしました",
|
||||
"Options": "オプション",
|
||||
"Key request sent.": "キーリクエストが送信されました。",
|
||||
"Key request sent.": "鍵リクエストが送信されました。",
|
||||
"Please select the destination room for this message": "このメッセージを送り先部屋を選択してください",
|
||||
"Disinvite": "招待拒否",
|
||||
"Kick": "追放する",
|
||||
|
@ -825,8 +825,8 @@
|
|||
"Account": "アカウント",
|
||||
"Access Token:": "アクセストークン:",
|
||||
"click to reveal": "クリックすると表示されます",
|
||||
"Homeserver is": "ホームサーバーは",
|
||||
"Identity Server is": "アイデンティティ・サーバー",
|
||||
"Homeserver is": "ホームサーバー:",
|
||||
"Identity Server is": "ID サーバー:",
|
||||
"%(brand)s version:": "%(brand)s のバージョン:",
|
||||
"olm version:": "olm のバージョン:",
|
||||
"Failed to send email": "メールを送信できませんでした",
|
||||
|
@ -1526,5 +1526,12 @@
|
|||
"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 の新バージョンが利用可能です"
|
||||
"New version of %(brand)s is available": "%(brand)s の新バージョンが利用可能です",
|
||||
"If your other sessions do not have the key for this message you will not be able to decrypt them.": "あなたの他のセッションがこのメッセージの鍵を持っていない場合、このメッセージを復号することはできません。",
|
||||
"Key share requests are sent to your other sessions automatically. If you rejected or dismissed the key share request on your other sessions, click here to request the keys for this session again.": "鍵共有リクエストは自動的にあなたの他のセッションに送信されます。他のセッションで鍵共有リクエストを拒否または却下した場合は、ここをクリックしてこのセッションの鍵を再度リクエストしてください。",
|
||||
"Your key share request has been sent - please check your other sessions for key share requests.": "鍵共有リクエストが送信されました。あなたの他のセッションで鍵共有リクエストをご確認ください。",
|
||||
"<requestLink>Re-request encryption keys</requestLink> from your other sessions.": "あなたの他のセッションに<requestLink>暗号鍵を再リクエストする</requestLink>。",
|
||||
"Block anyone not part of %(serverName)s from ever joining this room.": "%(serverName)s 以外からの参加をブロック",
|
||||
"Private rooms can be found and joined by invitation only. Public rooms can be found and joined by anyone.": "プライベートな部屋は招待者のみが参加できます。公開された部屋は誰でも検索・参加できます。",
|
||||
"To report a Matrix-related security issue, please read the Matrix.org <a>Security Disclosure Policy</a>.": "Matrix 関連のセキュリティ問題を報告するには、Matrix.org の <a>Security Disclosure Policy</a> をご覧ください。"
|
||||
}
|
||||
|
|
|
@ -166,7 +166,7 @@
|
|||
"No results": "Nav rezultātu",
|
||||
"No users have specific privileges in this room": "Šajā istabā nav lietotāju ar īpašām privilēģijām",
|
||||
"OK": "Labi",
|
||||
"olm version:": "Olm versija:",
|
||||
"olm version:": "olm versija:",
|
||||
"Only people who have been invited": "Vienīgi uzaicināti cilvēki",
|
||||
"Operation failed": "Darbība neizdevās",
|
||||
"Password": "Parole",
|
||||
|
@ -306,7 +306,7 @@
|
|||
"Tue": "O.",
|
||||
"Wed": "T.",
|
||||
"Thu": "C.",
|
||||
"Fri": "P.",
|
||||
"Fri": "Pk.",
|
||||
"Sat": "S.",
|
||||
"Jan": "Jan.",
|
||||
"Feb": "Feb.",
|
||||
|
@ -344,7 +344,7 @@
|
|||
"Import room keys": "Importēt istabas atslēgas",
|
||||
"File to import": "Importējamais fails",
|
||||
"This process allows you to export the keys for messages you have received in encrypted rooms to a local file. You will then be able to import the file into another Matrix client in the future, so that client will also be able to decrypt these messages.": "Šī darbība ļauj Tev uz lokālo failu eksportēt atslēgas priekš tām ziņām, kuras Tu saņēmi šifrētās istabās. Tu varēsi importēt šo failu citā Matrix klientā, lai tajā būtu iespējams lasīt šīs ziņas atšifrētas.",
|
||||
"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.": "Eksportētā datne ļaus ikvienam, kurš to spēj to nolasīt, atšifrēt jebkuras jūsu šifrētās ziņas. Tādēļ ievērojiet piesardzību un glabājiet šo datni drošā vietā. Lai palīdzētu to nodrošināt, zemāk ievadiet frāzveida paroli eksportējamo datu šifrēšanai. Datu importēšana būs iespējama tikai izmantojot šo pašu frāzveida paroli.",
|
||||
"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.": "Eksportētais fails ļaus ikvienam, kurš to spēj to nolasīt, atšifrēt jebkuras jūsu šifrētās ziņas. Tādēļ ievērojiet piesardzību un glabājiet šo failu drošā vietā. Lai palīdzētu to nodrošināt, zemāk ievadiet frāzveida paroli eksportējamo datu šifrēšanai. Datu importēšana būs iespējama tikai izmantojot šo pašu frāzveida paroli.",
|
||||
"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.": "Šis process ļaus Tev importēt šifrēšanas atslēgas, kuras Tu iepriekš eksportēji no cita Matrix klienta. Tas ļaus Tev atšifrēt čata vēsturi.",
|
||||
"The export file will be protected with a passphrase. You should enter the passphrase here, to decrypt the file.": "Eksporta fails būs aizsargāts ar frāzveida paroli. Tā ir jāievada šeit, lai atšifrētu failu.",
|
||||
"You must join the room to see its files": "Tev ir jāpievienojas istabai, lai redzētu tās failus",
|
||||
|
@ -361,7 +361,7 @@
|
|||
"Please check your email to continue registration.": "Lūdzu pārbaudi savu epastu lai turpinātu reģistrāciju.",
|
||||
"Token incorrect": "Nepareizs autentifikācijas tokens",
|
||||
"Please enter the code it contains:": "Lūdzu, ievadiet tajā ietverto kodu:",
|
||||
"powered by Matrix": "Tiek darbināta ar Matrix",
|
||||
"powered by Matrix": "tiek darbināta ar Matrix",
|
||||
"If you don't specify an email address, you won't be able to reset your password. Are you sure?": "Ja Tu nenorādīsi epasta adresi, tev nebūs iespējams izmantot paroles atiestatīšanu. Vai to vēlies?",
|
||||
"Error decrypting audio": "Kļūda atšifrējot audio",
|
||||
"Error decrypting image": "Kļūda atšifrējot attēlu",
|
||||
|
@ -654,7 +654,7 @@
|
|||
"Uploading report": "Augšuplādē atskaiti",
|
||||
"Sunday": "Svētdiena",
|
||||
"Notification targets": "Paziņojumu adresāti",
|
||||
"Today": "šodien",
|
||||
"Today": "Šodien",
|
||||
"You are not receiving desktop notifications": "Darbvirsmas paziņojumi netiek saņemti",
|
||||
"Friday": "Piektdiena",
|
||||
"Update": "Atjaunināt",
|
||||
|
@ -976,7 +976,7 @@
|
|||
"Forgot password?": "Aizmirsi paroli?",
|
||||
"No homeserver URL provided": "Nav iestatīts bāzes servera URL",
|
||||
"Cannot reach homeserver": "Neizdodas savienoties ar bāzes serveri",
|
||||
"The file '%(fileName)s' exceeds this homeserver's size limit for uploads": "Datne '%(fileName)s pārsniedz augšupielādējamas datnes izmēra limitu šajā bāzes serverī",
|
||||
"The file '%(fileName)s' exceeds this homeserver's size limit for uploads": "Fails '%(fileName)s pārsniedz augšupielādējama faila izmēra limitu šajā bāzes serverī",
|
||||
"Please ask the administrator of your homeserver (<code>%(homeserverDomain)s</code>) to configure a TURN server in order for calls to work reliably.": "Lūdzu, jautājiet sava bāzes servera administratoram (<code>%(homeserverDomain)s</code>) sakonfigurēt TURN serveri, lai zvani strādātu stabili.",
|
||||
"Join millions for free on the largest public server": "Pievienojieties bez maksas miljoniem lietotāju lielākajā publiskajā serverī",
|
||||
"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.": "Jūs varat pielāgot servera parametrus, lai pierakstītos citos Matrix bāzes serveros, norādot atbilstošu bāzes servera URL. Tas ļauj jums izmantot Element ar eksistējošu Matrix kontu uz cita bāzes servera.",
|
||||
|
@ -1185,7 +1185,7 @@
|
|||
"Room Settings - %(roomName)s": "Istabas iestatījumi - %(roomName)s",
|
||||
"Room settings": "Istabas iestatījumi",
|
||||
"Share room": "Dalīties ar istabu",
|
||||
"Show files": "Rādīt datnes",
|
||||
"Show files": "Rādīt failus",
|
||||
"Help & About": "Palīdzība un par lietotni",
|
||||
"About homeservers": "Par bāzes serveriem",
|
||||
"About": "Detaļas",
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1346,7 +1346,7 @@
|
|||
"This session is backing up your keys. ": "Denne økta har aktivert sikkerheitskopiering av nøklane dine ",
|
||||
"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.": "Lag sikkerheitskopiar av krypteringsnøklane saman med kontoinnstillingane, slik at du kan gjenopprette data viss det skulle skje at du å mister tilgang til øktene dine. Sikkerheitskopiane er beskytta med ein unik gjenopprettingsnøkkel (Recovery Key).",
|
||||
"Encryption": "Kryptografi",
|
||||
"Use Ctrl + Enter to send a message": "Bruk tastekombinasjonen Ctrl + Enter for å sende meldingar",
|
||||
"Use Ctrl + Enter to send a message": "Bruk Ctrl + Enter for å sende meldingar",
|
||||
"Set the name of a font installed on your system & %(brand)s will attempt to use it.": "Skriv namnet på skrifttypen(fonten) og %(brand)s forsøka å henta den frå operativsystemet.",
|
||||
"Use a system font": "Bruk tilpassa skrifttype henta frå operativsystemet",
|
||||
"System font name": "Namn på skrifttype",
|
||||
|
@ -1371,5 +1371,10 @@
|
|||
"List options": "Sjå alternativ",
|
||||
"Explore Public Rooms": "Utforsk offentlege rom",
|
||||
"Explore all public rooms": "Utforsk alle offentlege rom",
|
||||
"Explore public rooms": "Utforsk offentlege rom"
|
||||
"Explore public rooms": "Utforsk offentlege rom",
|
||||
"Use Ctrl + F to search": "Bruk Ctrl + F for søk",
|
||||
"Identity Server": "Identitetstenar",
|
||||
"Email Address": "E-postadresse",
|
||||
"Go Back": "Gå attende",
|
||||
"Notification settings": "Varslingsinnstillingar"
|
||||
}
|
||||
|
|
|
@ -2635,7 +2635,7 @@
|
|||
"Server Options": "Параметры сервера",
|
||||
"Decline All": "Отклонить все",
|
||||
"Homeserver": "Домашний сервер",
|
||||
"Approve": "Одобрить",
|
||||
"Approve": "Согласиться",
|
||||
"Approve widget permissions": "Одобрить разрешения виджета",
|
||||
"Send stickers into your active room": "Отправить стикеры в активную комнату",
|
||||
"Remain on your screen while running": "Оставаться на экране во время работы",
|
||||
|
@ -2985,5 +2985,77 @@
|
|||
"Unable to look up phone number": "Невозможно найти номер телефона",
|
||||
"Change which room, message, or user you're viewing": "Измените комнату, сообщение или пользователя, которого вы просматриваете",
|
||||
"Channel: <channelLink/>": "Канал: <channelLink/>",
|
||||
"Workspace: <networkLink/>": "Рабочая область: <networkLink/>"
|
||||
"Workspace: <networkLink/>": "Рабочая область: <networkLink/>",
|
||||
"Search (must be enabled)": "Поиск (должен быть включен)",
|
||||
"This session has detected that your Security Phrase and key for Secure Messages have been removed.": "Этот сеанс обнаружил, что ваша секретная фраза и ключ безопасности для защищенных сообщений были удалены.",
|
||||
"A new Security Phrase and key for Secure Messages have been detected.": "Обнаружены новая секретная фраза и ключ безопасности для защищенных сообщений.",
|
||||
"Make a copy of your Security Key": "Сделайте копию своего ключа безопасности",
|
||||
"Confirm your Security Phrase": "Подтвердите секретную фразу",
|
||||
"Secure your backup with a Security Phrase": "Защитите свою резервную копию с помощью секретной фразы",
|
||||
"Your Security Key is in your <b>Downloads</b> folder.": "Ваш ключ безопасности находится в папке <b>Загрузки</b>.",
|
||||
"Your Security Key has been <b>copied to your clipboard</b>, paste it to:": "Ваш ключ безопасности был <b>скопирован в буфер обмена</b>, вставьте его в:",
|
||||
"Your Security Key": "Ваш ключ безопасности",
|
||||
"Your Security Key is a safety net - you can use it to restore access to your encrypted messages if you forget your Security Phrase.": "Ваш ключ безопасности является защитной сеткой - вы можете использовать его для восстановления доступа к своим зашифрованным сообщениям, если вы забыли секретную фразу.",
|
||||
"Repeat your Security Phrase...": "Повторите секретную фразу…",
|
||||
"Please enter your Security Phrase a second time to confirm.": "Пожалуйста, введите секретную фразу второй раз для подтверждения.",
|
||||
"Set up with a Security Key": "Настройка с помощью ключа безопасности",
|
||||
"Great! This Security Phrase looks strong enough.": "Отлично! Эта контрольная фраза выглядит достаточно сильной.",
|
||||
"We'll store an encrypted copy of your keys on our server. Secure your backup with a Security Phrase.": "Мы будем хранить зашифрованную копию ваших ключей на нашем сервере. Защитите свою резервную копию с помощью секретной фразы.",
|
||||
"Use Security Key": "Используйте ключ безопасности",
|
||||
"Use Security Key or Phrase": "Используйте ключ безопасности или секретную фразу",
|
||||
"Upgrade to pro": "Перейти на Pro",
|
||||
"Allow this widget to verify your identity": "Разрешите этому виджету проверить ваш идентификатор",
|
||||
"Something went wrong in confirming your identity. Cancel and try again.": "Что-то пошло не так при вашей идентификации. Отмените последнее действие и попробуйте еще раз.",
|
||||
"If you've forgotten your Security Key you can <button>set up new recovery options</button>": "Если вы забыли свой ключ безопасности, вы можете <button>настроить новые параметры восстановления</button>",
|
||||
"Access your secure message history and set up secure messaging by entering your Security Key.": "Получите доступ к своей истории защищенных сообщений и настройте безопасный обмен сообщениями, введя ключ безопасности.",
|
||||
"Not a valid Security Key": "Неправильный ключ безопасности",
|
||||
"This looks like a valid Security Key!": "Похоже, это правильный ключ безопасности!",
|
||||
"Enter Security Key": "Введите ключ безопасности",
|
||||
"If you've forgotten your Security Phrase you can <button1>use your Security Key</button1> or <button2>set up new recovery options</button2>": "Если вы забыли секретную фразу, вы можете <button1>использовать ключ безопасности</button1> или <button2>настроить новые параметры восстановления</button2>",
|
||||
"Access your secure message history and set up secure messaging by entering your Security Phrase.": "Получите доступ к своей истории защищенных сообщений и настройте безопасный обмен сообщениями, введя секретную фразу.",
|
||||
"Enter Security Phrase": "Введите секретную фразу",
|
||||
"Backup could not be decrypted with this Security Phrase: please verify that you entered the correct Security Phrase.": "Не удалось расшифровать резервную копию с помощью этой секретной фразы: убедитесь, что вы ввели правильную секретную фразу.",
|
||||
"Incorrect Security Phrase": "Неверная секретная фраза",
|
||||
"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:": "Виджет проверит ваш идентификатор пользователя, но не сможет выполнять за вас действия:",
|
||||
"We recommend you change your password and Security Key in Settings immediately": "Мы рекомендуем вам немедленно сменить пароль и ключ безопасности в настройках",
|
||||
"Minimize dialog": "Свернуть диалог",
|
||||
"Maximize dialog": "Развернуть диалог",
|
||||
"%(hostSignupBrand)s Setup": "%(hostSignupBrand)s Настройка",
|
||||
"You should know": "Вы должны знать",
|
||||
"Privacy Policy": "Политика конфиденциальности",
|
||||
"Cookie Policy": "Политика использования файлов cookie",
|
||||
"Learn more in our <privacyPolicyLink />, <termsOfServiceLink /> and <cookiePolicyLink />.": "Дополнительную информацию можно найти на страницах <privacyPolicyLink />,<termsOfServiceLink /> и <cookiePolicyLink />.",
|
||||
"Continuing temporarily allows the %(hostSignupBrand)s setup process to access your account to fetch verified email addresses. This data is not stored.": "Продолжая процесс настройки %(hostSignupBrand)s, вы предоставите доступ к вашей учётной записи для получения проверенных адресов электронной почты. Эти данные не сохраняются.",
|
||||
"Failed to connect to your homeserver. Please close this dialog and try again.": "Не удалось подключиться к домашнему серверу. Закройте это диалоговое окно и попробуйте ещё раз.",
|
||||
"Abort": "Отмена",
|
||||
"Are you sure you wish to abort creation of the host? The process cannot be continued.": "Вы уверены, что хотите прервать создание хоста? Процесс не может быть продолжен.",
|
||||
"Confirm abort of host creation": "Подтвердите отмену создания хоста",
|
||||
"Windows": "Окна",
|
||||
"Screens": "Экраны",
|
||||
"Share your screen": "Поделитесь своим экраном",
|
||||
"Set my room layout for everyone": "Установить мой макет комнаты для всех",
|
||||
"Recently visited rooms": "Недавно посещённые комнаты",
|
||||
"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.": "Сделайте резервную копию ключей шифрования с данными вашей учетной записи на случай, если вы потеряете доступ к своим сеансам. Ваши ключи будут защищены уникальным ключом безопасности.",
|
||||
"Use Ctrl + F to search": "Нажмите Ctrl + F для поиска",
|
||||
"Use Command + F to search": "Нажмите Command (⌘) + F для поиска",
|
||||
"Show line numbers in code blocks": "Показывать номера строк в блоках кода",
|
||||
"Expand code blocks by default": "По умолчанию отображать блоки кода целиком",
|
||||
"Show stickers button": "Показать кнопку стикеров",
|
||||
"Use app": "Использовать приложение",
|
||||
"Element Web is experimental on mobile. For a better experience and the latest features, use our free native app.": "Element Web - экспериментальная версия на мобильных устройствах. Для лучшего опыта и новейших функций используйте наше бесплатное приложение.",
|
||||
"Use app for a better experience": "Используйте приложение для лучшего опыта",
|
||||
"%(senderName)s has updated the widget layout": "%(senderName)s обновил макет виджета",
|
||||
"Converts the DM to a room": "Преобразовать ЛС в комнату",
|
||||
"Converts the room to a 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.": "Ваш домашний сервер не позволил вам войти в систему. Это могло произойти из-за того, что вход занял слишком много времени. Пожалуйста, попробуйте снова через пару минут. Если ситуация по-прежнему не меняется, обратитесь к администратору домашнего сервера за дополнительной информацией.",
|
||||
"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": "Нам не удалось войти в систему"
|
||||
}
|
||||
|
|
|
@ -548,7 +548,7 @@
|
|||
"The phone number entered looks invalid": "Zdá sa, že zadané telefónne číslo je neplatné",
|
||||
"Error: Problem communicating with the given homeserver.": "Chyba: Nie je možné komunikovať so zadaným domovským serverom.",
|
||||
"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>.": "K domovskému serveru nie je možné pripojiť sa použitím protokolu HTTP keďže v adresnom riadku prehliadača máte HTTPS adresu. Použite protokol HTTPS alebo <a>povolte nezabezpečené skripty</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.": "Nie je možné pripojiť sa k domovskému serveru - skontrolujte prosím funkčnosť vašeho pripojenia na internet, uistite sa že <a>certifikát domovského servera</a> je dôverihodný, a že žiaden doplnok nainštalovaný v prehliadači nemôže blokovať požiadavky.",
|
||||
"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.": "Nie je možné pripojiť sa k domovskému serveru - skontrolujte prosím funkčnosť vášho pripojenia na internet. Uistite sa že <a>certifikát domovského servera</a> je dôveryhodný a že žiaden doplnok nainštalovaný v prehliadači nemôže blokovať požiadavky.",
|
||||
"Failed to fetch avatar URL": "Nepodarilo sa získať URL adresu obrázka",
|
||||
"Set a display name:": "Nastaviť zobrazované meno:",
|
||||
"Upload an avatar:": "Nahrať obrázok:",
|
||||
|
@ -573,7 +573,7 @@
|
|||
"Passphrases must match": "Heslá sa musia zhodovať",
|
||||
"Passphrase must not be empty": "Heslo nesmie byť prázdne",
|
||||
"Export room keys": "Exportovať kľúče miestností",
|
||||
"This process allows you to export the keys for messages you have received in encrypted rooms to a local file. You will then be able to import the file into another Matrix client in the future, so that client will also be able to decrypt these messages.": "Tento proces vás prevedie exportom kľúčov určených na dešifrovanie správ, ktoré ste dostali v šifrovaných miestnostiach do lokálneho súboru. Tieto kľúče zo súboru môžete neskôr importovať do iného Matrix klienta, aby ste v ňom mohli dešifrovať vaše šifrované správy.",
|
||||
"This process allows you to export the keys for messages you have received in encrypted rooms to a local file. You will then be able to import the file into another Matrix client in the future, so that client will also be able to decrypt these messages.": "Tento proces vás prevedie exportom kľúčov určených na dešifrovanie správ, ktoré ste dostali v šifrovaných miestnostiach do lokálneho súboru. Tieto kľúče zo súboru môžete neskôr importovať do iného Matrix klienta, aby ste v ňom mohli dešifrovať vaše šifrované správy.",
|
||||
"The exported file will allow anyone who can read it to decrypt any encrypted messages that you can see, so you should be careful to keep it secure. To help with this, you should enter a passphrase below, which will be used to encrypt the exported data. It will only be possible to import the data by using the same passphrase.": "Tento súbor umožní komukoľvek, kto má ku nemu prístup, dešifrovať všetky vami viditeľné šifrované správy, mali by ste teda byť opatrní a tento súbor si bezpečne uchovať. Aby bolo toto pre vás jednoduchšie, nižšie zadajte heslo, ktorým budú údaje v súbore zašifrované. Importovať údaje zo súboru bude možné len po zadaní tohoto istého hesla.",
|
||||
"Enter passphrase": "Zadajte (dlhé) heslo",
|
||||
"Confirm passphrase": "Potvrďte heslo",
|
||||
|
@ -613,7 +613,7 @@
|
|||
"This room is not showing flair for any communities": "V tejto miestnosti nie je zobrazená príslušnosť k žiadnym komunitám",
|
||||
"Display your community flair in rooms configured to show it.": "Zobrazovať vašu príslušnosť ku komunite v miestnostiach, ktoré sú nastavené na zobrazovanie tejto príslušnosti.",
|
||||
"%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(weekDayName)s, %(day)s %(monthName)s %(fullYear)s",
|
||||
"You will not be able to undo this change as you are demoting yourself, if you are the last privileged user in the room it will be impossible to regain privileges.": "Túto zmenu nebudete môcť vrátiť späť pretože znižujete vašu vlastnú úroveň moci. Ak ste jediný poverený používateľ v miestnosti, nebudete môcť znovu získať úroveň, akú máte teraz.",
|
||||
"You will not be able to undo this change as you are demoting yourself, if you are the last privileged user in the room it will be impossible to regain privileges.": "Túto zmenu nebudete môcť vrátiť späť, pretože znižujete vašu vlastnú úroveň moci. Ak ste jediný privilegovaný používateľ v miestnosti, nebudete môcť získať vašu súčasnú úroveň znovu.",
|
||||
"Send an encrypted reply…": "Odoslať šifrovanú odpoveď…",
|
||||
"Send an encrypted message…": "Odoslať šifrovanú správu…",
|
||||
"Replying": "Odpoveď",
|
||||
|
@ -727,7 +727,7 @@
|
|||
"You must specify an event type!": "Musíte nastaviť typ udalosti!",
|
||||
"(HTTP status %(httpStatus)s)": "(HTTP status %(httpStatus)s)",
|
||||
"All Rooms": "Vo všetkych miestnostiach",
|
||||
"State Key": "State Key",
|
||||
"State Key": "Stavový kľúč",
|
||||
"Wednesday": "Streda",
|
||||
"Quote": "Citovať",
|
||||
"Send logs": "Zahrnúť záznamy",
|
||||
|
@ -963,7 +963,7 @@
|
|||
"If you didn't set the new recovery method, an attacker may be trying to access your account. Change your account password and set a new recovery method immediately in Settings.": "Ak ste si nenastavili nový spôsob obnovenia, je možné, že útočník sa pokúša dostať k vášmu účtu. Radšej si ihneď zmeňte vaše heslo a nastavte si nový spôsob obnovenia v Nastaveniach.",
|
||||
"Set up Secure Messages": "Nastaviť bezpečné obnovenie správ",
|
||||
"Go to Settings": "Otvoriť nastavenia",
|
||||
"Whether or not you're logged in (we don't record your username)": "Či ste alebo nie ste prihlásení (nezaznamenávame vaše meno používateľa)",
|
||||
"Whether or not you're logged in (we don't record your username)": "Či ste alebo nie ste prihlásení (nezaznamenávame vaše používateľské meno)",
|
||||
"The file '%(fileName)s' exceeds this homeserver's size limit for uploads": "Veľkosť súboru „%(fileName)s“ prekračuje limit veľkosti súboru nahrávania na tento domovský server",
|
||||
"Prepends ¯\\_(ツ)_/¯ to a plain-text message": "Pridá znaky ¯\\_(ツ)_/¯ pred správy vo formáte obyčajného textu",
|
||||
"Upgrades a room to a new version": "Aktualizuje miestnosť na novšiu verziu",
|
||||
|
@ -1289,7 +1289,7 @@
|
|||
"Double check that your server supports the room version chosen and try again.": "Uistite sa, že domovský server podporuje zvolenú verziu miestnosti a skúste znovu.",
|
||||
"Changes the avatar of the current room": "Zmení obrázok miestnosti",
|
||||
"Use an identity server": "Použiť server totožností",
|
||||
"Use an identity server to invite by email. Click continue to use the default identity server (%(defaultIdentityServerName)s) or manage in Settings.": "Aby ste mohli používateľov pozývať zadaním emailovej adresy, je potrebné nastaviť adresu servera totožností. Klepnutím na tlačidlo pokračovať použijete predvolený server (%(defaultIdentityServerName)s) a zmeniť to môžete v nastaveniach.",
|
||||
"Use an identity server to invite by email. Click continue to use the default identity server (%(defaultIdentityServerName)s) or manage in Settings.": "Aby ste mohli používateľov pozývať zadaním emailovej adresy, je potrebné nastaviť adresu servera totožností. Klepnutím na tlačidlo pokračovať použijete predvolený server (%(defaultIdentityServerName)s) a zmeniť to môžete v nastaveniach.",
|
||||
"Use an identity server to invite by email. Manage in Settings.": "Server totožností sa použije na pozývanie používateľov zadaním emailovej adresy. Spravujte v nastaveniach.",
|
||||
"%(senderName)s placed a voice call.": "%(senderName)s uskutočnil telefonát.",
|
||||
"%(senderName)s placed a voice call. (not supported by this browser)": "%(senderName)s uskutočnil telefonát. (Nepodporované týmto prehliadačom)",
|
||||
|
@ -1371,27 +1371,27 @@
|
|||
"Discovery": "Objaviť",
|
||||
"Deactivate account": "Deaktivovať účet",
|
||||
"Clear cache and reload": "Vymazať vyrovnávaciu pamäť a načítať znovu",
|
||||
"Customise your experience with experimental labs features. <a>Learn more</a>.": "Prispôsobte si zážitok s používania aktivovaním experimentálnych vlastností. <a>Zistiť viac</a>.",
|
||||
"Customise your experience with experimental labs features. <a>Learn more</a>.": "Prispôsobte si zážitok z používania aktivovaním experimentálnych vlastností. <a>Zistiť viac</a>.",
|
||||
"Ignored/Blocked": "Ignorovaní / Blokovaní",
|
||||
"Error adding ignored user/server": "Chyba pri pridávaní ignorovaného používateľa / servera",
|
||||
"Something went wrong. Please try again or view your console for hints.": "Niečo sa nepodarilo. Prosím, skúste znovu neskôr alebo si prečítajte ďalšie usmernenia zobrazením konzoly.",
|
||||
"Error subscribing to list": "Chyba pri prihlasovaní sa do zoznamu",
|
||||
"Error removing ignored user/server": "Chyba pri odstraňovaní ignorovaného používateľa / servera",
|
||||
"Use Single Sign On to continue": "Pokračovať pomocou Jednotného prihlásenia",
|
||||
"Confirm adding this email address by using Single Sign On to prove your identity.": "Potvrďte pridanie tejto adresy pomocou Jednotného prihlásenia.",
|
||||
"Single Sign On": "Jednotné prihlásenie",
|
||||
"Use Single Sign On to continue": "Pokračovať pomocou Single Sign On",
|
||||
"Confirm adding this email address by using Single Sign On to prove your identity.": "Potvrďte pridanie tejto adresy pomocou Single Sign On.",
|
||||
"Single Sign On": "Single Sign On",
|
||||
"Confirm adding email": "Potvrdiť pridanie emailu",
|
||||
"Click the button below to confirm adding this email address.": "Kliknutím na tlačítko potvrdíte pridanie emailovej adresy.",
|
||||
"Confirm adding this phone number by using Single Sign On to prove your identity.": "Potvrďte pridanie telefónneho čísla pomocou Jednotného prihlásenia.",
|
||||
"Click the button below to confirm adding this email address.": "Kliknutím na tlačidlo nižšie potvrdíte pridanie emailovej adresy.",
|
||||
"Confirm adding this phone number by using Single Sign On to prove your identity.": "Potvrďte pridanie telefónneho čísla pomocou Single Sign On.",
|
||||
"Confirm adding phone number": "Potvrdiť pridanie telefónneho čísla",
|
||||
"Click the button below to confirm adding this phone number.": "Kliknutím na tlačítko potvrdíte pridanie telefónneho čísla.",
|
||||
"Click the button below to confirm adding this phone number.": "Kliknutím na tlačidlo nižšie potvrdíte pridanie telefónneho čísla.",
|
||||
"Whether you're using %(brand)s on a device where touch is the primary input mechanism": "Či používate %(brand)s na zariadení, ktorého hlavným vstupným mechanizmom je dotyk (mobil, tablet,...)",
|
||||
"Whether you're using %(brand)s as an installed Progressive Web App": "Či používate %(brand)s ako nainštalovanú Progresívnu Webovú Aplikáciu",
|
||||
"Your user agent": "Identifikátor vášho prehliadača",
|
||||
"If you cancel now, you won't complete verifying the other user.": "Pokiaľ teraz proces zrušíte, nedokončíte overenie druhého používateľa.",
|
||||
"If you cancel now, you won't complete verifying your other session.": "Pokiaľ teraz proces zrušíte, nedokončíte overenie vašej druhej relácie.",
|
||||
"If you cancel now, you won't complete your operation.": "Pokiaľ teraz proces zrušíte, nedokončíte ho.",
|
||||
"Cancel entering passphrase?": "Zrušiť zadávanie (dlhého) hesla.",
|
||||
"Cancel entering passphrase?": "Želáte si zrušiť zadávanie hesla?",
|
||||
"Setting up keys": "Príprava kľúčov",
|
||||
"Verify this session": "Overiť túto reláciu",
|
||||
"Enter recovery passphrase": "Zadajte (dlhé) heslo pre obnovu zálohy",
|
||||
|
@ -1439,7 +1439,7 @@
|
|||
"Interactively verify by Emoji": "Interaktívne overte pomocou emoji",
|
||||
"Done": "Hotovo",
|
||||
"a few seconds ago": "pred pár sekundami",
|
||||
"about a minute ago": "približne pred minutou",
|
||||
"about a minute ago": "približne pred minútou",
|
||||
"about an hour ago": "približne pred hodinou",
|
||||
"about a day ago": "približne deň dozadu",
|
||||
"a few seconds from now": "o pár sekúnd",
|
||||
|
@ -1474,7 +1474,7 @@
|
|||
"Failed to re-authenticate": "Opätovná autentifikácia zlyhala",
|
||||
"Regain access to your account and recover encryption keys stored in this session. Without them, you won’t be able to read all of your secure messages in any session.": "Znovuzískajte prístup k vášmu účtu a obnovte šifrovacie kľúče uložené v tejto relácií. Bez nich nebudete môcť čítať všetky vaše šifrované správy vo všetkých reláciach.",
|
||||
"Font scaling": "Škálovanie písma",
|
||||
"Show info about bridges in room settings": "Zobraziť informácie o mostoch v Nastaveniach miestnosti",
|
||||
"Show info about bridges in room settings": "Zobraziť informácie o mostoch v nastaveniach miestnosti",
|
||||
"Font size": "Veľkosť písma",
|
||||
"Show typing notifications": "Posielať oznámenia, keď píšete",
|
||||
"Never send encrypted messages to unverified sessions from this session": "Nikdy neposielať šifrované správy neovereným reláciam z tejto relácie",
|
||||
|
@ -1519,7 +1519,7 @@
|
|||
"To be secure, do this in person or use a trusted way to communicate.": "Aby ste si boli istý, urobte to osobne alebo použite dôveryhodný spôsob komunikácie.",
|
||||
"Lock": "Zámok",
|
||||
"If you can't scan the code above, verify by comparing unique emoji.": "Pokiaľ nemôžete kód vyššie skenovať, overte sa porovnaním jedinečnej kombinácie emoji.",
|
||||
"Verify by comparing unique emoji.": "Overenie porovnaním jedinečnej kombinácie emoji",
|
||||
"Verify by comparing unique emoji.": "Overenie porovnaním jedinečnej kombinácie emotikonov.",
|
||||
"Verify by emoji": "Overte pomocou emoji",
|
||||
"Compare emoji": "Porovnajte emoji",
|
||||
"Verify all your sessions to ensure your account & messages are safe": "Overte všetky vaše relácie, aby ste si boli istý, že sú vaše správy a účet bezpečné",
|
||||
|
@ -1528,7 +1528,7 @@
|
|||
"Upgrade": "Upgradovať",
|
||||
"Verify": "Overiť",
|
||||
"Verify yourself & others to keep your chats safe": "Overte seba a ostatných, aby vaše komunikácie boli bezpečné",
|
||||
"Other users may not trust it": "Ostatný používatelia jej nemusia veriť",
|
||||
"Other users may not trust it": "Ostatní používatelia jej nemusia veriť",
|
||||
"Verify the new login accessing your account: %(name)s": "Overte nové prihlásenie na váš účet: %(name)s",
|
||||
"From %(deviceName)s (%(deviceId)s)": "Od %(deviceName)s (%(deviceId)s)",
|
||||
"This bridge was provisioned by <user />.": "Tento most poskytuje <user />.",
|
||||
|
@ -1545,7 +1545,7 @@
|
|||
"unexpected type": "neočakávaný typ",
|
||||
"in memory": "v pamäti",
|
||||
"Self signing private key:": "Samo-podpísané súkromné kľúče:",
|
||||
"cached locally": "cachenuté lokálne",
|
||||
"cached locally": "uložené do lokálnej vyrovnávacej pamäťe",
|
||||
"not found locally": "nenájdené lokálne",
|
||||
"User signing private key:": "Používateľom podpísané súkromné kľúče:",
|
||||
"Session backup key:": "Kľúč na zálohu relácie:",
|
||||
|
@ -1595,7 +1595,7 @@
|
|||
"Restart": "Reštartovať",
|
||||
"Upgrade your %(brand)s": "Upgradujte svoj %(brand)s",
|
||||
"A new version of %(brand)s is available!": "Nová verzia %(brand)su je dostupná!",
|
||||
"Which officially provided instance you are using, if any": "Ktorú oficiálne poskytovanú inštanciu používate, pokiaľ nejakú",
|
||||
"Which officially provided instance you are using, if any": "Ktorú oficiálne poskytovanú inštanciu používate, ak nejakú",
|
||||
"Use your account to sign in to the latest version": "Použite svoj účet na prihlásenie sa do najnovšej verzie",
|
||||
"We’re excited to announce Riot is now Element": "Sme nadšený oznámiť, že Riot je odteraz Element",
|
||||
"Riot is now Element!": "Riot je odteraz Element!",
|
||||
|
@ -1669,7 +1669,7 @@
|
|||
"Incoming video call": "Prichádzajúci video hovor",
|
||||
"Incoming call": "Prichádzajúci hovor",
|
||||
"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.": "Vytvorte si filter, potiahnite avatara komunity do panelu filtrov na ľavý okraj obrazovky. Môžete kliknúť na avatara v paneli filtorv, aby ste videli len miestnosti a ľudí patriacich do danej komunity.",
|
||||
"%(num)s minutes ago": "pred %(num)s minútami",
|
||||
"%(num)s minutes ago": "pred %(num)s min",
|
||||
"%(num)s hours ago": "pred %(num)s hodinami",
|
||||
"%(num)s days ago": "pred %(num)s dňami",
|
||||
"%(brand)s can't securely cache encrypted messages locally while running in a web browser. Use <desktopLink>%(brand)s Desktop</desktopLink> for encrypted messages to appear in search results.": "%(brand)s nemôže bezpečne cachovať šiforvané správy lokálne pomocou prehlliadača. Použite <desktopLink>%(brand)s Desktop</desktopLink> na zobrazenie výsledkov vyhľadávania šiforavných správ.",
|
||||
|
@ -1775,10 +1775,10 @@
|
|||
"%(num)s hours from now": "o %(num)s hodín",
|
||||
"%(num)s days from now": "o %(num)s dní",
|
||||
"The person who invited you already left the room.": "Osoba ktorá Vás pozvala už opustila miestnosť.",
|
||||
"The person who invited you already left the room, or their server is offline.": "Osoba ktorá Vás pozvala už opustila miestnosť, alebo je ich server offline.",
|
||||
"The person who invited you already left the room, or their server is offline.": "Osoba, ktorá Vás pozvala už opustila miestnosť, alebo je jej server offline.",
|
||||
"* %(senderName)s %(emote)s": "* %(senderName)s %(emote)s",
|
||||
"Change notification settings": "Upraviť nastavenia upozornení",
|
||||
"Enable advanced debugging for the room list": "Zapnúť pokročilé ladenie pre zoznam miestností",
|
||||
"Enable advanced debugging for the room list": "Zapnúť pokročilé nástroje ladenia pre zoznam miestností",
|
||||
"Securely cache encrypted messages locally for them to appear in search results, using ": "Bezpečne uchovávať šifrované správy na tomto zariadení, aby sa v nich dalo vyhľadávať pomocou ",
|
||||
" to store messages from ": " na uchovanie správ z ",
|
||||
"rooms.": "miestnosti.",
|
||||
|
@ -1811,5 +1811,274 @@
|
|||
"Security": "Zabezpečenie",
|
||||
"Send a Direct Message": "Poslať priamu správu",
|
||||
"User menu": "Používateľské menu",
|
||||
"Toggle Italics": "Prepnúť kurzíva"
|
||||
"Toggle Italics": "Prepnúť kurzíva",
|
||||
"Zimbabwe": "Zimbabwe",
|
||||
"Zambia": "Zambia",
|
||||
"Yemen": "Jemen",
|
||||
"Western Sahara": "Západná Sahara",
|
||||
"Wallis & Futuna": "Wallis a Futuna",
|
||||
"Vietnam": "Vietnam",
|
||||
"Venezuela": "Venezuela",
|
||||
"Vatican City": "Vatikán",
|
||||
"Vanuatu": "Vanuatu",
|
||||
"Uzbekistan": "Uzbekistan",
|
||||
"Uruguay": "Uruguaj",
|
||||
"United Arab Emirates": "Spojené Arabské Emiráty",
|
||||
"Ukraine": "Ukrajina",
|
||||
"Uganda": "Uganda",
|
||||
"U.S. Virgin Islands": "Americké Panenské ostrovy",
|
||||
"Tuvalu": "Tuvalu",
|
||||
"Turks & Caicos Islands": "Ostrovy Turks a Caicos",
|
||||
"Turkmenistan": "Turkménsko",
|
||||
"Turkey": "Turecko",
|
||||
"Tunisia": "Tunisko",
|
||||
"Trinidad & Tobago": "Trinidad a Tobago",
|
||||
"Tonga": "Tonga",
|
||||
"Tokelau": "Tokelau",
|
||||
"Togo": "Togo",
|
||||
"Timor-Leste": "Východný Timor",
|
||||
"Thailand": "Thajsko",
|
||||
"Tanzania": "Tanzánia",
|
||||
"Tajikistan": "Tadžikistan",
|
||||
"Taiwan": "Taiwan",
|
||||
"São Tomé & Príncipe": "Svätý Tomáš a Princov ostrov",
|
||||
"Syria": "Sýria",
|
||||
"Switzerland": "Švajčiarsko",
|
||||
"Sweden": "Švédsko",
|
||||
"Swaziland": "Svazijsko",
|
||||
"Svalbard & Jan Mayen": "Špicbergy a Jan Mayen",
|
||||
"Suriname": "Surinam",
|
||||
"Sudan": "Sudán",
|
||||
"St. Vincent & Grenadines": "Svätý Vincent a Grenadíny",
|
||||
"St. Pierre & Miquelon": "Svätý Pierre a Miquelon",
|
||||
"St. Martin": "Svätý Martin",
|
||||
"St. Lucia": "Svätá Lucia",
|
||||
"St. Kitts & Nevis": "Svätý Krištof a Nevis",
|
||||
"St. Helena": "Svätá Helena",
|
||||
"St. Barthélemy": "Svätý Bartolomej",
|
||||
"Sri Lanka": "Srí Lanka",
|
||||
"Spain": "Španielsko",
|
||||
"South Sudan": "Južný Sudán",
|
||||
"South Korea": "Južná Kórea",
|
||||
"South Georgia & South Sandwich Islands": "Južná Georgia a Južné sendvičové ostrovy",
|
||||
"South Africa": "Južná Afrika",
|
||||
"Somalia": "Somálsko",
|
||||
"Solomon Islands": "Šalamúnove ostrovy",
|
||||
"Slovenia": "Slovinsko",
|
||||
"Slovakia": "Slovensko",
|
||||
"Sint Maarten": "Sint Maarten",
|
||||
"Singapore": "Singapur",
|
||||
"Sierra Leone": "Sierra Leone",
|
||||
"Seychelles": "Seychely",
|
||||
"Serbia": "Srbsko",
|
||||
"Senegal": "Senegal",
|
||||
"Saudi Arabia": "Saudská Arábia",
|
||||
"San Marino": "San Maríno",
|
||||
"Samoa": "Samoa",
|
||||
"Réunion": "Réunion",
|
||||
"Rwanda": "Rwanda",
|
||||
"Russia": "Rusko",
|
||||
"Romania": "Rumunsko",
|
||||
"Qatar": "Katar",
|
||||
"Puerto Rico": "Portoriko",
|
||||
"Portugal": "Portugalsko",
|
||||
"Poland": "Poľsko",
|
||||
"Pitcairn Islands": "Pitcairnove ostrovy",
|
||||
"Philippines": "Filipíny",
|
||||
"Peru": "Peru",
|
||||
"Paraguay": "Paraguaj",
|
||||
"Papua New Guinea": "Papua-Nová Guinea",
|
||||
"Panama": "Panama",
|
||||
"Palestine": "Palestína",
|
||||
"Palau": "Palau",
|
||||
"Pakistan": "Pakistan",
|
||||
"Oman": "Omán",
|
||||
"Norway": "Nórsko",
|
||||
"Northern Mariana Islands": "Severné Mariány",
|
||||
"North Korea": "Severná Kórea",
|
||||
"Norfolk Island": "Ostrov Norfolk",
|
||||
"Niue": "Niue",
|
||||
"Nigeria": "Nigéria",
|
||||
"Niger": "Niger",
|
||||
"Nicaragua": "Nikaragua",
|
||||
"New Zealand": "Nový Zéland",
|
||||
"New Caledonia": "Nová Kaledónia",
|
||||
"Netherlands": "Holandsko",
|
||||
"Nepal": "Nepál",
|
||||
"Nauru": "Nauru",
|
||||
"Namibia": "Namíbia",
|
||||
"Myanmar": "Mjanmarsko",
|
||||
"Mozambique": "Mozambik",
|
||||
"Morocco": "Maroko",
|
||||
"Montserrat": "Montserrat",
|
||||
"Montenegro": "Čierna Hora",
|
||||
"Mongolia": "Mongolsko",
|
||||
"Monaco": "Monako",
|
||||
"Moldova": "Moldavsko",
|
||||
"Micronesia": "Mikronézia",
|
||||
"Mexico": "Mexiko",
|
||||
"Mayotte": "Mayotte",
|
||||
"Mauritius": "Maurícius",
|
||||
"Mauritania": "Mauretánia",
|
||||
"Martinique": "Martinik",
|
||||
"Marshall Islands": "Maršalove ostrovy",
|
||||
"Malta": "Malta",
|
||||
"Mali": "Mali",
|
||||
"Maldives": "Maledivy",
|
||||
"Malaysia": "Malajzia",
|
||||
"Malawi": "Malawi",
|
||||
"Madagascar": "Madagaskar",
|
||||
"Macedonia": "Macedónsko",
|
||||
"Macau": "Macao",
|
||||
"Luxembourg": "Luxembursko",
|
||||
"Lithuania": "Litva",
|
||||
"Liechtenstein": "Lichtenštajnsko",
|
||||
"Libya": "Líbya",
|
||||
"Liberia": "Libéria",
|
||||
"Lesotho": "Lesotho",
|
||||
"Lebanon": "Libanon",
|
||||
"Latvia": "Lotyšsko",
|
||||
"Laos": "Laos",
|
||||
"Kyrgyzstan": "Kirgizsko",
|
||||
"Kuwait": "Kuvajt",
|
||||
"Kosovo": "Kosovo",
|
||||
"Kiribati": "Kiribati",
|
||||
"Kenya": "Keňa",
|
||||
"Kazakhstan": "Kazachstan",
|
||||
"Jordan": "Jordánsko",
|
||||
"Jersey": "Jersey",
|
||||
"Japan": "Japonsko",
|
||||
"Jamaica": "Jamajka",
|
||||
"Italy": "Taliansko",
|
||||
"Israel": "Izrael",
|
||||
"Isle of Man": "Ostrov Man",
|
||||
"Ireland": "Írsko",
|
||||
"Iraq": "Irak",
|
||||
"Iran": "Irán",
|
||||
"Indonesia": "Indonézia",
|
||||
"India": "India",
|
||||
"Iceland": "Island",
|
||||
"Hungary": "Maďarsko",
|
||||
"Hong Kong": "Hongkong",
|
||||
"Honduras": "Honduras",
|
||||
"Heard & McDonald Islands": "Teritórium Heardovho ostrova a Macdonaldových ostrovov",
|
||||
"Haiti": "Haiti",
|
||||
"Guyana": "Guyana",
|
||||
"Guinea-Bissau": "Guinea-Bissau",
|
||||
"Guinea": "Guinea",
|
||||
"Guernsey": "Guernsey",
|
||||
"Guatemala": "Guatemala",
|
||||
"Guam": "Guam",
|
||||
"Guadeloupe": "Guadeloupe",
|
||||
"Grenada": "Grenada",
|
||||
"Greenland": "Grónsko",
|
||||
"Greece": "Grécko",
|
||||
"Gibraltar": "Gibraltár",
|
||||
"Ghana": "Ghana",
|
||||
"Germany": "Nemecko",
|
||||
"Georgia": "Gruzínsko",
|
||||
"Gambia": "Gambia",
|
||||
"Gabon": "Gabon",
|
||||
"French Southern Territories": "Francúzske južné územia",
|
||||
"French Polynesia": "Francúzska Polynézia",
|
||||
"French Guiana": "Francúzska Guiana",
|
||||
"France": "Francúzsko",
|
||||
"Finland": "Fínsko",
|
||||
"Fiji": "Fidži",
|
||||
"Faroe Islands": "Faerské ostrovy",
|
||||
"Falkland Islands": "Falklandské ostrovy",
|
||||
"Ethiopia": "Etiópia",
|
||||
"Estonia": "Estónsko",
|
||||
"Eritrea": "Eritrea",
|
||||
"Equatorial Guinea": "Rovníková Guinea",
|
||||
"El Salvador": "El Salvador",
|
||||
"Egypt": "Egypt",
|
||||
"Ecuador": "Ekvádor",
|
||||
"Dominican Republic": "Dominikánska republika",
|
||||
"Dominica": "Dominika",
|
||||
"Djibouti": "Džibuti",
|
||||
"Denmark": "Dánsko",
|
||||
"Côte d’Ivoire": "Pobrežie Slonoviny",
|
||||
"Czech Republic": "Česká republika",
|
||||
"Cyprus": "Cyprus",
|
||||
"Curaçao": "Curaçao",
|
||||
"Cuba": "Kuba",
|
||||
"Croatia": "Chorvátsko",
|
||||
"Costa Rica": "Kostarika",
|
||||
"Cook Islands": "Cookove ostrovy",
|
||||
"Congo - Kinshasa": "Kongo (Kinshasa)",
|
||||
"Congo - Brazzaville": "Kongo (Brazzaville)",
|
||||
"Comoros": "Komory",
|
||||
"Colombia": "Kolumbia",
|
||||
"Cocos (Keeling) Islands": "Kokosové ostrovy",
|
||||
"Christmas Island": "Vianočný ostrov",
|
||||
"China": "Čína",
|
||||
"Chile": "Čile",
|
||||
"Chad": "Čad",
|
||||
"Central African Republic": "Stredoafrická republika",
|
||||
"Cayman Islands": "Kajmanské ostrovy",
|
||||
"Caribbean Netherlands": "Karibské Holandsko",
|
||||
"Cape Verde": "Kapverdy",
|
||||
"Canada": "Kanada",
|
||||
"Cameroon": "Kamerun",
|
||||
"Cambodia": "Kambodža",
|
||||
"Burundi": "Burundi",
|
||||
"Burkina Faso": "Burkina Faso",
|
||||
"Bulgaria": "Bulharsko",
|
||||
"Brunei": "Brunej",
|
||||
"British Virgin Islands": "Britské Panenské ostrovy",
|
||||
"British Indian Ocean Territory": "Britské indickooceánske územie",
|
||||
"Brazil": "Brazília",
|
||||
"Bouvet Island": "Bouvetov ostrov",
|
||||
"Botswana": "Botswana",
|
||||
"Bosnia": "Bosna",
|
||||
"Bolivia": "Bolívia",
|
||||
"Bhutan": "Bhután",
|
||||
"Bermuda": "Bermudy",
|
||||
"Benin": "Benin",
|
||||
"Belize": "Belize",
|
||||
"Belgium": "Belgicko",
|
||||
"Belarus": "Bielorusko",
|
||||
"Barbados": "Barbados",
|
||||
"Bangladesh": "Bangladéš",
|
||||
"Bahrain": "Bahrajn",
|
||||
"Bahamas": "Bahamy",
|
||||
"Azerbaijan": "Azerbajdžan",
|
||||
"Austria": "Rakúsko",
|
||||
"Australia": "Austrália",
|
||||
"Aruba": "Aruba",
|
||||
"Armenia": "Arménsko",
|
||||
"Argentina": "Argentína",
|
||||
"Antigua & Barbuda": "Antigua a Barbuda",
|
||||
"Antarctica": "Antarktída",
|
||||
"Anguilla": "Anguilla",
|
||||
"Angola": "Angola",
|
||||
"Andorra": "Andorra",
|
||||
"American Samoa": "Americká Samoa",
|
||||
"Algeria": "Alžírsko",
|
||||
"Albania": "Albánsko",
|
||||
"Åland Islands": "Alandské ostrovy",
|
||||
"Afghanistan": "Afganistan",
|
||||
"United States": "Spojené Štáty",
|
||||
"United Kingdom": "Spojené Kráľovstvo",
|
||||
"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.": "Domáci server odmietol váš pokus o prihlásenie. Môže to byť spôsobené tým, že požiadavky trvajú príliš dlho. Prosím skúste znova. Ak to bude pokračovať, kontaktujte svojho správcu domovského servera.",
|
||||
"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 bol nedosiahnuteľný a nemohol vás prihlásiť. Skúste to znova. Ak to bude pokračovať, kontaktujte svojho správcu domovského servera.",
|
||||
"Try again": "Skúste to znova",
|
||||
"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žiadali sme prehliadač, aby si pamätal, aký domovský server používate na prihlásenie, ale váš prehliadač ho, bohužiaľ, zabudol. Prejdite na prihlasovaciu stránku a skúste to znova.",
|
||||
"We couldn't log you in": "Nemohli sme vás prihlásiť",
|
||||
"This will end the conference for everyone. Continue?": "Týmto sa konferencia ukončí pre všetkých. Chcete pokračovať?",
|
||||
"End conference": "Koniec konferencie",
|
||||
"You've reached the maximum number of simultaneous calls.": "Dosiahli ste maximálny počet súčasných hovorov.",
|
||||
"Too Many Calls": "Príliš veľa hovorov",
|
||||
"No other application is using the webcam": "Webkameru nepoužíva žiadna iná aplikácia",
|
||||
"Permission is granted to use the webcam": "Udeľuje sa povolenie na používanie webkamery",
|
||||
"A microphone and webcam are plugged in and set up correctly": "Mikrofón a webkamera sú pripojené a správne nastavené",
|
||||
"Call failed because webcam or microphone could not be accessed. Check that:": "Hovor zlyhal, pretože nebolo možné získať prístup k webkamere alebo mikrofónu. Skontrolujte, či:",
|
||||
"Unable to access webcam / microphone": "Nie je možné získať prístup k webkamere / mikrofónu",
|
||||
"Unable to access microphone": "Nie je možné získať prístup k mikrofónu",
|
||||
"Call failed because microphone could not be accessed. Check that a microphone is plugged in and set up correctly.": "Hovor zlyhal, pretože nebolo možné získať prístup k mikrofónu. Skontrolujte, či je mikrofón pripojený a správne nastavený.",
|
||||
"The call was answered on another device.": "Hovor bol prijatý na inom zariadení.",
|
||||
"The call could not be established": "Hovor nemohol byť realizovaný",
|
||||
"The other party declined the call.": "Druhá strana odmietla hovor.",
|
||||
"Call Declined": "Hovor odmietnutý"
|
||||
}
|
||||
|
|
|
@ -3043,5 +3043,18 @@
|
|||
"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"
|
||||
"Recently visited rooms": "Dhoma të vizituara së fundi",
|
||||
"Upgrade to pro": "Përmirësojeni me pro",
|
||||
"Minimize dialog": "Minimizoje dialogun",
|
||||
"Maximize dialog": "Zmadhoje plotësisht dialogun",
|
||||
"%(hostSignupBrand)s Setup": "Ujdisje %(hostSignupBrand)s",
|
||||
"You should know": "Duhet të dini",
|
||||
"Privacy Policy": "Rregulla Privatësie",
|
||||
"Cookie Policy": "Rregulla Cookie-sh",
|
||||
"Learn more in our <privacyPolicyLink />, <termsOfServiceLink /> and <cookiePolicyLink />.": "Mësoni më tepër te <privacyPolicyLink />, <termsOfServiceLink /> dhe <cookiePolicyLink /> tonat.",
|
||||
"Continuing temporarily allows the %(hostSignupBrand)s setup process to access your account to fetch verified email addresses. This data is not stored.": "Vazhdimi lejon përkohësisht procesin e ujdisjes së %(hostSignupBrand)s të hyjë në llogarinë tuaj dhe të sjellë adresa email të verifikuara. Këto të dhëna nuk depozitohen.",
|
||||
"Failed to connect to your homeserver. Please close this dialog and try again.": "S’u arrit të lidhej me shërbyesin tuaj Home. Ju lutemi, mbylleni këtë dialog dhe riprovoni.",
|
||||
"Abort": "Ndërprite",
|
||||
"Are you sure you wish to abort creation of the host? The process cannot be continued.": "Jeni i sigurt se doni të ndërpritet krijimi i strehës? Procesi s’mund të vazhdohet.",
|
||||
"Confirm abort of host creation": "Ripohoni ndërprerjen e krijimit të strehës"
|
||||
}
|
||||
|
|
|
@ -1001,7 +1001,7 @@
|
|||
"Show rooms with unread notifications first": "Прво прикажи собе са непрочитаним обавештењима",
|
||||
"Enable experimental, compact IRC style layout": "Омогући пробни, збијенији распоред у IRC стилу",
|
||||
"Got It": "Разумем",
|
||||
"Light bulb": "Сијалица",
|
||||
"Light bulb": "сијалица",
|
||||
"Algorithm: ": "Алгоритам: ",
|
||||
"Go back": "Назад",
|
||||
"Hey you. You're the best!": "Хеј! Само напред!",
|
||||
|
@ -1438,5 +1438,75 @@
|
|||
"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.": "Добро проверите да ли сервер подржава изабрану верзију собе и пробајте поново."
|
||||
"Double check that your server supports the room version chosen and try again.": "Добро проверите да ли сервер подржава изабрану верзију собе и пробајте поново.",
|
||||
"a few seconds from now": "за неколико секунди",
|
||||
"The message you are trying to send is too large.": "Порука коју покушавате да пошаљете је предугачка.",
|
||||
"Pin": "чиода",
|
||||
"Folder": "фасцикла",
|
||||
"Headphones": "слушалице",
|
||||
"Anchor": "сидро",
|
||||
"Bell": "звоно",
|
||||
"Trumpet": "труба",
|
||||
"Guitar": "гитара",
|
||||
"Ball": "лопта",
|
||||
"Trophy": "трофеј",
|
||||
"Rocket": "ракета",
|
||||
"Aeroplane": "авион",
|
||||
"Bicycle": "бицикл",
|
||||
"Train": "воз",
|
||||
"Flag": "застава",
|
||||
"Telephone": "телефон",
|
||||
"Hammer": "чекић",
|
||||
"Key": "кључ",
|
||||
"Lock": "катанац",
|
||||
"Scissors": "маказе",
|
||||
"Paperclip": "спајалица",
|
||||
"Pencil": "оловка",
|
||||
"Book": "књига",
|
||||
"Gift": "поклон",
|
||||
"Clock": "сат",
|
||||
"Hourglass": "пешчаник",
|
||||
"Umbrella": "кишобран",
|
||||
"Thumbs up": "палац горе",
|
||||
"Santa": "Мраз",
|
||||
"Spanner": "кључ",
|
||||
"Glasses": "наочаре",
|
||||
"Hat": "шешир",
|
||||
"Robot": "робот",
|
||||
"Smiley": "смајли",
|
||||
"Heart": "срце",
|
||||
"Cake": "торта",
|
||||
"Pizza": "пица",
|
||||
"Corn": "кукуруз",
|
||||
"Strawberry": "јагода",
|
||||
"Apple": "јабука",
|
||||
"Banana": "банана",
|
||||
"Fire": "ватра",
|
||||
"Cloud": "облак",
|
||||
"Moon": "месец",
|
||||
"Globe": "глобус",
|
||||
"Mushroom": "печурка",
|
||||
"Cactus": "кактус",
|
||||
"Tree": "дрво",
|
||||
"Flower": "цвет",
|
||||
"Butterfly": "лептир",
|
||||
"Octopus": "октопод",
|
||||
"Fish": "риба",
|
||||
"Turtle": "корњача",
|
||||
"Penguin": "пингвин",
|
||||
"Rooster": "петао",
|
||||
"Panda": "панда",
|
||||
"Rabbit": "зец",
|
||||
"Elephant": "слон",
|
||||
"Pig": "прасе",
|
||||
"Unicorn": "једнорог",
|
||||
"Horse": "коњ",
|
||||
"Lion": "лав",
|
||||
"Cat": "мачка",
|
||||
"Dog": "пас",
|
||||
"To be secure, do this in person or use a trusted way to communicate.": "Да будете сигурни, ово обавите лично или путем поузданог начина комуникације.",
|
||||
"They don't match": "Не поклапају се",
|
||||
"They match": "Поклапају се",
|
||||
"Cancelling…": "Отказујем…",
|
||||
"Show stickers button": "Прикажи дугме за налепнице"
|
||||
}
|
||||
|
|
|
@ -2983,5 +2983,18 @@
|
|||
"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"
|
||||
"We couldn't log you in": "Vi kunde inte logga in dig",
|
||||
"Upgrade to pro": "Uppgradera till pro",
|
||||
"Minimize dialog": "Minimera dialog",
|
||||
"Maximize dialog": "Maximera dialog",
|
||||
"%(hostSignupBrand)s Setup": "inställning av %(hostSignupBrand)s",
|
||||
"You should know": "Du behöver veta",
|
||||
"Privacy Policy": "sekretesspolicy",
|
||||
"Cookie Policy": "kakpolicy",
|
||||
"Learn more in our <privacyPolicyLink />, <termsOfServiceLink /> and <cookiePolicyLink />.": "Läs mer i våran <privacyPolicyLink />, <termsOfServiceLink /> och <cookiePolicyLink />.",
|
||||
"Continuing temporarily allows the %(hostSignupBrand)s setup process to access your account to fetch verified email addresses. This data is not stored.": "Om du fortsätter så tillåts inställningsprocessen för %(hostSignupBrand)s att temporärt komma åt din konto för att hämta verifierade e-postadresser. Den här datan lagras inte.",
|
||||
"Failed to connect to your homeserver. Please close this dialog and try again.": "Misslyckades att ansluta till din hemserver. Vänligen stäng den här dialogrutan och försök igen.",
|
||||
"Abort": "Avbryt",
|
||||
"Are you sure you wish to abort creation of the host? The process cannot be continued.": "Är du säker på att du vill avbryta skapande av värden? Processen kan inte fortsättas.",
|
||||
"Confirm abort of host creation": "Bekräfta avbrytning av värdskapande"
|
||||
}
|
||||
|
|
|
@ -2279,7 +2279,7 @@
|
|||
"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",
|
||||
"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": "",
|
||||
"No recent messages by %(user)s found": "%(user)s kullanıcısın hiç yeni ileti yok",
|
||||
"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",
|
||||
|
@ -2424,5 +2424,98 @@
|
|||
"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."
|
||||
"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.",
|
||||
"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>": "Bir oda için şifreleme bir kez etkinleştirildiğinde geri alınamaz. Şifrelenmiş bir odada gönderilen iletiler yalnızca ve yalnızca odadaki kullanıcılar tarafından görülebilir. Şifrelemeyi etkinleştirmek bir çok bot'un ve köprülemenin doğru çalışmasını etkileyebilir. <a>Şifrelemeyle ilgili daha fazla bilgi edinmek için.</a>",
|
||||
"Link this email with your account in Settings to receive invites directly in %(brand)s.": "Doğrudan %(brand)s uygulamasından davet isteği almak için bu e-posta adresini Ayarlardan kendi hesabınıza bağlayın.",
|
||||
"Failed to remove '%(roomName)s' from %(groupId)s": "",
|
||||
"This client does not support end-to-end encryption.": "Bu istemci uçtan uca şifrelemeyi desteklemiyor.",
|
||||
"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?": "Bu kullanıcı etkisizleştirmek onu bir daha oturum açmasını engeller.Ek olarak da bulundukları bütün odalardan atılırlar. Bu eylem geri dönüştürülebilir. Bu kullanıcıyı etkisizleştirmek istediğinize emin misiniz?",
|
||||
"Disinvite this user from community?": "Bu kullanıcının bu topluluğa davetini iptal et?",
|
||||
"For a large amount of messages, this might take some time. Please don't refresh your client in the meantime.": "Çok sayıda ileti için bu biraz sürebilir. Lütfen bu sürede kullandığınız istemciyi yenilemeyin.",
|
||||
"You are about to remove %(count)s messages by %(user)s. This cannot be undone. Do you wish to continue?|other": "%(user)s kullanıcısından %(count)s sayıda ileti silmek üzeresiniz. Bu işlem geri döndürülemez. Sürdürmek istiyor musunuz?",
|
||||
"Remove recent messages by %(user)s": "%(user)s kullanıcısından en son iletileri kaldır",
|
||||
"Try scrolling up in the timeline to see if there are any earlier ones.": "Daha önceden kalma iletilerin var olup olmadığını kontrol etmek için zaman çizelgesinde yukarı doğru kaydırın.",
|
||||
"Set my room layout for everyone": "Oda düzenimi herkes için ayarla",
|
||||
"Yours, or the other users’ internet connection": "Sizin ya da diğer kullanıcıların internet bağlantısı",
|
||||
"The homeserver the user you’re verifying is connected to": "Doğruladığınız kullanıcının bağlı olduğunu ana sunucu:",
|
||||
"For extra security, verify this user by checking a one-time code on both of your devices.": "Fazladan güvenlik sağlamak için bu kullanıcıyı cihazlarınızdaki tek kezlik kod ile doğrulayın.",
|
||||
"In encrypted rooms, your messages are secured and only you and the recipient have the unique keys to unlock them.": "Şifrelenmiş odalarda iletileriniz şifreledir ve yalnızca sizde ve gönderdiğiniz kullanıcılarda iletileri açmak için anahtarlar vardır.",
|
||||
"Messages in this room are not end-to-end encrypted.": "Bu odadaki iletiler uçtan uca şifreli değildir.",
|
||||
"Messages in this room are end-to-end encrypted.": "Bu odadaki iletiler uçtan uca şifrelenmiştir.",
|
||||
"Your messages are secured and only you and the recipient have the unique keys to unlock them.": "İletileriniz şifreledir ve yalnızca sizde ve gönderdiğiniz kullanıcılarda iletileri açmak için anahtarlar vardır.",
|
||||
"Waiting for %(displayName)s to accept…": "%(displayName)s kullanıcısın onaylaması için bekleniliyor…",
|
||||
"Waiting for you to accept on your other session…": "Diğer oturumunuzda onaylamanız için bekleniliyor…",
|
||||
"URL previews are disabled by default for participants in this room.": "URL ön izlemeleri, bu odadaki kullanıcılar için varsayılan olarak devre dışı bıraktırılmıştır.",
|
||||
"There was an error updating the room's alternative addresses. It may not be allowed by the server or a temporary failure occurred.": "Adanın alternatif adresini güncellerken bir hata oluştu. Bu eylem, sunucu tarafından izin verilmemiş olabilir ya da geçici bir sorun oluşmuş olabilir.",
|
||||
"There was an error updating the room's main address. It may not be allowed by the server or a temporary failure occurred.": "Odanın ana adresini güncellerken bir sorun oluştu. Bu eylem, sunucu tarafından izin verilmemiş olabilir ya da geçici bir sorun oluşmuş olabilir.",
|
||||
"Hint: Begin your message with <code>//</code> to start it with a slash.": "İpucu: İletilerinizi eğik çizgi ile başlatmak için <code>//</code> ile başlayın.",
|
||||
"You can use <code>/help</code> to list available commands. Did you mean to send this as a message?": "<code>/help</code> yazarak var olan komutları listeleyebilirsiniz. Yoksa bunu bir ileti olarak mı göndermek istemiştiniz?",
|
||||
"This room is running room version <roomVersion />, which this homeserver has marked as <i>unstable</i>.": "Bu oda, <roomVersion /> oda sürümünü kullanmaktadır ve ana sunucunuz tarafından <i>tutarsız</i> olarak işaretlenmiştir.",
|
||||
"Upgrading this room will shut down the current instance of the room and create an upgraded room with the same name.": "Bu odayı güncellerseniz bu oda kapanacak ve yerine aynı adlı, güncellenmiş bir oda geçecek.",
|
||||
"Favourited": "Beğenilenler",
|
||||
"Mentions & Keywords": "Değinilmeler & Anahtar Sözcükler",
|
||||
"Share this email in Settings to receive invites directly in %(brand)s.": "Doğrdan %(brand)s uygulamasından davet isteği almak için Ayarlardan bu e-posta adresini paylaşın.",
|
||||
"Use an identity server in Settings to receive invites directly in %(brand)s.": "Doğrudan %(brand)s uygulamasından davet isteği almak için Ayarlardan bir kimlik sunucusu belirleyin.",
|
||||
"This invite to %(roomName)s was sent to %(email)s which is not associated with your account": "Bu davet, %(roomName)s odasına %(email)s e-posta adresi üzerinden yollanmıştır ve sizinle ilgili değildir",
|
||||
"Recently visited rooms": "En son ziyaret edilmiş odalar",
|
||||
"If your other sessions do not have the key for this message you will not be able to decrypt them.": "Eğer diğer oturumlarınızın bu iletiyi açacak anahtarı yoksa deşifreleyemezsiniz.",
|
||||
"Discovery options will appear once you have added a phone number above.": "Bulunulabilirlik seçenekleri, yukarıya bir telefon numarası ekleyince ortaya çıkacaktır.",
|
||||
"Discovery options will appear once you have added an email above.": "Bulunulabilirlik seçenekleri, yukarıya bir e-posta adresi ekleyince ortaya çıkacaktır.",
|
||||
"Changes to who can read history will only apply to future messages in this room. The visibility of existing history will be unchanged.": "Geçmişi kimin okuyabileceğini değiştirmek yalnızca odadaki yeni iletileri etkiler. Var olan geçmiş değişmeden kalacaktır.",
|
||||
"To link to this room, please add an address.": "Bu odaya bağlamak için lütfen bir adres ekleyin.",
|
||||
"Remove messages sent by others": "Diğerleri tarafından gönderilen iletileri kaldır",
|
||||
"An error occurred changing the room's power level requirements. Ensure you have sufficient permissions and try again.": "Odanın güç düzeyi gereksinimlerini değiştirirken bir hata ile karşılaşıldı. Yeterince yetkiniz olduğunuzdan emin olup yeniden deyin.",
|
||||
"This room isn’t bridging messages to any platforms. <a>Learn more.</a>": "Bu oda, iletileri hiçbir platforma köprülemiyor. <a>Daha fazla bilgi için.</a>",
|
||||
"This room is bridging messages to the following platforms. <a>Learn more.</a>": "Bu oda, iletileri sözü edilen platformlara köprülüyor. <a>Daha fazla bilgi için.</a>",
|
||||
"A session's public name is visible to people you communicate with": "Bir oturumun halka açık adı iletişim kurduğunuz kişilerce görülebilir",
|
||||
"Manage the names of and sign out of your sessions below or <a>verify them in your User Profile</a>.": "Aşağıdan oturumlarınızın adlarını düzenleyin veya oturumlarızdan çıkın ya da <a>oturumlarınızı Kullanıcı Profilinden doğrulayın</a>.",
|
||||
"Your server admin has disabled end-to-end encryption by default in private rooms & Direct Messages.": "Sunucu yönetinciniz varsayılan olarak odalarda ve doğrudandan iletilerde uçtan uca şifrelemeyi kapadı.",
|
||||
"Read Marker lifetime (ms)": "Okundu iminin gösterim süresi (ms)",
|
||||
"Read Marker off-screen lifetime (ms)": "Okundu iminin ekran dışındaki gösterim süresi (ms)",
|
||||
"Composer": "Yazan",
|
||||
"Room ID or address of ban list": "Engelleme listesinin oda kimliği ya da adresi",
|
||||
"Your personal ban list holds all the users/servers you personally don't want to see messages from. After ignoring your first user/server, a new room will show up in your room list named 'My Ban List' - stay in this room to keep the ban list in effect.": "Kişisel engelleme listeniz, ileti almak istemediğiniz kullanıcı veya sunucuları bulundurur. İlk engellemenizde oda listenizde \"My Ban List\" adlı bir oda oluşturulacaktır. Engelleme listesinin yürürlüğünü sürdürmesini istiyorsanız o odada kalın.",
|
||||
"Ignoring people is done through ban lists which contain rules for who to ban. Subscribing to a ban list means the users/servers blocked by that list will be hidden from you.": "Kullanıcıları engelleme, hangi kullanıcıları engelleyeceğini belirleyen kurallar bulunduran bir engelleme listesi kullanılarak gerçekleşir. Bir engelleme listesine abone olmak, o listeden engellenen kullanıcıların veya sunucuların sizden gizlenmesi demektir.",
|
||||
"Add users and servers you want to ignore here. Use asterisks to have %(brand)s match any characters. For example, <code>@bot:*</code> would ignore all users that have the name 'bot' on any server.": "Görmezden gelmek istediğiniz kullanıcıları ya da sunucuları buraya ekleyin. %(brand)s uygulamasının herhangi bir karakteri eşleştirmesini istiyorsanız yıldız imi kullanın. Örneğin <code>@fobar:*</code>, \"foobar\" adlı kullanıcıların hepsini bütün sunucularda görmezden gelir.",
|
||||
"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.": "Eğer GitHub aracılığıyla bir hata bildirdiyseniz hata kayıtları sorunu bulmamızda bize yardımcı olabilir. Hata kayıtları kullanıcı adınızı, daha önceden bulunmuş olduğunuz odaların veya grupların kimliklerini veya takma adlarını ve diğer kullanıcıların adlarını içerir. Hata kayıtları ileti içermez.",
|
||||
"Please verify the room ID or address and try again.": "Lütfen oda kimliğini ya da adresini doğrulayıp yeniden deneyin.",
|
||||
"For help with using %(brand)s, click <a>here</a> or start a chat with our bot using the button below.": "%(brand)s uygulamasına yardımcı olmak için <a>buraya</a> tıklayın ya da aşağıdaki tuşları kullanarak bot'umuzla sohbet edin.",
|
||||
"Agree to the identity server (%(serverName)s) Terms of Service to allow yourself to be discoverable by email address or phone number.": "Başkaları tarafından e-posta adresi ya da telefon numarası ile bulunabilmek için %(serverName)s kimlik sunucusunun Kullanım Koşullarını kabul edin.",
|
||||
"Your password was successfully changed. You will not receive push notifications on other sessions until you log back in to them": "Parolanız başarıyla değişmiştir. Diğer oturumlarınızda yeniden oturum açmadığınız sürece anlık bildirim almayacaksınız",
|
||||
"Flair": "Özel Yetenek",
|
||||
"Appearance Settings only affect this %(brand)s session.": "Dış Görünüş Ayarları yalnızca bu %(brand)s oturumunu etkileyecek.",
|
||||
"Set the name of a font installed on your system & %(brand)s will attempt to use it.": "Sisteminizde bulunan bir font adı belirtiniz. %(brand)s sizin için onu kullanmaya çalışacak.",
|
||||
"Invalid theme schema.": "Geçersiz tema taslağı.",
|
||||
"Using an identity server is optional. If you choose not to use an identity server, you won't be discoverable by other users and you won't be able to invite others by email or phone.": "Bir kimlik sunucusu kullanmak isteğe bağlıdır. Eğer bir tane kullanmak istemezseniz başkaları tarafından bulunamayabilir ve başkalarını e-posta adresi ya da telefon numarası ile davet edemeyebilirsiniz.",
|
||||
"Disconnecting from your identity server will mean you won't be discoverable by other users and you won't be able to invite others by email or phone.": "Kimlik sunucunuz ile bağlantıyı keserseniz başkaları tarafından bulunamayabilir ve başkalarını e-posta adresi ya da telefon numarası ile davet edemeyebilirsiniz.",
|
||||
"You are not currently using an identity server. To discover and be discoverable by existing contacts you know, add one below.": "Şu anda herhangi bir kimlik sunucusu kullanmıyorsunuz. Başkalarını bulmak ve başkaları tarafından bulunabilmek için aşağıya bir kimlik sunucusu ekleyin.",
|
||||
"If you don't want to use <server /> to discover and be discoverable by existing contacts you know, enter another identity server below.": "Eğer <server /> kimlik sunucusunu kullanarak başkalarını bulmak ve başkalarını tarafından bulunabilmek istemiyorsanız aşağıya bir başka kimlik sunucusu giriniz.",
|
||||
"You are currently using <server></server> to discover and be discoverable by existing contacts you know. You can change your identity server below.": "Şu anda <server></server> kimlik sunucusunu kullanarak başkalarını buluyorsunuz ve başkalarını tarafından bulunabiliyorsunuz. Aşağıdan kimlik sunucunuzu değiştirebilirsiniz.",
|
||||
"check your browser plugins for anything that might block the identity server (such as Privacy Badger)": "kimlik sunucunuza erişimi engelleyen herhangi bir eklenti (Privacy Badger gibi) için tarayıcınızı kontrol ediniz",
|
||||
"You should <b>remove your personal data</b> from identity server <idserver /> before disconnecting. Unfortunately, identity server <idserver /> is currently offline or cannot be reached.": "Bağlantınızı kesmeden önce <b>kişisel verilerinizi <idserver /> kimlik sunucusundan silmelisiniz</b>. Ne yazık ki <idserver /> kimlik sunucusu şu anda çevrim dışı ya da bir nedenden ötürü erişilemiyor.",
|
||||
"Disconnect from the identity server <current /> and connect to <new /> instead?": "<current /> kimlik sunucusundan bağlantı kesilip <new /> kimlik sunucusuna bağlanılsın mı?",
|
||||
"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.": "Olası bir oturuma erişememe durumunu önlemek için şifreleme anahtarlarınızı hesap verilerinizle yedekleyin. Anahtarlarınız eşsiz bir güvenlik anahtarı ile güvenlenecektir.",
|
||||
"well formed": "uygun biçimlendirilmiş",
|
||||
"Master private key:": "Ana gizli anahtar",
|
||||
"Cross-signing is not set up.": "Çapraz imzalama ayarlanmamış.",
|
||||
"Your account has a cross-signing identity in secret storage, but it is not yet trusted by this session.": "Hesabınız gizli belleğinde çapraz imzalama kimliği barındırıyor ancak bu oturumda daha kullanılmış değil.",
|
||||
"Cross-signing is ready for use.": "Çapraz imzalama zaten kullanılıyor.",
|
||||
"Channel: <channelLink/>": "Kanal: <channelLink/>",
|
||||
"Workspace: <networkLink/>": "Çalışma alanı: <networkLink/>",
|
||||
"Unable to look up phone number": "Telefon numarasına bakılamadı",
|
||||
"There was an error looking up the phone number": "Telefon numarasına bakarken bir hata oluştu",
|
||||
"Allow fallback call assist server turn.matrix.org when your homeserver does not offer one (your IP address would be shared during a call)": "",
|
||||
"Use Ctrl + F to search": "Arama yapmak için Ctrl + F",
|
||||
"Use Command + F to search": "Arama yapmak için Command + F",
|
||||
"Show line numbers in code blocks": "Kod bloklarında satır sayısını göster",
|
||||
"Expand code blocks by default": "Varsayılan olarak kod bloklarını genişlet",
|
||||
"Show stickers button": "Çıkartma tuşunu göster",
|
||||
"Use app": "Uygulamayı kullan",
|
||||
"Element Web is experimental on mobile. For a better experience and the latest features, use our free native app.": "Element Web arayüzü mobil üzerinde daha tamamlanmadı. En yeni özellikler ve daha iyi bir deneyim için özgür yazılım mobil uygulamamızı kullanın.",
|
||||
"Use app for a better experience": "Daha iyi bir deneyim için uygulamayı kullanın",
|
||||
"%(senderName)s has updated the widget layout": "%(senderName)s widget düzenini güncelledi",
|
||||
"Remain on your screen while running": "Uygulama çalışırken lütfen başka uygulamaya geçmeyin",
|
||||
"Your homeserver was unreachable and was not able to log you in. Please try again. If this continues, please contact your homeserver administrator.": "Ana sunucunuza erişilemedi ve oturum açmanıza izin verilmedi. Lütfen yeniden deneyin. Eğer hata devam ederse ana sunucunuzun yöneticisine bildirin.",
|
||||
"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.": "Ana sunucunuz oturum açma isteğinizi reddetti. Bunun nedeni bağlantı yavaşlığı olabilir. Lütfen yeniden deneyin. Eğer hata devam ederse ana sunucunuzun yöneticisine bildirin.",
|
||||
"Try again": "Yeniden deneyin"
|
||||
}
|
||||
|
|
|
@ -1596,5 +1596,6 @@
|
|||
"<requestLink>Re-request encryption keys</requestLink> from your other sessions.": "<requestLink>Повторно запитати ключі шифрування</requestLink> з інших сеансів.",
|
||||
"Enable encryption?": "Увімкнути шифрування?",
|
||||
"Enable room encryption": "Увімкнути шифрування кімнати",
|
||||
"Encryption": "Шифрування"
|
||||
"Encryption": "Шифрування",
|
||||
"Try again": "Спробувати ще раз"
|
||||
}
|
||||
|
|
|
@ -2828,7 +2828,7 @@
|
|||
"United States": "美國",
|
||||
"United Kingdom": "英國",
|
||||
"%(creator)s created this DM.": "%(creator)s 建立了此直接訊息。",
|
||||
"Messages in this room are end-to-end encrypted. When people join, you can verify them in their profile, just tap on their avatar.": "此聊天適中的訊息為端到端加密。當人們加入,您可以在他們的個人檔案中驗證他們,只要點擊他們的大頭照就可以了。",
|
||||
"Messages in this room are end-to-end encrypted. When people join, you can verify them in their profile, just tap on their avatar.": "此聊天室中的訊息為端到端加密。當人們加入,您可以在他們的個人檔案中驗證他們,只要點擊他們的大頭照就可以了。",
|
||||
"Messages here are end-to-end encrypted. Verify %(displayName)s in their profile - tap on their avatar.": "此處的訊息為端到端加密。請在他們的個人檔案中驗證 %(displayName)s,只要點擊他們的大頭照就可以了。",
|
||||
"This is the start of <roomName/>.": "這是 <roomName/> 的開頭。",
|
||||
"Add a photo, so people can easily spot your room.": "新增圖片,這樣人們就可以輕鬆發現您的聊天室。",
|
||||
|
@ -3055,5 +3055,18 @@
|
|||
"Share your screen": "分享您的畫面",
|
||||
"Recently visited rooms": "最近造訪過的聊天室",
|
||||
"Show line numbers in code blocks": "在程式碼區塊中顯示行號",
|
||||
"Expand code blocks by default": "預設展開程式碼區塊"
|
||||
"Expand code blocks by default": "預設展開程式碼區塊",
|
||||
"Upgrade to pro": "升級到專業版",
|
||||
"Minimize dialog": "最小化對話框",
|
||||
"Maximize dialog": "最大化對話框",
|
||||
"%(hostSignupBrand)s Setup": "%(hostSignupBrand)s 設定",
|
||||
"You should know": "您應該知道",
|
||||
"Privacy Policy": "隱私權政策",
|
||||
"Cookie Policy": "Cookie 政策",
|
||||
"Learn more in our <privacyPolicyLink />, <termsOfServiceLink /> and <cookiePolicyLink />.": "在我們的 <privacyPolicyLink />、<termsOfServiceLink /> 與 <cookiePolicyLink /> 取得更多資訊。",
|
||||
"Continuing temporarily allows the %(hostSignupBrand)s setup process to access your account to fetch verified email addresses. This data is not stored.": "暫時繼續進行讓 %(hostSignupBrand)s 設定流程可以存取您的帳號來擷取已驗證的電子郵件地址。此資料未儲存。",
|
||||
"Failed to connect to your homeserver. Please close this dialog and try again.": "無法連線到您的家伺服器。請關閉對話框並再試一次。",
|
||||
"Abort": "中止",
|
||||
"Are you sure you wish to abort creation of the host? The process cannot be continued.": "您確定您想要中止主機建立嗎?流程將無法繼續。",
|
||||
"Confirm abort of host creation": "確認中止主機建立"
|
||||
}
|
||||
|
|
26
src/settings/Layout.ts
Normal file
26
src/settings/Layout.ts
Normal file
|
@ -0,0 +1,26 @@
|
|||
/*
|
||||
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 PropTypes from 'prop-types';
|
||||
|
||||
/* TODO: This should be later reworked into something more generic */
|
||||
export enum Layout {
|
||||
IRC = "irc",
|
||||
Group = "group"
|
||||
}
|
||||
|
||||
/* We need this because multiple components are still using JavaScript */
|
||||
export const LayoutPropType = PropTypes.oneOf(Object.values(Layout));
|
|
@ -36,6 +36,9 @@ import { isMac } from '../Keyboard';
|
|||
import UIFeatureController from "./controllers/UIFeatureController";
|
||||
import { UIFeature } from "./UIFeature";
|
||||
import { OrderedMultiController } from "./controllers/OrderedMultiController";
|
||||
import { Layout } from "./Layout";
|
||||
import ReducedMotionController from './controllers/ReducedMotionController';
|
||||
import IncompatibleController from "./controllers/IncompatibleController";
|
||||
|
||||
// These are just a bunch of helper arrays to avoid copy/pasting a bunch of times
|
||||
const LEVELS_ROOM_SETTINGS = [
|
||||
|
@ -117,6 +120,14 @@ export interface ISetting {
|
|||
}
|
||||
|
||||
export const SETTINGS: {[setting: string]: ISetting} = {
|
||||
"feature_spaces": {
|
||||
isFeature: true,
|
||||
displayName: _td("Spaces prototype. Incompatible with Communities, Communities v2 and Custom Tags. " +
|
||||
"Requires compatible homeserver for some features."),
|
||||
supportedLevels: LEVELS_FEATURE,
|
||||
default: false,
|
||||
controller: new ReloadOnChangeController(),
|
||||
},
|
||||
"feature_latex_maths": {
|
||||
isFeature: true,
|
||||
displayName: _td("Render LaTeX maths in messages"),
|
||||
|
@ -131,6 +142,7 @@ export const SETTINGS: {[setting: string]: ISetting} = {
|
|||
),
|
||||
supportedLevels: LEVELS_FEATURE,
|
||||
default: false,
|
||||
controller: new IncompatibleController("feature_spaces"),
|
||||
},
|
||||
"feature_new_spinner": {
|
||||
isFeature: true,
|
||||
|
@ -156,6 +168,7 @@ export const SETTINGS: {[setting: string]: ISetting} = {
|
|||
displayName: _td("Group & filter rooms by custom tags (refresh to apply changes)"),
|
||||
supportedLevels: LEVELS_FEATURE,
|
||||
default: false,
|
||||
controller: new IncompatibleController("feature_spaces"),
|
||||
},
|
||||
"feature_state_counters": {
|
||||
isFeature: true,
|
||||
|
@ -186,6 +199,8 @@ export const SETTINGS: {[setting: string]: ISetting} = {
|
|||
displayName: _td("Show message previews for reactions in DMs"),
|
||||
supportedLevels: LEVELS_FEATURE,
|
||||
default: false,
|
||||
// this option is a subset of `feature_roomlist_preview_reactions_all` so disable it when that one is enabled
|
||||
controller: new IncompatibleController("feature_roomlist_preview_reactions_all"),
|
||||
},
|
||||
"feature_roomlist_preview_reactions_all": {
|
||||
isFeature: true,
|
||||
|
@ -617,6 +632,8 @@ export const SETTINGS: {[setting: string]: ISetting} = {
|
|||
default: 3000,
|
||||
},
|
||||
"showCallButtonsInComposer": {
|
||||
// Dev note: This is no longer "in composer" but is instead "in room header".
|
||||
// TODO: Rename with settings v3
|
||||
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS_WITH_CONFIG,
|
||||
default: true,
|
||||
controller: new UIFeatureController(UIFeature.Voip),
|
||||
|
@ -643,15 +660,15 @@ export const SETTINGS: {[setting: string]: ISetting} = {
|
|||
displayName: _td("IRC display name width"),
|
||||
default: 80,
|
||||
},
|
||||
"useIRCLayout": {
|
||||
"layout": {
|
||||
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
|
||||
displayName: _td("Enable experimental, compact IRC style layout"),
|
||||
default: false,
|
||||
default: Layout.Group,
|
||||
},
|
||||
"showChatEffects": {
|
||||
supportedLevels: LEVELS_ACCOUNT_SETTINGS,
|
||||
displayName: _td("Show chat effects"),
|
||||
displayName: _td("Show chat effects (animations when receiving e.g. confetti)"),
|
||||
default: true,
|
||||
controller: new ReducedMotionController(),
|
||||
},
|
||||
"Widgets.pinned": { // deprecated
|
||||
supportedLevels: LEVELS_ROOM_OR_ACCOUNT,
|
||||
|
@ -728,6 +745,7 @@ export const SETTINGS: {[setting: string]: ISetting} = {
|
|||
[UIFeature.Communities]: {
|
||||
supportedLevels: LEVELS_UI_FEATURE,
|
||||
default: true,
|
||||
controller: new IncompatibleController("feature_spaces"),
|
||||
},
|
||||
[UIFeature.AdvancedSettings]: {
|
||||
supportedLevels: LEVELS_UI_FEATURE,
|
||||
|
|
|
@ -61,7 +61,7 @@ for (const key of Object.keys(LEVEL_HANDLERS)) {
|
|||
LEVEL_HANDLERS[key] = new LocalEchoWrapper(LEVEL_HANDLERS[key]);
|
||||
}
|
||||
|
||||
const LEVEL_ORDER = [
|
||||
export const LEVEL_ORDER = [
|
||||
SettingLevel.DEVICE,
|
||||
SettingLevel.ROOM_DEVICE,
|
||||
SettingLevel.ROOM_ACCOUNT,
|
||||
|
|
46
src/settings/controllers/IncompatibleController.ts
Normal file
46
src/settings/controllers/IncompatibleController.ts
Normal file
|
@ -0,0 +1,46 @@
|
|||
/*
|
||||
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 SettingController from "./SettingController";
|
||||
import { SettingLevel } from "../SettingLevel";
|
||||
import SettingsStore from "../SettingsStore";
|
||||
|
||||
/**
|
||||
* Enforces that a boolean setting cannot be enabled if the incompatible setting
|
||||
* is also enabled, to prevent cascading undefined behaviour between conflicting
|
||||
* labs flags.
|
||||
*/
|
||||
export default class IncompatibleController extends SettingController {
|
||||
public constructor(private settingName: string, private forcedValue = false) {
|
||||
super();
|
||||
}
|
||||
|
||||
public getValueOverride(
|
||||
level: SettingLevel,
|
||||
roomId: string,
|
||||
calculatedValue: any,
|
||||
calculatedAtLevel: SettingLevel,
|
||||
): any {
|
||||
if (this.incompatibleSettingEnabled) {
|
||||
return this.forcedValue;
|
||||
}
|
||||
return null; // no override
|
||||
}
|
||||
|
||||
public get incompatibleSettingEnabled(): boolean {
|
||||
return SettingsStore.getValue(this.settingName);
|
||||
}
|
||||
}
|
45
src/settings/controllers/ReducedMotionController.ts
Normal file
45
src/settings/controllers/ReducedMotionController.ts
Normal file
|
@ -0,0 +1,45 @@
|
|||
/*
|
||||
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 SettingController from "./SettingController";
|
||||
import { SettingLevel } from "../SettingLevel";
|
||||
|
||||
/**
|
||||
* For animation-like settings, this controller checks whether the user has
|
||||
* indicated they prefer reduced motion via browser or OS level settings.
|
||||
* If they have, this forces the setting value to false.
|
||||
*/
|
||||
export default class ReducedMotionController extends SettingController {
|
||||
public getValueOverride(
|
||||
level: SettingLevel,
|
||||
roomId: string,
|
||||
calculatedValue: any,
|
||||
calculatedAtLevel: SettingLevel,
|
||||
): any {
|
||||
if (this.prefersReducedMotion()) {
|
||||
return false;
|
||||
}
|
||||
return null; // no override
|
||||
}
|
||||
|
||||
public get settingDisabled(): boolean {
|
||||
return this.prefersReducedMotion();
|
||||
}
|
||||
|
||||
private prefersReducedMotion(): boolean {
|
||||
return window.matchMedia("(prefers-reduced-motion: reduce)").matches;
|
||||
}
|
||||
}
|
|
@ -20,6 +20,7 @@ import SettingsHandler from "./SettingsHandler";
|
|||
import {MatrixClientPeg} from "../../MatrixClientPeg";
|
||||
import {SettingLevel} from "../SettingLevel";
|
||||
import { CallbackFn, WatchManager } from "../WatchManager";
|
||||
import { Layout } from "../Layout";
|
||||
|
||||
/**
|
||||
* Gets and sets settings at the "device" level for the current device.
|
||||
|
@ -67,6 +68,13 @@ export default class DeviceSettingsHandler extends SettingsHandler {
|
|||
return val['value'];
|
||||
}
|
||||
|
||||
// Special case for old useIRCLayout setting
|
||||
if (settingName === "layout") {
|
||||
const settings = this.getSettings() || {};
|
||||
if (settings["useIRCLayout"]) return Layout.IRC;
|
||||
return settings[settingName];
|
||||
}
|
||||
|
||||
const settings = this.getSettings() || {};
|
||||
return settings[settingName];
|
||||
}
|
||||
|
@ -106,6 +114,18 @@ export default class DeviceSettingsHandler extends SettingsHandler {
|
|||
return Promise.resolve();
|
||||
}
|
||||
|
||||
// Special case for old useIRCLayout setting
|
||||
if (settingName === "layout") {
|
||||
const settings = this.getSettings() || {};
|
||||
|
||||
delete settings["useIRCLayout"];
|
||||
settings["layout"] = newValue;
|
||||
localStorage.setItem("mx_local_settings", JSON.stringify(settings));
|
||||
|
||||
this.watchers.notifyUpdate(settingName, null, SettingLevel.DEVICE, newValue);
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
const settings = this.getSettings() || {};
|
||||
settings[settingName] = newValue;
|
||||
localStorage.setItem("mx_local_settings", JSON.stringify(settings));
|
||||
|
|
|
@ -122,6 +122,7 @@ export class BreadcrumbsStore extends AsyncStoreWithClient<IState> {
|
|||
}
|
||||
|
||||
private async appendRoom(room: Room) {
|
||||
if (room.isSpaceRoom() && SettingsStore.getValue("feature_spaces")) return; // hide space rooms
|
||||
let updated = false;
|
||||
const rooms = (this.state.rooms || []).slice(); // cheap clone
|
||||
|
||||
|
|
|
@ -124,7 +124,10 @@ export class MessagePreviewStore extends AsyncStoreWithClient<IState> {
|
|||
|
||||
let changed = false;
|
||||
for (let i = events.length - 1; i >= 0; i--) {
|
||||
if (i === events.length - MAX_EVENTS_BACKWARDS) return; // limit reached
|
||||
if (i === events.length - MAX_EVENTS_BACKWARDS) {
|
||||
// limit reached - clear the preview by breaking out of the loop
|
||||
break;
|
||||
}
|
||||
|
||||
const event = events[i];
|
||||
const previewDef = PREVIEWS[event.getType()];
|
||||
|
|
|
@ -58,8 +58,8 @@ export class RoomListStoreClass extends AsyncStoreWithClient<IState> {
|
|||
private filterConditions: IFilterCondition[] = [];
|
||||
private tagWatcher = new TagWatcher(this);
|
||||
private updateFn = new MarkedExecution(() => {
|
||||
for (const tagId of Object.keys(this.unfilteredLists)) {
|
||||
RoomNotificationStateStore.instance.getListState(tagId).setRooms(this.unfilteredLists[tagId]);
|
||||
for (const tagId of Object.keys(this.orderedLists)) {
|
||||
RoomNotificationStateStore.instance.getListState(tagId).setRooms(this.orderedLists[tagId]);
|
||||
}
|
||||
this.emit(LISTS_UPDATE_EVENT);
|
||||
});
|
||||
|
@ -398,6 +398,15 @@ export class RoomListStoreClass extends AsyncStoreWithClient<IState> {
|
|||
}
|
||||
|
||||
private async handleRoomUpdate(room: Room, cause: RoomUpdateCause): Promise<any> {
|
||||
if (cause === RoomUpdateCause.NewRoom) {
|
||||
// Let the visibility provider know that there is a new invited room. It would be nice
|
||||
// if this could just be an event that things listen for but the point of this is that
|
||||
// we delay doing anything about this room until the VoipUserMapper had had a chance
|
||||
// to do the things it needs to do to decide if we should show this room or not, so
|
||||
// an even wouldn't et us do that.
|
||||
await VisibilityProvider.instance.onNewInvitedRoom(room);
|
||||
}
|
||||
|
||||
if (!VisibilityProvider.instance.isRoomVisible(room)) {
|
||||
return; // don't do anything on rooms that aren't visible
|
||||
}
|
||||
|
|
|
@ -211,7 +211,7 @@ export class Algorithm extends EventEmitter {
|
|||
}
|
||||
|
||||
// When we do have a room though, we expect to be able to find it
|
||||
let tag = this.roomIdsToTags[val.roomId][0];
|
||||
let tag = this.roomIdsToTags[val.roomId]?.[0];
|
||||
if (!tag) throw new Error(`${val.roomId} does not belong to a tag and cannot be sticky`);
|
||||
|
||||
// We specifically do NOT use the ordered rooms set as it contains the sticky room, which
|
||||
|
|
|
@ -19,17 +19,17 @@ import { FILTER_CHANGED, FilterPriority, IFilterCondition } from "./IFilterCondi
|
|||
import { Group } from "matrix-js-sdk/src/models/group";
|
||||
import { EventEmitter } from "events";
|
||||
import GroupStore from "../../GroupStore";
|
||||
import { arrayHasDiff } from "../../../utils/arrays";
|
||||
import { IDestroyable } from "../../../utils/IDestroyable";
|
||||
import DMRoomMap from "../../../utils/DMRoomMap";
|
||||
import { setHasDiff } from "../../../utils/sets";
|
||||
|
||||
/**
|
||||
* A filter condition for the room list which reveals rooms which
|
||||
* are a member of a given community.
|
||||
*/
|
||||
export class CommunityFilterCondition extends EventEmitter implements IFilterCondition, IDestroyable {
|
||||
private roomIds: string[] = [];
|
||||
private userIds: string[] = [];
|
||||
private roomIds = new Set<string>();
|
||||
private userIds = new Set<string>();
|
||||
|
||||
constructor(private community: Group) {
|
||||
super();
|
||||
|
@ -45,19 +45,18 @@ export class CommunityFilterCondition extends EventEmitter implements IFilterCon
|
|||
}
|
||||
|
||||
public isVisible(room: Room): boolean {
|
||||
return this.roomIds.includes(room.roomId) ||
|
||||
this.userIds.includes(DMRoomMap.shared().getUserIdForRoomId(room.roomId));
|
||||
return this.roomIds.has(room.roomId) || this.userIds.has(DMRoomMap.shared().getUserIdForRoomId(room.roomId));
|
||||
}
|
||||
|
||||
private onStoreUpdate = async (): Promise<any> => {
|
||||
// We don't actually know if the room list changed for the community, so just check it again.
|
||||
const beforeRoomIds = this.roomIds;
|
||||
this.roomIds = (await GroupStore.getGroupRooms(this.community.groupId)).map(r => r.roomId);
|
||||
this.roomIds = new Set((await GroupStore.getGroupRooms(this.community.groupId)).map(r => r.roomId));
|
||||
|
||||
const beforeUserIds = this.userIds;
|
||||
this.userIds = (await GroupStore.getGroupMembers(this.community.groupId)).map(u => u.userId);
|
||||
this.userIds = new Set((await GroupStore.getGroupMembers(this.community.groupId)).map(u => u.userId));
|
||||
|
||||
if (arrayHasDiff(beforeRoomIds, this.roomIds) || arrayHasDiff(beforeUserIds, this.userIds)) {
|
||||
if (setHasDiff(beforeRoomIds, this.roomIds) || setHasDiff(beforeUserIds, this.userIds)) {
|
||||
this.emit(FILTER_CHANGED);
|
||||
}
|
||||
};
|
||||
|
|
|
@ -15,8 +15,10 @@
|
|||
*/
|
||||
|
||||
import {Room} from "matrix-js-sdk/src/models/room";
|
||||
import CallHandler from "../../../CallHandler";
|
||||
import { RoomListCustomisations } from "../../../customisations/RoomList";
|
||||
import { isVirtualRoom, voipUserMapperEnabled } from "../../../VoipUserMapper";
|
||||
import VoipUserMapper from "../../../VoipUserMapper";
|
||||
import SettingsStore from "../../../settings/SettingsStore";
|
||||
|
||||
export class VisibilityProvider {
|
||||
private static internalInstance: VisibilityProvider;
|
||||
|
@ -31,20 +33,28 @@ export class VisibilityProvider {
|
|||
return VisibilityProvider.internalInstance;
|
||||
}
|
||||
|
||||
public isRoomVisible(room: Room): boolean {
|
||||
let isVisible = true; // Returned at the end of this function
|
||||
let forced = false; // When true, this function won't bother calling the customisation points
|
||||
public async onNewInvitedRoom(room: Room) {
|
||||
await VoipUserMapper.sharedInstance().onNewInvitedRoom(room);
|
||||
}
|
||||
|
||||
if (voipUserMapperEnabled() && isVirtualRoom(room.roomId)) {
|
||||
isVisible = false;
|
||||
forced = true;
|
||||
public isRoomVisible(room: Room): boolean {
|
||||
if (
|
||||
CallHandler.sharedInstance().getSupportsVirtualRooms() &&
|
||||
VoipUserMapper.sharedInstance().isVirtualRoom(room)
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// hide space rooms as they'll be shown in the SpacePanel
|
||||
if (room.isSpaceRoom() && SettingsStore.getValue("feature_spaces")) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const isVisibleFn = RoomListCustomisations.isRoomVisible;
|
||||
if (!forced && isVisibleFn) {
|
||||
isVisible = isVisibleFn(room);
|
||||
if (isVisibleFn) {
|
||||
return isVisibleFn(room);
|
||||
}
|
||||
|
||||
return isVisible;
|
||||
return true; // default
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,7 +23,7 @@ import {messageForResourceLimitError} from "../utils/ErrorUtils";
|
|||
|
||||
const TOAST_KEY = "serverlimit";
|
||||
|
||||
export const showToast = (limitType: string, adminContact?: string, syncError?: boolean) => {
|
||||
export const showToast = (limitType: string, onHideToast: () => void, adminContact?: string, syncError?: boolean) => {
|
||||
const errorText = messageForResourceLimitError(limitType, adminContact, {
|
||||
'monthly_active_user': _td("Your homeserver has exceeded its user limit."),
|
||||
'': _td("Your homeserver has exceeded one of its resource limits."),
|
||||
|
@ -38,7 +38,10 @@ export const showToast = (limitType: string, adminContact?: string, syncError?:
|
|||
props: {
|
||||
description: <React.Fragment>{errorText} {contactText}</React.Fragment>,
|
||||
acceptLabel: _t("Ok"),
|
||||
onAccept: hideToast,
|
||||
onAccept: () => {
|
||||
hideToast()
|
||||
if (onHideToast) onHideToast();
|
||||
},
|
||||
},
|
||||
component: GenericToast,
|
||||
priority: 70,
|
||||
|
|
|
@ -1,10 +1,3 @@
|
|||
const params = window.location.search.substring(1).split('&');
|
||||
let lockOrigin;
|
||||
for (let i = 0; i < params.length; ++i) {
|
||||
const parts = params[i].split('=');
|
||||
if (parts[0] === 'origin') lockOrigin = decodeURIComponent(parts[1]);
|
||||
}
|
||||
|
||||
function remoteRender(event) {
|
||||
const data = event.data;
|
||||
|
||||
|
@ -45,7 +38,7 @@ function remoteSetTint(event) {
|
|||
}
|
||||
|
||||
window.onmessage = function(e) {
|
||||
if (e.origin === lockOrigin) {
|
||||
if (e.origin === window.location.origin) {
|
||||
if (e.data.blob) remoteRender(e);
|
||||
else remoteSetTint(e);
|
||||
}
|
||||
|
|
|
@ -1,29 +0,0 @@
|
|||
/*
|
||||
Copyright 2020 The Matrix.org Foundation C.I.C.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
import * as projectNameGenerator from "project-name-generator";
|
||||
|
||||
/**
|
||||
* Generates a human readable identifier. This should not be used for anything
|
||||
* which needs secure/cryptographic random: just a level uniquness that is offered
|
||||
* by something like Date.now().
|
||||
* @returns {string} The randomly generated ID
|
||||
*/
|
||||
export function generateHumanReadableId(): string {
|
||||
return projectNameGenerator({words: 3}).raw.map(w => {
|
||||
return w[0].toUpperCase() + w.substring(1).toLowerCase();
|
||||
}).join('');
|
||||
}
|
|
@ -477,6 +477,7 @@ export default class WidgetUtils {
|
|||
'userId=$matrix_user_id',
|
||||
'roomId=$matrix_room_id',
|
||||
'theme=$theme',
|
||||
'roomName=$roomName',
|
||||
];
|
||||
if (opts.auth) {
|
||||
queryStringParts.push(`auth=${opts.auth}`);
|
||||
|
|
|
@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
|
|||
limitations under the License.
|
||||
*/
|
||||
|
||||
import { arrayDiff, arrayHasDiff, arrayMerge, arrayUnion } from "./arrays";
|
||||
import { arrayDiff, arrayMerge, arrayUnion } from "./arrays";
|
||||
|
||||
type ObjectExcluding<O extends {}, P extends (keyof O)[]> = {[k in Exclude<keyof O, P[number]>]: O[k]};
|
||||
|
||||
|
@ -86,11 +86,14 @@ export function objectShallowClone<O extends {}>(a: O, propertyCloner?: (k: keyo
|
|||
* @returns True if there's a difference between the objects, false otherwise
|
||||
*/
|
||||
export function objectHasDiff<O extends {}>(a: O, b: O): boolean {
|
||||
if (a === b) return false;
|
||||
const aKeys = Object.keys(a);
|
||||
const bKeys = Object.keys(b);
|
||||
if (arrayHasDiff(aKeys, bKeys)) return true;
|
||||
|
||||
if (aKeys.length !== bKeys.length) return true;
|
||||
const possibleChanges = arrayUnion(aKeys, bKeys);
|
||||
// if the amalgamation of both sets of keys has the a different length to the inputs then there must be a change
|
||||
if (possibleChanges.length !== aKeys.length) return true;
|
||||
|
||||
return possibleChanges.some(k => a[k] !== b[k]);
|
||||
}
|
||||
|
||||
|
|
34
src/utils/sets.ts
Normal file
34
src/utils/sets.ts
Normal file
|
@ -0,0 +1,34 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Determines if two sets are different through a shallow comparison.
|
||||
* @param a The first set. Must be defined.
|
||||
* @param b The second set. Must be defined.
|
||||
* @returns True if they are different, false otherwise.
|
||||
*/
|
||||
export function setHasDiff<T>(a: Set<T>, b: Set<T>): boolean {
|
||||
if (a.size === b.size) {
|
||||
// When the lengths are equal, check to see if either set is missing an element from the other.
|
||||
if (Array.from(b).some(i => !a.has(i))) return true;
|
||||
if (Array.from(a).some(i => !b.has(i))) return true;
|
||||
|
||||
// if all the keys are common, say so
|
||||
return false;
|
||||
} else {
|
||||
return true; // different lengths means they are naturally diverged
|
||||
}
|
||||
}
|
|
@ -1,71 +0,0 @@
|
|||
/*
|
||||
Copyright 2018 New Vector Ltd
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
import {phasedRollOutExpiredForUser} from '../src/PhasedRollOut';
|
||||
|
||||
const OFFSET = 6000000;
|
||||
// phasedRollOutExpiredForUser enables users in bucks of 1 minute
|
||||
const MS_IN_MINUTE = 60 * 1000;
|
||||
|
||||
describe('PhasedRollOut', function() {
|
||||
it('should return true if phased rollout is not configured', function() {
|
||||
expect(phasedRollOutExpiredForUser("@user:hs", "feature_test", 0, null)).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should return true if phased rollout feature is not configured', function() {
|
||||
expect(phasedRollOutExpiredForUser("@user:hs", "feature_test", 0, {
|
||||
"feature_other": {offset: 0, period: 0},
|
||||
})).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should return false if phased rollout for feature is misconfigured', function() {
|
||||
expect(phasedRollOutExpiredForUser("@user:hs", "feature_test", 0, {
|
||||
"feature_test": {},
|
||||
})).toBeFalsy();
|
||||
});
|
||||
|
||||
it("should return false if phased rollout hasn't started yet", function() {
|
||||
expect(phasedRollOutExpiredForUser("@user:hs", "feature_test", 5000000, {
|
||||
"feature_test": {offset: OFFSET, period: MS_IN_MINUTE},
|
||||
})).toBeFalsy();
|
||||
});
|
||||
|
||||
it("should start to return true in bucket 2/10 for '@user:hs'", function() {
|
||||
expect(phasedRollOutExpiredForUser("@user:hs", "feature_test",
|
||||
OFFSET + (MS_IN_MINUTE * 2) - 1, {
|
||||
"feature_test": {offset: OFFSET, period: MS_IN_MINUTE * 10},
|
||||
})).toBeFalsy();
|
||||
expect(phasedRollOutExpiredForUser("@user:hs", "feature_test",
|
||||
OFFSET + (MS_IN_MINUTE * 2), {
|
||||
"feature_test": {offset: OFFSET, period: MS_IN_MINUTE * 10},
|
||||
})).toBeTruthy();
|
||||
});
|
||||
|
||||
it("should start to return true in bucket 4/10 for 'alice@other-hs'", function() {
|
||||
expect(phasedRollOutExpiredForUser("alice@other-hs", "feature_test",
|
||||
OFFSET + (MS_IN_MINUTE * 4) - 1, {
|
||||
"feature_test": {offset: OFFSET, period: MS_IN_MINUTE * 10},
|
||||
})).toBeFalsy();
|
||||
expect(phasedRollOutExpiredForUser("alice@other-hs", "feature_test",
|
||||
OFFSET + (MS_IN_MINUTE * 4), {
|
||||
"feature_test": {offset: OFFSET, period: MS_IN_MINUTE * 10},
|
||||
})).toBeTruthy();
|
||||
});
|
||||
|
||||
it("should return true after complete rollout period'", function() {
|
||||
expect(phasedRollOutExpiredForUser("user:hs", "feature_test",
|
||||
OFFSET + (MS_IN_MINUTE * 20), {
|
||||
"feature_test": {offset: OFFSET, period: MS_IN_MINUTE * 10},
|
||||
})).toBeTruthy();
|
||||
});
|
||||
});
|
|
@ -1,31 +0,0 @@
|
|||
/*
|
||||
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 { userToVirtualUser, virtualUserToUser } from '../src/VoipUserMapper';
|
||||
|
||||
const templateString = '@_greatappservice_${mxid}:frooble.example';
|
||||
const realUser = '@alice:boop.example';
|
||||
const virtualUser = "@_greatappservice_=40alice=3aboop.example:frooble.example";
|
||||
|
||||
describe('VoipUserMapper', function() {
|
||||
it('translates users to virtual users', function() {
|
||||
expect(userToVirtualUser(realUser, templateString)).toEqual(virtualUser);
|
||||
});
|
||||
|
||||
it('translates users to virtual users', function() {
|
||||
expect(virtualUserToUser(virtualUser, templateString)).toEqual(realUser);
|
||||
});
|
||||
});
|
|
@ -88,7 +88,7 @@ describe('MemberList', () => {
|
|||
};
|
||||
memberListRoom.currentState = {
|
||||
members: {},
|
||||
getStateEvents: () => [], // ignore 3pid invites
|
||||
getStateEvents: (eventType, stateKey) => stateKey === undefined ? [] : null, // ignore 3pid invites
|
||||
};
|
||||
for (const member of [...adminUsers, ...moderatorUsers, ...defaultUsers]) {
|
||||
memberListRoom.currentState.members[member.userId] = member;
|
||||
|
|
17
yarn.lock
17
yarn.lock
|
@ -2477,11 +2477,6 @@ commander@^4.0.1:
|
|||
resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"
|
||||
integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==
|
||||
|
||||
commander@^6.1.0:
|
||||
version "6.2.1"
|
||||
resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c"
|
||||
integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==
|
||||
|
||||
commondir@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
|
||||
|
@ -5578,8 +5573,8 @@ mathml-tag-names@^2.1.3:
|
|||
integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==
|
||||
|
||||
"matrix-js-sdk@github:matrix-org/matrix-js-sdk#develop":
|
||||
version "9.6.0"
|
||||
resolved "https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/6ad3fb16b3813c717943f6bc8bca5a55fe325477"
|
||||
version "9.7.0"
|
||||
resolved "https://codeload.github.com/matrix-org/matrix-js-sdk/tar.gz/c82bc35202f93efa2cb9b27b140f83df37c64ab2"
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.12.5"
|
||||
another-json "^0.2.0"
|
||||
|
@ -6453,14 +6448,6 @@ progress@^2.0.0:
|
|||
resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
|
||||
integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
|
||||
|
||||
project-name-generator@^2.1.9:
|
||||
version "2.1.9"
|
||||
resolved "https://registry.yarnpkg.com/project-name-generator/-/project-name-generator-2.1.9.tgz#959177f1feb2355d74fa98745d72a65a5f75b674"
|
||||
integrity sha512-QmLHqz2C4VHmAyDEAFlVfnuWAHr4vwZhK2bbm4IrwuHNzNKOdG9b4U+NmQbsm1uOoV4kGWv7+FVLsu7Bb/ieYQ==
|
||||
dependencies:
|
||||
commander "^6.1.0"
|
||||
lodash "^4.17.20"
|
||||
|
||||
promise@^7.0.3, promise@^7.1.1:
|
||||
version "7.3.1"
|
||||
resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf"
|
||||
|
|
Loading…
Reference in a new issue