Merge branches 'develop' and 't3chguy/emoji_picker_composer' of github.com:matrix-org/matrix-react-sdk into t3chguy/emoji_picker_composer

This commit is contained in:
Michael Telatynski 2020-06-02 14:00:37 +01:00
commit 3fbfb62bc9
72 changed files with 1332 additions and 607 deletions

View file

@ -14,9 +14,7 @@ src/components/views/elements/AddressSelector.js
src/components/views/elements/DirectorySearchBox.js src/components/views/elements/DirectorySearchBox.js
src/components/views/elements/MemberEventListSummary.js src/components/views/elements/MemberEventListSummary.js
src/components/views/elements/UserSelector.js src/components/views/elements/UserSelector.js
src/components/views/globals/MatrixToolbar.js
src/components/views/globals/NewVersionBar.js src/components/views/globals/NewVersionBar.js
src/components/views/globals/UpdateCheckBar.js
src/components/views/messages/MFileBody.js src/components/views/messages/MFileBody.js
src/components/views/messages/TextualBody.js src/components/views/messages/TextualBody.js
src/components/views/room_settings/ColorSettings.js src/components/views/room_settings/ColorSettings.js

View file

@ -4,7 +4,7 @@ Matrix JavaScript/ECMAScript Style Guide
The intention of this guide is to make Matrix's JavaScript codebase clean, The intention of this guide is to make Matrix's JavaScript codebase clean,
consistent with other popular JavaScript styles and consistent with the rest of consistent with other popular JavaScript styles and consistent with the rest of
the Matrix codebase. For reference, the Matrix Python style guide can be found the Matrix codebase. For reference, the Matrix Python style guide can be found
at https://github.com/matrix-org/synapse/blob/master/docs/code_style.rst at https://github.com/matrix-org/synapse/blob/master/docs/code_style.md
This document reflects how we would like Matrix JavaScript code to look, with This document reflects how we would like Matrix JavaScript code to look, with
acknowledgement that a significant amount of code is written to older acknowledgement that a significant amount of code is written to older
@ -17,7 +17,7 @@ writing in modern ECMAScript and using a transpile step to generate the file
that applications can then include. There are significant benefits in being that applications can then include. There are significant benefits in being
able to use modern ECMAScript, although the tooling for doing so can be awkward able to use modern ECMAScript, although the tooling for doing so can be awkward
for library code, especially with regard to translating source maps and line for library code, especially with regard to translating source maps and line
number throgh from the original code to the final application. number through from the original code to the final application.
General Style General Style
------------- -------------

View file

@ -335,6 +335,9 @@ input[type=text]:focus, input[type=password]:focus, textarea:focus {
.mx_Dialog_header.mx_Dialog_headerWithButton > .mx_Dialog_title { .mx_Dialog_header.mx_Dialog_headerWithButton > .mx_Dialog_title {
text-align: center; text-align: center;
} }
.mx_Dialog_header.mx_Dialog_headerWithCancel > .mx_Dialog_title {
margin-right: 20px; // leave space for the 'X' cancel button
}
.mx_Dialog_title.danger { .mx_Dialog_title.danger {
color: $warning-color; color: $warning-color;

View file

@ -116,6 +116,7 @@
@import "./views/elements/_RoomAliasField.scss"; @import "./views/elements/_RoomAliasField.scss";
@import "./views/elements/_Slider.scss"; @import "./views/elements/_Slider.scss";
@import "./views/elements/_Spinner.scss"; @import "./views/elements/_Spinner.scss";
@import "./views/elements/_StyledCheckbox.scss";
@import "./views/elements/_SyntaxHighlight.scss"; @import "./views/elements/_SyntaxHighlight.scss";
@import "./views/elements/_TextWithTooltip.scss"; @import "./views/elements/_TextWithTooltip.scss";
@import "./views/elements/_ToggleSwitch.scss"; @import "./views/elements/_ToggleSwitch.scss";
@ -123,7 +124,6 @@
@import "./views/elements/_TooltipButton.scss"; @import "./views/elements/_TooltipButton.scss";
@import "./views/elements/_Validation.scss"; @import "./views/elements/_Validation.scss";
@import "./views/emojipicker/_EmojiPicker.scss"; @import "./views/emojipicker/_EmojiPicker.scss";
@import "./views/globals/_MatrixToolbar.scss";
@import "./views/groups/_GroupPublicityToggle.scss"; @import "./views/groups/_GroupPublicityToggle.scss";
@import "./views/groups/_GroupRoomList.scss"; @import "./views/groups/_GroupRoomList.scss";
@import "./views/groups/_GroupUserSettings.scss"; @import "./views/groups/_GroupUserSettings.scss";
@ -202,6 +202,7 @@
@import "./views/settings/_ProfileSettings.scss"; @import "./views/settings/_ProfileSettings.scss";
@import "./views/settings/_SetIdServer.scss"; @import "./views/settings/_SetIdServer.scss";
@import "./views/settings/_SetIntegrationManager.scss"; @import "./views/settings/_SetIntegrationManager.scss";
@import "./views/settings/_UpdateCheckButton.scss";
@import "./views/settings/tabs/_SettingsTab.scss"; @import "./views/settings/tabs/_SettingsTab.scss";
@import "./views/settings/tabs/room/_GeneralRoomSettingsTab.scss"; @import "./views/settings/tabs/room/_GeneralRoomSettingsTab.scss";
@import "./views/settings/tabs/room/_RolesRoomSettingsTab.scss"; @import "./views/settings/tabs/room/_RolesRoomSettingsTab.scss";

View file

@ -15,6 +15,7 @@ limitations under the License.
*/ */
$font-1px: 0.067rem; $font-1px: 0.067rem;
$font-1-5px: 0.100rem;
$font-2px: 0.133rem; $font-2px: 0.133rem;
$font-3px: 0.200rem; $font-3px: 0.200rem;
$font-4px: 0.267rem; $font-4px: 0.267rem;

View file

@ -41,10 +41,6 @@ limitations under the License.
height: 40px; height: 40px;
} }
.mx_MatrixChat_toolbarShowing {
height: auto;
}
.mx_MatrixChat { .mx_MatrixChat {
width: 100%; width: 100%;
height: 100%; height: 100%;

View file

@ -63,6 +63,10 @@ limitations under the License.
padding-left: 32px; padding-left: 32px;
padding-top: 8px; padding-top: 8px;
position: relative; position: relative;
a {
display: flex;
}
} }
.mx_NotificationPanel .mx_EventTile_roomName a, .mx_NotificationPanel .mx_EventTile_roomName a,

View file

@ -18,8 +18,3 @@ limitations under the License.
margin-top: 10px; margin-top: 10px;
display: flex; display: flex;
} }
.mx_GroupAddressPicker_checkboxContainer input[type="checkbox"] {
/* Stop flex from shrinking the checkbox */
width: 20px;
}

View file

@ -0,0 +1,66 @@
/*
Copyright 2020 The Matrix.org Foundation C.I.C.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
.mx_Checkbox {
$size: $font-16px;
$border-size: $font-1-5px;
$border-radius: $font-4px;
display: flex;
align-items: flex-start;
input[type=checkbox] {
display: none;
& + label {
display: flex;
align-items: center;
flex-grow: 1;
}
& + label > .mx_Checkbox_background {
display: inline-flex;
position: relative;
flex-shrink: 0;
height: $size;
width: $size;
size: 0.5rem;
border: $border-size solid rgba($muted-fg-color, 0.5);
box-sizing: border-box;
border-radius: $border-radius;
img {
height: 100%;
width: 100%;
filter: invert(100%);
}
}
&:checked + label > .mx_Checkbox_background {
background: $accent-color;
border-color: $accent-color;
}
& + label > *:not(.mx_Checkbox_background) {
margin-left: 10px;
}
}
}

View file

@ -1,69 +0,0 @@
/*
Copyright 2015, 2016 OpenMarket Ltd
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
.mx_MatrixToolbar {
background-color: $accent-color;
color: $accent-fg-color;
display: flex;
align-items: center;
}
.mx_MatrixToolbar_warning {
margin-left: 16px;
margin-right: 8px;
margin-top: -2px;
}
.mx_MatrixToolbar_info {
padding-left: 16px;
padding-right: 8px;
background-color: $info-bg-color;
}
.mx_MatrixToolbar_error {
padding-left: 16px;
padding-right: 8px;
background-color: $warning-bg-color;
}
.mx_MatrixToolbar_content {
flex: 1;
}
.mx_MatrixToolbar_link {
color: $accent-fg-color !important;
text-decoration: underline !important;
cursor: pointer;
}
.mx_MatrixToolbar_clickable {
cursor: pointer;
}
.mx_MatrixToolbar_close {
cursor: pointer;
}
.mx_MatrixToolbar_close img {
display: block;
float: right;
margin-right: 10px;
}
.mx_MatrixToolbar_action {
margin-right: 16px;
}

View file

@ -96,10 +96,6 @@ $AppsDrawerBodyHeight: 273px;
height: $AppsDrawerBodyHeight; height: $AppsDrawerBodyHeight;
} }
.mx_AppTile_persistedWrapper > div {
height: 100%;
}
.mx_AppTile_mini .mx_AppTile_persistedWrapper { .mx_AppTile_mini .mx_AppTile_persistedWrapper {
height: 114px; height: 114px;
} }

View file

@ -53,79 +53,79 @@ $left-gutter: 65px;
/* Compact layout overrides */ /* Compact layout overrides */
.mx_MatrixChat_useCompactLayout { .mx_MatrixChat_useCompactLayout {
.mx_EventTile {
padding-top: 4px;
}
.mx_EventTile.mx_EventTile_info {
// same as the padding for non-compact .mx_EventTile.mx_EventTile_info
padding-top: 0px;
font-size: $font-13px;
.mx_EventTile_line, .mx_EventTile_reply {
line-height: $font-20px;
}
.mx_EventTile_avatar {
top: 4px;
}
}
.mx_EventTile .mx_SenderProfile {
font-size: $font-13px;
}
.mx_EventTile.mx_EventTile_emote {
// add a bit more space for emotes so that avatars don't collide
padding-top: 8px;
.mx_EventTile_avatar {
top: 2px;
}
.mx_EventTile_line, .mx_EventTile_reply {
padding-top: 0px;
padding-bottom: 1px;
}
}
.mx_EventTile.mx_EventTile_emote.mx_EventTile_continuation {
padding-top: 0;
.mx_EventTile_line, .mx_EventTile_reply {
padding-top: 0px;
padding-bottom: 0px;
}
}
.mx_EventTile_line, .mx_EventTile_reply { .mx_EventTile_line, .mx_EventTile_reply {
padding-top: 0px; padding-top: 0px;
padding-bottom: 0px; padding-bottom: 0px;
} }
.mx_EventTile_avatar { .mx_EventTile {
top: 2px; padding-top: 4px;
}
.mx_EventTile_e2eIcon { &.mx_EventTile_info {
top: 3px; // same as the padding for non-compact .mx_EventTile.mx_EventTile_info
} padding-top: 0px;
font-size: $font-13px;
.mx_EventTile_line, .mx_EventTile_reply {
line-height: $font-20px;
}
.mx_EventTile_avatar {
top: 4px;
}
}
.mx_EventTile_readAvatars { .mx_SenderProfile {
top: 27px; font-size: $font-13px;
} }
.mx_EventTile_continuation .mx_EventTile_readAvatars, &.mx_EventTile_emote {
.mx_EventTile_emote .mx_EventTile_readAvatars { // add a bit more space for emotes so that avatars don't collide
top: 5px; padding-top: 8px;
} .mx_EventTile_avatar {
top: 2px;
}
.mx_EventTile_line, .mx_EventTile_reply {
padding-top: 0px;
padding-bottom: 1px;
}
}
.mx_EventTile_info .mx_EventTile_readAvatars { &.mx_EventTile_emote.mx_EventTile_continuation {
top: 4px; padding-top: 0;
.mx_EventTile_line, .mx_EventTile_reply {
padding-top: 0px;
padding-bottom: 0px;
}
}
.mx_EventTile_avatar {
top: 2px;
}
.mx_EventTile_e2eIcon {
top: 3px;
}
.mx_EventTile_readAvatars {
top: 27px;
}
.mx_EventTile_continuation .mx_EventTile_readAvatars,
.mx_EventTile_emote .mx_EventTile_readAvatars {
top: 5px;
}
.mx_EventTile_info .mx_EventTile_readAvatars {
top: 4px;
}
.mx_EventTile_content .markdown-body {
p, ul, ol, dl, blockquote, pre, table {
margin-bottom: 4px; // 1/4 of the non-compact margin-bottom
}
}
} }
.mx_RoomView_MessageList h2 { .mx_RoomView_MessageList h2 {
margin-top: 6px; margin-top: 6px;
} }
.mx_EventTile_content .markdown-body {
p, ul, ol, dl, blockquote, pre, table {
margin-bottom: 4px; // 1/4 of the non-compact margin-bottom
}
}
} }

View file

@ -0,0 +1,23 @@
/*
Copyright 2020 The Matrix.org Foundation C.I.C.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
.mx_UpdateCheckButton_summary {
margin-left: 16px;
.mx_AccessibleButton_kind_link {
padding: 0;
}
}

19
src/@types/common.ts Normal file
View file

@ -0,0 +1,19 @@
/*
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.
*/
// Based on https://stackoverflow.com/a/53229857/3532235
export type Without<T, U> = {[P in Exclude<keyof T, keyof U>] ? : never}
export type XOR<T, U> = (T | U) extends object ? (Without<T, U> & U) | (Without<U, T> & T) : T | U;

View file

@ -21,6 +21,19 @@ import {MatrixClient} from "matrix-js-sdk/src/client";
import dis from './dispatcher/dispatcher'; import dis from './dispatcher/dispatcher';
import BaseEventIndexManager from './indexing/BaseEventIndexManager'; import BaseEventIndexManager from './indexing/BaseEventIndexManager';
import {ActionPayload} from "./dispatcher/payloads"; import {ActionPayload} from "./dispatcher/payloads";
import {CheckUpdatesPayload} from "./dispatcher/payloads/CheckUpdatesPayload";
import {Action} from "./dispatcher/actions";
import {hideToast as hideUpdateToast} from "./toasts/UpdateToast";
export enum UpdateCheckStatus {
Checking = "CHECKING",
Error = "ERROR",
NotAvailable = "NOTAVAILABLE",
Downloading = "DOWNLOADING",
Ready = "READY",
}
const UPDATE_DEFER_KEY = "mx_defer_update";
/** /**
* Base class for classes that provide platform-specific functionality * Base class for classes that provide platform-specific functionality
@ -56,6 +69,53 @@ export default abstract class BasePlatform {
this.errorDidOccur = errorDidOccur; this.errorDidOccur = errorDidOccur;
} }
/**
* Whether we can call checkForUpdate on this platform build
*/
async canSelfUpdate(): Promise<boolean> {
return false;
}
startUpdateCheck() {
hideUpdateToast();
localStorage.removeItem(UPDATE_DEFER_KEY);
dis.dispatch<CheckUpdatesPayload>({
action: Action.CheckUpdates,
status: UpdateCheckStatus.Checking,
});
}
/**
* Update the currently running app to the latest available version
* and replace this instance of the app with the new version.
*/
installUpdate() {
}
/**
* Check if the version update has been deferred and that deferment is still in effect
* @param newVersion the version string to check
*/
protected shouldShowUpdate(newVersion: string): boolean {
try {
const [version, deferUntil] = JSON.parse(localStorage.getItem(UPDATE_DEFER_KEY));
return newVersion !== version || Date.now() > deferUntil;
} catch (e) {
return true;
}
}
/**
* Ignore the pending update and don't prompt about this version
* until the next morning (8am).
*/
deferUpdate(newVersion: string) {
const date = new Date(Date.now() + 24 * 60 * 60 * 1000);
date.setHours(8, 0, 0, 0); // set to next 8am
localStorage.setItem(UPDATE_DEFER_KEY, JSON.stringify([newVersion, date.getTime()]));
hideUpdateToast();
}
/** /**
* Returns true if the platform supports displaying * Returns true if the platform supports displaying
* notifications, otherwise false. * notifications, otherwise false.

View file

@ -27,6 +27,7 @@ import Modal from './Modal';
import RoomViewStore from './stores/RoomViewStore'; import RoomViewStore from './stores/RoomViewStore';
import encrypt from "browser-encrypt-attachment"; import encrypt from "browser-encrypt-attachment";
import extractPngChunks from "png-chunks-extract"; import extractPngChunks from "png-chunks-extract";
import Spinner from "./components/views/elements/Spinner";
// Polyfill for Canvas.toBlob API using Canvas.toDataURL // Polyfill for Canvas.toBlob API using Canvas.toDataURL
import "blueimp-canvas-to-blob"; import "blueimp-canvas-to-blob";
@ -399,7 +400,11 @@ export default class ContentMessages {
if (!shouldUpload) return; if (!shouldUpload) return;
} }
await this.ensureMediaConfigFetched(); if (!this.mediaConfig) { // hot-path optimization to not flash a spinner if we don't need to
const modal = Modal.createDialog(Spinner, null, 'mx_Dialog_spinner');
await this.ensureMediaConfigFetched();
modal.close();
}
const tooBigFiles = []; const tooBigFiles = [];
const okFiles = []; const okFiles = [];

View file

@ -22,6 +22,7 @@ import { _t } from './languageHandler';
import {MatrixClientPeg} from './MatrixClientPeg'; import {MatrixClientPeg} from './MatrixClientPeg';
import GroupStore from './stores/GroupStore'; import GroupStore from './stores/GroupStore';
import {allSettled} from "./utils/promise"; import {allSettled} from "./utils/promise";
import StyledCheckbox from './components/views/elements/StyledCheckbox';
export function showGroupInviteDialog(groupId) { export function showGroupInviteDialog(groupId) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
@ -61,12 +62,12 @@ export function showGroupAddRoomDialog(groupId) {
<div>{ _t("Which rooms would you like to add to this community?") }</div> <div>{ _t("Which rooms would you like to add to this community?") }</div>
</div>; </div>;
const checkboxContainer = <label className="mx_GroupAddressPicker_checkboxContainer"> const checkboxContainer = <StyledCheckbox
<input type="checkbox" onChange={onCheckboxClicked} /> className="mx_GroupAddressPicker_checkboxContainer"
<div> onChange={onCheckboxClicked}
{ _t("Show these rooms to non-members on the community page and room list?") } >
</div> { _t("Show these rooms to non-members on the community page and room list?") }
</label>; </StyledCheckbox>;
const AddressPickerDialog = sdk.getComponent("dialogs.AddressPickerDialog"); const AddressPickerDialog = sdk.getComponent("dialogs.AddressPickerDialog");
Modal.createTrackedDialog('Add Rooms to Group', '', AddressPickerDialog, { Modal.createTrackedDialog('Add Rooms to Group', '', AddressPickerDialog, {

View file

@ -84,8 +84,14 @@ export default class PasswordReset {
try { try {
await this.client.setPassword({ await this.client.setPassword({
// Note: Though this sounds like a login type for identity servers only, it
// has a dual purpose of being used for homeservers too.
type: "m.login.email.identity", type: "m.login.email.identity",
// TODO: Remove `threepid_creds` once servers support proper UIA
// See https://github.com/matrix-org/synapse/issues/5665
// See https://github.com/matrix-org/matrix-doc/issues/2220
threepid_creds: creds, threepid_creds: creds,
threepidCreds: creds,
}, this.password); }, this.password);
} catch (err) { } catch (err) {
if (err.httpStatus === 401) { if (err.httpStatus === 401) {

View file

@ -201,7 +201,8 @@ export default class CreateSecretStorageDialog extends React.PureComponent {
type: 'm.id.user', type: 'm.id.user',
user: MatrixClientPeg.get().getUserId(), user: MatrixClientPeg.get().getUserId(),
}, },
// https://github.com/matrix-org/synapse/issues/5665 // TODO: Remove `user` once servers support proper UIA
// See https://github.com/matrix-org/synapse/issues/5665
user: MatrixClientPeg.get().getUserId(), user: MatrixClientPeg.get().getUserId(),
password: this.state.accountPassword, password: this.state.accountPassword,
}); });

View file

@ -81,7 +81,6 @@ interface IProps {
currentRoomId: string; currentRoomId: string;
ConferenceHandler?: object; ConferenceHandler?: object;
collapseLhs: boolean; collapseLhs: boolean;
checkingForUpdate: boolean;
config: { config: {
piwik: { piwik: {
policyUrl: string; policyUrl: string;
@ -177,15 +176,6 @@ class LoggedInView extends React.PureComponent<IProps, IState> {
this._loadResizerPreferences(); this._loadResizerPreferences();
} }
componentDidUpdate(prevProps, prevState) {
// attempt to guess when a banner was opened or closed
if (
(prevProps.checkingForUpdate !== this.props.checkingForUpdate)
) {
this.props.resizeNotifier.notifyBannersChanged();
}
}
componentWillUnmount() { componentWillUnmount() {
document.removeEventListener('keydown', this._onNativeKeyDown, false); document.removeEventListener('keydown', this._onNativeKeyDown, false);
this._matrixClient.removeListener("accountData", this.onAccountData); this._matrixClient.removeListener("accountData", this.onAccountData);
@ -617,7 +607,6 @@ class LoggedInView extends React.PureComponent<IProps, IState> {
const GroupView = sdk.getComponent('structures.GroupView'); const GroupView = sdk.getComponent('structures.GroupView');
const MyGroups = sdk.getComponent('structures.MyGroups'); const MyGroups = sdk.getComponent('structures.MyGroups');
const ToastContainer = sdk.getComponent('structures.ToastContainer'); const ToastContainer = sdk.getComponent('structures.ToastContainer');
const UpdateCheckBar = sdk.getComponent('globals.UpdateCheckBar');
let pageElement; let pageElement;
@ -661,15 +650,7 @@ class LoggedInView extends React.PureComponent<IProps, IState> {
break; break;
} }
let topBar;
if (this.props.checkingForUpdate) {
topBar = <UpdateCheckBar {...this.props.checkingForUpdate} />;
}
let bodyClasses = 'mx_MatrixChat'; let bodyClasses = 'mx_MatrixChat';
if (topBar) {
bodyClasses += ' mx_MatrixChat_toolbarShowing';
}
if (this.state.useCompactLayout) { if (this.state.useCompactLayout) {
bodyClasses += ' mx_MatrixChat_useCompactLayout'; bodyClasses += ' mx_MatrixChat_useCompactLayout';
} }
@ -684,7 +665,6 @@ class LoggedInView extends React.PureComponent<IProps, IState> {
onMouseDown={this._onMouseDown} onMouseDown={this._onMouseDown}
onMouseUp={this._onMouseUp} onMouseUp={this._onMouseUp}
> >
{ topBar }
<ToastContainer /> <ToastContainer />
<DragDropContext onDragEnd={this._onDragEnd}> <DragDropContext onDragEnd={this._onDragEnd}>
<div ref={this._resizeContainer} className={bodyClasses}> <div ref={this._resizeContainer} className={bodyClasses}>

View file

@ -173,7 +173,6 @@ interface IState {
leftDisabled: boolean; leftDisabled: boolean;
middleDisabled: boolean; middleDisabled: boolean;
// the right panel's disabled state is tracked in its store. // the right panel's disabled state is tracked in its store.
checkingForUpdate?: string; // updateCheckStatusEnum
// Parameters used in the registration dance with the IS // Parameters used in the registration dance with the IS
register_client_secret?: string; register_client_secret?: string;
register_session_id?: string; register_session_id?: string;
@ -226,8 +225,6 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
leftDisabled: false, leftDisabled: false,
middleDisabled: false, middleDisabled: false,
checkingForUpdate: null,
hideToSRUsers: false, hideToSRUsers: false,
syncError: null, // If the current syncing status is ERROR, the error object, otherwise null. syncError: null, // If the current syncing status is ERROR, the error object, otherwise null.
@ -720,9 +717,6 @@ export default class MatrixChat extends React.PureComponent<IProps, IState> {
case 'client_started': case 'client_started':
this.onClientStarted(); this.onClientStarted();
break; break;
case 'check_updates':
this.setState({ checkingForUpdate: payload.value });
break;
case 'send_event': case 'send_event':
this.onSendEvent(payload.room_id, payload.event); this.onSendEvent(payload.room_id, payload.event);
break; break;

View file

@ -108,6 +108,9 @@ export default class MessagePanel extends React.Component {
// whether to show reactions for an event // whether to show reactions for an event
showReactions: PropTypes.bool, showReactions: PropTypes.bool,
// whether to use the irc layout
useIRCLayout: PropTypes.bool,
}; };
// Force props to be loaded for useIRCLayout // Force props to be loaded for useIRCLayout
@ -119,7 +122,6 @@ export default class MessagePanel extends React.Component {
// display 'ghost' read markers that are animating away // display 'ghost' read markers that are animating away
ghostReadMarkers: [], ghostReadMarkers: [],
showTypingNotifications: SettingsStore.getValue("showTypingNotifications"), showTypingNotifications: SettingsStore.getValue("showTypingNotifications"),
useIRCLayout: this.useIRCLayout(SettingsStore.getValue("feature_irc_ui")),
}; };
// opaque readreceipt info for each userId; used by ReadReceiptMarker // opaque readreceipt info for each userId; used by ReadReceiptMarker
@ -172,8 +174,6 @@ export default class MessagePanel extends React.Component {
this._showTypingNotificationsWatcherRef = this._showTypingNotificationsWatcherRef =
SettingsStore.watchSetting("showTypingNotifications", null, this.onShowTypingNotificationsChange); SettingsStore.watchSetting("showTypingNotifications", null, this.onShowTypingNotificationsChange);
this._layoutWatcherRef = SettingsStore.watchSetting("feature_irc_ui", null, this.onLayoutChange);
} }
componentDidMount() { componentDidMount() {
@ -183,7 +183,6 @@ export default class MessagePanel extends React.Component {
componentWillUnmount() { componentWillUnmount() {
this._isMounted = false; this._isMounted = false;
SettingsStore.unwatchSetting(this._showTypingNotificationsWatcherRef); SettingsStore.unwatchSetting(this._showTypingNotificationsWatcherRef);
SettingsStore.unwatchSetting(this._layoutWatcherRef);
} }
componentDidUpdate(prevProps, prevState) { componentDidUpdate(prevProps, prevState) {
@ -202,17 +201,6 @@ export default class MessagePanel extends React.Component {
}); });
}; };
onLayoutChange = () => {
this.setState({
useIRCLayout: this.useIRCLayout(SettingsStore.getValue("feature_irc_ui")),
});
}
useIRCLayout(ircLayoutSelected) {
// if room is null we are not in a normal room list
return ircLayoutSelected && this.props.room;
}
/* get the DOM node representing the given event */ /* get the DOM node representing the given event */
getNodeForEventId(eventId) { getNodeForEventId(eventId) {
if (!this.eventNodes) { if (!this.eventNodes) {
@ -614,7 +602,7 @@ export default class MessagePanel extends React.Component {
isSelectedEvent={highlight} isSelectedEvent={highlight}
getRelationsForEvent={this.props.getRelationsForEvent} getRelationsForEvent={this.props.getRelationsForEvent}
showReactions={this.props.showReactions} showReactions={this.props.showReactions}
useIRCLayout={this.state.useIRCLayout} useIRCLayout={this.props.useIRCLayout}
/> />
</TileErrorBoundary> </TileErrorBoundary>
</li>, </li>,
@ -797,8 +785,6 @@ export default class MessagePanel extends React.Component {
this.props.className, this.props.className,
{ {
"mx_MessagePanel_alwaysShowTimestamps": this.props.alwaysShowTimestamps, "mx_MessagePanel_alwaysShowTimestamps": this.props.alwaysShowTimestamps,
"mx_IRCLayout": this.state.useIRCLayout,
"mx_GroupLayout": !this.state.useIRCLayout,
}, },
); );
@ -813,11 +799,11 @@ export default class MessagePanel extends React.Component {
} }
let ircResizer = null; let ircResizer = null;
if (this.state.useIRCLayout) { if (this.props.useIRCLayout) {
ircResizer = <IRCTimelineProfileResizer ircResizer = <IRCTimelineProfileResizer
minWidth={20} minWidth={20}
maxWidth={600} maxWidth={600}
roomId={this.props.room ? this.props.roomroomId : null} roomId={this.props.room ? this.props.room.roomId : null}
/>; />;
} }

View file

@ -165,6 +165,8 @@ export default createReactClass({
canReact: false, canReact: false,
canReply: false, canReply: false,
useIRCLayout: SettingsStore.getValue("feature_irc_ui"),
matrixClientIsReady: this.context && this.context.isInitialSyncComplete(), matrixClientIsReady: this.context && this.context.isInitialSyncComplete(),
}; };
}, },
@ -195,6 +197,8 @@ export default createReactClass({
this._roomView = createRef(); this._roomView = createRef();
this._searchResultsPanel = createRef(); this._searchResultsPanel = createRef();
this._layoutWatcherRef = SettingsStore.watchSetting("feature_irc_ui", null, this.onLayoutChange);
}, },
_onReadReceiptsChange: function() { _onReadReceiptsChange: function() {
@ -535,6 +539,14 @@ export default createReactClass({
// no need to do this as Dir & Settings are now overlays. It just burnt CPU. // no need to do this as Dir & Settings are now overlays. It just burnt CPU.
// console.log("Tinter.tint from RoomView.unmount"); // console.log("Tinter.tint from RoomView.unmount");
// Tinter.tint(); // reset colourscheme // Tinter.tint(); // reset colourscheme
SettingsStore.unwatchSetting(this._layoutWatcherRef);
},
onLayoutChange: function() {
this.setState({
useIRCLayout: SettingsStore.getValue("feature_irc_ui"),
});
}, },
_onRightPanelStoreUpdate: function() { _onRightPanelStoreUpdate: function() {
@ -1996,6 +2008,13 @@ export default createReactClass({
highlightedEventId = this.state.initialEventId; highlightedEventId = this.state.initialEventId;
} }
const messagePanelClassNames = classNames(
"mx_RoomView_messagePanel",
{
"mx_IRCLayout": this.state.useIRCLayout,
"mx_GroupLayout": !this.state.useIRCLayout,
});
// console.info("ShowUrlPreview for %s is %s", this.state.room.roomId, this.state.showUrlPreview); // console.info("ShowUrlPreview for %s is %s", this.state.room.roomId, this.state.showUrlPreview);
const messagePanel = ( const messagePanel = (
<TimelinePanel <TimelinePanel
@ -2011,11 +2030,12 @@ export default createReactClass({
onScroll={this.onMessageListScroll} onScroll={this.onMessageListScroll}
onReadMarkerUpdated={this._updateTopUnreadMessagesBar} onReadMarkerUpdated={this._updateTopUnreadMessagesBar}
showUrlPreview = {this.state.showUrlPreview} showUrlPreview = {this.state.showUrlPreview}
className="mx_RoomView_messagePanel" className={messagePanelClassNames}
membersLoaded={this.state.membersLoaded} membersLoaded={this.state.membersLoaded}
permalinkCreator={this._getPermalinkCreatorForRoom(this.state.room)} permalinkCreator={this._getPermalinkCreatorForRoom(this.state.room)}
resizeNotifier={this.props.resizeNotifier} resizeNotifier={this.props.resizeNotifier}
showReactions={true} showReactions={true}
useIRCLayout={this.state.useIRCLayout}
/>); />);
let topUnreadMessagesBar = null; let topUnreadMessagesBar = null;

View file

@ -1,59 +0,0 @@
/*
Copyright 2019 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 createReactClass from 'create-react-class';
import * as sdk from '../../index';
import dis from '../../dispatcher/dispatcher';
import Modal from '../../Modal';
import { _t } from '../../languageHandler';
const TagPanelButtons = createReactClass({
displayName: 'TagPanelButtons',
componentDidMount: function() {
this._dispatcherRef = dis.register(this._onAction);
},
componentWillUnmount() {
if (this._dispatcherRef) {
dis.unregister(this._dispatcherRef);
this._dispatcherRef = null;
}
},
_onAction(payload) {
if (payload.action === "show_redesign_feedback_dialog") {
const RedesignFeedbackDialog =
sdk.getComponent("views.dialogs.RedesignFeedbackDialog");
Modal.createTrackedDialog('Report bugs & give feedback', '', RedesignFeedbackDialog);
}
},
render() {
const GroupsButton = sdk.getComponent('elements.GroupsButton');
const ActionButton = sdk.getComponent("elements.ActionButton");
return (<div className="mx_TagPanelButtons">
<GroupsButton />
<ActionButton
className="mx_TagPanelButtons_report" action="show_redesign_feedback_dialog"
label={_t("Report bugs & give feedback")} tooltip={true} />
</div>);
},
});
export default TagPanelButtons;

View file

@ -112,6 +112,9 @@ const TimelinePanel = createReactClass({
// whether to show reactions for an event // whether to show reactions for an event
showReactions: PropTypes.bool, showReactions: PropTypes.bool,
// whether to use the irc layout
useIRCLayout: PropTypes.bool,
}, },
statics: { statics: {
@ -1447,6 +1450,7 @@ const TimelinePanel = createReactClass({
getRelationsForEvent={this.getRelationsForEvent} getRelationsForEvent={this.getRelationsForEvent}
editState={this.state.editState} editState={this.state.editState}
showReactions={this.props.showReactions} showReactions={this.props.showReactions}
useIRCLayout={this.props.useIRCLayout}
/> />
); );
}, },

View file

@ -247,9 +247,8 @@ export default createReactClass({
// do SSO instead. If we've already started the UI Auth process though, we don't // do SSO instead. If we've already started the UI Auth process though, we don't
// need to. // need to.
if (!this.state.doingUIAuth) { if (!this.state.doingUIAuth) {
await this._makeRegisterRequest({}); await this._makeRegisterRequest(null);
// This should never succeed since we specified an empty // This should never succeed since we specified no auth object.
// auth object.
console.log("Expecting 401 from register request but got success!"); console.log("Expecting 401 from register request but got success!");
} }
} catch (e) { } catch (e) {

View file

@ -355,6 +355,7 @@ export const TermsAuthEntry = createReactClass({
allChecked = allChecked && checked; allChecked = allChecked && checked;
checkboxes.push( checkboxes.push(
// XXX: replace with StyledCheckbox
<label key={"policy_checkbox_" + policy.id} className="mx_InteractiveAuthEntryComponents_termsPolicy"> <label key={"policy_checkbox_" + policy.id} className="mx_InteractiveAuthEntryComponents_termsPolicy">
<input type="checkbox" onChange={() => this._togglePolicy(policy.id)} checked={checked} /> <input type="checkbox" onChange={() => this._togglePolicy(policy.id)} checked={checked} />
<a href={policy.url} target="_blank" rel="noreferrer noopener">{ policy.name }</a> <a href={policy.url} target="_blank" rel="noreferrer noopener">{ policy.name }</a>
@ -538,6 +539,7 @@ export const MsisdnAuthEntry = createReactClass({
type: MsisdnAuthEntry.LOGIN_TYPE, type: MsisdnAuthEntry.LOGIN_TYPE,
// TODO: Remove `threepid_creds` once servers support proper UIA // TODO: Remove `threepid_creds` once servers support proper UIA
// See https://github.com/vector-im/riot-web/issues/10312 // See https://github.com/vector-im/riot-web/issues/10312
// See https://github.com/matrix-org/matrix-doc/issues/2220
threepid_creds: creds, threepid_creds: creds,
threepidCreds: creds, threepidCreds: creds,
}); });

View file

@ -23,7 +23,8 @@ import AutoDiscoveryUtils from "../../../utils/AutoDiscoveryUtils";
import * as ServerType from '../../views/auth/ServerTypeSelector'; import * as ServerType from '../../views/auth/ServerTypeSelector';
import ServerConfig from "./ServerConfig"; import ServerConfig from "./ServerConfig";
const MODULAR_URL = 'https://modular.im/?utm_source=riot-web&utm_medium=web&utm_campaign=riot-web-authentication'; const MODULAR_URL = 'https://modular.im/services/matrix-hosting-riot' +
'?utm_source=riot-web&utm_medium=web&utm_campaign=riot-web-authentication';
// TODO: TravisR - Can this extend ServerConfig for most things? // TODO: TravisR - Can this extend ServerConfig for most things?

View file

@ -238,7 +238,7 @@ export default class PasswordLogin extends React.Component {
type="text" type="text"
label={_t("Phone")} label={_t("Phone")}
value={this.state.phoneNumber} value={this.state.phoneNumber}
prefix={phoneCountry} prefixComponent={phoneCountry}
onChange={this.onPhoneNumberChanged} onChange={this.onPhoneNumberChanged}
onBlur={this.onPhoneNumberBlur} onBlur={this.onPhoneNumberBlur}
disabled={this.props.disableSubmit} disabled={this.props.disableSubmit}

View file

@ -473,7 +473,7 @@ export default createReactClass({
type="text" type="text"
label={phoneLabel} label={phoneLabel}
value={this.state.phoneNumber} value={this.state.phoneNumber}
prefix={phoneCountry} prefixComponent={phoneCountry}
onChange={this.onPhoneNumberChange} onChange={this.onPhoneNumberChange}
onValidate={this.onPhoneNumberValidate} onValidate={this.onPhoneNumberValidate}
/>; />;

View file

@ -22,7 +22,8 @@ import classnames from 'classnames';
import {ValidatedServerConfig} from "../../../utils/AutoDiscoveryUtils"; import {ValidatedServerConfig} from "../../../utils/AutoDiscoveryUtils";
import {makeType} from "../../../utils/TypeUtils"; import {makeType} from "../../../utils/TypeUtils";
const MODULAR_URL = 'https://modular.im/?utm_source=riot-web&utm_medium=web&utm_campaign=riot-web-authentication'; const MODULAR_URL = 'https://modular.im/services/matrix-hosting-riot' +
'?utm_source=riot-web&utm_medium=web&utm_campaign=riot-web-authentication';
export const FREE = 'Free'; export const FREE = 'Free';
export const PREMIUM = 'Premium'; export const PREMIUM = 'Premium';

View file

@ -144,6 +144,7 @@ export default createReactClass({
> >
<div className={classNames('mx_Dialog_header', { <div className={classNames('mx_Dialog_header', {
'mx_Dialog_headerWithButton': !!this.props.headerButton, 'mx_Dialog_headerWithButton': !!this.props.headerButton,
'mx_Dialog_headerWithCancel': !!cancelButton,
})}> })}>
<div className={classNames('mx_Dialog_title', this.props.titleClass)} id='mx_BaseDialog_title'> <div className={classNames('mx_Dialog_title', this.props.titleClass)} id='mx_BaseDialog_title'>
{headerImage} {headerImage}

View file

@ -25,6 +25,7 @@ import * as Lifecycle from '../../../Lifecycle';
import { _t } from '../../../languageHandler'; import { _t } from '../../../languageHandler';
import InteractiveAuth, {ERROR_USER_CANCELLED} from "../../structures/InteractiveAuth"; import InteractiveAuth, {ERROR_USER_CANCELLED} from "../../structures/InteractiveAuth";
import {DEFAULT_PHASE, PasswordAuthEntry, SSOAuthEntry} from "../auth/InteractiveAuthEntryComponents"; import {DEFAULT_PHASE, PasswordAuthEntry, SSOAuthEntry} from "../auth/InteractiveAuthEntryComponents";
import StyledCheckbox from "../elements/StyledCheckbox";
export default class DeactivateAccountDialog extends React.Component { export default class DeactivateAccountDialog extends React.Component {
constructor(props) { constructor(props) {
@ -209,21 +210,18 @@ export default class DeactivateAccountDialog extends React.Component {
<div className="mx_DeactivateAccountDialog_input_section"> <div className="mx_DeactivateAccountDialog_input_section">
<p> <p>
<label htmlFor="mx_DeactivateAccountDialog_erase_account_input"> <StyledCheckbox
<input checked={this.state.shouldErase}
id="mx_DeactivateAccountDialog_erase_account_input" onChange={this._onEraseFieldChange}
type="checkbox" >
checked={this.state.shouldErase} {_t(
onChange={this._onEraseFieldChange}
/>
{ _t(
"Please forget all messages I have sent when my account is deactivated " + "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 " + "(<b>Warning:</b> this will cause future users to see an incomplete view " +
"of conversations)", "of conversations)",
{}, {},
{ b: (sub) => <b>{ sub }</b> }, { b: (sub) => <b>{ sub }</b> },
) } )}
</label> </StyledCheckbox>
</p> </p>
{error} {error}

View file

@ -29,6 +29,7 @@ import {RoomPermalinkCreator, makeGroupPermalink, makeUserPermalink} from "../..
import * as ContextMenu from "../../structures/ContextMenu"; import * as ContextMenu from "../../structures/ContextMenu";
import {toRightOf} from "../../structures/ContextMenu"; import {toRightOf} from "../../structures/ContextMenu";
import {copyPlaintext, selectText} from "../../../utils/strings"; import {copyPlaintext, selectText} from "../../../utils/strings";
import StyledCheckbox from '../elements/StyledCheckbox';
const socials = [ const socials = [
{ {
@ -168,13 +169,12 @@ export default class ShareDialog extends React.PureComponent<IProps, IState> {
const events = this.props.target.getLiveTimeline().getEvents(); const events = this.props.target.getLiveTimeline().getEvents();
if (events.length > 0) { if (events.length > 0) {
checkbox = <div> checkbox = <div>
<input type="checkbox" <StyledCheckbox
id="mx_ShareDialog_checkbox" checked={this.state.linkSpecificEvent}
checked={this.state.linkSpecificEvent} onChange={this.onLinkSpecificEventCheckboxClick}
onChange={this.onLinkSpecificEventCheckboxClick} /> >
<label htmlFor="mx_ShareDialog_checkbox">
{ _t('Link to most recent message') } { _t('Link to most recent message') }
</label> </StyledCheckbox>
</div>; </div>;
} }
} else if (this.props.target instanceof User || this.props.target instanceof RoomMember) { } else if (this.props.target instanceof User || this.props.target instanceof RoomMember) {
@ -184,13 +184,12 @@ export default class ShareDialog extends React.PureComponent<IProps, IState> {
} else if (this.props.target instanceof MatrixEvent) { } else if (this.props.target instanceof MatrixEvent) {
title = _t('Share Room Message'); title = _t('Share Room Message');
checkbox = <div> checkbox = <div>
<input type="checkbox" <StyledCheckbox
id="mx_ShareDialog_checkbox"
checked={this.state.linkSpecificEvent} checked={this.state.linkSpecificEvent}
onClick={this.onLinkSpecificEventCheckboxClick} /> onClick={this.onLinkSpecificEventCheckboxClick}
<label htmlFor="mx_ShareDialog_checkbox"> >
{ _t('Link to selected message') } { _t('Link to selected message') }
</label> </StyledCheckbox>
</div>; </div>;
} }

View file

@ -58,18 +58,15 @@ export default class Draggable extends React.Component<IProps, IState> {
document.addEventListener("mousemove", this.state.onMouseMove); document.addEventListener("mousemove", this.state.onMouseMove);
document.addEventListener("mouseup", this.state.onMouseUp); document.addEventListener("mouseup", this.state.onMouseUp);
console.log("Mouse down")
} }
private onMouseUp = (event: MouseEvent): void => { private onMouseUp = (event: MouseEvent): void => {
document.removeEventListener("mousemove", this.state.onMouseMove); document.removeEventListener("mousemove", this.state.onMouseMove);
document.removeEventListener("mouseup", this.state.onMouseUp); document.removeEventListener("mouseup", this.state.onMouseUp);
this.props.onMouseUp(event); this.props.onMouseUp(event);
console.log("Mouse up")
} }
private onMouseMove(event: MouseEvent): void { private onMouseMove(event: MouseEvent): void {
console.log("Mouse Move")
const newLocation = this.props.dragFunc(this.state.location, event); const newLocation = this.props.dragFunc(this.state.location, event);
this.setState({ this.setState({

View file

@ -1,37 +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 * as sdk from '../../../index';
import PropTypes from 'prop-types';
import { _t } from '../../../languageHandler';
const GroupsButton = function(props) {
const ActionButton = sdk.getComponent('elements.ActionButton');
return (
<ActionButton className="mx_GroupsButton" action="toggle_my_groups"
label={_t("Communities")}
size={props.size}
tooltip={true}
/>
);
};
GroupsButton.propTypes = {
size: PropTypes.string,
};
export default GroupsButton;

View file

@ -156,70 +156,16 @@ export default class PersistedElement extends React.Component {
child.style.display = visible ? 'block' : 'none'; child.style.display = visible ? 'block' : 'none';
} }
/*
* Clip element bounding rectangle to that of the parent elements.
* This is not a full visibility check, but prevents the persisted
* element from overflowing parent containers when inside a scrolled
* area.
*/
_getClippedBoundingClientRect(element) {
let parentElement = element.parentElement;
let rect = element.getBoundingClientRect();
rect = new DOMRect(rect.left, rect.top, rect.width, rect.height);
while (parentElement) {
const parentRect = parentElement.getBoundingClientRect();
if (parentRect.left > rect.left) {
rect.width = rect.width - (parentRect.left - rect.left);
rect.x = parentRect.x;
}
if (parentRect.top > rect.top) {
rect.height = rect.height - (parentRect.top - rect.top);
rect.y = parentRect.y;
}
if (parentRect.right < rect.right) {
rect.width = rect.width - (rect.right - parentRect.right);
}
if (parentRect.bottom < rect.bottom) {
rect.height = rect.height - (rect.bottom - parentRect.bottom);
}
parentElement = parentElement.parentElement;
}
if (rect.width < 0) rect.width = 0;
if (rect.height < 0) rect.height = 0;
return rect;
}
updateChildPosition(child, parent) { updateChildPosition(child, parent) {
if (!child || !parent) return; if (!child || !parent) return;
const parentRect = parent.getBoundingClientRect(); const parentRect = parent.getBoundingClientRect();
const clipRect = this._getClippedBoundingClientRect(parent);
Object.assign(child.parentElement.style, {
position: 'absolute',
top: clipRect.top + 'px',
left: clipRect.left + 'px',
width: clipRect.width + 'px',
height: clipRect.height + 'px',
overflow: "hidden",
});
Object.assign(child.style, { Object.assign(child.style, {
position: 'absolute', position: 'absolute',
top: (parentRect.top - clipRect.top) + 'px', top: parentRect.top + 'px',
left: (parentRect.left - clipRect.left) + 'px', left: parentRect.left + 'px',
width: parentRect.width + 'px', width: parentRect.width + 'px',
height: parentRect.height + 'px', height: parentRect.height + 'px',
overflow: "hidden",
}); });
} }

View file

@ -47,8 +47,8 @@ export default class RoomAliasField extends React.PureComponent {
<Field <Field
label={_t("Room address")} label={_t("Room address")}
className="mx_RoomAliasField" className="mx_RoomAliasField"
prefix={poundSign} prefixComponent={poundSign}
postfix={domain} postfixComponent={domain}
ref={ref => this._fieldRef = ref} ref={ref => this._fieldRef = ref}
onValidate={this._onValidate} onValidate={this._onValidate}
placeholder={_t("e.g. my-room")} placeholder={_t("e.g. my-room")}

View file

@ -0,0 +1,56 @@
/*
Copyright 2020 The Matrix.org Foundation C.I.C.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import React from "react";
import { randomString } from "matrix-js-sdk/src/randomstring";
const CHECK_BOX_SVG = require("../../../../res/img/feather-customised/check.svg");
interface IProps extends React.InputHTMLAttributes<HTMLInputElement> {
}
interface IState {
}
export default class StyledCheckbox extends React.PureComponent<IProps, IState> {
private id: string;
public static readonly defaultProps = {
className: "",
}
constructor(props: IProps) {
super(props);
// 56^10 so unlikely chance of collision.
this.id = "checkbox_" + randomString(10);
}
public render() {
const { children, className, ...otherProps } = this.props;
return <span className={"mx_Checkbox " + className}>
<input id={this.id} {...otherProps} type="checkbox" />
<label htmlFor={this.id}>
{/* Using the div to center the image */}
<div className="mx_Checkbox_background">
<img src={CHECK_BOX_SVG}/>
</div>
<div>
{ this.props.children }
</div>
</label>
</span>
}
}

View file

@ -1,91 +0,0 @@
/*
Copyright 2017, 2019 Michael Telatynski <7t3chguy@gmail.com>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import React from 'react';
import PropTypes from 'prop-types';
import createReactClass from 'create-react-class';
import { _t } from '../../../languageHandler';
import PlatformPeg from '../../../PlatformPeg';
import AccessibleButton from '../../../components/views/elements/AccessibleButton';
export default createReactClass({
propTypes: {
status: PropTypes.string.isRequired,
// Currently for error detail but will be usable for download progress
// once that is a thing that squirrel passes through electron.
detail: PropTypes.string,
},
getDefaultProps: function() {
return {
detail: '',
};
},
getStatusText: function() {
// we can't import the enum from riot-web as we don't want matrix-react-sdk
// to depend on riot-web. so we grab it as a normal object via API instead.
const updateCheckStatusEnum = PlatformPeg.get().getUpdateCheckStatusEnum();
switch (this.props.status) {
case updateCheckStatusEnum.ERROR:
return _t('Error encountered (%(errorDetail)s).', { errorDetail: this.props.detail });
case updateCheckStatusEnum.CHECKING:
return _t('Checking for an update...');
case updateCheckStatusEnum.NOTAVAILABLE:
return _t('No update available.');
case updateCheckStatusEnum.DOWNLOADING:
return _t('Downloading update...');
}
},
hideToolbar: function() {
PlatformPeg.get().stopUpdateCheck();
},
render: function() {
const message = this.getStatusText();
const warning = _t('Warning');
if (!('getUpdateCheckStatusEnum' in PlatformPeg.get())) {
return <div></div>;
}
const updateCheckStatusEnum = PlatformPeg.get().getUpdateCheckStatusEnum();
const doneStatuses = [
updateCheckStatusEnum.ERROR,
updateCheckStatusEnum.NOTAVAILABLE,
];
let image;
if (doneStatuses.includes(this.props.status)) {
image = <img className="mx_MatrixToolbar_warning" src={require("../../../../res/img/warning.svg")} width="24" height="23" alt="" />;
} else {
image = <img className="mx_MatrixToolbar_warning" src={require("../../../../res/img/spinner.gif")} width="24" height="23" alt="" />;
}
return (
<div className="mx_MatrixToolbar">
{image}
<div className="mx_MatrixToolbar_content">
{message}
</div>
<AccessibleButton className="mx_MatrixToolbar_close" onClick={this.hideToolbar}>
<img src={require("../../../../res/img/cancel.svg")} width="18" height="18" alt={_t('Close')} />
</AccessibleButton>
</div>
);
},
});

View file

@ -141,15 +141,6 @@ export default createReactClass({
return counters; return counters;
}, },
_onScroll: function(rect) {
if (this.props.onResize) {
this.props.onResize();
}
/* Force refresh of PersistedElements which may be partially hidden */
window.dispatchEvent(new Event('resize'));
},
render: function() { render: function() {
const CallView = sdk.getComponent("voip.CallView"); const CallView = sdk.getComponent("voip.CallView");
const TintableSvg = sdk.getComponent("elements.TintableSvg"); const TintableSvg = sdk.getComponent("elements.TintableSvg");
@ -274,7 +265,7 @@ export default createReactClass({
} }
return ( return (
<AutoHideScrollbar className={classes} style={style} onScroll={this._onScroll}> <AutoHideScrollbar className={classes} style={style} >
{ stateViews } { stateViews }
{ appsDrawer } { appsDrawer }
{ fileDropTarget } { fileDropTarget }

View file

@ -74,6 +74,7 @@ function selectionEquals(a: Selection, b: Selection): boolean {
export default class BasicMessageEditor extends React.Component { export default class BasicMessageEditor extends React.Component {
static propTypes = { static propTypes = {
onChange: PropTypes.func, onChange: PropTypes.func,
onPaste: PropTypes.func, // returns true if handled and should skip internal onPaste handler
model: PropTypes.instanceOf(EditorModel).isRequired, model: PropTypes.instanceOf(EditorModel).isRequired,
room: PropTypes.instanceOf(Room).isRequired, room: PropTypes.instanceOf(Room).isRequired,
placeholder: PropTypes.string, placeholder: PropTypes.string,
@ -254,6 +255,12 @@ export default class BasicMessageEditor extends React.Component {
} }
_onPaste = (event) => { _onPaste = (event) => {
event.preventDefault(); // we always handle the paste ourselves
if (this.props.onPaste && this.props.onPaste(event, this.props.model)) {
// to prevent double handling, allow props.onPaste to skip internal onPaste
return true;
}
const {model} = this.props; const {model} = this.props;
const {partCreator} = model; const {partCreator} = model;
const partsText = event.clipboardData.getData("application/x-riot-composer"); const partsText = event.clipboardData.getData("application/x-riot-composer");
@ -269,7 +276,6 @@ export default class BasicMessageEditor extends React.Component {
this._modifiedFlag = true; this._modifiedFlag = true;
const range = getRangeForSelection(this._editorRef, model, document.getSelection()); const range = getRangeForSelection(this._editorRef, model, document.getSelection());
replaceRangeAndMoveCaret(range, parts); replaceRangeAndMoveCaret(range, parts);
event.preventDefault();
} }
_onInput = (event) => { _onInput = (event) => {
@ -503,10 +509,6 @@ export default class BasicMessageEditor extends React.Component {
} }
} }
getEditableRootNode() {
return this._editorRef;
}
isModified() { isModified() {
return this._modifiedFlag; return this._modifiedFlag;
} }

View file

@ -323,13 +323,8 @@ export default class SendMessageComposer extends React.Component {
this._clearStoredEditorState(); this._clearStoredEditorState();
} }
componentDidMount() {
this._editorRef.getEditableRootNode().addEventListener("paste", this._onPaste, true);
}
componentWillUnmount() { componentWillUnmount() {
dis.unregister(this.dispatcherRef); dis.unregister(this.dispatcherRef);
this._editorRef.getEditableRootNode().removeEventListener("paste", this._onPaste, true);
} }
// TODO: [REACT-WARNING] Move this to constructor // TODO: [REACT-WARNING] Move this to constructor
@ -439,6 +434,7 @@ export default class SendMessageComposer extends React.Component {
ContentMessages.sharedInstance().sendContentListToRoom( ContentMessages.sharedInstance().sendContentListToRoom(
Array.from(clipboardData.files), this.props.room.roomId, this.context, Array.from(clipboardData.files), this.props.room.roomId, this.context,
); );
return true; // to skip internal onPaste handler
} }
} }
@ -455,6 +451,7 @@ export default class SendMessageComposer extends React.Component {
label={this.props.placeholder} label={this.props.placeholder}
placeholder={this.props.placeholder} placeholder={this.props.placeholder}
onChange={this._saveStoredEditorState} onChange={this._saveStoredEditorState}
onPaste={this._onPaste}
/> />
</div> </div>
); );

View file

@ -141,6 +141,12 @@ export default createReactClass({
_changePassword: function(cli, oldPassword, newPassword) { _changePassword: function(cli, oldPassword, newPassword) {
const authDict = { const authDict = {
type: 'm.login.password', type: 'm.login.password',
identifier: {
type: 'm.id.user',
user: cli.credentials.userId,
},
// TODO: Remove `user` once servers support proper UIA
// See https://github.com/matrix-org/synapse/issues/5665
user: cli.credentials.userId, user: cli.credentials.userId,
password: oldPassword, password: oldPassword,
}; };

View file

@ -21,6 +21,7 @@ import * as sdk from '../../../index';
import { _t } from '../../../languageHandler'; import { _t } from '../../../languageHandler';
import {MatrixClientPeg} from '../../../MatrixClientPeg'; import {MatrixClientPeg} from '../../../MatrixClientPeg';
import {formatDate} from '../../../DateUtils'; import {formatDate} from '../../../DateUtils';
import StyledCheckbox from '../elements/StyledCheckbox';
export default class DevicesPanelEntry extends React.Component { export default class DevicesPanelEntry extends React.Component {
constructor(props) { constructor(props) {
@ -81,7 +82,7 @@ export default class DevicesPanelEntry extends React.Component {
{ lastSeen } { lastSeen }
</div> </div>
<div className="mx_DevicesPanel_deviceButtons"> <div className="mx_DevicesPanel_deviceButtons">
<input type="checkbox" onChange={this.onDeviceToggled} checked={this.props.selected} /> <StyledCheckbox onChange={this.onDeviceToggled} checked={this.props.selected} />
</div> </div>
</div> </div>
); );

View file

@ -0,0 +1,88 @@
/*
Copyright 2020 The Matrix.org Foundation C.I.C.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import React, {useState} from "react";
import {UpdateCheckStatus} from "../../../BasePlatform";
import PlatformPeg from "../../../PlatformPeg";
import {useDispatcher} from "../../../hooks/useDispatcher";
import dis from "../../../dispatcher/dispatcher";
import {Action} from "../../../dispatcher/actions";
import {_t} from "../../../languageHandler";
import InlineSpinner from "../../../components/views/elements/InlineSpinner";
import AccessibleButton from "../../../components/views/elements/AccessibleButton";
import {CheckUpdatesPayload} from "../../../dispatcher/payloads/CheckUpdatesPayload";
function installUpdate() {
PlatformPeg.get().installUpdate();
}
function getStatusText(status: UpdateCheckStatus, errorDetail?: string) {
switch (status) {
case UpdateCheckStatus.Error:
return _t('Error encountered (%(errorDetail)s).', { errorDetail });
case UpdateCheckStatus.Checking:
return _t('Checking for an update...');
case UpdateCheckStatus.NotAvailable:
return _t('No update available.');
case UpdateCheckStatus.Downloading:
return _t('Downloading update...');
case UpdateCheckStatus.Ready:
return _t("New version available. <a>Update now.</a>", {}, {
a: sub => <AccessibleButton kind="link" onClick={installUpdate}>{sub}</AccessibleButton>
});
}
}
const doneStatuses = [
UpdateCheckStatus.Ready,
UpdateCheckStatus.Error,
UpdateCheckStatus.NotAvailable,
];
const UpdateCheckButton = () => {
const [state, setState] = useState<CheckUpdatesPayload>(null);
const onCheckForUpdateClick = () => {
setState(null);
PlatformPeg.get().startUpdateCheck();
};
useDispatcher(dis, ({action, ...params}) => {
if (action === Action.CheckUpdates) {
setState(params as CheckUpdatesPayload);
}
});
const busy = state && !doneStatuses.includes(state.status);
let suffix;
if (state) {
suffix = <span className="mx_UpdateCheckButton_summary">
{getStatusText(state.status, state.detail)}
{busy && <InlineSpinner />}
</span>;
}
return <React.Fragment>
<AccessibleButton onClick={onCheckForUpdateClick} kind="primary" disabled={busy}>
{_t("Check for update")}
</AccessibleButton>
{ suffix }
</React.Fragment>;
};
export default UpdateCheckButton;

View file

@ -103,7 +103,7 @@ export default class AppearanceUserSettingsTab extends React.Component<IProps, I
}; };
} }
private onThemeChange(e: React.ChangeEvent<HTMLSelectElement | HTMLInputElement>): void { private onThemeChange = (e: React.ChangeEvent<HTMLSelectElement | HTMLInputElement>): void => {
const newTheme = e.target.value; const newTheme = e.target.value;
if (this.state.theme === newTheme) return; if (this.state.theme === newTheme) return;
@ -124,18 +124,18 @@ export default class AppearanceUserSettingsTab extends React.Component<IProps, I
dis.dispatch<RecheckThemePayload>({action: Action.RecheckTheme, forceTheme: newTheme}); dis.dispatch<RecheckThemePayload>({action: Action.RecheckTheme, forceTheme: newTheme});
}; };
private onUseSystemThemeChanged(checked: boolean) { private onUseSystemThemeChanged = (checked: boolean): void => {
this.setState({useSystemTheme: checked}); this.setState({useSystemTheme: checked});
SettingsStore.setValue("use_system_theme", null, SettingLevel.DEVICE, checked); SettingsStore.setValue("use_system_theme", null, SettingLevel.DEVICE, checked);
dis.dispatch<RecheckThemePayload>({action: Action.RecheckTheme}); dis.dispatch<RecheckThemePayload>({action: Action.RecheckTheme});
}; };
private onFontSizeChanged(size: number) { private onFontSizeChanged = (size: number): void => {
this.setState({fontSize: size.toString()}); this.setState({fontSize: size.toString()});
SettingsStore.setValue("fontSize", null, SettingLevel.DEVICE, size); SettingsStore.setValue("fontSize", null, SettingLevel.DEVICE, size);
}; };
private async onValidateFontSize({value}: Pick<IFieldState, "value">): Promise<IValidationResult> { private onValidateFontSize = async ({value}: Pick<IFieldState, "value">): Promise<IValidationResult> => {
const parsedSize = parseFloat(value); const parsedSize = parseFloat(value);
const min = FontWatcher.MIN_SIZE; const min = FontWatcher.MIN_SIZE;
const max = FontWatcher.MAX_SIZE; const max = FontWatcher.MAX_SIZE;
@ -155,7 +155,7 @@ export default class AppearanceUserSettingsTab extends React.Component<IProps, I
return {valid: true, feedback: _t('Use between %(min)s pt and %(max)s pt', {min, max})}; return {valid: true, feedback: _t('Use between %(min)s pt and %(max)s pt', {min, max})};
} }
private async onAddCustomTheme() { private onAddCustomTheme = async (): Promise<void> => {
let currentThemes: string[] = SettingsStore.getValue("custom_themes"); let currentThemes: string[] = SettingsStore.getValue("custom_themes");
if (!currentThemes) currentThemes = []; if (!currentThemes) currentThemes = [];
currentThemes = currentThemes.map(c => c); // cheap clone currentThemes = currentThemes.map(c => c); // cheap clone
@ -187,7 +187,7 @@ export default class AppearanceUserSettingsTab extends React.Component<IProps, I
}, 3000); }, 3000);
}; };
private onCustomThemeChange(e: React.ChangeEvent<HTMLSelectElement | HTMLInputElement>) { private onCustomThemeChange = (e: React.ChangeEvent<HTMLSelectElement | HTMLInputElement>): void => {
this.setState({customThemeUrl: e.target.value}); this.setState({customThemeUrl: e.target.value});
}; };

View file

@ -25,6 +25,7 @@ import Modal from "../../../../../Modal";
import * as sdk from "../../../../../"; import * as sdk from "../../../../../";
import PlatformPeg from "../../../../../PlatformPeg"; import PlatformPeg from "../../../../../PlatformPeg";
import * as KeyboardShortcuts from "../../../../../accessibility/KeyboardShortcuts"; import * as KeyboardShortcuts from "../../../../../accessibility/KeyboardShortcuts";
import UpdateCheckButton from "../../UpdateCheckButton";
export default class HelpUserSettingsTab extends React.Component { export default class HelpUserSettingsTab extends React.Component {
static propTypes = { static propTypes = {
@ -177,12 +178,7 @@ export default class HelpUserSettingsTab extends React.Component {
let updateButton = null; let updateButton = null;
if (this.state.canUpdate) { if (this.state.canUpdate) {
const platform = PlatformPeg.get(); updateButton = <UpdateCheckButton />;
updateButton = (
<AccessibleButton onClick={platform.startUpdateCheck} kind='primary'>
{_t('Check for update')}
</AccessibleButton>
);
} }
return ( return (

View file

@ -17,17 +17,21 @@ limitations under the License.
import React, {ReactChild} from "react"; import React, {ReactChild} from "react";
import FormButton from "../elements/FormButton"; import FormButton from "../elements/FormButton";
import {XOR} from "../../../@types/common";
interface IProps { interface IProps {
description: ReactChild; description: ReactChild;
acceptLabel: string; acceptLabel: string;
rejectLabel?: string;
onAccept(); onAccept();
onReject?();
} }
const GenericToast: React.FC<IProps> = ({description, acceptLabel, rejectLabel, onAccept, onReject}) => { interface IPropsExtended extends IProps {
rejectLabel: string;
onReject();
}
const GenericToast: React.FC<XOR<IPropsExtended, IProps>> = ({description, acceptLabel, rejectLabel, onAccept, onReject}) => {
return <div> return <div>
<div className="mx_Toast_description"> <div className="mx_Toast_description">
{ description } { description }

View file

@ -45,8 +45,12 @@ export enum Action {
ViewTooltip = "view_tooltip", ViewTooltip = "view_tooltip",
/** /**
* Forces the theme to reload. No additional payload information required. * Forces the theme to reload. No additional payload information required.
*/ */
RecheckTheme = "recheck_theme", RecheckTheme = "recheck_theme",
}
/**
* Provide status information for an ongoing update check. Should be used with a CheckUpdatesPayload.
*/
CheckUpdates = "check_updates",
}

View file

@ -0,0 +1,33 @@
/*
Copyright 2020 The Matrix.org Foundation C.I.C.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import { ActionPayload } from "../payloads";
import { Action } from "../actions";
import {UpdateCheckStatus} from "../../BasePlatform";
export interface CheckUpdatesPayload extends ActionPayload {
action: Action.CheckUpdates,
/**
* The current phase of the manual update check.
*/
status: UpdateCheckStatus;
/**
* Detail string relating to the current status, typically for error details.
*/
detail?: string;
}

View file

@ -0,0 +1,40 @@
/*
Copyright 2020 The Matrix.org Foundation C.I.C.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import {useEffect, useRef} from "react";
import {ActionPayload} from "../dispatcher/payloads";
import {Dispatcher} from "flux";
// Hook to simplify listening to flux dispatches
export const useDispatcher = (dispatcher: Dispatcher<ActionPayload>, handler: (payload: ActionPayload) => void) => {
// Create a ref that stores handler
const savedHandler = useRef((payload: ActionPayload) => {});
// Update ref.current value if handler changes.
useEffect(() => {
savedHandler.current = handler;
}, [handler]);
useEffect(() => {
// Create event listener that calls handler function stored in ref
const ref = dispatcher.register((payload) => savedHandler.current(payload));
// Remove event listener on cleanup
return () => {
dispatcher.unregister(ref);
};
}, [dispatcher]);
};

View file

@ -2265,5 +2265,64 @@
"Enter recovery passphrase": "Въведете парола за възстановяване", "Enter recovery passphrase": "Въведете парола за възстановяване",
"Unable to access secret storage. Please verify that you entered the correct recovery passphrase.": "Неуспешен достъп до секретното складиране. Потвърдете, че сте въвели правилната парола за възстановяване.", "Unable to access secret storage. Please verify that you entered the correct recovery passphrase.": "Неуспешен достъп до секретното складиране. Потвърдете, че сте въвели правилната парола за възстановяване.",
"<b>Warning</b>: You should only do this on a trusted computer.": "<b>Внимание</b>: трябва да правите това само от доверен компютър.", "<b>Warning</b>: You should only do this on a trusted computer.": "<b>Внимание</b>: трябва да правите това само от доверен компютър.",
"Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery passphrase.": "Въведете паролата си за възстановяване за да достъпите защитената история на съобщенията и самоличността си за кръстосано-подписване за потвърждаване на другите сесии." "Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery passphrase.": "Въведете паролата си за възстановяване за да достъпите защитената история на съобщенията и самоличността си за кръстосано-подписване за потвърждаване на другите сесии.",
"Room name or address": "Име на стая или адрес",
"Joins room with given address": "Присъединява се към стая с дадения адрес",
"Unrecognised room address:": "Неразпознат адрес на стая:",
"Help us improve Riot": "Помогнете ни да подобрим Riot",
"Send <UsageDataLink>anonymous usage data</UsageDataLink> which helps us improve Riot. This will use a <PolicyLink>cookie</PolicyLink>.": "Изпращане на <UsageDataLink>анонимни данни за използването</UsageDataLink>, които помагат да се подобри Riot. Това ще използва <PolicyLink>бисквитка</PolicyLink>.",
"I want to help": "Искам да помогна",
"Your homeserver has exceeded its user limit.": "Надвишен е лимитът за потребители на сървъра ви.",
"Your homeserver has exceeded one of its resource limits.": "Беше надвишен някой от лимитите на сървъра.",
"Contact your <a>server admin</a>.": "Свържете се със <a>сървърния администратор</a>.",
"Ok": "Добре",
"Set password": "Настрой парола",
"To return to your account in future you need to set a password": "За да се върнете в профила си в бъдеще е необходимо да настройте парола",
"Restart": "Рестартирай",
"Upgrade your Riot": "Обновете Riot",
"A new version of Riot is available!": "Налична е нова версия на Riot!",
"New version available. <a>Update now.</a>": "Налична е нова версия. <a>Обновете сега.</a>",
"Please verify the room ID or address and try again.": "Проверете идентификатора или адреса на стаята и опитайте пак.",
"Room ID or address of ban list": "Идентификатор или адрес на стая списък за блокиране",
"To link to this room, please add an address.": "За да споделите тази стая, добавете адрес.",
"Error creating address": "Неуспешно създаване на адрес",
"There was an error creating that address. It may not be allowed by the server or a temporary failure occurred.": "Възникна грешка при създаването на този адрес. Или не е позволен от сървъра или е временен проблем.",
"You don't have permission to delete the address.": "Нямате права да изтриете адреса.",
"There was an error removing that address. It may no longer exist or a temporary error occurred.": "Възникна грешка при премахването на този адрес. Или не съществува вече или е временен проблем.",
"Error removing address": "Грешка при премахването на адреса",
"Categories": "Категории",
"Room address": "Адрес на стаята",
"Please provide a room address": "Въведете адрес на стаята",
"This address is available to use": "Адресът е наличен за ползване",
"This address is already in use": "Адресът вече се използва",
"Set a room address to easily share your room with other people.": "Настройте адрес на стаята за да може лесно да я споделяте с други хора.",
"You've previously used a newer version of Riot with this session. To use this version again with end to end encryption, you will need to sign out and back in again.": "Използвали сте и по-нова версия на Riot от сегашната за тази сесия. За да използвате сегашната версия отново с шифроване от-край-до-край, ще е необходимо да излезете и да влезете отново.",
"If you've forgotten your recovery passphrase you can <button1>use your recovery key</button1> or <button2>set up new recovery options</button2>.": "Ако сте забравили паролата за възстановяване, може да <button1>използвате ключа за възстановяване</button1> или <button2>да настройте нови опции за възстановяване</button2>.",
"Enter recovery key": "Въведете ключ за възстановяване",
"Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery key.": "Достъпете защитената история на съобщенията и самоличността за кръстосано-подписване за верифициране на други сесии, чрез въвеждане на ключа си за възстановяване.",
"Restoring keys from backup": "Възстановяване на ключове от резервно копие",
"Fetching keys from server...": "Изтегляне на ключове от сървъра...",
"%(completed)s of %(total)s keys restored": "%(completed)s от %(total)s ключа са възстановени",
"Recovery key mismatch": "Несъответствие в ключа за възстановяване",
"Backup could not be decrypted with this recovery key: please verify that you entered the correct recovery key.": "Резервното копие не можа да бъде разшифровано с този ключ за възстановяване: проверете дали сте въвели правилния ключ за възстановяване.",
"Incorrect recovery passphrase": "Неправилна парола за възстановяване",
"Backup could not be decrypted with this recovery passphrase: please verify that you entered the correct recovery passphrase.": "Резервното копие не можа да бъде разшифровано с тази парола за възстановяване: проверете дали сте въвели правилната парола за възстановяване.",
"Keys restored": "Ключовете бяха възстановени",
"Successfully restored %(sessionCount)s keys": "Успешно бяха възстановени %(sessionCount)s ключа",
"Address (optional)": "Адрес (незадължително)",
"Confirm your identity by entering your account password below.": "Потвърдете самоличността си чрез въвеждане на паролата за профила по-долу.",
"Sign in with SSO": "Влезте със SSO",
"Welcome to %(appName)s": "Добре дошли в %(appName)s",
"Liberate your communication": "Освободете комуникацията си",
"Send a Direct Message": "Изпрати директно съобщение",
"Explore Public Rooms": "Разгледай публичните стаи",
"Create a Group Chat": "Създай групов чат",
"Self-verification request": "Заявка за само-потвърждение",
"Delete the room address %(alias)s and remove %(name)s from the directory?": "Изтрий %(alias)s адреса на стаята и премахни %(name)s от директорията?",
"delete the address.": "изтриване на адреса.",
"Message not sent due to unknown sessions being present": "Съобщението не е изпратено поради наличието на непознати сесии",
"<showSessionsText>Show sessions</showSessionsText>, <sendAnywayText>send anyway</sendAnywayText> or <cancelText>cancel</cancelText>.": "<showSessionsText>Покажи сесиите</showSessionsText>, <sendAnywayText>изпрати така или иначе</sendAnywayText> или <cancelText>откажи</cancelText>.",
"Verify this login": "Потвърди тази сесия",
"Session verified": "Сесията беше потвърдена",
"Changing your password will reset any end-to-end encryption keys on all of your sessions, making encrypted chat history unreadable. Set up Key Backup or export your room keys from another session before resetting your password.": "Промяната на паролата ще нулира всички ключове за шифроване от-край-до-край по всички ваши сесии, правейки шифрованата история на чата нечетима. Настройте резервно копие на ключовете или експортирайте ключовете на стаите от друга сесия преди да промените паролата си."
} }

View file

@ -2294,5 +2294,34 @@
"Sends a message to the given user": "Pošle zprávu danému uživateli", "Sends a message to the given user": "Pošle zprávu danému uživateli",
"Waiting for your other session to verify…": "Čekáme na ověření od vaší druhé relace…", "Waiting for your other session to verify…": "Čekáme na ověření od vaší druhé relace…",
"Verify all your sessions to ensure your account & messages are safe": "Ověřte všechny své relace, abyste zaručili, že jsou vaše zprávy a účet bezpečné", "Verify all your sessions to ensure your account & messages are safe": "Ověřte všechny své relace, abyste zaručili, že jsou vaše zprávy a účet bezpečné",
"Verify the new login accessing your account: %(name)s": "Ověřte nové přihlášení na váš účet: %(name)s" "Verify the new login accessing your account: %(name)s": "Ověřte nové přihlášení na váš účet: %(name)s",
"Room name or address": "Jméno nebo adresa místnosti",
"Joins room with given address": "Přidat se do místnosti s danou adresou",
"Unrecognised room address:": "Nerozpoznaná adresa místnosti:",
"Use IRC layout": "Používat rozložení IRC",
"Font size": "Velikost písma",
"Custom font size": "Vlastní velikost písma",
"IRC display name width": "šířka zobrazovného IRC jména",
"unexpected type": "neočekávaný typ",
"Session backup key:": "Klíč k záloze relace:",
"Confirm deleting these sessions by using Single Sign On to prove your identity.|other": "Pomocí Jednotného přihlášení potvrdit odstranění těchto relací.",
"Confirm deleting these sessions by using Single Sign On to prove your identity.|one": "Pomocí Jednotného přihlášení potvrdit odstranění této relace.",
"Size must be a number": "Velikost musí být číslo",
"Custom font size can only be between %(min)s pt and %(max)s pt": "Vlastní velikost písma může být pouze mezi %(min)s pt a %(max)s pt",
"Use between %(min)s pt and %(max)s pt": "Použijte velikost mezi %(min)s pt a %(max)s pt",
"Appearance": "Vzhled",
"Please verify the room ID or address and try again.": "Ověřte prosím, že ID místnosti je správné a zkuste to znovu.",
"Room ID or address of ban list": "ID nebo adresa seznamu zablokovaných",
"Help us improve Riot": "Pomozte nám zlepšovat Riot",
"Send <UsageDataLink>anonymous usage data</UsageDataLink> which helps us improve Riot. This will use a <PolicyLink>cookie</PolicyLink>.": "Zasílat <UsageDataLink>anonymní data o použití aplikace</UsageDataLink>, která nám pomáhají Riot zlepšovat. Bedeme na to používat <PolicyLink>soubory cookie</PolicyLink>.",
"I want to help": "Chci pomoci",
"Your homeserver has exceeded its user limit.": "Na vašem domovském serveru byl překročen limit počtu uživatelů.",
"Your homeserver has exceeded one of its resource limits.": "Na vašem domovském serveru byl překročen limit systémových požadavků.",
"Contact your <a>server admin</a>.": "Kontaktujte <a>administrátora serveru</a>.",
"Ok": "Ok",
"Set password": "Nastavit heslo",
"To return to your account in future you need to set a password": "Abyste se k účtu mohli v budoucnu vrátit, je potřeba nastavit heslo",
"Restart": "Restartovat",
"Upgrade your Riot": "Aktualizovat Riot",
"A new version of Riot is available!": "Je dostupná nová verze Riotu!"
} }

View file

@ -772,6 +772,12 @@
"Use an Integration Manager to manage bots, widgets, and sticker packs.": "Use an Integration Manager to manage bots, widgets, and sticker packs.", "Use an Integration Manager to manage bots, widgets, and sticker packs.": "Use an Integration Manager to manage bots, widgets, and sticker packs.",
"Manage integrations": "Manage integrations", "Manage integrations": "Manage integrations",
"Integration Managers receive configuration data, and can modify widgets, send room invites, and set power levels on your behalf.": "Integration Managers receive configuration data, and can modify widgets, send room invites, and set power levels on your behalf.", "Integration Managers receive configuration data, and can modify widgets, send room invites, and set power levels on your behalf.": "Integration Managers receive configuration data, and can modify widgets, send room invites, and set power levels on your behalf.",
"Error encountered (%(errorDetail)s).": "Error encountered (%(errorDetail)s).",
"Checking for an update...": "Checking for an update...",
"No update available.": "No update available.",
"Downloading update...": "Downloading update...",
"New version available. <a>Update now.</a>": "New version available. <a>Update now.</a>",
"Check for update": "Check for update",
"Size must be a number": "Size must be a number", "Size must be a number": "Size must be a number",
"Custom font size can only be between %(min)s pt and %(max)s pt": "Custom font size can only be between %(min)s pt and %(max)s pt", "Custom font size can only be between %(min)s pt and %(max)s pt": "Custom font size can only be between %(min)s pt and %(max)s pt",
"Use between %(min)s pt and %(max)s pt": "Use between %(min)s pt and %(max)s pt", "Use between %(min)s pt and %(max)s pt": "Use between %(min)s pt and %(max)s pt",
@ -804,7 +810,6 @@
"For help with using Riot, click <a>here</a>.": "For help with using Riot, click <a>here</a>.", "For help with using Riot, click <a>here</a>.": "For help with using Riot, click <a>here</a>.",
"For help with using Riot, click <a>here</a> or start a chat with our bot using the button below.": "For help with using Riot, click <a>here</a> or start a chat with our bot using the button below.", "For help with using Riot, click <a>here</a> or start a chat with our bot using the button below.": "For help with using Riot, click <a>here</a> or start a chat with our bot using the button below.",
"Chat with Riot Bot": "Chat with Riot Bot", "Chat with Riot Bot": "Chat with Riot Bot",
"Check for update": "Check for update",
"Help & About": "Help & About", "Help & About": "Help & About",
"Bug reporting": "Bug reporting", "Bug reporting": "Bug reporting",
"If you've submitted a bug via GitHub, debug logs can help us track down the problem. Debug logs contain application usage data including your username, the IDs or aliases of the rooms or groups you have visited and the usernames of other users. They do not contain messages.": "If you've submitted a bug via GitHub, debug logs can help us track down the problem. Debug logs contain application usage data including your username, the IDs or aliases of the rooms or groups you have visited and the usernames of other users. They do not contain messages.", "If you've submitted a bug via GitHub, debug logs can help us track down the problem. Debug logs contain application usage data including your username, the IDs or aliases of the rooms or groups you have visited and the usernames of other users. They do not contain messages.": "If you've submitted a bug via GitHub, debug logs can help us track down the problem. Debug logs contain application usage data including your username, the IDs or aliases of the rooms or groups you have visited and the usernames of other users. They do not contain messages.",
@ -1398,10 +1403,6 @@
"Something went wrong when trying to get your communities.": "Something went wrong when trying to get your communities.", "Something went wrong when trying to get your communities.": "Something went wrong when trying to get your communities.",
"Display your community flair in rooms configured to show it.": "Display your community flair in rooms configured to show it.", "Display your community flair in rooms configured to show it.": "Display your community flair in rooms configured to show it.",
"You're not currently a member of any communities.": "You're not currently a member of any communities.", "You're not currently a member of any communities.": "You're not currently a member of any communities.",
"Error encountered (%(errorDetail)s).": "Error encountered (%(errorDetail)s).",
"Checking for an update...": "Checking for an update...",
"No update available.": "No update available.",
"Downloading update...": "Downloading update...",
"Frequently Used": "Frequently Used", "Frequently Used": "Frequently Used",
"Smileys & People": "Smileys & People", "Smileys & People": "Smileys & People",
"Animals & Nature": "Animals & Nature", "Animals & Nature": "Animals & Nature",
@ -1447,7 +1448,6 @@
"Please <newIssueLink>create a new issue</newIssueLink> on GitHub so that we can investigate this bug.": "Please <newIssueLink>create a new issue</newIssueLink> on GitHub so that we can investigate this bug.", "Please <newIssueLink>create a new issue</newIssueLink> on GitHub so that we can investigate this bug.": "Please <newIssueLink>create a new issue</newIssueLink> on GitHub so that we can investigate this bug.",
"collapse": "collapse", "collapse": "collapse",
"expand": "expand", "expand": "expand",
"Communities": "Communities",
"You cannot delete this image. (%(code)s)": "You cannot delete this image. (%(code)s)", "You cannot delete this image. (%(code)s)": "You cannot delete this image. (%(code)s)",
"Uploaded on %(date)s by %(user)s": "Uploaded on %(date)s by %(user)s", "Uploaded on %(date)s by %(user)s": "Uploaded on %(date)s by %(user)s",
"Rotate Left": "Rotate Left", "Rotate Left": "Rotate Left",
@ -2023,6 +2023,7 @@
"Did you know: you can use communities to filter your Riot.im experience!": "Did you know: you can use communities to filter your Riot.im experience!", "Did you know: you can use communities to filter your Riot.im experience!": "Did you know: you can use communities to filter your Riot.im experience!",
"To set up a filter, drag a community avatar over to the filter panel on the far left hand side of the screen. You can click on an avatar in the filter panel at any time to see only the rooms and people associated with that community.": "To set up a filter, drag a community avatar over to the filter panel on the far left hand side of the screen. You can click on an avatar in the filter panel at any time to see only the rooms and people associated with that community.", "To set up a filter, drag a community avatar over to the filter panel on the far left hand side of the screen. You can click on an avatar in the filter panel at any time to see only the rooms and people associated with that community.": "To set up a filter, drag a community avatar over to the filter panel on the far left hand side of the screen. You can click on an avatar in the filter panel at any time to see only the rooms and people associated with that community.",
"Error whilst fetching joined communities": "Error whilst fetching joined communities", "Error whilst fetching joined communities": "Error whilst fetching joined communities",
"Communities": "Communities",
"Create a new community": "Create a new community", "Create a new community": "Create a new community",
"Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.", "Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.",
"You have no visible notifications": "You have no visible notifications", "You have no visible notifications": "You have no visible notifications",

View file

@ -2420,5 +2420,40 @@
"Custom font size can only be between %(min)s pt and %(max)s pt": "Propra grando de tiparo povas interi nur %(min)s punktojn kaj %(max)s punktojn", "Custom font size can only be between %(min)s pt and %(max)s pt": "Propra grando de tiparo povas interi nur %(min)s punktojn kaj %(max)s punktojn",
"Use between %(min)s pt and %(max)s pt": "Uzi inter %(min)s punktoj kaj %(max)s punktoj", "Use between %(min)s pt and %(max)s pt": "Uzi inter %(min)s punktoj kaj %(max)s punktoj",
"Appearance": "Aspekto", "Appearance": "Aspekto",
"Use the improved room list (in development - refresh to apply changes)": "Uzi la plibonigitan liston de ĉambroj (ankoraŭ evoluigate aktualigu la paĝon por efektivigi ŝanĝojn)" "Use the improved room list (in development - refresh to apply changes)": "Uzi la plibonigitan liston de ĉambroj (ankoraŭ evoluigate aktualigu la paĝon por efektivigi ŝanĝojn)",
"Room name or address": "Nomo aŭ adreso de ĉambro",
"Joins room with given address": "Aligas al ĉambro kun donita adreso",
"Unrecognised room address:": "Nerekonita adreso de ĉambro:",
"Please verify the room ID or address and try again.": "Bonvolu kontroli identigilon aŭ adreson de la ĉambro kaj reprovi.",
"Room ID or address of ban list": "Ĉambra identigilo aŭ adreso de listo de forbaroj",
"To link to this room, please add an address.": "Por ligi al ĉi tiu ĉambro, bonvolu aldoni adreson.",
"Error creating address": "Eraris kreado de adreso",
"There was an error creating that address. It may not be allowed by the server or a temporary failure occurred.": "Eraris kreado de tiu adreso. Eble ĝi ne estas permesata de la servilo, aŭ okazis portempa fiasko.",
"You don't have permission to delete the address.": "Vi ne rajtas forigi la adreson.",
"There was an error removing that address. It may no longer exist or a temporary error occurred.": "Eraris forigo de la adreso. Eble ĝi ne plu ekzistas, aŭ okazis portempa eraro.",
"Error removing address": "Eraris forigo de adreso",
"Categories": "Kategorioj",
"Room address": "Adreso de ĉambro",
"Please provide a room address": "Bonvolu doni adreson de ĉambro",
"This address is available to use": "Ĉi tiu adreso estas uzebla",
"This address is already in use": "Ĉi tiu adreso jam estas uzata",
"Set a room address to easily share your room with other people.": "Agordu adreson de ĉambro por facile konigi la ĉambron al aliuloj.",
"You've previously used a newer version of Riot with this session. To use this version again with end to end encryption, you will need to sign out and back in again.": "Vi antaŭe uzis pli novan version de Riot kun tiu ĉi salutaĵo. Por ree uzi ĉi tiun version kun tutvoja ĉifrado, vi devos adiaŭi kaj resaluti.",
"Address (optional)": "Adreso (malnepra)",
"Delete the room address %(alias)s and remove %(name)s from the directory?": "Ĉu forigi la adreson de ĉambro %(alias)s kaj forigi %(name)s de la listo?",
"delete the address.": "forigi la adreson.",
"Use a different passphrase?": "Ĉu uzi alian pasfrazon?",
"Help us improve Riot": "Helpu al ni plibonigi Rioton",
"Send <UsageDataLink>anonymous usage data</UsageDataLink> which helps us improve Riot. This will use a <PolicyLink>cookie</PolicyLink>.": "Sendi <UsageDataLink>sennomajn datumojn pri uzado</UsageDataLink>, kiuj helpos al ni plibonigi Rioton. Ĉi tio uzos <PolicyLink>kuketon</PolicyLink>.",
"I want to help": "Mi volas helpi",
"Your homeserver has exceeded its user limit.": "Via hejmservilo atingis sian limon de uzantoj.",
"Your homeserver has exceeded one of its resource limits.": "Via hejmservilo atingis iun limon de rimedoj.",
"Contact your <a>server admin</a>.": "Kontaktu <a>administranton de via servilo</a>.",
"Ok": "Bone",
"Set password": "Agordi pasvorton",
"To return to your account in future you need to set a password": "Por reveni ose al via konto, vi devas agordi pasvorton",
"Restart": "Restartigi",
"Upgrade your Riot": "Gradaltigi vian Rioton",
"A new version of Riot is available!": "Nova versio de Riot estas disponebla!",
"New version available. <a>Update now.</a>": "Nova versio estas disponebla. <a>Ĝisdatigu nun.</a>"
} }

View file

@ -830,7 +830,7 @@
"Repeats like \"aaa\" are easy to guess": "Toistot, kuten ”aaa”, ovat helppoja arvata", "Repeats like \"aaa\" are easy to guess": "Toistot, kuten ”aaa”, ovat helppoja arvata",
"Repeats like \"abcabcabc\" are only slightly harder to guess than \"abc\"": "Toistot, kuten ”abcabcabe” ovat vain hieman hankalampia arvata kuin ”abc”", "Repeats like \"abcabcabc\" are only slightly harder to guess than \"abc\"": "Toistot, kuten ”abcabcabe” ovat vain hieman hankalampia arvata kuin ”abc”",
"A word by itself is easy to guess": "Yksittäinen sana on helppo arvata", "A word by itself is easy to guess": "Yksittäinen sana on helppo arvata",
"Please contact your homeserver administrator.": "Otathan yhteyttä kotipalvelimesi ylläpitäjään.", "Please contact your homeserver administrator.": "Ota yhteyttä kotipalvelimesi ylläpitäjään.",
"Show join/leave messages (invites/kicks/bans unaffected)": "Näytä liittymisten ja poistumisten viestit (ei vaikuta kutsuihin, huoneesta poistamisiin ja porttikieltoihin)", "Show join/leave messages (invites/kicks/bans unaffected)": "Näytä liittymisten ja poistumisten viestit (ei vaikuta kutsuihin, huoneesta poistamisiin ja porttikieltoihin)",
"Show developer tools": "Näytä kehitystyökalut", "Show developer tools": "Näytä kehitystyökalut",
"Encrypted messages in one-to-one chats": "Salatut viestit kahdenkeskisissä keskusteluissa", "Encrypted messages in one-to-one chats": "Salatut viestit kahdenkeskisissä keskusteluissa",
@ -2061,7 +2061,7 @@
"Theme added!": "Teema lisätty!", "Theme added!": "Teema lisätty!",
"Add theme": "Lisää teema", "Add theme": "Lisää teema",
"Scroll to most recent messages": "Vieritä tuoreimpiin viesteihin", "Scroll to most recent messages": "Vieritä tuoreimpiin viesteihin",
"There was an error updating the room's alternative addresses. It may not be allowed by the server or a temporary failure occurred.": "Huoneen vaihtoehtoisten osoitteiden päivittämisessä tapahtui virhe. Palvelin ei ehkä salli sitä tai syynä oli tilapäinen virhe.", "There was an error updating the room's alternative addresses. It may not be allowed by the server or a temporary failure occurred.": "Huoneen vaihtoehtoisten osoitteiden päivittämisessä tapahtui virhe. Palvelin ei ehkä salli sitä tai kyseessä oli tilapäinen virhe.",
"You don't have permission to delete the alias.": "Sinulla ei ole lupaa poistaa aliasta.", "You don't have permission to delete the alias.": "Sinulla ei ole lupaa poistaa aliasta.",
"Local address": "Paikallinen osoite", "Local address": "Paikallinen osoite",
"Local Addresses": "Paikalliset osoitteet", "Local Addresses": "Paikalliset osoitteet",
@ -2313,5 +2313,32 @@
"Cancelled signature upload": "Allekirjoituksen lähetys peruutettu", "Cancelled signature upload": "Allekirjoituksen lähetys peruutettu",
"Unable to upload": "Lähettäminen ei ole mahdollista", "Unable to upload": "Lähettäminen ei ole mahdollista",
"Signature upload success": "Allekirjoituksen lähettäminen onnistui", "Signature upload success": "Allekirjoituksen lähettäminen onnistui",
"Signature upload failed": "Allekirjoituksen lähettäminen epäonnistui" "Signature upload failed": "Allekirjoituksen lähettäminen epäonnistui",
"Room name or address": "Huoneen nimi tai osoite",
"Joins room with given address": "Liittyy annetun osoitteen mukaiseen huoneeseen",
"Unrecognised room address:": "Tunnistamaton huoneen osoite:",
"Help us improve Riot": "Auta parantamaan Riotia",
"Send <UsageDataLink>anonymous usage data</UsageDataLink> which helps us improve Riot. This will use a <PolicyLink>cookie</PolicyLink>.": "Lähetä <UsageDataLink>anonyymiä käyttötietoa</UsageDataLink>, joka auttaa Riotin kehittämisessä. Toiminto käyttää <PolicyLink>evästettä</PolicyLink>.",
"I want to help": "Haluan auttaa",
"Your homeserver has exceeded its user limit.": "Kotipalvelimesi on ylittänyt käyttäjärajansa.",
"Your homeserver has exceeded one of its resource limits.": "Kotipalvelimesi on ylittänyt jonkin resurssirajansa.",
"Contact your <a>server admin</a>.": "Ota yhteyttä <a>palvelimesi ylläpitäjään</a>.",
"Ok": "OK",
"Set password": "Aseta salasana",
"To return to your account in future you need to set a password": "Päästäksesi jatkossa takaisin tilillesi sinun täytyy asettaa salasana",
"Restart": "Käynnistä uudelleen",
"Upgrade your Riot": "Päivitä Riot",
"A new version of Riot is available!": "Uusi Riotin versio on saatavilla!",
"New version available. <a>Update now.</a>": "Uusi versio saatavilla. <a>Päivitä nyt.</a>",
"To link to this room, please add an address.": "Lisää osoite linkittääksesi tähän huoneeseen.",
"Error creating address": "Virhe osoitetta luotaessa",
"There was an error creating that address. It may not be allowed by the server or a temporary failure occurred.": "Osoitetta luotaessa tapahtui virhe. Voi olla, että palvelin ei salli sitä tai kyseessä oli tilapäinen virhe.",
"You don't have permission to delete the address.": "Sinulla ei ole oikeutta poistaa osoitetta.",
"There was an error removing that address. It may no longer exist or a temporary error occurred.": "Osoitetta poistaessa tapahtui virhe. Osoitetta ei ehkä ole enää olemassa tai kyseessä oli tilapäinen virhe.",
"Error removing address": "Virhe osoitetta poistettaessa",
"Categories": "Luokat",
"This address is available to use": "Tämä osoite on käytettävissä",
"This address is already in use": "Tämä osoite on jo käytössä",
"Set a room address to easily share your room with other people.": "Aseta huoneelle osoite, jotta voit jakaa huoneen helposti muille.",
"Address (optional)": "Osoite (valinnainen)"
} }

View file

@ -2446,5 +2446,40 @@
"Custom font size can only be between %(min)s pt and %(max)s pt": "La taille de police personnalisée doit être comprise entre %(min)s pt et %(max)s pt", "Custom font size can only be between %(min)s pt and %(max)s pt": "La taille de police personnalisée doit être comprise entre %(min)s pt et %(max)s pt",
"Use between %(min)s pt and %(max)s pt": "Utiliser entre %(min)s pt et %(max)s pt", "Use between %(min)s pt and %(max)s pt": "Utiliser entre %(min)s pt et %(max)s pt",
"Appearance": "Apparence", "Appearance": "Apparence",
"Use the improved room list (in development - refresh to apply changes)": "Utiliser la liste de salons améliorée (en développement actualisez pour appliquer les changements)" "Use the improved room list (in development - refresh to apply changes)": "Utiliser la liste de salons améliorée (en développement actualisez pour appliquer les changements)",
"Room name or address": "Nom ou adresse du salon",
"Joins room with given address": "Rejoint le salon à ladresse donnée",
"Unrecognised room address:": "Adresse de salon non reconnue :",
"Please verify the room ID or address and try again.": "Vérifiez lidentifiant ou ladresse du salon et réessayez.",
"Room ID or address of ban list": "Identifiant du salon ou adresse de la liste de bannissement",
"To link to this room, please add an address.": "Pour créer un lien vers ce salon, ajoutez une adresse.",
"Error creating address": "Erreur lors de la création de ladresse",
"There was an error creating that address. It may not be allowed by the server or a temporary failure occurred.": "Une erreur est survenue lors de la création de ladresse. Ce nest peut-être pas autorisé par le serveur ou une erreur temporaire est survenue.",
"You don't have permission to delete the address.": "Vous navez pas la permission de supprimer cette adresse.",
"There was an error removing that address. It may no longer exist or a temporary error occurred.": "Une erreur est survenue lors de la suppression de cette adresse. Elle nexiste peut-être plus ou une erreur temporaire est survenue.",
"Error removing address": "Erreur lors de la suppression de ladresse",
"Categories": "Catégories",
"Room address": "Adresse du salon",
"Please provide a room address": "Veuillez fournir une adresse de salon",
"This address is available to use": "Cette adresse est disponible",
"This address is already in use": "Cette adresse est déjà utilisée",
"Set a room address to easily share your room with other people.": "Définissez une adresse de salon pour le partager facilement avec dautres personnes.",
"You've previously used a newer version of Riot with this session. To use this version again with end to end encryption, you will need to sign out and back in again.": "Vous avez précédemment utilisé une version plus récente de Riot avec cette session. Pour réutiliser cette version avec le chiffrement de bout en bout, vous devrez vous déconnecter et vous reconnecter.",
"Address (optional)": "Adresse (optionnel)",
"Delete the room address %(alias)s and remove %(name)s from the directory?": "Supprimer ladresse du salon %(alias)s et supprimer %(name)s du répertoire ?",
"delete the address.": "supprimer ladresse.",
"Use a different passphrase?": "Utiliser une phrase secrète différente ?",
"Help us improve Riot": "Aidez-nous à améliorer Riot",
"Send <UsageDataLink>anonymous usage data</UsageDataLink> which helps us improve Riot. This will use a <PolicyLink>cookie</PolicyLink>.": "Envoyez des <UsageDataLink>données anonymes dutilisation</UsageDataLink> qui nous aident à améliorer Riot. Cela utilisera un <PolicyLink>cookie</PolicyLink>.",
"I want to help": "Je veux aider",
"Your homeserver has exceeded its user limit.": "Votre serveur daccueil a dépassé ses limites dutilisateurs.",
"Your homeserver has exceeded one of its resource limits.": "Votre serveur daccueil a dépassé une de ses limites de ressources.",
"Contact your <a>server admin</a>.": "Contactez <a>ladministrateur de votre serveur</a>.",
"Ok": "OK",
"Set password": "Définir le mot de passe",
"To return to your account in future you need to set a password": "Pour réutiliser votre compte à lavenir, vous devez définir un mot de passe",
"Restart": "Redémarrer",
"Upgrade your Riot": "Mettre à niveau votre Riot",
"A new version of Riot is available!": "Une nouvelle version de Riot est disponible !",
"New version available. <a>Update now.</a>": "Nouvelle version disponible. <a>Faire la mise à niveau maintenant.</a>"
} }

View file

@ -138,7 +138,7 @@
"Your browser does not support the required cryptography extensions": "O seu navegador non soporta as extensións de criptografía necesarias", "Your browser does not support the required cryptography extensions": "O seu navegador non soporta as extensións de criptografía necesarias",
"Not a valid Riot keyfile": "Non é un ficheiro de chaves Riot válido", "Not a valid Riot keyfile": "Non é un ficheiro de chaves Riot válido",
"Authentication check failed: incorrect password?": "Fallou a comprobación de autenticación: contrasinal incorrecto?", "Authentication check failed: incorrect password?": "Fallou a comprobación de autenticación: contrasinal incorrecto?",
"Failed to join room": "Non se puido unir a sala", "Failed to join room": "Non puideches entrar na sala",
"Message Pinning": "Fixando mensaxe", "Message Pinning": "Fixando mensaxe",
"Use compact timeline layout": "Utilizar a disposición compacta da liña temporal", "Use compact timeline layout": "Utilizar a disposición compacta da liña temporal",
"Show timestamps in 12 hour format (e.g. 2:30pm)": "Mostrar marcas de tempo con formato 12 horas (ex. 2:30pm)", "Show timestamps in 12 hour format (e.g. 2:30pm)": "Mostrar marcas de tempo con formato 12 horas (ex. 2:30pm)",
@ -189,7 +189,7 @@
"Drop File Here": "Solte aquí o ficheiro", "Drop File Here": "Solte aquí o ficheiro",
"Drop file here to upload": "Solte aquí o ficheiro para subilo", "Drop file here to upload": "Solte aquí o ficheiro para subilo",
" (unsupported)": " (non soportado)", " (unsupported)": " (non soportado)",
"Join as <voiceText>voice</voiceText> or <videoText>video</videoText>.": "Únase como <voiceText>voz</voiceText> ou <videoText>vídeo</videoText>.", "Join as <voiceText>voice</voiceText> or <videoText>video</videoText>.": "Únete como <voiceText>voz</voiceText> ou <videoText>vídeo</videoText>.",
"Ongoing conference call%(supportedText)s.": "Chamada de conferencia en curso%(supportedText)s.", "Ongoing conference call%(supportedText)s.": "Chamada de conferencia en curso%(supportedText)s.",
"%(senderName)s sent an image": "%(senderName)s enviou unha imaxe", "%(senderName)s sent an image": "%(senderName)s enviou unha imaxe",
"%(senderName)s sent a video": "%(senderName)s enviou un vídeo", "%(senderName)s sent a video": "%(senderName)s enviou un vídeo",
@ -294,7 +294,7 @@
"This room is not accessible by remote Matrix servers": "Esta sala non é accesible por servidores Matrix remotos", "This room is not accessible by remote Matrix servers": "Esta sala non é accesible por servidores Matrix remotos",
"Leave room": "Deixar a sala", "Leave room": "Deixar a sala",
"Favourite": "Favorita", "Favourite": "Favorita",
"Guests cannot join this room even if explicitly invited.": "Os convidados non se poden unir a esta sala inda que fosen convidados explicitamente.", "Guests cannot join this room even if explicitly invited.": "As convidadas non se poden unir a esta sala ainda que fosen convidadas explicitamente.",
"Click here to fix": "Pulse aquí para solución", "Click here to fix": "Pulse aquí para solución",
"Who can access this room?": "Quen pode acceder a esta sala?", "Who can access this room?": "Quen pode acceder a esta sala?",
"Only people who have been invited": "Só persoas que foron convidadas", "Only people who have been invited": "Só persoas que foron convidadas",
@ -503,7 +503,7 @@
"Alias (optional)": "Alias (opcional)", "Alias (optional)": "Alias (opcional)",
"Name": "Nome", "Name": "Nome",
"You must <a>register</a> to use this functionality": "Debe <a>rexistrarse</a> para utilizar esta función", "You must <a>register</a> to use this functionality": "Debe <a>rexistrarse</a> para utilizar esta función",
"You must join the room to see its files": "Debe unirse a sala para ver os seus ficheiros", "You must join the room to see its files": "Debes unirte a sala para ver os seus ficheiros",
"There are no visible files in this room": "Non hai ficheiros visibles nesta sala", "There are no visible files in this room": "Non hai ficheiros visibles nesta sala",
"<h1>HTML for your community's page</h1>\n<p>\n Use the long description to introduce new members to the community, or distribute\n some important <a href=\"foo\">links</a>\n</p>\n<p>\n You can even use 'img' tags\n</p>\n": "<h1>HTML para a páxina da súa comunidade</h1>\n<p>\n Utilice a descrición longa para presentar novos membros a comunidade, ou publicar algunha <a href=\"foo\">ligazón</a> importante\n \n</p>\n<p>\n Tamén pode utilizar etiquetas 'img'\n</p>\n", "<h1>HTML for your community's page</h1>\n<p>\n Use the long description to introduce new members to the community, or distribute\n some important <a href=\"foo\">links</a>\n</p>\n<p>\n You can even use 'img' tags\n</p>\n": "<h1>HTML para a páxina da súa comunidade</h1>\n<p>\n Utilice a descrición longa para presentar novos membros a comunidade, ou publicar algunha <a href=\"foo\">ligazón</a> importante\n \n</p>\n<p>\n Tamén pode utilizar etiquetas 'img'\n</p>\n",
"Add rooms to the community summary": "Engadir salas ao resumo da comunidade", "Add rooms to the community summary": "Engadir salas ao resumo da comunidade",
@ -527,11 +527,11 @@
"Leave %(groupName)s?": "Deixar %(groupName)s?", "Leave %(groupName)s?": "Deixar %(groupName)s?",
"Leave": "Saír", "Leave": "Saír",
"Community Settings": "Axustes da comunidade", "Community Settings": "Axustes da comunidade",
"These rooms are displayed to community members on the community page. Community members can join the rooms by clicking on them.": "Estas salas móstranselle aos membros da comunidade na páxina da comunidade.Os participantes da comunidade poden unirse ás salas premendo nelas.", "These rooms are displayed to community members on the community page. Community members can join the rooms by clicking on them.": "Estas salas móstranse aos membros da comunidade na páxina da comunidade. Os participantes da comunidade poden unirse ás salas premendo nelas.",
"Add rooms to this community": "Engadir salas a esta comunidade", "Add rooms to this community": "Engadir salas a esta comunidade",
"Featured Rooms:": "Salas destacadas:", "Featured Rooms:": "Salas destacadas:",
"Featured Users:": "Usuarios destacados:", "Featured Users:": "Usuarios destacados:",
"%(inviter)s has invited you to join this community": "%(inviter)s convidouna a unirse a esta comunidade", "%(inviter)s has invited you to join this community": "%(inviter)s convidoute a entrar nesta comunidade",
"You are an administrator of this community": "Vostede administra esta comunidade", "You are an administrator of this community": "Vostede administra esta comunidade",
"You are a member of this community": "É membro desta comunidade", "You are a member of this community": "É membro desta comunidade",
"Your community hasn't got a Long Description, a HTML page to show to community members.<br />Click here to open settings and give it one!": "A súa comunidade non ten unha descrición longa, ou unha páxina HTML que lle mostrar aos seus participantes.<br />Pulse aquí para abrir os axustes e publicar unha!", "Your community hasn't got a Long Description, a HTML page to show to community members.<br />Click here to open settings and give it one!": "A súa comunidade non ten unha descrición longa, ou unha páxina HTML que lle mostrar aos seus participantes.<br />Pulse aquí para abrir os axustes e publicar unha!",
@ -551,7 +551,7 @@
"Your Communities": "As súas Comunidades", "Your Communities": "As súas Comunidades",
"Error whilst fetching joined communities": "Fallo mentres se obtiñas as comunidades unidas", "Error whilst fetching joined communities": "Fallo mentres se obtiñas as comunidades unidas",
"Create a new community": "Crear unha nova comunidade", "Create a new community": "Crear unha nova comunidade",
"Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "Crear unha comunidade para agrupar usuarias e salas! Poña unha páxina de inicio personalizada para destacar o seu lugar no universo Matrix.", "Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "Crea unha comunidade para agrupar usuarias e salas! Pon unha páxina de inicio personalizada para destacar o teu lugar no universo Matrix.",
"You have no visible notifications": "Non ten notificacións visibles", "You have no visible notifications": "Non ten notificacións visibles",
"Scroll to bottom of page": "Desprácese ate o final da páxina", "Scroll to bottom of page": "Desprácese ate o final da páxina",
"%(count)s of your messages have not been sent.|other": "Algunha das súas mensaxes non foron enviadas.", "%(count)s of your messages have not been sent.|other": "Algunha das súas mensaxes non foron enviadas.",
@ -670,7 +670,7 @@
"Passphrases must match": "As frases de paso deben coincidir", "Passphrases must match": "As frases de paso deben coincidir",
"Passphrase must not be empty": "A frase de paso non pode quedar baldeira", "Passphrase must not be empty": "A frase de paso non pode quedar baldeira",
"Export room keys": "Exportar chaves da sala", "Export room keys": "Exportar chaves da sala",
"This process allows you to export the keys for messages you have received in encrypted rooms to a local file. You will then be able to import the file into another Matrix client in the future, so that client will also be able to decrypt these messages.": "Este proceso permítelle exportar a un ficheiro local as chaves para as mensaxes que recibiu en salas cifradas. Posteriormente permitiralle importar as chaves en outro cliente Matrix no futuro, así o cliente poderá descifrar esas mensaxes.", "This process allows you to export the keys for messages you have received in encrypted rooms to a local file. You will then be able to import the file into another Matrix client in the future, so that client will also be able to decrypt these messages.": "Este proceso permíteche exportar a un ficheiro local as chaves para as mensaxes que recibiches en salas cifradas. Após poderás importar as chaves noutro cliente Matrix no futuro, así o cliente poderá descifrar esas mensaxes.",
"The exported file will allow anyone who can read it to decrypt any encrypted messages that you can see, so you should be careful to keep it secure. To help with this, you should enter a passphrase below, which will be used to encrypt the exported data. It will only be possible to import the data by using the same passphrase.": "O ficheiro exportado permitiralle a calquera que poida lelo descifrar e cifrar mensaxes que ti ves, así que deberías ter coidado e gardalo de xeito seguro. Para axudarche, deberías escribir unha frase de paso aquí abaixo que será usada para cifrar os datos exportados. Só será posible importar os datos utilizando a mesma frase de paso.", "The exported file will allow anyone who can read it to decrypt any encrypted messages that you can see, so you should be careful to keep it secure. To help with this, you should enter a passphrase below, which will be used to encrypt the exported data. It will only be possible to import the data by using the same passphrase.": "O ficheiro exportado permitiralle a calquera que poida lelo descifrar e cifrar mensaxes que ti ves, así que deberías ter coidado e gardalo de xeito seguro. Para axudarche, deberías escribir unha frase de paso aquí abaixo que será usada para cifrar os datos exportados. Só será posible importar os datos utilizando a mesma frase de paso.",
"Enter passphrase": "Introduza a frase de paso", "Enter passphrase": "Introduza a frase de paso",
"Confirm passphrase": "Confirme a frase de paso", "Confirm passphrase": "Confirme a frase de paso",
@ -706,10 +706,10 @@
"Deops user with given id": "Degradar o usuario con esa ID", "Deops user with given id": "Degradar o usuario con esa ID",
"Seen by %(displayName)s (%(userName)s) at %(dateTime)s": "Visto por %(displayName)s(%(userName)s en %(dateTime)s", "Seen by %(displayName)s (%(userName)s) at %(dateTime)s": "Visto por %(displayName)s(%(userName)s en %(dateTime)s",
"Code": "Código", "Code": "Código",
"Unable to join community": "Non se puido unir a comunidade", "Unable to join community": "Non te puideches unir a comunidade",
"Unable to leave community": "Non se puido deixar a comunidade", "Unable to leave community": "Non se puido deixar a comunidade",
"Changes made to your community <bold1>name</bold1> and <bold2>avatar</bold2> might not be seen by other users for up to 30 minutes.": "Os cambios realizados a súa comunidade <bold1>name</bold1> e <bold2>avatar</bold2> poida que non os vexan outros usuarios ate dentro de 30 minutos.", "Changes made to your community <bold1>name</bold1> and <bold2>avatar</bold2> might not be seen by other users for up to 30 minutes.": "Os cambios realizados a súa comunidade <bold1>name</bold1> e <bold2>avatar</bold2> poida que non os vexan outros usuarios ate dentro de 30 minutos.",
"Join this community": "Únase a esta comunidade", "Join this community": "Únete a esta comunidade",
"Leave this community": "Deixar esta comunidade", "Leave this community": "Deixar esta comunidade",
"If you've submitted a bug via GitHub, debug logs can help us track down the problem. Debug logs contain application usage data including your username, the IDs or aliases of the rooms or groups you have visited and the usernames of other users. They do not contain messages.": "Se enviaches un informe de fallo a través de GitHub, os informes poden axudarnos a examinar o problema. Os informes de fallo conteñen datos do uso da aplicación incluíndo o teu nome de usuaria, os IDs ou alcumes das salas e grupos que visitaches e os nomes de usuaria de outras persoas. Non conteñen mensaxes.", "If you've submitted a bug via GitHub, debug logs can help us track down the problem. Debug logs contain application usage data including your username, the IDs or aliases of the rooms or groups you have visited and the usernames of other users. They do not contain messages.": "Se enviaches un informe de fallo a través de GitHub, os informes poden axudarnos a examinar o problema. Os informes de fallo conteñen datos do uso da aplicación incluíndo o teu nome de usuaria, os IDs ou alcumes das salas e grupos que visitaches e os nomes de usuaria de outras persoas. Non conteñen mensaxes.",
"Submit debug logs": "Enviar informes de depuración", "Submit debug logs": "Enviar informes de depuración",
@ -821,7 +821,7 @@
"Show message in desktop notification": "Mostrar mensaxe nas notificacións de escritorio", "Show message in desktop notification": "Mostrar mensaxe nas notificacións de 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.": "Os informes de depuración conteñen datos de utilización do aplicativo como o seu nome de usuario, os IDs ou alcumes de salas e grupos que vostede visitou e os nomes de usuarios doutras usuarias. Non conteñen mensaxes.", "Debug logs contain application usage data including your username, the IDs or aliases of the rooms or groups you have visited and the usernames of other users. They do not contain messages.": "Os informes de depuración conteñen datos de utilización do aplicativo como o seu nome de usuario, os IDs ou alcumes de salas e grupos que vostede visitou e os nomes de usuarios doutras usuarias. Non conteñen mensaxes.",
"Unhide Preview": "Desagochar a vista previa", "Unhide Preview": "Desagochar a vista previa",
"Unable to join network": "Non se puido conectar a rede", "Unable to join network": "Non se puido conectar ca rede",
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Pode que os configurases nun cliente diferente de Riot. Non podes establecelos desde Riot pero aínda así aplicaranse", "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Pode que os configurases nun cliente diferente de Riot. Non podes establecelos desde Riot pero aínda así aplicaranse",
"Sorry, your browser is <b>not</b> able to run Riot.": "Desculpe, o seu navegador <b>non pode</b> executar Riot.", "Sorry, your browser is <b>not</b> able to run Riot.": "Desculpe, o seu navegador <b>non pode</b> executar Riot.",
"Uploaded on %(date)s by %(user)s": "Subido a %(date)s por %(user)s", "Uploaded on %(date)s by %(user)s": "Subido a %(date)s por %(user)s",
@ -865,7 +865,7 @@
"e.g. %(exampleValue)s": "p.ex. %(exampleValue)s", "e.g. %(exampleValue)s": "p.ex. %(exampleValue)s",
"Send analytics data": "Enviar datos de análises", "Send analytics data": "Enviar datos de análises",
"Enable widget screenshots on supported widgets": "Activar as capturas de trebellos para aqueles que as permiten", "Enable widget screenshots on supported widgets": "Activar as capturas de trebellos para aqueles que as permiten",
"Share Link to User": "Compartir a ligazón co usuario", "Share Link to User": "Compartir a ligazón coa usuaria",
"Share room": "Compartir sala", "Share room": "Compartir sala",
"Muted Users": "Usuarios silenciados", "Muted Users": "Usuarios silenciados",
"Please help improve Riot.im by sending <UsageDataLink>anonymous usage data</UsageDataLink>. This will use a cookie (please see our <PolicyLink>Cookie Policy</PolicyLink>).": "Axuda a mellorar Riot.im enviando <UsageDataLink>os datos anónimos de uso</UsageDataLink>. Usaremos unha cookie (le aquí a nosa <PolicyLink>Política de Cookies</PolicyLink>).", "Please help improve Riot.im by sending <UsageDataLink>anonymous usage data</UsageDataLink>. This will use a cookie (please see our <PolicyLink>Cookie Policy</PolicyLink>).": "Axuda a mellorar Riot.im enviando <UsageDataLink>os datos anónimos de uso</UsageDataLink>. Usaremos unha cookie (le aquí a nosa <PolicyLink>Política de Cookies</PolicyLink>).",
@ -1085,5 +1085,173 @@
"Explore rooms": "Explorar salas", "Explore rooms": "Explorar salas",
"General failure": "Fallo xeral", "General failure": "Fallo xeral",
"This homeserver does not support login using email address.": "Este servidor non soporta a conexión usando enderezos de email.", "This homeserver does not support login using email address.": "Este servidor non soporta a conexión usando enderezos de email.",
"Clear room list filter field": "Baleirar o campo do filtro de salas" "Clear room list filter field": "Baleirar o campo do filtro de salas",
"Room name or address": "Nome da sala ou enderezo",
"Joins room with given address": "Unirse a sala co enderezo dado",
"Unrecognised room address:": "Non se recoñece o enderezo da sala:",
"%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s estableceu o enderezo principal da sala %(address)s.",
"%(senderName)s removed the main address for this room.": "%(senderName)s eliminiou o enderezo principal desta sala.",
"%(senderName)s added the alternative addresses %(addresses)s for this room.|other": "%(senderName)s engadiu os enderezos alternativos %(addresses)s para esta sala.",
"%(senderName)s added the alternative addresses %(addresses)s for this room.|one": "%(senderName)s engadiu o enderezo alternativo %(addresses)s para esta sala.",
"%(senderName)s removed the alternative addresses %(addresses)s for this room.|other": "%(senderName)s eliminou os enderezos alternativos %(addresses)s desta sala.",
"%(senderName)s removed the alternative addresses %(addresses)s for this room.|one": "%(senderName)s eliminou o enderezo alternativo %(addresses)s desta sala.",
"%(senderName)s changed the alternative addresses for this room.": "%(senderName)s cambiou os enderezos alternativos desta sala.",
"%(senderName)s changed the main and alternative addresses for this room.": "%(senderName)s cambiou o enderezo principal e alternativo para esta sala.",
"%(senderName)s changed the addresses for this room.": "%(senderName)s cambiou o enderezo desta sala.",
"%(senderName)s placed a voice call.": "%(senderName)s fixo unha chamada de voz.",
"%(senderName)s placed a voice call. (not supported by this browser)": "%(senderName)s fixo unha chamada de voz. (non soportado neste navegador)",
"%(senderName)s placed a video call.": "%(senderName)s fixo unha chamada de vídeo.",
"%(senderName)s placed a video call. (not supported by this browser)": "%(senderName)s fixo unha chamada de vídeo. (non soportado por este navegador)",
"%(senderName)s revoked the invitation for %(targetDisplayName)s to join the room.": "%(senderName)s revogou o convite para que %(targetDisplayName)s se una a esta sala.",
"%(senderName)s removed the rule banning users matching %(glob)s": "%(senderName)s eliminou a regra que bloqueaba usuarias con %(glob)s",
"%(senderName)s removed the rule banning rooms matching %(glob)s": "%(senderName)s eliminou a regra que bloquea salas con %(glob)s",
"%(senderName)s removed the rule banning servers matching %(glob)s": "%(senderName)s eliminou a regra que bloquea servidores con %(glob)s",
"%(senderName)s removed a ban rule matching %(glob)s": "%(senderName)s eliminou a regra de bloqueo con %(glob)s",
"%(senderName)s updated an invalid ban rule": "%(senderName)s actualizou unha regra de bloqueo non válida",
"%(senderName)s updated the rule banning users matching %(glob)s for %(reason)s": "%(senderName)s actualizou a regra que bloquea usuarias con %(glob)s por %(reason)s",
"Show info about bridges in room settings": "Mostrar info sobre pontes nos axustes da sala",
"Room Addresses": "Enderezos da sala",
"There was an error updating the room's alternative addresses. It may not be allowed by the server or a temporary failure occurred.": "Algo fallou ao actualizar os enderezos alternativos da sala. É posible que o servidor non o permita ou acontecese un fallo temporal.",
"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.": "Os enderezos publicados poden ser usados por calquera persoa ou servidor para unirse a sala. Para publicar un enderezo, primeiro debe establecerse como enderezo local.",
"Set addresses for this room so users can find this room through your homeserver (%(localDomain)s)": "Establecer enderezos para a sala para que poida ser atopada no teu servidor local (%(localDomain)s)",
"Room Settings - %(roomName)s": "Axustes da sala - %(roomName)s",
"Delete the room address %(alias)s and remove %(name)s from the directory?": "Eliminar o enderezo da sala %(alias)s e eliminar %(name)s do directorio?",
"%(senderName)s updated the rule banning rooms matching %(glob)s for %(reason)s": "%(senderName)s actualizou a regra de bloqueo de salas con %(glob)s por %(reason)s",
"%(senderName)s updated the rule banning servers matching %(glob)s for %(reason)s": "%(senderName)s actualizou a regra de bloqueo de servidores con %(glob)s por %(reason)s",
"%(senderName)s updated a ban rule matching %(glob)s for %(reason)s": "%(senderName)s actualizou a regra de bloqueo con %(glob)s por %(reason)s",
"%(senderName)s created a rule banning users matching %(glob)s for %(reason)s": "%(senderName)s creou unha regra de bloqueo de usuarias con %(glob)s por %(reason)s",
"You signed in to a new session without verifying it:": "Conectácheste nunha nova sesión sen verificala:",
"Verify your other session using one of the options below.": "Verifica a túa outra sesión usando unha das opcións inferiores.",
"%(name)s (%(userId)s) signed in to a new session without verifying it:": "%(name)s (%(userId)s) conectouse a unha nova sesión sen verificala:",
"Ask this user to verify their session, or manually verify it below.": "Pídelle a usuaria que verifique a súa sesión, ou verificaa manualmente aquí.",
"Not Trusted": "Non confiable",
"Manually Verify by Text": "Verificar manualmente por texto",
"Interactively verify by Emoji": "Verificar interactivamente por Emoji",
"Done": "Feito",
"%(displayName)s is typing …": "%(displayName)s está escribindo…",
"%(names)s and %(count)s others are typing …|other": "%(names)s e outras %(count)s están escribindo…",
"%(names)s and %(count)s others are typing …|one": "%(names)s e outra están escribindo…",
"%(names)s and %(lastPerson)s are typing …": "%(names)s e %(lastPerson)s están escribindo…",
"Cannot reach homeserver": "Non se acadou o servidor",
"Ensure you have a stable internet connection, or get in touch with the server admin": "Asegúrate de que tes boa conexión a internet, ou contacta coa administración do servidor",
"Your Riot is misconfigured": "O teu Riot está mal configurado",
"Ask your Riot admin to check <a>your config</a> for incorrect or duplicate entries.": "Pídelle a administración do teu Riot que comprobe a <a>configuración</a> para entradas duplicadas ou incorrectas.",
"Cannot reach identity server": "Non se acadou o servidor de identidade",
"You can register, but some features will be unavailable until the identity server is back online. If you keep seeing this warning, check your configuration or contact a server admin.": "Podes rexistrarte, pero algunhas características non estarán dispoñibles ata que o servidor de identidade volte a conectarse. Se segues a ver este aviso, comproba os axustes ou contacta coa administración.",
"You can reset your password, but some features will be unavailable until the identity server is back online. If you keep seeing this warning, check your configuration or contact a server admin.": "Podes restablecer o contrasinal, pero algunhas características non estarán dispoñibles ata que o servidor de identidade se conecte. Se segues a ver este aviso comproba os axustes ou contacta coa administración.",
"You can log in, but some features will be unavailable until the identity server is back online. If you keep seeing this warning, check your configuration or contact a server admin.": "Podes conectarte, pero algunhas características non estarán dispoñibles ata que o servidor de identidade volte a conectarse. Se segues a ver este aviso, comproba os axustes ou contacta coa administración.",
"No homeserver URL provided": "Non se estableceu URL do servidor",
"Unexpected error resolving homeserver configuration": "Houbo un fallo ao acceder a configuración do servidor",
"Unexpected error resolving identity server configuration": "Houbo un fallo ao acceder a configuración do servidor de identidade",
"The message you are trying to send is too large.": "A mensaxe a enviar é demasiado grande.",
"Unable to connect to Homeserver. Retrying...": "Non se conectou co Servidor. Reintentando...",
"a few seconds ago": "fai uns segundos",
"about a minute ago": "fai un minuto",
"%(num)s minutes ago": "fai %(num)s minutos",
"about an hour ago": "fai unha hora",
"%(num)s hours ago": "fai %(num)s horas",
"about a day ago": "onte",
"%(num)s days ago": "fai %(num)s días",
"a few seconds from now": "hai só uns segundos",
"about a minute from now": "haberá un minuto",
"%(num)s minutes from now": "fará %(num)s minutos",
"about an hour from now": "fará unha hora",
"%(num)s hours from now": "fará %(num)s horas",
"about a day from now": "foi onte",
"%(num)s days from now": "fará %(num)s días",
"%(name)s (%(userId)s)": "%(name)s (%(userId)s)",
"Unrecognised address": "Enderezo non recoñecible",
"You do not have permission to invite people to this room.": "Non tes permiso para convidar a xente a esta sala.",
"User %(userId)s is already in the room": "A usuaria %(userId)s xa está na sala",
"User %(user_id)s does not exist": "A usuaria %(user_id)s non existe",
"User %(user_id)s may or may not exist": "A usuaria %(user_id)s podería non existir",
"The user must be unbanned before they can be invited.": "A usuria debe ser desbloqueada antes de poder convidala.",
"Messages in this room are end-to-end encrypted.": "As mensaxes desta sala están cifradas de extremo-a-extremo.",
"Messages in this room are not end-to-end encrypted.": "As mensaxes desta sala non están cifradas de extremo-a-extremo.",
"Messages in this room are end-to-end encrypted. Learn more & verify this user in their user profile.": "As mensaxes desta sala están cifradas de extremo-a-extremo. No perfil da usuaria tes máis info e podes verificala.",
"%(senderName)s created a rule banning rooms matching %(glob)s for %(reason)s": "%(senderName)s creou unha regra bloqueando salas con %(glob)s por %(reason)s",
"%(senderName)s created a rule banning servers matching %(glob)s for %(reason)s": "%(senderName)s creou unha regra bloqueando servidores con %(glob)s por %(reason)s",
"%(senderName)s created a ban rule matching %(glob)s for %(reason)s": "%(senderName)s creou unha regra de bloqueo con %(glob)s por %(reason)s",
"%(senderName)s changed a rule that was banning users matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s cambiou unha regra que bloqueaba usuarias con %(oldGlob)s a %(newGlob)s por %(reason)s",
"%(senderName)s changed a rule that was banning rooms matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s cambiou unha regra que bloqueaba salas con %(oldGlob)s a %(newGlob)s por %(reason)s",
"%(senderName)s changed a rule that was banning servers matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s cambiou unha regra que bloqueaba servidores con %(oldGlob)s a %(newGlob)s por %(reason)s",
"%(senderName)s updated a ban rule that was matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s actualizou unha regra de bloqueo con %(oldGlob)s a %(newGlob)s por %(reason)s",
"The user's homeserver does not support the version of the room.": "O servidor da usuaria non soporta a versión da sala.",
"Unknown server error": "Erro descoñecido no servidor",
"Use a few words, avoid common phrases": "Usa unhas poucas palabras, evita frases comúns",
"No need for symbols, digits, or uppercase letters": "Non precisa símbolos, díxitos ou maiúsculas",
"Use a longer keyboard pattern with more turns": "Usa un patrón de teclado máis grande con algún xiro",
"Avoid repeated words and characters": "Evita palabras repetidas ou caracteres",
"Avoid sequences": "Evita secuencias",
"Avoid recent years": "Evita anos recentes",
"Avoid years that are associated with you": "Evita anos que están asociados a ti",
"Avoid dates and years that are associated with you": "Evita datas e anos que están relacionados contigo",
"All-uppercase is almost as easy to guess as all-lowercase": "As maiúsculas son case tan fáciles de adiviñar como as minúsculas",
"Reversed words aren't much harder to guess": "A escritura inversa non é moi difícil de adiviñar",
"Add another word or two. Uncommon words are better.": "Engade unha ou dúas palabras máis. Mellor que sexan raras.",
"Repeats like \"aaa\" are easy to guess": "Repeticións com \"aaa\" son fáciles de adiviñar",
"Repeats like \"abcabcabc\" are only slightly harder to guess than \"abc\"": "Repeticións com \"abcabcabc\" son só un pouco máis difíciles de adiviñar que \"abc\"",
"Sequences like abc or 6543 are easy to guess": "Secuencias como abc ou 6543 son fáciles de adiviñar",
"Recent years are easy to guess": "Os anos recentes son fáciles de adiviñar",
"Dates are often easy to guess": "Normalmente as datas son fáciles de adiviñar",
"This is a top-10 common password": "Este é o top-10 dos contrasinais habituais",
"This is a top-100 common password": "Este un top-100 dos contrasinais habituais",
"This is a very common password": "Este é un contrasinal moi común",
"This is similar to a commonly used password": "É semellante a un contrasinal habitualmente utilizado",
"A word by itself is easy to guess": "Por si sola, unha palabra é fácil de adiviñar",
"Names and surnames by themselves are easy to guess": "Nomes e apelidos por si mesmos son fáciles de adiviñar",
"Common names and surnames are easy to guess": "Os nomes e alcumes son fáciles de adiviñar",
"Help us improve Riot": "Axúdanos a mellorar Riot",
"Send <UsageDataLink>anonymous usage data</UsageDataLink> which helps us improve Riot. This will use a <PolicyLink>cookie</PolicyLink>.": "Envía <UsageDataLink>datos de uso anónimos</UsageDataLink> que nos axudarán a mellorar Riot. Esto precisa usar unha <PolicyLink>cookie</PolicyLink>.",
"I want to help": "Quero axudar",
"No": "Non",
"Verify all your sessions to ensure your account & messages are safe": "Verifica todas as outras sesións para asegurar que a túa conta e mensaxes están seguros",
"Review": "Revisar",
"Later": "Máis tarde",
"Your homeserver has exceeded its user limit.": "O teu servidor superou o seu límite de usuaras.",
"Your homeserver has exceeded one of its resource limits.": "O teu servidor superou un dous seus límites de recursos.",
"Contact your <a>server admin</a>.": "Contacta coa <a>administración</a>.",
"Ok": "Ok",
"Set password": "Establecer contrasinal",
"To return to your account in future you need to set a password": "Para voltar a túa conta no futuro debes establecer un contrasinal",
"Set up": "Configurar",
"Upgrade": "Mellorar",
"Verify": "Verificar",
"Verify yourself & others to keep your chats safe": "Verifica a túa conta e a de outras para ter conversas seguras",
"Other users may not trust it": "Outras usuarias poderían non confiar",
"Verify the new login accessing your account: %(name)s": "Verifica a conexión accedendo a túa conta: %(name)s",
"Restart": "Reiniciar",
"Upgrade your Riot": "Mellora o teu Riot",
"A new version of Riot is available!": "Hai unha nova versión de Riot!",
"There was an error joining the room": "Houbo un fallo ao unirte a sala",
"Font scaling": "Escalado da tipografía",
"Custom user status messages": "Mensaxes de estado personalizados",
"Render simple counters in room header": "Mostrar contadores simples na cabeceira da sala",
"Multiple integration managers": "Múltiples xestores da integración",
"Try out new ways to ignore people (experimental)": "Novos xeitos de ignorar persoas (experimental)",
"Show join/leave messages (invites/kicks/bans unaffected)": "Mostrar mensaxes de entrada/saída (mais non convites/expulsións/bloqueos)",
"Subscribing to a ban list will cause you to join it!": "Subscribíndote a unha lista de bloqueo fará que te unas a ela!",
"<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>Aviso</b>: Actualizando a sala non fará que <i>os membros da sala migren automáticamente a nova versión da sala.</i> Publicaremos unha ligazón a nova sala na versión antiga da sala - os membros terán que premer na ligazón para unirse a nova sala.",
"Join the conversation with an account": "Únete a conversa cunha conta",
"Re-join": "Volta a unirte",
"You can only join it with a working invite.": "Só podes unirte cun convite activo.",
"Try to join anyway": "Inténtao igualmente",
"You can still join it because this is a public room.": "Podes unirte porque é unha sala pública.",
"Join the discussion": "Súmate a conversa",
"Do you want to join %(roomName)s?": "Queres unirte a %(roomName)s?",
"You're previewing %(roomName)s. Want to join it?": "Vista previa de %(roomName)s. Queres unirte?",
"%(roomName)s can't be previewed. Do you want to join it?": "%(roomName)s non ten vista previa. Queres unirte?",
"Join": "Únete",
"Matrix rooms": "Salas Matrix",
"Join millions for free on the largest public server": "Únete a millóns de persoas gratuitamente no maior servidor público",
"If you can't find the room you're looking for, ask for an invite or <a>Create a new room</a>.": "Se non atopas a sala que buscas, pide un convite ou <a>Crea unha nova sala</a>.",
"Match system theme": "Imitar o aspecto do sistema",
"Invalid theme schema.": "Esquema do decorado incorrecto.",
"Error downloading theme information.": "Erro ao descargar información do decorado.",
"Theme added!": "Decorado engadido!",
"Custom theme URL": "URL do decorado personalizado",
"Add theme": "Engadir decorado",
"Theme": "Decorado",
"Language and region": "Idioma e rexión",
"Your theme": "O teu decorado"
} }

View file

@ -27,7 +27,7 @@
"No Microphones detected": "Nem található mikrofon", "No Microphones detected": "Nem található mikrofon",
"No Webcams detected": "Nem található webkamera", "No Webcams detected": "Nem található webkamera",
"No media permissions": "Nincs media jogosultság", "No media permissions": "Nincs media jogosultság",
"You may need to manually permit Riot to access your microphone/webcam": "Lehet hogy manuálisan kell engedélyeznie a Riot-nak a hozzáférést a mikrofonhoz ás webkamerához", "You may need to manually permit Riot to access your microphone/webcam": "Lehet hogy manuálisan kell engedélyezned a Riot-nak a hozzáférést a mikrofonhoz ás webkamerához",
"Default Device": "Alapértelmezett eszköz", "Default Device": "Alapértelmezett eszköz",
"Microphone": "Mikrofon", "Microphone": "Mikrofon",
"Camera": "Kamera", "Camera": "Kamera",
@ -176,10 +176,10 @@
"Local addresses for this room:": "A szoba helyi címe:", "Local addresses for this room:": "A szoba helyi címe:",
"Logout": "Kilép", "Logout": "Kilép",
"Low priority": "Alacsony prioritás", "Low priority": "Alacsony prioritás",
"%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s elérhetővé tette a szoba új üzeneteit nekik minden résztvevő a szobában, amióta meg van hívva.", "%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s láthatóvá tette a szoba új üzeneteit nekik minden szoba tagnak, a meghívásuk idejétől kezdve.",
"%(senderName)s made future room history visible to all room members, from the point they joined.": "%(senderName)s elérhetővé tette a szoba új üzeneteit nekik minden résztvevő a szobában, amióta csatlakozott.", "%(senderName)s made future room history visible to all room members, from the point they joined.": "%(senderName)s láthatóvá tette a szoba új üzeneteit minden szoba tagnak, a csatlakozásuk idejétől kezdve.",
"%(senderName)s made future room history visible to all room members.": "%(senderName)s elérhetővé tette a szoba új üzeneteit nekik minden szoba tagság.", "%(senderName)s made future room history visible to all room members.": "%(senderName)s láthatóvá tette a szoba új üzeneteit minden szoba tagnak.",
"%(senderName)s made future room history visible to anyone.": "%(senderName)s elérhetővé tette a szoba új üzeneteit nekik bárki.", "%(senderName)s made future room history visible to anyone.": "%(senderName)s mindenki számára láthatóvá tette a szoba új üzeneteit.",
"%(senderName)s made future room history visible to unknown (%(visibility)s).": "%(senderName)s elérhetővé tette a szoba új üzeneteit nekik ismeretlen (%(visibility)s).", "%(senderName)s made future room history visible to unknown (%(visibility)s).": "%(senderName)s elérhetővé tette a szoba új üzeneteit nekik ismeretlen (%(visibility)s).",
"Manage Integrations": "Integrációk kezelése", "Manage Integrations": "Integrációk kezelése",
"Missing room_id in request": "A kérésből hiányzik a room_id", "Missing room_id in request": "A kérésből hiányzik a room_id",
@ -1276,11 +1276,11 @@
"Are you sure? You will lose your encrypted messages if your keys are not backed up properly.": "Biztos vagy benne? Ha a kulcsaid nincsenek megfelelően elmentve elveszted a titkosított üzeneteidet.", "Are you sure? You will lose your encrypted messages if your keys are not backed up properly.": "Biztos vagy benne? Ha a kulcsaid nincsenek megfelelően elmentve elveszted a titkosított üzeneteidet.",
"Encrypted messages are secured with end-to-end encryption. Only you and the recipient(s) have the keys to read these messages.": "A titkosított üzenetek végponttól végpontig titkosítással védettek. Csak neked és a címzetteknek lehet meg a kulcs az üzenet visszafejtéséhez.", "Encrypted messages are secured with end-to-end encryption. Only you and the recipient(s) have the keys to read these messages.": "A titkosított üzenetek végponttól végpontig titkosítással védettek. Csak neked és a címzetteknek lehet meg a kulcs az üzenet visszafejtéséhez.",
"Restore from Backup": "Visszaállítás mentésből", "Restore from Backup": "Visszaállítás mentésből",
"Back up your keys before signing out to avoid losing them.": "Ments el a kulcsaidat mielőtt kijelentkezel, hogy ne veszítsd el őket.", "Back up your keys before signing out to avoid losing them.": "Töltsd fel kulcsaidat a szerverre mielőtt kijelentkezel, hogy ne veszítsd el őket.",
"Start using Key Backup": "Kulcs mentés használatának megkezdése", "Start using Key Backup": "Kulcs mentés használatának megkezdése",
"Never lose encrypted messages": "Soha ne veszíts el titkosított üzenetet", "Never lose encrypted messages": "Soha ne veszíts el titkosított üzenetet",
"Messages in this room are secured with end-to-end encryption. Only you and the recipient(s) have the keys to read these messages.": "A szobában az üzenetek végponttól végpontig titkosítva vannak. Csak neked és a címzetteknek vannak meg a kulcsok az üzenetek visszafejtéséhez.", "Messages in this room are secured with end-to-end encryption. Only you and the recipient(s) have the keys to read these messages.": "A szobában az üzenetek végponttól végpontig titkosítva vannak. Csak neked és a címzetteknek vannak meg a kulcsok az üzenetek visszafejtéséhez.",
"Securely back up your keys to avoid losing them. <a>Learn more.</a>": "Mentsd el megfelelően a kulcsaidat, hogy ne vesszenek el. <a>Tudj meg róla többet.</a>", "Securely back up your keys to avoid losing them. <a>Learn more.</a>": "Mentsd el megfelelően a kulcsaidat a szerverre, hogy ne vesszenek el. <a>Tudj meg erről többet.</a>",
"Not now": "Most nem", "Not now": "Most nem",
"Don't ask me again": "Ne kérdezz többet", "Don't ask me again": "Ne kérdezz többet",
"Nothing appearing? Not all clients support interactive verification yet. <button>Use legacy verification</button>.": "Nem jelent meg semmi? Az interaktív hitelesítést még nem minden kliens támogatja. <button>Használd a hagyományos hitelesítést</button>.", "Nothing appearing? Not all clients support interactive verification yet. <button>Use legacy verification</button>.": "Nem jelent meg semmi? Az interaktív hitelesítést még nem minden kliens támogatja. <button>Használd a hagyományos hitelesítést</button>.",
@ -1546,7 +1546,7 @@
"Disconnect": "Kapcsolat bontása", "Disconnect": "Kapcsolat bontása",
"Identity Server (%(server)s)": "Azonosítás Szerver (%(server)s)", "Identity Server (%(server)s)": "Azonosítás Szerver (%(server)s)",
"You are currently using <server></server> to discover and be discoverable by existing contacts you know. You can change your identity server below.": "A kapcsolatok kereséséhez és, hogy megtaláljanak ismerősök ezt a szervert használod: <server></server>. A használt azonosítási szervert alább tudod megváltoztatni.", "You are currently using <server></server> to discover and be discoverable by existing contacts you know. You can change your identity server below.": "A kapcsolatok kereséséhez és, hogy megtaláljanak ismerősök ezt a szervert használod: <server></server>. A használt azonosítási szervert alább tudod megváltoztatni.",
"You are not currently using an identity server. To discover and be discoverable by existing contacts you know, add one below.": "Azonosítási szervert nem használsz jelenleg. Ahhoz, hogy megtalálj ismerősöket vagy téged megtaláljanak ismerősök adj hozzá egyet alább.", "You are not currently using an identity server. To discover and be discoverable by existing contacts you know, add one below.": "Jelenleg nem használsz azonosítási szervert. Ahhoz, hogy e-mail cím, vagy egyéb azonosító alapján megtalálhassanak az ismerőseid, vagy te megtalálhasd őket, be kell állítanod egy azonosítási szervert.",
"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.": "Ha az azonosítási szerverrel bontod a kapcsolatot az azt fogja eredményezni, hogy más felhasználók nem találnak rád és nem tudsz másokat meghívni e-mail cím vagy telefonszám alapján.", "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.": "Ha az azonosítási szerverrel bontod a kapcsolatot az azt fogja eredményezni, hogy más felhasználók nem találnak rád és nem tudsz másokat meghívni e-mail cím vagy telefonszám alapján.",
"Enter a new identity server": "Új azonosítási szerver hozzáadása", "Enter a new identity server": "Új azonosítási szerver hozzáadása",
"Integration Manager": "Integrációs Menedzser", "Integration Manager": "Integrációs Menedzser",
@ -1819,13 +1819,13 @@
"<userName/> wants to chat": "<userName/> csevegni szeretne", "<userName/> wants to chat": "<userName/> csevegni szeretne",
"Start chatting": "Beszélgetés elkezdése", "Start chatting": "Beszélgetés elkezdése",
"Send cross-signing keys to homeserver": "Kereszt-aláírás kulcsok küldése a matrix szervernek", "Send cross-signing keys to homeserver": "Kereszt-aláírás kulcsok küldése a matrix szervernek",
"Cross-signing public keys:": "Kereszt-aláírás nyilvános kulcsok:", "Cross-signing public keys:": "Eszközök közti hitelesítés nyilvános kulcsai:",
"not found": "nem található", "not found": "nem található",
"Cross-signing private keys:": "Kereszt-aláírás privát kulcsok:", "Cross-signing private keys:": "Eszközök közti hitelesítés privát kulcsai:",
"in secret storage": "biztonsági tárolóban", "in secret storage": "biztonsági tárolóban",
"Secret storage public key:": "Biztonsági tároló nyilvános kulcs:", "Secret storage public key:": "Biztonsági tároló nyilvános kulcs:",
"in account data": "fiók adatokban", "in account data": "fiók adatokban",
"Cross-signing": "Kereszt-aláírás", "Cross-signing": "Eszközök közti aláírás",
"Enter secret storage passphrase": "Add meg a jelmondatot a biztonsági tárolóhoz", "Enter secret storage passphrase": "Add meg a jelmondatot a biztonsági tárolóhoz",
"Unable to access secret storage. Please verify that you entered the correct passphrase.": "A biztonsági tárolóhoz nem lehet hozzáférni. Kérlek ellenőrizd, hogy jó jelmondatot adtál-e meg.", "Unable to access secret storage. Please verify that you entered the correct passphrase.": "A biztonsági tárolóhoz nem lehet hozzáférni. Kérlek ellenőrizd, hogy jó jelmondatot adtál-e meg.",
"<b>Warning</b>: You should only access secret storage from a trusted computer.": "<b>Figyelem</b>: Csak biztonságos eszközről férj hozzá a biztonságos tárolóhoz.", "<b>Warning</b>: You should only access secret storage from a trusted computer.": "<b>Figyelem</b>: Csak biztonságos eszközről férj hozzá a biztonságos tárolóhoz.",
@ -1860,9 +1860,9 @@
"%(senderName)s changed a rule that was banning rooms matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s megváltoztatta a szabályt amivel szobák voltak kitiltva erről: %(oldGlob)s erre: %(newGlob)s ezért: %(reason)s", "%(senderName)s changed a rule that was banning rooms matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s megváltoztatta a szabályt amivel szobák voltak kitiltva erről: %(oldGlob)s erre: %(newGlob)s ezért: %(reason)s",
"%(senderName)s changed a rule that was banning servers matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s megváltoztatta a szabályt amivel szerverek voltak kitiltva erről: %(oldGlob)s erre: %(newGlob)s ezért: %(reason)s", "%(senderName)s changed a rule that was banning servers matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s megváltoztatta a szabályt amivel szerverek voltak kitiltva erről: %(oldGlob)s erre: %(newGlob)s ezért: %(reason)s",
"%(senderName)s updated a ban rule that was matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s megváltoztatta a kitiltó szabályt erről: %(oldGlob)s erre: %(newGlob)s ezért: %(reason)s", "%(senderName)s updated a ban rule that was matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s megváltoztatta a kitiltó szabályt erről: %(oldGlob)s erre: %(newGlob)s ezért: %(reason)s",
"Cross-signing and secret storage are enabled.": "Kereszt-aláírás és a biztonsági tároló engedélyezve van.", "Cross-signing and secret storage are enabled.": "Eszközök közti hitelesítés és a biztonsági tároló engedélyezve van.",
"Cross-signing and secret storage are not yet set up.": "Kereszt-aláírás és a biztonsági tároló egyenlőre nincs beállítva.", "Cross-signing and secret storage are not yet set up.": "Az eszközök közti hitelesítés és a biztonsági tároló egyenlőre nincs beállítva.",
"Bootstrap cross-signing and secret storage": "Kereszt-aláírás és biztonsági tároló beállítása", "Bootstrap cross-signing and secret storage": "Az eszközök közti hitelesítés és biztonsági tároló beállítása",
"not stored": "nincs mentve", "not stored": "nincs mentve",
"Backup has a <validity>valid</validity> signature from this user": "A mentés <validity>érvényes</validity> aláírást tartalmaz a felhasználótól", "Backup has a <validity>valid</validity> signature from this user": "A mentés <validity>érvényes</validity> aláírást tartalmaz a felhasználótól",
"Backup has a <validity>invalid</validity> signature from this user": "A mentés <validity>érvénytelen</validity> aláírást tartalmaz a felhasználótól", "Backup has a <validity>invalid</validity> signature from this user": "A mentés <validity>érvénytelen</validity> aláírást tartalmaz a felhasználótól",
@ -1989,7 +1989,7 @@
"WARNING: Session already verified, but keys do NOT MATCH!": "FIGYELEM: A munkamenet már ellenőrizve van de a kulcsok NEM EGYEZNEK!", "WARNING: Session already verified, but keys do NOT MATCH!": "FIGYELEM: A munkamenet már ellenőrizve van de a kulcsok NEM EGYEZNEK!",
"Enable cross-signing to verify per-user instead of per-session (in development)": "Kereszt-aláírás engedélyezése a felhasználó alapú azonosításhoz a munkamenet alapú helyett (fejlesztés alatt)", "Enable cross-signing to verify per-user instead of per-session (in development)": "Kereszt-aláírás engedélyezése a felhasználó alapú azonosításhoz a munkamenet alapú helyett (fejlesztés alatt)",
"Show padlocks on invite only rooms": "Lakat mutatása azoknál a szobáknál amikbe csak meghívóval lehet belépni", "Show padlocks on invite only rooms": "Lakat mutatása azoknál a szobáknál amikbe csak meghívóval lehet belépni",
"Never send encrypted messages to unverified sessions from this session": "Sose küldj titkosított üzenetet nem ellenőrizetlen munkamenetbe ebből a munkamenetből", "Never send encrypted messages to unverified sessions from this session": "Sose küldj titkosított üzenetet ellenőrizetlen munkamenetbe ebből a munkamenetből",
"Never send encrypted messages to unverified sessions in this room from this session": "Sose küldjön titkosított üzeneteket ellenőrizetlen munkamenetekbe ebben a szobában ebből a munkamenetből", "Never send encrypted messages to unverified sessions in this room from this session": "Sose küldjön titkosított üzeneteket ellenőrizetlen munkamenetekbe ebben a szobában ebből a munkamenetből",
"Keep secret storage passphrase in memory for this session": "A biztonsági tároló jelmondatát ebben a munkamenetben tartsa a memóriában", "Keep secret storage passphrase in memory for this session": "A biztonsági tároló jelmondatát ebben a munkamenetben tartsa a memóriában",
"How fast should messages be downloaded.": "Milyen gyorsan legyenek az üzenetek letöltve.", "How fast should messages be downloaded.": "Milyen gyorsan legyenek az üzenetek letöltve.",
@ -2000,7 +2000,7 @@
"They don't match": "Nem egyeznek", "They don't match": "Nem egyeznek",
"To be secure, do this in person or use a trusted way to communicate.": "A biztonság érdekében ezt végezd el személyesen vagy egy megbízható kommunikációs csatornán.", "To be secure, do this in person or use a trusted way to communicate.": "A biztonság érdekében ezt végezd el személyesen vagy egy megbízható kommunikációs csatornán.",
"Verify yourself & others to keep your chats safe": "Ellenőrizd magad és másokat, hogy a csevegéseid biztonságban legyenek", "Verify yourself & others to keep your chats safe": "Ellenőrizd magad és másokat, hogy a csevegéseid biztonságban legyenek",
"Your account has a cross-signing identity in secret storage, but it is not yet trusted by this session.": "A fiókodhoz tartozik egy kereszt-aláírás a biztonsági tárolóban de ebben a munkamenetben ez még nem megbízható.", "Your account has a cross-signing identity in secret storage, but it is not yet trusted by this session.": "A fiókodhoz tartozik egy eszköz-közti hitelesítési identitás, de ez a munkamenet még nem jelölte megbízhatónak.",
"in memory": "memóriában", "in memory": "memóriában",
"Your homeserver does not support session management.": "A matrix szervered nem támogatja a munkamenetek kezelését.", "Your homeserver does not support session management.": "A matrix szervered nem támogatja a munkamenetek kezelését.",
"Unable to load session list": "A munkamenet listát nem lehet betölteni", "Unable to load session list": "A munkamenet listát nem lehet betölteni",
@ -2141,10 +2141,10 @@
"Ask this user to verify their session, or manually verify it below.": "Kérd meg a felhasználót, hogy hitelesítse a munkamenetét vagy ellenőrizd kézzel alább.", "Ask this user to verify their session, or manually verify it below.": "Kérd meg a felhasználót, hogy hitelesítse a munkamenetét vagy ellenőrizd kézzel alább.",
"Manually Verify": "Manuális ellenőrzés", "Manually Verify": "Manuális ellenőrzés",
"Verify by scanning": "Ellenőrzés kód beolvasással", "Verify by scanning": "Ellenőrzés kód beolvasással",
"Destroy cross-signing keys?": "Eszközök közti hitelesítési kulcsok megsemmisítése?", "Destroy cross-signing keys?": "Megsemmisíted az eszközök közti hitelesítés kulcsait?",
"Deleting cross-signing keys is permanent. Anyone you have verified with will see security alerts. You almost certainly don't want to do this, unless you've lost every device you can cross-sign from.": "Eszközök közti hitelesítési kulcsok törlése végleges. Mindenki akit ezzel hitelesítettél biztonsági figyelmeztetéseket fog látni. Hacsak nem vesztetted el az összes eszközödet amivel eszközök közti hitelesítést tudsz végezni, nem valószínű, hogy ezt szeretnéd tenni.", "Deleting cross-signing keys is permanent. Anyone you have verified with will see security alerts. You almost certainly don't want to do this, unless you've lost every device you can cross-sign from.": "Eszközök közti hitelesítési kulcsok törlése végleges. Mindenki akit ezzel hitelesítettél biztonsági figyelmeztetéseket fog látni. Hacsak nem vesztetted el az összes eszközödet amivel eszközök közti hitelesítést tudsz végezni, nem valószínű, hogy ezt szeretnéd tenni.",
"Clear cross-signing keys": "Eszközök közti hitelesítési kulcsok törlése", "Clear cross-signing keys": "Eszközök közti hitelesítési kulcsok törlése",
"Reset cross-signing and secret storage": "Eszközök közti hitelesítés és biztonsági tároló visszaállítása", "Reset cross-signing and secret storage": "Eszközök közti hitelesítés és biztonsági tároló alaphelyzetbe állítása",
"The version of Riot": "Riot verziója", "The version of Riot": "Riot verziója",
"Whether you're using Riot on a device where touch is the primary input mechanism": "Olyan eszközön használod-e a Riotot, ahol az érintés az elsődleges beviteli mód", "Whether you're using Riot on a device where touch is the primary input mechanism": "Olyan eszközön használod-e a Riotot, ahol az érintés az elsődleges beviteli mód",
"Whether you're using Riot as an installed Progressive Web App": "Progresszív webalkalmazásként használod-e a Riotot", "Whether you're using Riot as an installed Progressive Web App": "Progresszív webalkalmazásként használod-e a Riotot",
@ -2170,7 +2170,7 @@
"We recommend you change your password and recovery key in Settings immediately": "Javasoljuk, hogy a jelszavadat és a visszaállítási kulcsodat mihamarabb változtasd meg a Beállításokban", "We recommend you change your password and recovery key in Settings immediately": "Javasoljuk, hogy a jelszavadat és a visszaállítási kulcsodat mihamarabb változtasd meg a Beállításokban",
"Order rooms by name": "Szobák rendezése név szerint", "Order rooms by name": "Szobák rendezése név szerint",
"Show rooms with unread notifications first": "Olvasatlan üzeneteket tartalmazó szobák megjelenítése elől", "Show rooms with unread notifications first": "Olvasatlan üzeneteket tartalmazó szobák megjelenítése elől",
"Show shortcuts to recently viewed rooms above the room list": "Billentyűkombináció megjelenítése a nemrég meglátogatott szobákhoz a szoba lista felett", "Show shortcuts to recently viewed rooms above the room list": "Gyorselérési gombok megjelenítése a nemrég meglátogatott szobákhoz a szoba lista felett",
"Sign In or Create Account": "Bejelentkezés vagy fiók létrehozása", "Sign In or Create Account": "Bejelentkezés vagy fiók létrehozása",
"Use your account or create a new one to continue.": "A folytatáshoz használd a fiókodat, vagy hozz létre egy újat.", "Use your account or create a new one to continue.": "A folytatáshoz használd a fiókodat, vagy hozz létre egy újat.",
"Create Account": "Fiók létrehozása", "Create Account": "Fiók létrehozása",
@ -2230,7 +2230,7 @@
"Unverified login. Was this you?": "Ellenőrizetlen bejelentkezés. Te voltál?", "Unverified login. Was this you?": "Ellenőrizetlen bejelentkezés. Te voltál?",
"Manually verify all remote sessions": "Az összes távoli munkamenet manuális ellenőrzése", "Manually verify all remote sessions": "Az összes távoli munkamenet manuális ellenőrzése",
"Update your secure storage": "A biztonsági tárolód frissítése", "Update your secure storage": "A biztonsági tárolód frissítése",
"Individually verify each session used by a user to mark it as trusted, not trusting cross-signed devices.": "A felhasználó által használt munkamenetek ellenőrzése egyenként, a kereszt-aláírással hitelesített eszközökben nem bízol meg.", "Individually verify each session used by a user to mark it as trusted, not trusting cross-signed devices.": "A felhasználó által használt munkamenetek ellenőrzése egyenként, a eszközök közti aláírással hitelesített eszközökben nem bízol meg.",
"Published addresses can be used by anyone on any server to join your room. To publish an address, it needs to be set as a local address first.": "A nyilvánosságra hozott címeket bárki bármelyik szerveren használhatja a szobádba való belépéshez. A cím közzétételéhez először helyi címnek kell beállítani.", "Published addresses can be used by anyone on any server to join your room. To publish an address, it needs to be set as a local address first.": "A nyilvánosságra hozott címeket bárki bármelyik szerveren használhatja a szobádba való belépéshez. A cím közzétételéhez először helyi címnek kell beállítani.",
"Set addresses for this room so users can find this room through your homeserver (%(localDomain)s)": "Állíts be címet ehhez a szobához, hogy a felhasználók a matrix szervereden megtalálhassák (%(localDomain)s)", "Set addresses for this room so users can find this room through your homeserver (%(localDomain)s)": "Állíts be címet ehhez a szobához, hogy a felhasználók a matrix szervereden megtalálhassák (%(localDomain)s)",
"In encrypted rooms, your messages are secured and only you and the recipient have the unique keys to unlock them.": "A titkosított szobákban az üzeneted biztonságban van és csak neked és a címzetteknek van meg az egyedi kulcs a visszafejtéshez.", "In encrypted rooms, your messages are secured and only you and the recipient have the unique keys to unlock them.": "A titkosított szobákban az üzeneted biztonságban van és csak neked és a címzetteknek van meg az egyedi kulcs a visszafejtéshez.",
@ -2401,7 +2401,7 @@
"Verify all your sessions to ensure your account & messages are safe": "Ellenőrizd minden munkamenetedet, hogy a fiókod és az üzeneteid biztonságban legyenek", "Verify all your sessions to ensure your account & messages are safe": "Ellenőrizd minden munkamenetedet, hogy a fiókod és az üzeneteid biztonságban legyenek",
"Verify the new login accessing your account: %(name)s": "Ellenőrizd ezt az új bejelentkezést ami hozzáfér a fiókodhoz: %(name)s", "Verify the new login accessing your account: %(name)s": "Ellenőrizd ezt az új bejelentkezést ami hozzáfér a fiókodhoz: %(name)s",
"Where youre logged in": "Ahol be vagy jelentkezve", "Where youre logged in": "Ahol be vagy jelentkezve",
"Manage the names of and sign out of your sessions below or <a>verify them in your User Profile</a>.": "Állítsd be a munkameneteid neveit, jelentkezz ki vagy <a>ellenőrizd őket a Felhasználói Beállításokban</a>.", "Manage the names of and sign out of your sessions below or <a>verify them in your User Profile</a>.": "Állítsd be a munkameneteid neveit, jelentkezz ki belőlük, vagy <a>ellenőrizd őket a Felhasználói Beállításokban</a>.",
"Restoring keys from backup": "Kulcsok visszaállítása mentésből", "Restoring keys from backup": "Kulcsok visszaállítása mentésből",
"Fetching keys from server...": "Kulcsok lekérdezése a szerverről…", "Fetching keys from server...": "Kulcsok lekérdezése a szerverről…",
"%(completed)s of %(total)s keys restored": "%(completed)s/%(total)s kulcs visszaállítva", "%(completed)s of %(total)s keys restored": "%(completed)s/%(total)s kulcs visszaállítva",
@ -2424,5 +2424,51 @@
"Click the button below to confirm setting up encryption.": "Az alábbi gomb megnyomásával erősítsd meg, hogy megadod a titkosítási beállításokat.", "Click the button below to confirm setting up encryption.": "Az alábbi gomb megnyomásával erősítsd meg, hogy megadod a titkosítási beállításokat.",
"Dismiss read marker and jump to bottom": "Az olvasottak jel eltűntetése és ugrás a végére", "Dismiss read marker and jump to bottom": "Az olvasottak jel eltűntetése és ugrás a végére",
"Jump to oldest unread message": "A legrégebbi olvasatlan üzenetre ugrás", "Jump to oldest unread message": "A legrégebbi olvasatlan üzenetre ugrás",
"Upload a file": "Fájl feltöltése" "Upload a file": "Fájl feltöltése",
"Room name or address": "A szoba neve vagy címe",
"Joins room with given address": "Megadott címmel csatlakozik a szobához",
"Unrecognised room address:": "Ismeretlen szoba cím:",
"Font scaling": "Betű nagyítás",
"Use the improved room list (in development - refresh to apply changes)": "Fejlesztett szobalista használata (fejlesztés alatt - frissíts a változások életbe léptetéséhez)",
"Use IRC layout": "IRC kinézet használata",
"Font size": "Betűméret",
"Custom font size": "Egyedit betűméret",
"IRC display name width": "IRC megjelenítési név szélessége",
"Size must be a number": "A méretnek számnak kell lennie",
"Custom font size can only be between %(min)s pt and %(max)s pt": "Az egyedi betűméret csak %(min)s pont és %(max)s pont között lehet",
"Use between %(min)s pt and %(max)s pt": "Csak %(min)s pont és %(max)s pont közötti értéket használj",
"Appearance": "Megjelenítés",
"Help us improve Riot": "Segíts nekünk jobbá tenni a Riotot",
"Send <UsageDataLink>anonymous usage data</UsageDataLink> which helps us improve Riot. This will use a <PolicyLink>cookie</PolicyLink>.": "<UsageDataLink>Anonim használati adatok</UsageDataLink> küldésével segíthetsz nekünk a Riot fejlesztésében. Ehhez <PolicyLink>sütiket</PolicyLink> használ.",
"I want to help": "Segíteni akarok",
"Your homeserver has exceeded its user limit.": "A Matrix szervered túllépte a felhasználói szám korlátot.",
"Your homeserver has exceeded one of its resource limits.": "A Matrix szervered túllépte valamelyik erőforrás korlátját.",
"Contact your <a>server admin</a>.": "Vedd fel a kapcsolatot a <a>szerver gazdájával</a>.",
"Ok": "Rendben",
"Set password": "Jelszó beállítása",
"To return to your account in future you need to set a password": "Ahhoz, hogy a jövőben vissza tudj térni a fiókodba, jelszót kell beállítanod",
"Restart": "Újraindít",
"Upgrade your Riot": "Riot frissítése",
"A new version of Riot is available!": "Új verzió érhető el a Riotból!",
"New version available. <a>Update now.</a>": "Új verzió érhető el.<a>Frissíts most.</a>",
"Please verify the room ID or address and try again.": "Kérlek ellenőrizd a szoba azonosítót vagy címet és próbáld újra.",
"Room ID or address of ban list": "Tiltó lista szoba azonosító vagy cím",
"To link to this room, please add an address.": "Hogy linkelhess egy szobához, adj hozzá egy címet.",
"Create room": "Szoba létrehozása",
"Error creating address": "Cím beállítási hiba",
"There was an error creating that address. It may not be allowed by the server or a temporary failure occurred.": "A cím beállításánál hiba történt. Vagy nincs engedélyezve a szerveren vagy átmeneti hiba történt.",
"You don't have permission to delete the address.": "A cím törléséhez nincs jogosultságod.",
"There was an error removing that address. It may no longer exist or a temporary error occurred.": "A cím törlésénél hiba történt. Vagy már nem létezik vagy átmeneti hiba történt.",
"Error removing address": "Cím törlésénél hiba történt",
"Categories": "Kategóriák",
"Room address": "Szoba címe",
"Please provide a room address": "Kérlek add meg a szoba címét",
"This address is available to use": "Ez a cím használható",
"This address is already in use": "Ez a cím már használatban van",
"Set a room address to easily share your room with other people.": "A szoba egyszerű megosztásához másokkal állíts be egy címet.",
"You've previously used a newer version of Riot with this session. To use this version again with end to end encryption, you will need to sign out and back in again.": "Ezt a munkamenetet előzőleg egy újabb Riot verzióval használtad. Ahhoz, hogy újra ezt a verziót tudd használni végpontok közötti titkosítással, ki kell lépned majd újra vissza.",
"Address (optional)": "Cím (nem kötelező)",
"Delete the room address %(alias)s and remove %(name)s from the directory?": "Törlöd a szoba címét: %(alias)s és eltávolítod a könyvtárból ezt: %(name)s?",
"delete the address.": "cím törlése.",
"Use a different passphrase?": "Másik jelmondat használata?"
} }

View file

@ -2441,5 +2441,40 @@
"Custom font size can only be between %(min)s pt and %(max)s pt": "La dimensione del carattere personalizzata può solo essere tra %(min)s pt e %(max)s pt", "Custom font size can only be between %(min)s pt and %(max)s pt": "La dimensione del carattere personalizzata può solo essere tra %(min)s pt e %(max)s pt",
"Use between %(min)s pt and %(max)s pt": "Usa tra %(min)s pt e %(max)s pt", "Use between %(min)s pt and %(max)s pt": "Usa tra %(min)s pt e %(max)s pt",
"Appearance": "Aspetto", "Appearance": "Aspetto",
"Use the improved room list (in development - refresh to apply changes)": "Usa l'elenco stanze migliorato (in sviluppo - ricarica per applicare le modifiche)" "Use the improved room list (in development - refresh to apply changes)": "Usa l'elenco stanze migliorato (in sviluppo - ricarica per applicare le modifiche)",
"Room name or address": "Nome stanza o indirizzo",
"Joins room with given address": "Accede alla stanza con l'indirizzo dato",
"Unrecognised room address:": "Indirizzo stanza non riconosciuto:",
"Please verify the room ID or address and try again.": "Verifica l'ID o l'indirizzo della stanza e riprova.",
"Room ID or address of ban list": "ID o indirizzo stanza della lista ban",
"To link to this room, please add an address.": "Per collegare a questa stanza, aggiungi un indirizzo.",
"Error creating address": "Errore creazione indirizzo",
"There was an error creating that address. It may not be allowed by the server or a temporary failure occurred.": "Si è verificato un errore creando l'indirizzo. Potrebbe non essere permesso dal server o un problema temporaneo.",
"You don't have permission to delete the address.": "Non hai l'autorizzazione per eliminare l'indirizzo.",
"There was an error removing that address. It may no longer exist or a temporary error occurred.": "Si è verificato un errore rimuovendo l'indirizzo. Potrebbe non esistere più o essere un problema temporaneo.",
"Error removing address": "Errore rimozione indirizzo",
"Categories": "Categorie",
"Room address": "Indirizzo stanza",
"Please provide a room address": "Inserisci un indirizzo della stanza",
"This address is available to use": "Questo indirizzo è disponibile per l'uso",
"This address is already in use": "Questo indirizzo è già in uso",
"Set a room address to easily share your room with other people.": "Imposta un indirizzo della stanza per condividerla facilmente con le altre persone.",
"You've previously used a newer version of Riot with this session. To use this version again with end to end encryption, you will need to sign out and back in again.": "Hai precedentemente usato una versione più recente di Riot con questa sessione. Per usare ancora questa versione con la cifratura end to end, dovrai disconnetterti e riaccedere.",
"Address (optional)": "Indirizzo (facoltativo)",
"Delete the room address %(alias)s and remove %(name)s from the directory?": "Eliminare l'indirizzo della stanza %(alias)s e rimuovere %(name)s dalla cartella?",
"delete the address.": "elimina l'indirizzo.",
"Use a different passphrase?": "Usare una password diversa?",
"Help us improve Riot": "Aiutaci a migliorare Riot",
"Send <UsageDataLink>anonymous usage data</UsageDataLink> which helps us improve Riot. This will use a <PolicyLink>cookie</PolicyLink>.": "Invia <UsageDataLink>dati di utilizzo anonimi</UsageDataLink> che ci aiutano a migliorare Riot. Verrà usato un <PolicyLink>cookie</PolicyLink>.",
"I want to help": "Voglio aiutare",
"Your homeserver has exceeded its user limit.": "Il tuo homeserver ha superato il limite di utenti.",
"Your homeserver has exceeded one of its resource limits.": "Il tuo homeserver ha superato uno dei suoi limiti di risorse.",
"Contact your <a>server admin</a>.": "Contatta il tuo <a>amministratore del server</a>.",
"Ok": "Ok",
"Set password": "Imposta password",
"To return to your account in future you need to set a password": "Per tornare nel tuo account in futuro, devi impostare una password",
"Restart": "Riavvia",
"Upgrade your Riot": "Aggiorna Riot",
"A new version of Riot is available!": "È disponibile una nuova versione di Riot!",
"New version available. <a>Update now.</a>": "Nuova versione disponibile. <a>Aggiorna ora.</a>"
} }

View file

@ -554,7 +554,7 @@
"Download %(text)s": "%(text)s をダウンロード", "Download %(text)s": "%(text)s をダウンロード",
"Invalid file%(extra)s": "無効なファイル %(extra)s", "Invalid file%(extra)s": "無効なファイル %(extra)s",
"Error decrypting image": "イメージの復号化エラー", "Error decrypting image": "イメージの復号化エラー",
"Error decrypting video": "動画の復号エラー", "Error decrypting video": "動画の復号エラー",
"%(senderDisplayName)s changed the avatar for %(roomName)s": "%(senderDisplayName)s が %(roomName)s のアバターを変更しました", "%(senderDisplayName)s changed the avatar for %(roomName)s": "%(senderDisplayName)s が %(roomName)s のアバターを変更しました",
"%(senderDisplayName)s removed the room avatar.": "%(senderDisplayName)s がルームアバターを削除しました。", "%(senderDisplayName)s removed the room avatar.": "%(senderDisplayName)s がルームアバターを削除しました。",
"%(senderDisplayName)s changed the room avatar to <img/>": "%(senderDisplayName)s はルームアバターを<img/>に変更しました", "%(senderDisplayName)s changed the room avatar to <img/>": "%(senderDisplayName)s はルームアバターを<img/>に変更しました",
@ -1158,7 +1158,7 @@
"Error updating flair": "バッジの更新でエラーが発生しました。", "Error updating flair": "バッジの更新でエラーが発生しました。",
"There was an error updating the flair for this room. The server may not allow it or a temporary error occurred.": "この部屋のバッジの更新でエラーが発生しました。サーバーが許可していないか、一時的なエラーが発生しました。", "There was an error updating the flair for this room. The server may not allow it or a temporary error occurred.": "この部屋のバッジの更新でエラーが発生しました。サーバーが許可していないか、一時的なエラーが発生しました。",
"Edited at %(date)s. Click to view edits.": "%(date)sに編集。クリックして編集を表示。", "Edited at %(date)s. Click to view edits.": "%(date)sに編集。クリックして編集を表示。",
"edited": "編集済", "edited": "編集済",
"I don't want my encrypted messages": "暗号化されたメッセージは必要ありません", "I don't want my encrypted messages": "暗号化されたメッセージは必要ありません",
"Manually export keys": "手動でキーをエクスポート", "Manually export keys": "手動でキーをエクスポート",
"You'll lose access to your encrypted messages": "暗号化されたメッセージにアクセスできなくなります", "You'll lose access to your encrypted messages": "暗号化されたメッセージにアクセスできなくなります",
@ -1371,5 +1371,33 @@
"Riot URL": "Riot URL", "Riot URL": "Riot URL",
"Room ID": "部屋 ID", "Room ID": "部屋 ID",
"Maximize apps": "アプリを最大化する", "Maximize apps": "アプリを最大化する",
"More options": "更なるオプション" "More options": "更なるオプション",
"Manually verify all remote sessions": "すべてのリモートセッションを手動で検証する",
"Individually verify each session used by a user to mark it as trusted, not trusting cross-signed devices.": "クロス署名されたデバイスを信頼せず、信頼済みとしてマークするためにユーザーが使用する各セッションを個別に検証します。",
"This session is backing up your keys. ": "このセッションでは鍵をバックアップしています。 ",
"Show all": "すべて表示",
"Message deleted": "メッセージが削除されました",
"Message deleted by %(name)s": "%(name)s によってメッセージが削除されました",
"Show less": "詳細を非表示",
"Show more": "詳細を表示",
"Backup has a <validity>valid</validity> signature from this user": "バックアップには、このユーザーによる<validity>有効</validity>な署名があります",
"Backup has a <validity>invalid</validity> signature from this user": "バックアップには、このユーザーによる<validity>無効</validity>な署名があります",
"Backup has a signature from <verify>unknown</verify> user with ID %(deviceId)s": "バックアップには、ID %(deviceId)s の<verify>未知のユーザー</verify>による署名があります",
"Backup has a signature from <verify>unknown</verify> session with ID %(deviceId)s": "バックアップには、ID %(deviceId)s の<verify>未知のセッション</verify>による署名があります",
"Backup has a <validity>valid</validity> signature from this session": "バックアップには、このセッションによる<validity>有効</validity>な署名があります",
"Backup has an <validity>invalid</validity> signature from this session": "バックアップには、このセッションによる<validity>無効</validity>な署名があります",
"Backup has a <validity>valid</validity> signature from <verify>verified</verify> session <device></device>": "バックアップには、<verify>検証済み</verify>のセッション <device></device> による<validity>有効</validity>な署名があります",
"Backup has a <validity>valid</validity> signature from <verify>unverified</verify> session <device></device>": "バックアップには、<verify>未検証</verify>のセッション <device></device> による<validity>有効</validity>な署名があります",
"Backup has an <validity>invalid</validity> signature from <verify>verified</verify> session <device></device>": "バックアップには、<verify>検証済み</verify>のセッション <device></device> による<validity>無効</validity>な署名があります",
"Backup has an <validity>invalid</validity> signature from <verify>unverified</verify> session <device></device>": "バックアップには、<verify>未検証</verify>のセッション <device></device> による<validity>無効</validity>な署名があります",
"Backup is not signed by any of your sessions": "バックアップには、あなたのどのセッションからも署名がありません",
"This backup is trusted because it has been restored on this session": "このバックアップは、このセッションで復元されたため信頼されています",
"Where youre logged in": "現在ログイン中のセッション",
"Manage the names of and sign out of your sessions below or <a>verify them in your User Profile</a>.": "以下のセッションの公開名を変更したり、サインアウトしたり、<a>あなたのユーザープロフィールからセッションの検証を行う</a>ことができます。",
"Enable end-to-end encryption": "エンドツーエンド暗号化を有効にする",
"You cant disable this later. Bridges & most bots wont work yet.": "後から無効化することはできません。ブリッジおよびほとんどのボットはまだ動作しません。",
"Use bots, bridges, widgets and sticker packs": "ボット、ブリッジ、ウィジェット、ステッカーパックを使用",
"Service": "サービス",
"Summary": "概要",
"Document": "ドキュメント"
} }

View file

@ -57,7 +57,7 @@
"Please set a password!": "Prašau įrašykite slaptažodį!", "Please set a password!": "Prašau įrašykite slaptažodį!",
"powered by Matrix": "veikia su Matrix", "powered by Matrix": "veikia su Matrix",
"You have successfully set a password!": "Jūs sėkmingai įrašėte slaptažodį!", "You have successfully set a password!": "Jūs sėkmingai įrašėte slaptažodį!",
"Favourite": "Svarbūs", "Favourite": "Favoritai",
"All Rooms": "Visi pokalbių kambariai", "All Rooms": "Visi pokalbių kambariai",
"Explore Room State": "Peržiūrėti kambario būseną", "Explore Room State": "Peržiūrėti kambario būseną",
"Source URL": "Šaltinio URL adresas", "Source URL": "Šaltinio URL adresas",
@ -137,7 +137,7 @@
"Messages in group chats": "Žinutės grupės pokalbiuose", "Messages in group chats": "Žinutės grupės pokalbiuose",
"Yesterday": "Vakar", "Yesterday": "Vakar",
"Error encountered (%(errorDetail)s).": "Susidurta su klaida (%(errorDetail)s).", "Error encountered (%(errorDetail)s).": "Susidurta su klaida (%(errorDetail)s).",
"Low Priority": "Nesvarbūs", "Low Priority": "Žemo prioriteto",
"Riot does not know how to join a room on this network": "Riot nežino kaip prisijungti prie kambario šiame tinkle", "Riot does not know how to join a room on this network": "Riot nežino kaip prisijungti prie kambario šiame tinkle",
"Set Password": "Nustatyti slaptažodį", "Set Password": "Nustatyti slaptažodį",
"An error occurred whilst saving your email notification preferences.": "Išsaugant pranešimų el. paštu nuostatas, įvyko klaida.", "An error occurred whilst saving your email notification preferences.": "Išsaugant pranešimų el. paštu nuostatas, įvyko klaida.",
@ -155,7 +155,7 @@
"Add rooms to this community": "Įtraukti kambarius į šią bendruomenę", "Add rooms to this community": "Įtraukti kambarius į šią bendruomenę",
"Pin Message": "Prisegti žinutę", "Pin Message": "Prisegti žinutę",
"Failed to change settings": "Nepavyko pakeisti nustatymų", "Failed to change settings": "Nepavyko pakeisti nustatymų",
"Leave": "Atsijungti", "Leave": "Išeiti",
"View Community": "Peržiūrėti bendruomenes", "View Community": "Peržiūrėti bendruomenes",
"Developer Tools": "Programuotojo įrankiai", "Developer Tools": "Programuotojo įrankiai",
"Unhide Preview": "Rodyti paržiūrą", "Unhide Preview": "Rodyti paržiūrą",
@ -697,7 +697,7 @@
"Algorithm: ": "Algoritmas: ", "Algorithm: ": "Algoritmas: ",
"Don't ask again": "Daugiau nebeklausti", "Don't ask again": "Daugiau nebeklausti",
"Set up": "Nustatyti", "Set up": "Nustatyti",
"Publish this room to the public in %(domain)s's room directory?": "Paskelbti šį kambarį į viešąjį %(domain)s kambarių katalogą?", "Publish this room to the public in %(domain)s's room directory?": "Paskelbti šį kambarį viešai %(domain)s kambarių kataloge?",
"Start authentication": "Pradėti tapatybės nustatymą", "Start authentication": "Pradėti tapatybės nustatymą",
"Failed to load group members": "Nepavyko įkelti grupės dalyvių", "Failed to load group members": "Nepavyko įkelti grupės dalyvių",
"Manage Integrations": "Valdyti integracijas", "Manage Integrations": "Valdyti integracijas",
@ -725,7 +725,7 @@
"No backup found!": "Nerasta jokios atsarginės kopijos!", "No backup found!": "Nerasta jokios atsarginės kopijos!",
"Backup Restored": "Atsarginė kopija atkurta", "Backup Restored": "Atsarginė kopija atkurta",
"Failed to decrypt %(failedCount)s sessions!": "Nepavyko iššifruoti %(failedCount)s seansų!", "Failed to decrypt %(failedCount)s sessions!": "Nepavyko iššifruoti %(failedCount)s seansų!",
"Next": "Kitas", "Next": "Toliau",
"Private Chat": "Privatus pokalbis", "Private Chat": "Privatus pokalbis",
"Public Chat": "Viešas pokalbis", "Public Chat": "Viešas pokalbis",
"There are no visible files in this room": "Šiame kambaryje nėra matomų failų", "There are no visible files in this room": "Šiame kambaryje nėra matomų failų",
@ -874,7 +874,7 @@
"Do you want to chat with %(user)s?": "Ar jūs norite kalbėtis su %(user)s?", "Do you want to chat with %(user)s?": "Ar jūs norite kalbėtis su %(user)s?",
"<userName/> wants to chat": "<userName/> nori kalbėtis", "<userName/> wants to chat": "<userName/> nori kalbėtis",
"Start chatting": "Pradėti kalbėtis", "Start chatting": "Pradėti kalbėtis",
"Do you want to join %(roomName)s?": "Ar jūs norite prisijungti prie %(roomName)s?", "Do you want to join %(roomName)s?": "Ar jūs norite prisijungti prie %(roomName)s kanalo?",
"<userName/> invited you": "<userName/> jus pakvietė", "<userName/> invited you": "<userName/> jus pakvietė",
"You're previewing %(roomName)s. Want to join it?": "Jūs peržiūrite %(roomName)s. Norite prie jo prisijungti?", "You're previewing %(roomName)s. Want to join it?": "Jūs peržiūrite %(roomName)s. Norite prie jo prisijungti?",
"%(roomName)s can't be previewed. Do you want to join it?": "%(roomName)s negali būti peržiūrėtas. Ar jūs norite prie jo prisijungti?", "%(roomName)s can't be previewed. Do you want to join it?": "%(roomName)s negali būti peržiūrėtas. Ar jūs norite prie jo prisijungti?",
@ -896,7 +896,7 @@
"Explore": "Žvalgyti", "Explore": "Žvalgyti",
"Filter": "Filtruoti", "Filter": "Filtruoti",
"Filter rooms…": "Filtruoti kambarius…", "Filter rooms…": "Filtruoti kambarius…",
"This room is not public. You will not be able to rejoin without an invite.": "Šis kambarys nėra viešas. Jūs negalėsite prie jo vėl prisijungti be pakvietimo.", "This room is not public. You will not be able to rejoin without an invite.": "Šis kambarys nėra viešas. Jūs negalėsite vėl prie jo prisijungti be pakvietimo.",
"Are you sure you want to leave the room '%(roomName)s'?": "Ar tikrai norite išeiti iš kambario %(roomName)s?", "Are you sure you want to leave the room '%(roomName)s'?": "Ar tikrai norite išeiti iš kambario %(roomName)s?",
"%(creator)s created and configured the room.": "%(creator)s sukūrė ir sukonfigūravo kambarį.", "%(creator)s created and configured the room.": "%(creator)s sukūrė ir sukonfigūravo kambarį.",
"Riot failed to get the public room list.": "Riot nepavyko gauti viešų kambarių sąrašo.", "Riot failed to get the public room list.": "Riot nepavyko gauti viešų kambarių sąrašo.",
@ -957,10 +957,10 @@
"%(severalUsers)sleft and rejoined %(count)s times|one": "%(severalUsers)s išėjo ir vėl prisijungė", "%(severalUsers)sleft and rejoined %(count)s times|one": "%(severalUsers)s išėjo ir vėl prisijungė",
"%(oneUser)sleft and rejoined %(count)s times|other": "%(oneUser)s išėjo ir vėl prisijungė %(count)s kartų(-us)", "%(oneUser)sleft and rejoined %(count)s times|other": "%(oneUser)s išėjo ir vėl prisijungė %(count)s kartų(-us)",
"%(oneUser)sleft and rejoined %(count)s times|one": "%(oneUser)s išėjo ir vėl prisijungė", "%(oneUser)sleft and rejoined %(count)s times|one": "%(oneUser)s išėjo ir vėl prisijungė",
"%(severalUsers)srejected their invitations %(count)s times|other": "%(severalUsers)s atmetė kvietimus %(count)s kartų(-us)", "%(severalUsers)srejected their invitations %(count)s times|other": "%(severalUsers)s atmetė pakvietimus %(count)s kartų(-us)",
"%(severalUsers)srejected their invitations %(count)s times|one": "%(severalUsers)s atmetė kvietimus", "%(severalUsers)srejected their invitations %(count)s times|one": "%(severalUsers)s atmetė pakvietimus",
"%(oneUser)srejected their invitation %(count)s times|other": "%(oneUser)s atmetė kvietimą %(count)s kartų(-us)", "%(oneUser)srejected their invitation %(count)s times|other": "%(oneUser)s atmetė pakvietimą %(count)s kartų(-us)",
"%(oneUser)srejected their invitation %(count)s times|one": "%(oneUser)s atmetė kvietimą", "%(oneUser)srejected their invitation %(count)s times|one": "%(oneUser)s atmetė pakvietimą",
"%(severalUsers)shad their invitations withdrawn %(count)s times|other": "%(severalUsers)s atšaukė savo pakvietimus %(count)s kartų(-us)", "%(severalUsers)shad their invitations withdrawn %(count)s times|other": "%(severalUsers)s atšaukė savo pakvietimus %(count)s kartų(-us)",
"%(severalUsers)shad their invitations withdrawn %(count)s times|one": "%(severalUsers)s atšaukė savo pakvietimus", "%(severalUsers)shad their invitations withdrawn %(count)s times|one": "%(severalUsers)s atšaukė savo pakvietimus",
"%(oneUser)shad their invitation withdrawn %(count)s times|other": "%(oneUser)s atšaukė savo pakvietimą %(count)s kartų(-us)", "%(oneUser)shad their invitation withdrawn %(count)s times|other": "%(oneUser)s atšaukė savo pakvietimą %(count)s kartų(-us)",
@ -1024,7 +1024,7 @@
"Display Name": "Rodomas Vardas", "Display Name": "Rodomas Vardas",
"Please verify the room ID or alias and try again.": "Prašome patikrinti kambario ID arba slapyvardį ir bandyti dar kartą.", "Please verify the room ID or alias and try again.": "Prašome patikrinti kambario ID arba slapyvardį ir bandyti dar kartą.",
"Room %(name)s": "Kambarys %(name)s", "Room %(name)s": "Kambarys %(name)s",
"Upgrading this room will shut down the current instance of the room and create an upgraded room with the same name.": "Atnaujinimas išjungs dabartinę kambario instanciją ir sukurs atnaujintą kambarį tuo pačiu vardu.", "Upgrading this room will shut down the current instance of the room and create an upgraded room with the same name.": "Atnaujinimas išjungs dabartinę kambario instanciją ir sukurs atnaujintą kambarį tuo pačiu pavadinimu.",
"Other published addresses:": "Kiti paskelbti adresai:", "Other published addresses:": "Kiti paskelbti adresai:",
"No other published addresses yet, add one below": "Kol kas nėra kitų paskelbtų adresų, pridėkite vieną žemiau", "No other published addresses yet, add one below": "Kol kas nėra kitų paskelbtų adresų, pridėkite vieną žemiau",
"Room Name": "Kambario Pavadinimas", "Room Name": "Kambario Pavadinimas",
@ -1097,11 +1097,11 @@
"Later": "Vėliau", "Later": "Vėliau",
"Verify yourself & others to keep your chats safe": "Patvirtinkite save ir kitus, kad jūsų pokalbiai būtų saugūs", "Verify yourself & others to keep your chats safe": "Patvirtinkite save ir kitus, kad jūsų pokalbiai būtų saugūs",
"Go back": "Grįžti", "Go back": "Grįžti",
"This room is end-to-end encrypted": "Šis kambarys užšifruotas visapusiu šifravimu", "This room is end-to-end encrypted": "Šis kambarys visapusiškai užšifruotas",
"Send a message…": "Siųsti žinutę…", "Send a message…": "Siųsti žinutę…",
"Never lose encrypted messages": "Niekada nepraraskite šifruotų žinučių", "Never lose encrypted messages": "Niekada nepraraskite šifruotų žinučių",
"Messages in this room are secured with end-to-end encryption. Only you and the recipient(s) have the keys to read these messages.": "Žinutės šiame kambaryje yra apsaugotos visapusiu šifravimu. Tik jūs ir gavėjas(-ai) turite raktus šioms žinutėms perskaityti.", "Messages in this room are secured with end-to-end encryption. Only you and the recipient(s) have the keys to read these messages.": "Žinutės šiame kambaryje yra apsaugotos visapusiu šifravimu. Tik jūs ir gavėjas(-ai) turite raktus šioms žinutėms perskaityti.",
"Securely back up your keys to avoid losing them. <a>Learn more.</a>": "Saugiai sukurkite jūsų raktų atsargines kopijas, kad išvengtumėte jų praradimo. <a>Sužinoti daugiau.</a>", "Securely back up your keys to avoid losing them. <a>Learn more.</a>": "Saugiai sukurkite jūsų raktų atsarginę kopiją, kad išvengtumėte jų praradimo. <a>Sužinoti daugiau.</a>",
"Not now": "Ne dabar", "Not now": "Ne dabar",
"Don't ask me again": "Daugiau neklausti", "Don't ask me again": "Daugiau neklausti",
"Send as message": "Siųsti kaip žinutę", "Send as message": "Siųsti kaip žinutę",
@ -1225,7 +1225,7 @@
"You cancelled verification.": "Jūs atšaukėte patvirtinimą.", "You cancelled verification.": "Jūs atšaukėte patvirtinimą.",
"Verification cancelled": "Patvirtinimas atšauktas", "Verification cancelled": "Patvirtinimas atšauktas",
"Encryption enabled": "Šifravimas įjungtas", "Encryption enabled": "Šifravimas įjungtas",
"Encryption not enabled": "Šifravimas neįgalintas", "Encryption not enabled": "Šifravimas neįjungtas",
"Display your community flair in rooms configured to show it.": "Rodyti savo bendruomenės ženkliukus kambariuose, kuriuose nustatytas jų rodymas.", "Display your community flair in rooms configured to show it.": "Rodyti savo bendruomenės ženkliukus kambariuose, kuriuose nustatytas jų rodymas.",
"You're not currently a member of any communities.": "Jūs šiuo metu nesate jokios bendruomenės narys.", "You're not currently a member of any communities.": "Jūs šiuo metu nesate jokios bendruomenės narys.",
"More options": "Daugiau parinkčių", "More options": "Daugiau parinkčių",
@ -1249,7 +1249,7 @@
"Send report": "Siųsti pranešimą", "Send report": "Siųsti pranešimą",
"Unknown sessions": "Nežinomi seansai", "Unknown sessions": "Nežinomi seansai",
"Verify other session": "Patvirtinti kitą seansą", "Verify other session": "Patvirtinti kitą seansą",
"Are you sure you want to reject the invitation?": "Ar tikrai norite atšaukti pakvietimą?", "Are you sure you want to reject the invitation?": "Ar tikrai norite atmesti pakvietimą?",
"Share Permalink": "Dalintis nuoroda", "Share Permalink": "Dalintis nuoroda",
"Report Content": "Pranešti", "Report Content": "Pranešti",
"Nice, strong password!": "Puiku, stiprus slaptažodis!", "Nice, strong password!": "Puiku, stiprus slaptažodis!",
@ -1512,7 +1512,7 @@
"Show image": "Rodyti vaizdą", "Show image": "Rodyti vaizdą",
"Your avatar URL": "Jūsų pseudoportreto URL", "Your avatar URL": "Jūsų pseudoportreto URL",
"If there is additional context that would help in analysing the issue, such as what you were doing at the time, room IDs, user IDs, etc., please include those things here.": "Jei yra papildomo konteksto, kuris padėtų analizuojant šią problemą, tokio kaip ką jūs darėte tuo metu, kambarių ID, vartotojų ID ir t.t., įtraukite tuos dalykus čia.", "If there is additional context that would help in analysing the issue, such as what you were doing at the time, room IDs, user IDs, etc., please include those things here.": "Jei yra papildomo konteksto, kuris padėtų analizuojant šią problemą, tokio kaip ką jūs darėte tuo metu, kambarių ID, vartotojų ID ir t.t., įtraukite tuos dalykus čia.",
"Create a new room with the same name, description and avatar": "Sukurkite naują kambarį su tuo pačiu vardu, aprašymu ir pseudoportretu", "Create a new room with the same name, description and avatar": "Sukurti naują kambarį su tuo pačiu pavadinimu, aprašymu ir pseudoportretu",
"Upgrading a room is an advanced action and is usually recommended when a room is unstable due to bugs, missing features or security vulnerabilities.": "Kambario atnaujinimas yra sudėtingas veiksmas ir paprastai rekomenduojamas, kai kambarys nestabilus dėl klaidų, trūkstamų funkcijų ar saugos spragų.", "Upgrading a room is an advanced action and is usually recommended when a room is unstable due to bugs, missing features or security vulnerabilities.": "Kambario atnaujinimas yra sudėtingas veiksmas ir paprastai rekomenduojamas, kai kambarys nestabilus dėl klaidų, trūkstamų funkcijų ar saugos spragų.",
"To help us prevent this in future, please <a>send us logs</a>.": "Norėdami padėti mums išvengti to ateityje, <a>atsiųskite mums žurnalus</a>.", "To help us prevent this in future, please <a>send us logs</a>.": "Norėdami padėti mums išvengti to ateityje, <a>atsiųskite mums žurnalus</a>.",
"Failed to upload image": "Nepavyko įkelti vaizdo", "Failed to upload image": "Nepavyko įkelti vaizdo",
@ -1528,5 +1528,65 @@
"Select room from the room list": "Pasirinkite kambarį iš kambarių sąrašo", "Select room from the room list": "Pasirinkite kambarį iš kambarių sąrašo",
"Collapse room list section": "Sutraukti kambarių sąrašo skyrių", "Collapse room list section": "Sutraukti kambarių sąrašo skyrių",
"Expand room list section": "Išplėsti kambarių sąrašo skyrių", "Expand room list section": "Išplėsti kambarių sąrašo skyrių",
"Clear room list filter field": "Išvalyti kambarių sąrašo filtro lauką" "Clear room list filter field": "Išvalyti kambarių sąrašo filtro lauką",
"Community IDs cannot be empty.": "Bendruomenių ID negali būti tušti.",
"Failed to reject invitation": "Nepavyko atmesti pakvietimo",
"Failed to leave room": "Nepavyko išeiti iš kambario",
"Can't leave Server Notices room": "Negalima išeiti iš Serverio Pranešimų kambario",
"This room is used for important messages from the Homeserver, so you cannot leave it.": "Šis kambarys yra naudojamas svarbioms žinutėms iš serverio, todėl jūs negalite jo palikti.",
"Terms and Conditions": "Taisyklės ir Sąlygos",
"Self-verification request": "Savipatvirtinimo užklausa",
"Logout": "Atsijungti",
"Reject & Ignore user": "Atmesti ir ignoruoti vartotoją",
"Reject invitation": "Atmesti pakvietimą",
"Unable to reject invite": "Nepavyko atmesti pakvietimo",
"Whether you're using Riot as an installed Progressive Web App": "Nesvarbu, ar naudojate Riot kaip įdiegtą progresyviąją žiniatinklio programą",
"Your user agent": "Jūsų vartotojo agentas",
"The information being sent to us to help make Riot better includes:": "Informacija, siunčiama mums siekiant pagerinti Riot, yra:",
"Invite only": "Tik pakviestiems",
"You can only join it with a working invite.": "Jūs galite prisijungti tik su veikiančiu pakvietimu.",
"There are unknown sessions in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "Šiame kambaryje yra nežinomų seansų: jei jūs tęsite jų nepatvirtinę, bus galimybė kažkam slapta pasiklausyti jūsų skambučio.",
"If you cancel now, you won't complete your operation.": "Jei atšauksite dabar, jūs neužbaigsite savo operacijos.",
"Cancel entering passphrase?": "Atšaukti slaptafrazės įvedimą?",
"Room name or address": "Kambario pavadinimas arba adresas",
"%(name)s is requesting verification": "%(name)s prašo patvirtinimo",
"Sign In or Create Account": "Prisijungti arba Sukurti Paskyrą",
"Use your account or create a new one to continue.": "Norėdami tęsti naudokite savo paskyrą arba sukurkite naują.",
"Create Account": "Sukurti Paskyrą",
"Custom (%(level)s)": "Pasirinktinis (%(level)s)",
"Ask this user to verify their session, or manually verify it below.": "Paprašykite šio vartotojo patvirtinti savo seansą arba patvirtinkite jį rankiniu būdu žemiau.",
"Encryption upgrade available": "Galimas šifravimo atnaujinimas",
"Verify this user by confirming the following number appears on their screen.": "Patvirtinkite šį vartotoją įsitikindami, kad jo ekrane rodomas toliau esantis skaičius.",
"Backup has a signature from <verify>unknown</verify> user with ID %(deviceId)s": "Atsarginė kopija turi <verify>nežinomo</verify> vartotojo parašą su %(deviceId)s ID",
"Manage the names of and sign out of your sessions below or <a>verify them in your User Profile</a>.": "Tvarkykite savo seansų pavadinimus ir iš jų atsijunkite žemiau, arba <a>patvirtinkite juos savo Vartotojo Profilyje</a>.",
"Please enter verification code sent via text.": "Įveskite patvirtinimo kodą išsiųstą teksto žinute.",
"A text message has been sent to +%(msisdn)s. Please enter the verification code it contains.": "Teksto žinutė buvo išsiųsta numeriu +%(msisdn)s. Įveskite joje esantį patvirtinimo kodą.",
"Low priority": "Žemo prioriteto",
"New published address (e.g. #alias:server)": "Naujas paskelbtas adresas (pvz.: #pavadinimas:server)",
"Waiting for %(displayName)s to accept…": "Laukiama kol %(displayName)s sutiks…",
"Your messages are secured and only you and the recipient have the unique keys to unlock them.": "Jūsų žinutės yra apsaugotos ir tik jūs ir gavėjas turite unikalius raktus joms atrakinti.",
"This client does not support end-to-end encryption.": "Šis klientas nepalaiko visapusio šifravimo.",
"Start verification again from their profile.": "Pradėkite patvirtinimą iš naujo jų profilyje.",
"The encryption used by this room isn't supported.": "Šiame kambaryje naudojamas šifravimas nėra palaikomas.",
"You sent a verification request": "Jūs išsiuntėte patvirtinimo užklausą",
"Widgets do not use message encryption.": "Valdikliai nenaudoja žinučių šifravimo.",
"Continue With Encryption Disabled": "Tęsti išjungus šifravimą",
"Waiting for partner to accept...": "Laukiama kol partneris sutiks...",
"Waiting for %(userId)s to confirm...": "Laukiama kol %(userId)s patvirtins...",
"Verify this user to mark them as trusted. Trusting users gives you extra peace of mind when using end-to-end encrypted messages.": "Patvirtinkite šį vartotoją, kad pažymėtumėte jį kaip patikimą. Pažymint vartotojus kaip patikimus suteikia papildomos ramybės naudojant visapusiškai užšifruotas žinutes.",
"Waiting for partner to confirm...": "Laukiama kol partneris patvirtins...",
"Start a conversation with someone using their name, username (like <userId/>) or email address.": "Pradėkite pokalbį su kuo nors naudodami jų vardą, vartotojo vardą (kaip <userId/>) arba el. pašto adresą.",
"Invite someone using their name, username (like <userId/>), email address or <a>share this room</a>.": "Pakvieskite ką nors naudodami jų vardą, vartotojo vardą (kaip <userId/>), el. pašto adresą arba <a>bendrinkite šį kambarį</a>.",
"Sign out and remove encryption keys?": "Atsijungti ir pašalinti šifravimo raktus?",
"This will be your account name on the <span></span> homeserver, or you can pick a <a>different server</a>.": "Tai bus jūsų paskyros pavadinimas <span></span> serveryje, arba jūs galite pasirinkti <a>kitą serverį</a>.",
"A widget located at %(widgetUrl)s would like to verify your identity. By allowing this, the widget will be able to verify your user ID, but not perform actions as you.": "Valdiklis, esantis %(widgetUrl)s nori patvirtinti jūsų tapatybę. Jei tai leisite, valdiklis galės patvirtinti jūsų vartotojo ID, bet neatliks veiksmų kaip jūs.",
"Delete the room address %(alias)s and remove %(name)s from the directory?": "Ištrinti kambario adresą %(alias)s ir pašalinti %(name)s iš katalogo?",
"delete the address.": "ištrinti adresą.",
"Preview": "Peržiūrėti",
"View": "Žiūrėti",
"Confirm encryption setup": "Patvirtinti šifravimo sąranką",
"Click the button below to confirm setting up encryption.": "Paspauskite mygtuką žemiau, kad patvirtintumėte šifravimo nustatymą.",
"Restore your key backup to upgrade your encryption": "Atstatykite savo raktų atsarginę kopiją, kad atnaujintumėte šifravimą",
"Upgrade your encryption": "Atnaujinkite savo šifravimą",
"Failed to set topic": "Nepavyko nustatyti temos"
} }

View file

@ -1342,5 +1342,7 @@
"Enter a recovery passphrase...": "Skriv inn en gjenopprettingspassfrase …", "Enter a recovery passphrase...": "Skriv inn en gjenopprettingspassfrase …",
"Please enter your recovery passphrase a second time to confirm.": "Skriv inn gjenopprettingspassfrasen din en andre gang for å bekrefte.", "Please enter your recovery passphrase a second time to confirm.": "Skriv inn gjenopprettingspassfrasen din en andre gang for å bekrefte.",
"Repeat your recovery passphrase...": "Gjenta gjenopprettingspassfrasen din …", "Repeat your recovery passphrase...": "Gjenta gjenopprettingspassfrasen din …",
"Other users may not trust it": "Andre brukere kan kanskje mistro den" "Other users may not trust it": "Andre brukere kan kanskje mistro den",
"<reactors/><reactedWith> reacted with %(content)s</reactedWith>": "<reactors/><reactedWith> reagerte med %(content)s</reactedWith>",
"<reactors/><reactedWith>reacted with %(shortName)s</reactedWith>": "<reactors/><reactedWith> reagerte med %(shortName)s</reactedWith>"
} }

View file

@ -351,7 +351,7 @@
"Share room": "Del rom", "Share room": "Del rom",
"Community Invites": "Fellesskapsinvitasjonar", "Community Invites": "Fellesskapsinvitasjonar",
"Invites": "Invitasjonar", "Invites": "Invitasjonar",
"Favourites": "Favorittar", "Favourites": "Yndlingar",
"Rooms": "Rom", "Rooms": "Rom",
"Low priority": "Låg prioritet", "Low priority": "Låg prioritet",
"System Alerts": "Systemvarsel", "System Alerts": "Systemvarsel",

View file

@ -797,7 +797,7 @@
"All Rooms": "Vo všetkych miestnostiach", "All Rooms": "Vo všetkych miestnostiach",
"State Key": "State Key", "State Key": "State Key",
"Wednesday": "Streda", "Wednesday": "Streda",
"Quote": "Citácia", "Quote": "Citovať",
"Send logs": "Zahrnúť záznamy", "Send logs": "Zahrnúť záznamy",
"All messages": "Všetky správy", "All messages": "Všetky správy",
"Call invitation": "Audio / Video hovory", "Call invitation": "Audio / Video hovory",
@ -1107,7 +1107,7 @@
"You've successfully verified this user.": "Úspešne ste overili tohoto používateľa.", "You've successfully verified this user.": "Úspešne ste overili tohoto používateľa.",
"Secure messages with this user are end-to-end encrypted and not able to be read by third parties.": "Zabezpečené správi s týmto používateľom sú E2E šifrované, čo znamená, že čítanie tretími stranami nie je možné.", "Secure messages with this user are end-to-end encrypted and not able to be read by third parties.": "Zabezpečené správi s týmto používateľom sú E2E šifrované, čo znamená, že čítanie tretími stranami nie je možné.",
"Got It": "Rozumiem", "Got It": "Rozumiem",
"Verify this user by confirming the following emoji appear on their screen.": "Overte tohto používateľa tak, že zistíte, či sa na jeho obrazovke objaví nasledujúci emoji.", "Verify this user by confirming the following emoji appear on their screen.": "Overte tohto používateľa tak, že zistíte, či sa na jeho obrazovke objavia nasledujúce emoji.",
"Verify this user by confirming the following number appears on their screen.": "Overte tohoto používateľa tým, že zistíte, či sa na jeho obrazovke objaví nasledujúce číslo.", "Verify this user by confirming the following number appears on their screen.": "Overte tohoto používateľa tým, že zistíte, či sa na jeho obrazovke objaví nasledujúce číslo.",
"Unable to find a supported verification method.": "Nie je možné nájsť podporovanú metódu overenia.", "Unable to find a supported verification method.": "Nie je možné nájsť podporovanú metódu overenia.",
"Dog": "Hlava psa", "Dog": "Hlava psa",
@ -1536,13 +1536,13 @@
"Set up encryption": "Nastaviť šifrovanie", "Set up encryption": "Nastaviť šifrovanie",
"Review where youre logged in": "Zobraziť, kde ste prihlásený", "Review where youre logged in": "Zobraziť, kde ste prihlásený",
"New login. Was this you?": "Nové pihlásenie. Ste to vy?", "New login. Was this you?": "Nové pihlásenie. Ste to vy?",
"%(name)s is requesting verification": "%(name) žiada o overenie", "%(name)s is requesting verification": "%(name)s žiada o overenie",
"Sign In or Create Account": "Prihlásiť sa alebo vytvoriť nový účet", "Sign In or Create Account": "Prihlásiť sa alebo vytvoriť nový účet",
"Use your account or create a new one to continue.": "Použite váš existujúci účet alebo si vytvorte nový, aby ste mohli pokračovať.", "Use your account or create a new one to continue.": "Použite váš existujúci účet alebo si vytvorte nový, aby ste mohli pokračovať.",
"Create Account": "Vytvoriť účet", "Create Account": "Vytvoriť účet",
"Sign In": "Prihlásiť sa", "Sign In": "Prihlásiť sa",
"Sends a message as html, without interpreting it as markdown": "Pošlite správu ako HTML, bez interpretácie v Markdowne", "Sends a message as html, without interpreting it as markdown": "Pošlite správu ako HTML, bez interpretácie v Markdowne",
"Failed to set topic": "Nastavenie témy zlyhalo", "Failed to set topic": "Nepodarilo sa nastaviť tému",
"Command failed": "Príkaz zlyhal", "Command failed": "Príkaz zlyhal",
"Could not find user in room": "Nepodarilo sa nájsť používateľa v miestnosti", "Could not find user in room": "Nepodarilo sa nájsť používateľa v miestnosti",
"Please supply a widget URL or embed code": "Prosím, zadajte URL widgetu alebo vložte kód", "Please supply a widget URL or embed code": "Prosím, zadajte URL widgetu alebo vložte kód",
@ -1554,7 +1554,7 @@
"Incorrect recovery passphrase": "Nesprávne (dlhé) heslo pre obnovu zálohy", "Incorrect recovery passphrase": "Nesprávne (dlhé) heslo pre obnovu zálohy",
"Backup could not be decrypted with this recovery passphrase: please verify that you entered the correct recovery passphrase.": "Záloha nemohla byť rozšifrovaná pomocou tohto (dlhého) helsa na obnovu zálohy: prosím, overte, či ste zadali správne (dlhé) helso na obnovu zálohy.", "Backup could not be decrypted with this recovery passphrase: please verify that you entered the correct recovery passphrase.": "Záloha nemohla byť rozšifrovaná pomocou tohto (dlhého) helsa na obnovu zálohy: prosím, overte, či ste zadali správne (dlhé) helso na obnovu zálohy.",
"WARNING: KEY VERIFICATION FAILED! The signing key for %(userId)s and session %(deviceId)s is \"%(fprint)s\" which does not match the provided key \"%(fingerprint)s\". This could mean your communications are being intercepted!": "VAROVANIE: OVERENIE KĽÚČOV ZLYHALO! Podpisovaný kľúč používateľa %(userId)s a relácia %(deviceId)s je \"%(fprint)s\" čo nezodpovedá zadanému kľúču \"%(fingerprint)s\". Môže to znamenať, že vaša komunikácia je infiltrovaná!", "WARNING: KEY VERIFICATION FAILED! The signing key for %(userId)s and session %(deviceId)s is \"%(fprint)s\" which does not match the provided key \"%(fingerprint)s\". This could mean your communications are being intercepted!": "VAROVANIE: OVERENIE KĽÚČOV ZLYHALO! Podpisovaný kľúč používateľa %(userId)s a relácia %(deviceId)s je \"%(fprint)s\" čo nezodpovedá zadanému kľúču \"%(fingerprint)s\". Môže to znamenať, že vaša komunikácia je infiltrovaná!",
"The signing key you provided matches the signing key you received from %(userId)s's session %(deviceId)s. Session marked as verified.": "Zadaný podpísaný kľúč sa zhoduje s podpísaným kľúčom od relácie %(deviceId)s používateľa %(userId)s. Relácia je označená ako overená.", "The signing key you provided matches the signing key you received from %(userId)s's session %(deviceId)s. Session marked as verified.": "Zadaný podpisovací kľúč sa zhoduje s podpisovacím kľúčom od relácie %(deviceId)s používateľa %(userId)s. Relácia je označená ako overená.",
"Displays information about a user": "Zobrazuje informácie o používateľovi", "Displays information about a user": "Zobrazuje informácie o používateľovi",
"Send a bug report with logs": "Zaslať chybové hlásenie so záznamami", "Send a bug report with logs": "Zaslať chybové hlásenie so záznamami",
"Opens chat with the given user": "Otvorí konverzáciu s daným používateľom", "Opens chat with the given user": "Otvorí konverzáciu s daným používateľom",
@ -1565,7 +1565,7 @@
"%(senderName)s removed the alternative addresses %(addresses)s for this room.|other": "%(senderName)s odstránil/a alternatívne adresy %(addresses)s pre túto miestnosť.", "%(senderName)s removed the alternative addresses %(addresses)s for this room.|other": "%(senderName)s odstránil/a alternatívne adresy %(addresses)s pre túto miestnosť.",
"%(senderName)s removed the alternative addresses %(addresses)s for this room.|one": "%(senderName)s odstránil/a alternatívnu adresu %(addresses)s pre túto miestnosť.", "%(senderName)s removed the alternative addresses %(addresses)s for this room.|one": "%(senderName)s odstránil/a alternatívnu adresu %(addresses)s pre túto miestnosť.",
"%(senderName)s changed the alternative addresses for this room.": "%(senderName)s zmenil/a alternatívne adresy pre túto miestnosť.", "%(senderName)s changed the alternative addresses for this room.": "%(senderName)s zmenil/a alternatívne adresy pre túto miestnosť.",
"%(senderName)s changed the main and alternative addresses for this room.": "%(senderName)s zmenil hlavnú a alternatívne adresy pre túto miestnosť.", "%(senderName)s changed the main and alternative addresses for this room.": "%(senderName)s zmenil/a hlavnú a alternatívnu/e adresy pre túto miestnosť.",
"%(senderName)s changed the addresses for this room.": "%(senderName)s zmenil/a adresy pre túto miestnosť.", "%(senderName)s changed the addresses for this room.": "%(senderName)s zmenil/a adresy pre túto miestnosť.",
"You signed in to a new session without verifying it:": "Prihlásili ste sa do novej relácie bez jej overenia:", "You signed in to a new session without verifying it:": "Prihlásili ste sa do novej relácie bez jej overenia:",
"Verify your other session using one of the options below.": "Overte svoje ostatné relácie pomocou jednej z nižšie uvedených možností.", "Verify your other session using one of the options below.": "Overte svoje ostatné relácie pomocou jednej z nižšie uvedených možností.",
@ -1580,7 +1580,7 @@
"about an hour ago": "približne pred hodinou", "about an hour ago": "približne pred hodinou",
"about a day ago": "približne deň dozadu", "about a day ago": "približne deň dozadu",
"a few seconds from now": "o pár sekúnd", "a few seconds from now": "o pár sekúnd",
"about a minute from now": "približne o minutu", "about a minute from now": "približne o minútu",
"about an hour from now": "približne o hodinu", "about an hour from now": "približne o hodinu",
"about a day from now": "približne o deň", "about a day from now": "približne o deň",
"Support adding custom themes": "Umožniť pridávať vlastný vzhľad", "Support adding custom themes": "Umožniť pridávať vlastný vzhľad",
@ -1664,5 +1664,68 @@
"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.", "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 emoji",
"Verify by emoji": "Overte pomocou emoji", "Verify by emoji": "Overte pomocou emoji",
"Compare emoji": "Porovnajte 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é",
"Review": "Prehliadnuť",
"Later": "Neskôr",
"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ť",
"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 />.",
"Room name or address": "Meno alebo adresa miestnosti",
"Joins room with given address": "Pridať sa do miestnosti s danou adresou",
"Unrecognised room address:": "Nerozpoznaná adresa miestnosti:",
"Use the improved room list (in development - refresh to apply changes)": "Použiť vylepšený zoznam miestností (vo vývoji - znovunačítajte stránku pre aplikovanie zmien)",
"This bridge is managed by <user />.": "Tento most spravuje <user />.",
"Workspace: %(networkName)s": "Pracovisko: %(networkName)s",
"Channel: %(channelName)s": "Kanál: %(channelName)s",
"Show less": "Zobraziť menej",
"Show more": "Zobraziť viac",
"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.": "Zmena hesla reštartuje všetky šifrovacie kľúče pre všetky vaše relácie. Šifrované správy sa stanú nečitateľnými, pokiaľ najprv nevyexportujete vaše kľúče a po zmene ich nenaimportujete. V budúcnosti sa tento proces zjednoduší.",
"well formed": "dobre sformulované",
"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",
"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:",
"Homeserver feature support:": "Funkcie podporované domovským serverom:",
"exists": "existuje",
"Your homeserver does not support session management.": "Váš domovský server nepodporuje správu relácií.",
"Unable to load session list": "Nemožno načítať zoznam relácií",
"Confirm deleting these sessions by using Single Sign On to prove your identity.|other": "Potvrďte odstránenie týchto relácií použitím Jednotného prihlásenia na overenie vašej identity.",
"Confirm deleting these sessions by using Single Sign On to prove your identity.|one": "Potvrďte odstránenie tejto relácie použitím Jednotného prihlásenia na overenie vašej identity.",
"Confirm deleting these sessions": "Potvrdiť odstránenie týchto relácií",
"Click the button below to confirm deleting these sessions.|other": "Stlačením tlačítka potvrdíte zmazanie týchto relácií.",
"Click the button below to confirm deleting these sessions.|one": "Stlačením tlačítka potvrdíte zmazanie tejto relácie.",
"Delete sessions|other": "Zmazať relácie",
"Delete sessions|one": "Zmazať reláciu",
"Delete %(count)s sessions|one": "Zmazať %(count)s reláciu",
"Manage": "Spravovať",
"Securely cache encrypted messages locally for them to appear in search results.": "Bezpečne cachovať šifrované správy lokálne, aby sa mohli zobraziť vo vyhľadávaní.",
"Enable": "Povoliť",
"Riot is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom Riot Desktop with <nativeLink>search components added</nativeLink>.": "Riotu chýbajú niektoré komponenty potrebné na bezpečné cachovanie šifrovaných správ lokálne. Pokiaľ chcete experimentovať s touto funkciou, spravte si svoj vlastný Riot Desktop <nativeLink>s pridanými vyhľadávacími komponentami</nativeLink>.",
"Riot can't securely cache encrypted messages locally while running in a web browser. Use <riotLink>Riot Desktop</riotLink> for encrypted messages to appear in search results.": "Riotu nemôže bezpečne cachovať šifrované správy lokálne keď beží v prehliadači. Použite <riotLink>Riot Desktop</riotLink>, aby sa šifrované správy zobrazili vo vyhľadávaní.",
"This session is backing up your keys. ": "Táto relácia zálohuje vaše kľúče. ",
"This session is <b>not backing up your keys</b>, but you do have an existing backup you can restore from and add to going forward.": "Táto relácia <b>nezálohuje vaše kľúče</b>, ale už máte jednu existujúcu zálohu z ktorej sa môžete obnoviť a postupne pridávať.",
"Connect this session to key backup before signing out to avoid losing any keys that may only be on this session.": "Pred odhlásením pripojte túto reláciu k zálohe kľúčov, aby ste predišli strate kľúčov, ktoré môžu byť len v tejto relácií.",
"Connect this session to Key Backup": "Pripojiť túto reláciu k Zálohe kľúčov",
"Backup has a signature from <verify>unknown</verify> session with ID %(deviceId)s": "Záloha je podpísaná z <verify>neznámej</verify> relácie s ID %(deviceId)s",
"Backup has a <validity>valid</validity> signature from this session": "Záloha má <validity>platný</validity> podpis z tejto relácie",
"Backup has an <validity>invalid</validity> signature from this session": "Záloha má <validity>neplatný</validity> podpis z tejto relácie",
"Backup has a <validity>valid</validity> signature from <verify>verified</verify> session <device></device>": "Záloha má <validity>platný</validity> podpis z <verify>overenej</verify> relácie <device></device>",
"Backup has a <validity>valid</validity> signature from <verify>unverified</verify> session <device></device>": "Záloha má <validity>platný</validity> podpis z <verify>neoverenej</verify> relácie <device></device>",
"Backup has an <validity>invalid</validity> signature from <verify>verified</verify> session <device></device>": "Záloha má <validity>neplatný</validity> podpis z <verify>overenej</verify> relácie <device></device>",
"Backup has an <validity>invalid</validity> signature from <verify>unverified</verify> session <device></device>": "Záloha má <validity>neplatný</validity> podpis z <verify>neoverenej</verify> relácie <device></device>",
"Backup is not signed by any of your sessions": "Záloha nemá podpis zo žiadnej vašej relácie",
"This backup is trusted because it has been restored on this session": "Táto záloha je dôveryhodná, lebo už bola načítaná v tejto relácií",
"Your keys are <b>not being backed up from this session</b>.": "Vaše kľúče <b>nie sú zálohované z tejto relácie</b>.",
"Enable desktop notifications for this session": "Povoliť desktopové notifikácie pre túto reláciu",
"Enable audible notifications for this session": "Povoliť zvukové notifikácie pre túto reláciu",
"Size must be a number": "Veľkosť musí byť číslo",
"Custom font size can only be between %(min)s pt and %(max)s pt": "Vlastná veľkosť písma môže byť len v rozmedzí %(min)s pt až %(max)s pt"
} }

View file

@ -2434,5 +2434,41 @@
"Custom font size can only be between %(min)s pt and %(max)s pt": "Madhësia vetjake për shkronjat mund të jetë vetëm mes vlerave %(min)s pt dhe %(max)s pt", "Custom font size can only be between %(min)s pt and %(max)s pt": "Madhësia vetjake për shkronjat mund të jetë vetëm mes vlerave %(min)s pt dhe %(max)s pt",
"Use between %(min)s pt and %(max)s pt": "Përdor me %(min)s pt dhe %(max)s pt", "Use between %(min)s pt and %(max)s pt": "Përdor me %(min)s pt dhe %(max)s pt",
"Appearance": "Dukje", "Appearance": "Dukje",
"Create room": "Krijo dhomë" "Create room": "Krijo dhomë",
"Room name or address": "Emër ose adresë dhome",
"Joins room with given address": "Hyhet në dhomën me adresën e dhënë",
"Unrecognised room address:": "Adresë dhome që snjihet:",
"Help us improve Riot": "Ndihmonani të përmirësojmë Riot-in",
"Send <UsageDataLink>anonymous usage data</UsageDataLink> which helps us improve Riot. This will use a <PolicyLink>cookie</PolicyLink>.": "Dërgoni <UsageDataLink>të dhëna anonime përdorimi</UsageDataLink> të cilat na ndihmojnë të përmirësojmë Riot-in. Kjo do të përdorë një <PolicyLink>cookie</PolicyLink>.",
"I want to help": "Dua të ndihmoj",
"Your homeserver has exceeded its user limit.": "Shërbyesi juaj Home ka tejkaluar kufijtë e tij të përdorimit.",
"Your homeserver has exceeded one of its resource limits.": "Shërbyesi juaj Home ka tejkaluar një nga kufijtë e tij të burimeve.",
"Contact your <a>server admin</a>.": "Lidhuni me <a>përgjegjësin e shërbyesit tuaj</a>.",
"Ok": "OK",
"Set password": "Caktoni fjalëkalim",
"To return to your account in future you need to set a password": "Që të ktheheni te llogaria juaj në të ardhmen, duhet të caktoni një fjalëkalim",
"Restart": "Rinise",
"Upgrade your Riot": "Përmirësoni Riot-in tuaj",
"A new version of Riot is available!": "Ka gati një version të ri të Riot-it!",
"Use the improved room list (in development - refresh to apply changes)": "Përdorni listën e përmirësuar të dhomave (në zhvillim - që të aplikohen ndryshimet, rifreskojeni)",
"Please verify the room ID or address and try again.": "Ju lutemi, verifikoni ID-në ose adresën e dhomës dhe riprovoni.",
"Room ID or address of ban list": "ID dhome ose adresë prej liste ndalimi",
"To link to this room, please add an address.": "Që të lidhni këtë dhomë, ju lutemi, jepni një adresë.",
"Error creating address": "Gabim në krijim adrese",
"There was an error creating that address. It may not be allowed by the server or a temporary failure occurred.": "Pati një gabim në krijimin e asaj adrese. Mund të mos lejohet nga shërbyesi, ose ndodhi një gabim i përkohshëm.",
"You don't have permission to delete the address.": "Skeni leje të fshini adresën.",
"There was an error removing that address. It may no longer exist or a temporary error occurred.": "Pati një gabim në heqjen e asaj adrese. Mund të mos ekzistojë më, ose ndodhi një gabim i përkohshëm.",
"Error removing address": "Gabim në heqje adrese",
"Categories": "Kategori",
"Room address": "Adresë dhome",
"Please provide a room address": "Ju lutemi, jepni një adresë dhome",
"This address is available to use": "Kjo adresë është e lirë për përdorim",
"This address is already in use": "Kjo adresë është e përdorur tashmë",
"Set a room address to easily share your room with other people.": "Caktoni një adresë dhome që të ndani dhomën tuaj me persona të tjerë.",
"You've previously used a newer version of Riot with this session. To use this version again with end to end encryption, you will need to sign out and back in again.": "Me këtë sesion, keni përdorur më herët një version më të ri të Riot-it. Që të ripërdorni këtë version me fshehtëzim skaj më skaj, do tju duhet të bëni daljen dhe të rihyni.",
"Address (optional)": "Adresë (opsionale)",
"Delete the room address %(alias)s and remove %(name)s from the directory?": "Të fshihet adresa e dhomës %(alias)s dhe të hiqet %(name)s nga drejtoria?",
"delete the address.": "fshije adresën.",
"Use a different passphrase?": "Të përdoret një frazëkalim tjetër?",
"New version available. <a>Update now.</a>": "Version i ri gati. <a>Përditësojeni tani.</a>"
} }

View file

@ -1106,7 +1106,7 @@
"Bug reporting": "Felrapportering", "Bug reporting": "Felrapportering",
"FAQ": "FAQ", "FAQ": "FAQ",
"Versions": "Versioner", "Versions": "Versioner",
"Preferences": "Inställningar", "Preferences": "Alternativ",
"Timeline": "Tidslinje", "Timeline": "Tidslinje",
"Room list": "Rumslista", "Room list": "Rumslista",
"Autocomplete delay (ms)": "Autokompletteringsfördröjning (ms)", "Autocomplete delay (ms)": "Autokompletteringsfördröjning (ms)",
@ -1630,5 +1630,6 @@
"Esc": "Esc", "Esc": "Esc",
"Enter": "Enter", "Enter": "Enter",
"Space": "Space", "Space": "Space",
"End": "End" "End": "End",
"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 har blivit utloggad från alla dina sessioner och kommer inte längre att motta pushnotiser. För att återaktivera pushnotiser, logga in igen på varje enhet."
} }

View file

@ -2445,5 +2445,40 @@
"Custom font size can only be between %(min)s pt and %(max)s pt": "自訂字型大小僅能為 %(min)s 點至 %(max)s 點間", "Custom font size can only be between %(min)s pt and %(max)s pt": "自訂字型大小僅能為 %(min)s 點至 %(max)s 點間",
"Use between %(min)s pt and %(max)s pt": "使用 %(min)s 點至 %(max)s 點間", "Use between %(min)s pt and %(max)s pt": "使用 %(min)s 點至 %(max)s 點間",
"Appearance": "外觀", "Appearance": "外觀",
"Use the improved room list (in development - refresh to apply changes)": "使用改進的聊天室清單(開發中 - 重新整理以套用變更)" "Use the improved room list (in development - refresh to apply changes)": "使用改進的聊天室清單(開發中 - 重新整理以套用變更)",
"Room name or address": "聊天室名稱或地址",
"Joins room with given address": "以給定的地址加入聊天室",
"Unrecognised room address:": "無法識別的聊天室地址:",
"Please verify the room ID or address and try again.": "請驗證聊天室 ID 或地址並再試一次。",
"Room ID or address of ban list": "聊天室 ID 或地址的封鎖清單",
"To link to this room, please add an address.": "要連結到此聊天室,請新增地址。",
"Error creating address": "建立地址錯誤",
"There was an error creating that address. It may not be allowed by the server or a temporary failure occurred.": "建立該地址時發生錯誤。伺服器可能不允許這麼做,或是有暫時性的問題。",
"You don't have permission to delete the address.": "您沒有刪除地址的權限。",
"There was an error removing that address. It may no longer exist or a temporary error occurred.": "移除地址時發生錯誤。它可能已不存在或是有暫時性的問題。",
"Error removing address": "移除地址時發生錯誤",
"Categories": "分類",
"Room address": "聊天室地址",
"Please provide a room address": "請提供聊天室地址",
"This address is available to use": "此地址可用",
"This address is already in use": "此地址已被使用",
"Set a room address to easily share your room with other people.": "設定聊天室地址以輕鬆地與其他夥伴分享。",
"You've previously used a newer version of Riot with this session. To use this version again with end to end encryption, you will need to sign out and back in again.": "您先前在此工作階段中使用了較新版本的 Riot。要再次與此版本一同使用端到端加密您必須先登出再登入。",
"Address (optional)": "地址(選擇性)",
"Delete the room address %(alias)s and remove %(name)s from the directory?": "刪除聊天室地址 %(alias)s 並從目錄移除 %(name)s",
"delete the address.": "刪除地址。",
"Use a different passphrase?": "使用不同的通關密語?",
"Help us improve Riot": "協助我們改善 Riot",
"Send <UsageDataLink>anonymous usage data</UsageDataLink> which helps us improve Riot. This will use a <PolicyLink>cookie</PolicyLink>.": "傳送<UsageDataLink>匿名使用資料</UsageDataLink>以協助我們改善 Riot。這將會使用 <PolicyLink>cookie</PolicyLink>。",
"I want to help": "我想要協助",
"Your homeserver has exceeded its user limit.": "您的家伺服器已超過使用者限制。",
"Your homeserver has exceeded one of its resource limits.": "您的家伺服器已超過其中一種資源限制。",
"Contact your <a>server admin</a>.": "聯絡您的<a>伺服器管理員</a>。",
"Ok": "確定",
"Set password": "設定密碼",
"To return to your account in future you need to set a password": "要在日後取回您的帳號,您必須設定密碼",
"Restart": "重新啟動",
"Upgrade your Riot": "升級您的 Riot",
"A new version of Riot is available!": "已有新版的 Riot",
"New version available. <a>Update now.</a>": "有可用的新版本。<a>立刻更新。</a>"
} }

View file

@ -40,6 +40,10 @@ function installUpdate() {
} }
export const showToast = (version: string, newVersion: string, releaseNotes?: string) => { export const showToast = (version: string, newVersion: string, releaseNotes?: string) => {
function onReject() {
PlatformPeg.get().deferUpdate(newVersion);
}
let onAccept; let onAccept;
let acceptLabel = _t("What's new?"); let acceptLabel = _t("What's new?");
if (releaseNotes) { if (releaseNotes) {
@ -79,6 +83,8 @@ export const showToast = (version: string, newVersion: string, releaseNotes?: st
description: _t("A new version of Riot is available!"), description: _t("A new version of Riot is available!"),
acceptLabel, acceptLabel,
onAccept, onAccept,
rejectLabel: _t("Later"),
onReject,
}, },
component: GenericToast, component: GenericToast,
priority: 20, priority: 20,

View file

@ -29,11 +29,6 @@ export default class ResizeNotifier extends EventEmitter {
this._throttledMiddlePanel = throttle(() => this.emit("middlePanelResized"), 200); this._throttledMiddlePanel = throttle(() => this.emit("middlePanelResized"), 200);
} }
notifyBannersChanged() {
this.emit("leftPanelResized");
this.emit("middlePanelResized");
}
// can be called in quick succession // can be called in quick succession
notifyLeftHandleResized() { notifyLeftHandleResized() {
// don't emit event for own region // don't emit event for own region

View file

@ -16,7 +16,6 @@ const components = {};
components['structures.LeftPanel'] = stubComponent(); components['structures.LeftPanel'] = stubComponent();
components['structures.RightPanel'] = stubComponent(); components['structures.RightPanel'] = stubComponent();
components['structures.RoomDirectory'] = stubComponent(); components['structures.RoomDirectory'] = stubComponent();
components['views.globals.MatrixToolbar'] = stubComponent();
components['views.globals.GuestWarningBar'] = stubComponent(); components['views.globals.GuestWarningBar'] = stubComponent();
components['views.globals.NewVersionBar'] = stubComponent(); components['views.globals.NewVersionBar'] = stubComponent();
components['views.elements.Spinner'] = stubComponent({displayName: 'Spinner'}); components['views.elements.Spinner'] = stubComponent({displayName: 'Spinner'});