Merge branch 'develop' into luke/fix-email-cancel-button-text
This commit is contained in:
commit
f15292becf
17 changed files with 749 additions and 91 deletions
101
CHANGELOG.md
101
CHANGELOG.md
|
@ -1,3 +1,104 @@
|
||||||
|
Changes in [0.9.6](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v0.9.6) (2017-06-20)
|
||||||
|
===================================================================================================
|
||||||
|
[Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v0.9.5...v0.9.6)
|
||||||
|
|
||||||
|
* Fix infinite spinner on email registration
|
||||||
|
[\#1120](https://github.com/matrix-org/matrix-react-sdk/pull/1120)
|
||||||
|
* Translate help promots in room list
|
||||||
|
[\#1121](https://github.com/matrix-org/matrix-react-sdk/pull/1121)
|
||||||
|
* Internationalise the drop targets
|
||||||
|
[\#1122](https://github.com/matrix-org/matrix-react-sdk/pull/1122)
|
||||||
|
* Fix another infinite spin on register
|
||||||
|
[\#1124](https://github.com/matrix-org/matrix-react-sdk/pull/1124)
|
||||||
|
|
||||||
|
|
||||||
|
Changes in [0.9.5](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v0.9.5) (2017-06-19)
|
||||||
|
===================================================================================================
|
||||||
|
[Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v0.9.5-rc.2...v0.9.5)
|
||||||
|
|
||||||
|
* Don't peek when creating a room
|
||||||
|
[\#1113](https://github.com/matrix-org/matrix-react-sdk/pull/1113)
|
||||||
|
* More translations & translation fixes
|
||||||
|
|
||||||
|
|
||||||
|
Changes in [0.9.5-rc.2](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v0.9.5-rc.2) (2017-06-16)
|
||||||
|
=============================================================================================================
|
||||||
|
[Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v0.9.5-rc.1...v0.9.5-rc.2)
|
||||||
|
|
||||||
|
* Avoid getting stuck in a loop in CAS login
|
||||||
|
[\#1109](https://github.com/matrix-org/matrix-react-sdk/pull/1109)
|
||||||
|
* Update from Weblate.
|
||||||
|
[\#1101](https://github.com/matrix-org/matrix-react-sdk/pull/1101)
|
||||||
|
* Correctly inspect state when rejecting invite
|
||||||
|
[\#1108](https://github.com/matrix-org/matrix-react-sdk/pull/1108)
|
||||||
|
* Make sure to pass the roomAlias to the preview header if we have it
|
||||||
|
[\#1107](https://github.com/matrix-org/matrix-react-sdk/pull/1107)
|
||||||
|
* Make sure captcha disappears when container does
|
||||||
|
[\#1106](https://github.com/matrix-org/matrix-react-sdk/pull/1106)
|
||||||
|
* Fix URL previews
|
||||||
|
[\#1105](https://github.com/matrix-org/matrix-react-sdk/pull/1105)
|
||||||
|
|
||||||
|
Changes in [0.9.5-rc.1](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v0.9.5-rc.1) (2017-06-15)
|
||||||
|
=============================================================================================================
|
||||||
|
[Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v0.9.4...v0.9.5-rc.1)
|
||||||
|
|
||||||
|
* Groundwork for tests including a teamserver login
|
||||||
|
[\#1098](https://github.com/matrix-org/matrix-react-sdk/pull/1098)
|
||||||
|
* Show a spinner when accepting an invite and waitingForRoom
|
||||||
|
[\#1100](https://github.com/matrix-org/matrix-react-sdk/pull/1100)
|
||||||
|
* Display a spinner until new room object after join success
|
||||||
|
[\#1099](https://github.com/matrix-org/matrix-react-sdk/pull/1099)
|
||||||
|
* Luke/attempt fix peeking regression
|
||||||
|
[\#1097](https://github.com/matrix-org/matrix-react-sdk/pull/1097)
|
||||||
|
* Show correct text in set email password dialog (2)
|
||||||
|
[\#1096](https://github.com/matrix-org/matrix-react-sdk/pull/1096)
|
||||||
|
* Don't create a guest login if user went to /login
|
||||||
|
[\#1092](https://github.com/matrix-org/matrix-react-sdk/pull/1092)
|
||||||
|
* Give password confirmation correct title, description
|
||||||
|
[\#1095](https://github.com/matrix-org/matrix-react-sdk/pull/1095)
|
||||||
|
* Make enter submit change password form
|
||||||
|
[\#1094](https://github.com/matrix-org/matrix-react-sdk/pull/1094)
|
||||||
|
* When not specified, remove roomAlias state in RoomViewStore
|
||||||
|
[\#1093](https://github.com/matrix-org/matrix-react-sdk/pull/1093)
|
||||||
|
* Update from Weblate.
|
||||||
|
[\#1091](https://github.com/matrix-org/matrix-react-sdk/pull/1091)
|
||||||
|
* Fixed pagination infinite loop caused by long messages
|
||||||
|
[\#1045](https://github.com/matrix-org/matrix-react-sdk/pull/1045)
|
||||||
|
* Clear persistent storage on login and logout
|
||||||
|
[\#1085](https://github.com/matrix-org/matrix-react-sdk/pull/1085)
|
||||||
|
* DM guessing: prefer oldest joined member
|
||||||
|
[\#1087](https://github.com/matrix-org/matrix-react-sdk/pull/1087)
|
||||||
|
* Ask for email address after setting password for the first time
|
||||||
|
[\#1090](https://github.com/matrix-org/matrix-react-sdk/pull/1090)
|
||||||
|
* i18n for setting password flow
|
||||||
|
[\#1089](https://github.com/matrix-org/matrix-react-sdk/pull/1089)
|
||||||
|
* remove mx_filterFlipColor from verified e2e icon so its not purple :/
|
||||||
|
[\#1088](https://github.com/matrix-org/matrix-react-sdk/pull/1088)
|
||||||
|
* width and height must be int otherwise synapse cries
|
||||||
|
[\#1083](https://github.com/matrix-org/matrix-react-sdk/pull/1083)
|
||||||
|
* remove RoomViewStore listener from MatrixChat on unmount
|
||||||
|
[\#1084](https://github.com/matrix-org/matrix-react-sdk/pull/1084)
|
||||||
|
* Add script to copy translations between files
|
||||||
|
[\#1082](https://github.com/matrix-org/matrix-react-sdk/pull/1082)
|
||||||
|
* Only process user_directory response if it's for the current query
|
||||||
|
[\#1081](https://github.com/matrix-org/matrix-react-sdk/pull/1081)
|
||||||
|
* Fix regressions with starting a 1-1.
|
||||||
|
[\#1080](https://github.com/matrix-org/matrix-react-sdk/pull/1080)
|
||||||
|
* allow forcing of TURN
|
||||||
|
[\#1079](https://github.com/matrix-org/matrix-react-sdk/pull/1079)
|
||||||
|
* Remove a bunch of dead code from react-sdk
|
||||||
|
[\#1077](https://github.com/matrix-org/matrix-react-sdk/pull/1077)
|
||||||
|
* Improve error logging/reporting in megolm import/export
|
||||||
|
[\#1061](https://github.com/matrix-org/matrix-react-sdk/pull/1061)
|
||||||
|
* Delinting
|
||||||
|
[\#1064](https://github.com/matrix-org/matrix-react-sdk/pull/1064)
|
||||||
|
* Show reason for a call hanging up unexpectedly.
|
||||||
|
[\#1071](https://github.com/matrix-org/matrix-react-sdk/pull/1071)
|
||||||
|
* Add reason for ban in room settings
|
||||||
|
[\#1072](https://github.com/matrix-org/matrix-react-sdk/pull/1072)
|
||||||
|
* adds mx_filterFlipColor so that the dark theme will invert this image
|
||||||
|
[\#1070](https://github.com/matrix-org/matrix-react-sdk/pull/1070)
|
||||||
|
|
||||||
Changes in [0.9.4](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v0.9.4) (2017-06-14)
|
Changes in [0.9.4](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v0.9.4) (2017-06-14)
|
||||||
===================================================================================================
|
===================================================================================================
|
||||||
[Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v0.9.3...v0.9.4)
|
[Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v0.9.3...v0.9.4)
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "matrix-react-sdk",
|
"name": "matrix-react-sdk",
|
||||||
"version": "0.9.4",
|
"version": "0.9.6",
|
||||||
"description": "SDK for matrix.org using React",
|
"description": "SDK for matrix.org using React",
|
||||||
"author": "matrix.org",
|
"author": "matrix.org",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
@ -64,7 +64,7 @@
|
||||||
"isomorphic-fetch": "^2.2.1",
|
"isomorphic-fetch": "^2.2.1",
|
||||||
"linkifyjs": "^2.1.3",
|
"linkifyjs": "^2.1.3",
|
||||||
"lodash": "^4.13.1",
|
"lodash": "^4.13.1",
|
||||||
"matrix-js-sdk": "0.7.11",
|
"matrix-js-sdk": "0.7.12",
|
||||||
"optimist": "^0.6.1",
|
"optimist": "^0.6.1",
|
||||||
"prop-types": "^15.5.8",
|
"prop-types": "^15.5.8",
|
||||||
"q": "^1.4.1",
|
"q": "^1.4.1",
|
||||||
|
|
138
src/KeyRequestHandler.js
Normal file
138
src/KeyRequestHandler.js
Normal file
|
@ -0,0 +1,138 @@
|
||||||
|
/*
|
||||||
|
Copyright 2017 Vector Creations Ltd
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import sdk from './index';
|
||||||
|
import Modal from './Modal';
|
||||||
|
|
||||||
|
export default class KeyRequestHandler {
|
||||||
|
constructor(matrixClient) {
|
||||||
|
this._matrixClient = matrixClient;
|
||||||
|
|
||||||
|
// the user/device for which we currently have a dialog open
|
||||||
|
this._currentUser = null;
|
||||||
|
this._currentDevice = null;
|
||||||
|
|
||||||
|
// userId -> deviceId -> [keyRequest]
|
||||||
|
this._pendingKeyRequests = Object.create(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
handleKeyRequest(keyRequest) {
|
||||||
|
const userId = keyRequest.userId;
|
||||||
|
const deviceId = keyRequest.deviceId;
|
||||||
|
const requestId = keyRequest.requestId;
|
||||||
|
|
||||||
|
if (!this._pendingKeyRequests[userId]) {
|
||||||
|
this._pendingKeyRequests[userId] = Object.create(null);
|
||||||
|
}
|
||||||
|
if (!this._pendingKeyRequests[userId][deviceId]) {
|
||||||
|
this._pendingKeyRequests[userId][deviceId] = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
// check if we already have this request
|
||||||
|
const requests = this._pendingKeyRequests[userId][deviceId];
|
||||||
|
if (requests.find((r) => r.requestId === requestId)) {
|
||||||
|
console.log("Already have this key request, ignoring");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
requests.push(keyRequest);
|
||||||
|
|
||||||
|
if (this._currentUser) {
|
||||||
|
// ignore for now
|
||||||
|
console.log("Key request, but we already have a dialog open");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this._processNextRequest();
|
||||||
|
}
|
||||||
|
|
||||||
|
handleKeyRequestCancellation(cancellation) {
|
||||||
|
// see if we can find the request in the queue
|
||||||
|
const userId = cancellation.userId;
|
||||||
|
const deviceId = cancellation.deviceId;
|
||||||
|
const requestId = cancellation.requestId;
|
||||||
|
|
||||||
|
if (userId === this._currentUser && deviceId === this._currentDevice) {
|
||||||
|
console.log(
|
||||||
|
"room key request cancellation for the user we currently have a"
|
||||||
|
+ " dialog open for",
|
||||||
|
);
|
||||||
|
// TODO: update the dialog. For now, we just ignore the
|
||||||
|
// cancellation.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!this._pendingKeyRequests[userId]) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const requests = this._pendingKeyRequests[userId][deviceId];
|
||||||
|
if (!requests) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const idx = requests.findIndex((r) => r.requestId === requestId);
|
||||||
|
if (idx < 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
console.log("Forgetting room key request");
|
||||||
|
requests.splice(idx, 1);
|
||||||
|
if (requests.length === 0) {
|
||||||
|
delete this._pendingKeyRequests[userId][deviceId];
|
||||||
|
if (Object.keys(this._pendingKeyRequests[userId]).length === 0) {
|
||||||
|
delete this._pendingKeyRequests[userId];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_processNextRequest() {
|
||||||
|
const userId = Object.keys(this._pendingKeyRequests)[0];
|
||||||
|
if (!userId) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const deviceId = Object.keys(this._pendingKeyRequests[userId])[0];
|
||||||
|
if (!deviceId) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
console.log(`Starting KeyShareDialog for ${userId}:${deviceId}`);
|
||||||
|
|
||||||
|
const finished = (r) => {
|
||||||
|
this._currentUser = null;
|
||||||
|
this._currentDevice = null;
|
||||||
|
|
||||||
|
if (r) {
|
||||||
|
for (const req of this._pendingKeyRequests[userId][deviceId]) {
|
||||||
|
req.share();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
delete this._pendingKeyRequests[userId][deviceId];
|
||||||
|
if (Object.keys(this._pendingKeyRequests[userId]).length === 0) {
|
||||||
|
delete this._pendingKeyRequests[userId];
|
||||||
|
}
|
||||||
|
|
||||||
|
this._processNextRequest();
|
||||||
|
};
|
||||||
|
|
||||||
|
const KeyShareDialog = sdk.getComponent("dialogs.KeyShareDialog");
|
||||||
|
Modal.createDialog(KeyShareDialog, {
|
||||||
|
matrixClient: this._matrixClient,
|
||||||
|
userId: userId,
|
||||||
|
deviceId: deviceId,
|
||||||
|
onFinished: finished,
|
||||||
|
});
|
||||||
|
this._currentUser = userId;
|
||||||
|
this._currentDevice = deviceId;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -41,6 +41,7 @@ import PageTypes from '../../PageTypes';
|
||||||
|
|
||||||
import createRoom from "../../createRoom";
|
import createRoom from "../../createRoom";
|
||||||
import * as UDEHandler from '../../UnknownDeviceErrorHandler';
|
import * as UDEHandler from '../../UnknownDeviceErrorHandler';
|
||||||
|
import KeyRequestHandler from '../../KeyRequestHandler';
|
||||||
import { _t, getCurrentLanguage } from '../../languageHandler';
|
import { _t, getCurrentLanguage } from '../../languageHandler';
|
||||||
|
|
||||||
/** constants for MatrixChat.state.view */
|
/** constants for MatrixChat.state.view */
|
||||||
|
@ -133,11 +134,6 @@ module.exports = React.createClass({
|
||||||
// a thing to call showScreen with once login completes.
|
// a thing to call showScreen with once login completes.
|
||||||
screenAfterLogin: this.props.initialScreenAfterLogin,
|
screenAfterLogin: this.props.initialScreenAfterLogin,
|
||||||
|
|
||||||
// Stashed guest credentials if the user logs out
|
|
||||||
// whilst logged in as a guest user (so they can change
|
|
||||||
// their mind & log back in)
|
|
||||||
guestCreds: null,
|
|
||||||
|
|
||||||
// What the LoggedInView would be showing if visible
|
// What the LoggedInView would be showing if visible
|
||||||
page_type: null,
|
page_type: null,
|
||||||
|
|
||||||
|
@ -385,13 +381,6 @@ module.exports = React.createClass({
|
||||||
this._startRegistration(payload.params || {});
|
this._startRegistration(payload.params || {});
|
||||||
break;
|
break;
|
||||||
case 'start_login':
|
case 'start_login':
|
||||||
if (MatrixClientPeg.get() &&
|
|
||||||
MatrixClientPeg.get().isGuest()
|
|
||||||
) {
|
|
||||||
this.setState({
|
|
||||||
guestCreds: MatrixClientPeg.getCredentials(),
|
|
||||||
});
|
|
||||||
}
|
|
||||||
this.setStateForNewView({
|
this.setStateForNewView({
|
||||||
view: VIEWS.LOGIN,
|
view: VIEWS.LOGIN,
|
||||||
});
|
});
|
||||||
|
@ -545,12 +534,10 @@ module.exports = React.createClass({
|
||||||
break;
|
break;
|
||||||
case 'on_logging_in':
|
case 'on_logging_in':
|
||||||
// We are now logging in, so set the state to reflect that
|
// We are now logging in, so set the state to reflect that
|
||||||
// and also that we're not ready (we'll be marked as logged
|
// NB. This does not touch 'ready' since if our dispatches
|
||||||
// in once the login completes, then ready once the sync
|
// are delayed, the sync could already have completed
|
||||||
// completes).
|
|
||||||
this.setStateForNewView({
|
this.setStateForNewView({
|
||||||
view: VIEWS.LOGGING_IN,
|
view: VIEWS.LOGGING_IN,
|
||||||
ready: false,
|
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
case 'on_logged_in':
|
case 'on_logged_in':
|
||||||
|
@ -947,7 +934,6 @@ module.exports = React.createClass({
|
||||||
_onLoggedIn: function(teamToken) {
|
_onLoggedIn: function(teamToken) {
|
||||||
this.setState({
|
this.setState({
|
||||||
view: VIEWS.LOGGED_IN,
|
view: VIEWS.LOGGED_IN,
|
||||||
guestCreds: null,
|
|
||||||
});
|
});
|
||||||
|
|
||||||
if (teamToken) {
|
if (teamToken) {
|
||||||
|
@ -1025,6 +1011,10 @@ module.exports = React.createClass({
|
||||||
*/
|
*/
|
||||||
_onWillStartClient() {
|
_onWillStartClient() {
|
||||||
const self = this;
|
const self = this;
|
||||||
|
// if the client is about to start, we are, by definition, not ready.
|
||||||
|
// Set ready to false now, then it'll be set to true when the sync
|
||||||
|
// listener we set below fires.
|
||||||
|
this.setState({ready: false});
|
||||||
const cli = MatrixClientPeg.get();
|
const cli = MatrixClientPeg.get();
|
||||||
|
|
||||||
// Allow the JS SDK to reap timeline events. This reduces the amount of
|
// Allow the JS SDK to reap timeline events. This reduces the amount of
|
||||||
|
@ -1095,6 +1085,14 @@ module.exports = React.createClass({
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const krh = new KeyRequestHandler(cli);
|
||||||
|
cli.on("crypto.roomKeyRequest", (req) => {
|
||||||
|
krh.handleKeyRequest(req);
|
||||||
|
});
|
||||||
|
cli.on("crypto.roomKeyRequestCancellation", (req) => {
|
||||||
|
krh.handleKeyRequestCancellation(req);
|
||||||
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
showScreen: function(screen, params) {
|
showScreen: function(screen, params) {
|
||||||
|
@ -1270,14 +1268,9 @@ module.exports = React.createClass({
|
||||||
this.showScreen("forgot_password");
|
this.showScreen("forgot_password");
|
||||||
},
|
},
|
||||||
|
|
||||||
onReturnToGuestClick: function() {
|
onReturnToAppClick: function() {
|
||||||
// reanimate our guest login
|
// treat it the same as if the user had completed the login
|
||||||
if (this.state.guestCreds) {
|
this._onLoggedIn(null);
|
||||||
// TODO: this is probably a bit broken - we don't want to be
|
|
||||||
// clearing storage when we reanimate the guest creds.
|
|
||||||
Lifecycle.setLoggedIn(this.state.guestCreds);
|
|
||||||
this.setState({guestCreds: null});
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
// returns a promise which resolves to the new MatrixClient
|
// returns a promise which resolves to the new MatrixClient
|
||||||
|
@ -1457,7 +1450,7 @@ module.exports = React.createClass({
|
||||||
onLoggedIn={this.onRegistered}
|
onLoggedIn={this.onRegistered}
|
||||||
onLoginClick={this.onLoginClick}
|
onLoginClick={this.onLoginClick}
|
||||||
onRegisterClick={this.onRegisterClick}
|
onRegisterClick={this.onRegisterClick}
|
||||||
onCancelClick={this.state.guestCreds ? this.onReturnToGuestClick : null}
|
onCancelClick={MatrixClientPeg.get() ? this.onReturnToAppClick : null}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -1491,7 +1484,7 @@ module.exports = React.createClass({
|
||||||
defaultDeviceDisplayName={this.props.defaultDeviceDisplayName}
|
defaultDeviceDisplayName={this.props.defaultDeviceDisplayName}
|
||||||
onForgotPasswordClick={this.onForgotPasswordClick}
|
onForgotPasswordClick={this.onForgotPasswordClick}
|
||||||
enableGuest={this.props.enableGuest}
|
enableGuest={this.props.enableGuest}
|
||||||
onCancelClick={this.state.guestCreds ? this.onReturnToGuestClick : null}
|
onCancelClick={MatrixClientPeg.get() ? this.onReturnToAppClick : null}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -160,10 +160,6 @@ module.exports = React.createClass({
|
||||||
this.checkFillState();
|
this.checkFillState();
|
||||||
},
|
},
|
||||||
|
|
||||||
componentWillUpdate: function(nextProps, nextState) {
|
|
||||||
this._saveScrollState();
|
|
||||||
},
|
|
||||||
|
|
||||||
componentDidUpdate: function() {
|
componentDidUpdate: function() {
|
||||||
// after adding event tiles, we may need to tweak the scroll (either to
|
// after adding event tiles, we may need to tweak the scroll (either to
|
||||||
// keep at the bottom of the timeline, or to maintain the view after
|
// keep at the bottom of the timeline, or to maintain the view after
|
||||||
|
|
172
src/components/views/dialogs/KeyShareDialog.js
Normal file
172
src/components/views/dialogs/KeyShareDialog.js
Normal file
|
@ -0,0 +1,172 @@
|
||||||
|
/*
|
||||||
|
Copyright 2017 Vector Creations Ltd
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import Modal from '../../../Modal';
|
||||||
|
import React from 'react';
|
||||||
|
import sdk from '../../../index';
|
||||||
|
|
||||||
|
import { _t } from '../../../languageHandler';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dialog which asks the user whether they want to share their keys with
|
||||||
|
* an unverified device.
|
||||||
|
*
|
||||||
|
* onFinished is called with `true` if the key should be shared, `false` if it
|
||||||
|
* should not, and `undefined` if the dialog is cancelled. (In other words:
|
||||||
|
* truthy: do the key share. falsy: don't share the keys).
|
||||||
|
*/
|
||||||
|
export default React.createClass({
|
||||||
|
propTypes: {
|
||||||
|
matrixClient: React.PropTypes.object.isRequired,
|
||||||
|
userId: React.PropTypes.string.isRequired,
|
||||||
|
deviceId: React.PropTypes.string.isRequired,
|
||||||
|
onFinished: React.PropTypes.func.isRequired,
|
||||||
|
},
|
||||||
|
|
||||||
|
getInitialState: function() {
|
||||||
|
return {
|
||||||
|
deviceInfo: null,
|
||||||
|
wasNewDevice: false,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
componentDidMount: function() {
|
||||||
|
this._unmounted = false;
|
||||||
|
const userId = this.props.userId;
|
||||||
|
const deviceId = this.props.deviceId;
|
||||||
|
|
||||||
|
// give the client a chance to refresh the device list
|
||||||
|
this.props.matrixClient.downloadKeys([userId], false).then((r) => {
|
||||||
|
if (this._unmounted) { return; }
|
||||||
|
|
||||||
|
const deviceInfo = r[userId][deviceId];
|
||||||
|
|
||||||
|
if(!deviceInfo) {
|
||||||
|
console.warn(`No details found for device ${userId}:${deviceId}`);
|
||||||
|
|
||||||
|
this.props.onFinished(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const wasNewDevice = !deviceInfo.isKnown();
|
||||||
|
|
||||||
|
this.setState({
|
||||||
|
deviceInfo: deviceInfo,
|
||||||
|
wasNewDevice: wasNewDevice,
|
||||||
|
});
|
||||||
|
|
||||||
|
// if the device was new before, it's not any more.
|
||||||
|
if (wasNewDevice) {
|
||||||
|
this.props.matrixClient.setDeviceKnown(
|
||||||
|
userId,
|
||||||
|
deviceId,
|
||||||
|
true,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}).done();
|
||||||
|
},
|
||||||
|
|
||||||
|
componentWillUnmount: function() {
|
||||||
|
this._unmounted = true;
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
_onVerifyClicked: function() {
|
||||||
|
const DeviceVerifyDialog = sdk.getComponent('views.dialogs.DeviceVerifyDialog');
|
||||||
|
|
||||||
|
console.log("KeyShareDialog: Starting verify dialog");
|
||||||
|
Modal.createDialog(DeviceVerifyDialog, {
|
||||||
|
userId: this.props.userId,
|
||||||
|
device: this.state.deviceInfo,
|
||||||
|
onFinished: (verified) => {
|
||||||
|
if (verified) {
|
||||||
|
// can automatically share the keys now.
|
||||||
|
this.props.onFinished(true);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
_onShareClicked: function() {
|
||||||
|
console.log("KeyShareDialog: User clicked 'share'");
|
||||||
|
this.props.onFinished(true);
|
||||||
|
},
|
||||||
|
|
||||||
|
_onIgnoreClicked: function() {
|
||||||
|
console.log("KeyShareDialog: User clicked 'ignore'");
|
||||||
|
this.props.onFinished(false);
|
||||||
|
},
|
||||||
|
|
||||||
|
_renderContent: function() {
|
||||||
|
const displayName = this.state.deviceInfo.getDisplayName() ||
|
||||||
|
this.state.deviceInfo.deviceId;
|
||||||
|
|
||||||
|
let text;
|
||||||
|
if (this.state.wasNewDevice) {
|
||||||
|
text = "You added a new device '%(displayName)s', which is"
|
||||||
|
+ " requesting encryption keys.";
|
||||||
|
} else {
|
||||||
|
text = "Your unverified device '%(displayName)s' is requesting"
|
||||||
|
+ " encryption keys.";
|
||||||
|
}
|
||||||
|
text = _t(text, {displayName: displayName});
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<p>{text}</p>
|
||||||
|
|
||||||
|
<div className="mx_Dialog_buttons">
|
||||||
|
<button onClick={this._onVerifyClicked}>
|
||||||
|
{_t('Start verification')}
|
||||||
|
</button>
|
||||||
|
<button onClick={this._onShareClicked}>
|
||||||
|
{_t('Share without verifying')}
|
||||||
|
</button>
|
||||||
|
<button onClick={this._onIgnoreClicked}>
|
||||||
|
{_t('Ignore request')}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
|
render: function() {
|
||||||
|
const BaseDialog = sdk.getComponent('views.dialogs.BaseDialog');
|
||||||
|
const Spinner = sdk.getComponent('views.elements.Spinner');
|
||||||
|
|
||||||
|
let content;
|
||||||
|
|
||||||
|
if (this.state.deviceInfo) {
|
||||||
|
content = this._renderContent();
|
||||||
|
} else {
|
||||||
|
content = (
|
||||||
|
<div>
|
||||||
|
<p>{_t('Loading device info...')}</p>
|
||||||
|
<Spinner />
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<BaseDialog className='mx_KeyShareRequestDialog'
|
||||||
|
onFinished={this.props.onFinished}
|
||||||
|
title={_t('Encryption key request')}
|
||||||
|
>
|
||||||
|
{content}
|
||||||
|
</BaseDialog>
|
||||||
|
);
|
||||||
|
},
|
||||||
|
});
|
|
@ -18,7 +18,7 @@ limitations under the License.
|
||||||
'use strict';
|
'use strict';
|
||||||
var React = require("react");
|
var React = require("react");
|
||||||
var ReactDOM = require("react-dom");
|
var ReactDOM = require("react-dom");
|
||||||
import { _t } from '../../../languageHandler';
|
import { _t, _tJsx } from '../../../languageHandler';
|
||||||
var GeminiScrollbar = require('react-gemini-scrollbar');
|
var GeminiScrollbar = require('react-gemini-scrollbar');
|
||||||
var MatrixClientPeg = require("../../../MatrixClientPeg");
|
var MatrixClientPeg = require("../../../MatrixClientPeg");
|
||||||
var CallHandler = require('../../../CallHandler');
|
var CallHandler = require('../../../CallHandler');
|
||||||
|
@ -33,11 +33,28 @@ var Receipt = require('../../../utils/Receipt');
|
||||||
|
|
||||||
const HIDE_CONFERENCE_CHANS = true;
|
const HIDE_CONFERENCE_CHANS = true;
|
||||||
|
|
||||||
const VERBS = {
|
function phraseForSection(section) {
|
||||||
'm.favourite': 'favourite',
|
// These would probably be better as individual strings,
|
||||||
'im.vector.fake.direct': 'tag direct chat',
|
// but for some reason we have translations for these strings
|
||||||
'im.vector.fake.recent': 'restore',
|
// as-is, so keeping it like this for now.
|
||||||
'm.lowpriority': 'demote',
|
let verb;
|
||||||
|
switch (section) {
|
||||||
|
case 'm.favourite':
|
||||||
|
verb = _t('to favourite');
|
||||||
|
break;
|
||||||
|
case 'im.vector.fake.direct':
|
||||||
|
verb = _t('to tag direct chat');
|
||||||
|
break;
|
||||||
|
case 'im.vector.fake.recent':
|
||||||
|
verb = _t('to restore');
|
||||||
|
break;
|
||||||
|
case 'm.lowpriority':
|
||||||
|
verb = _t('to demote');
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return _t('Drop here to tag %(section)s', {section: section});
|
||||||
|
}
|
||||||
|
return _t('Drop here %(toAction)s', {toAction: verb});
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = React.createClass({
|
module.exports = React.createClass({
|
||||||
|
@ -478,17 +495,25 @@ module.exports = React.createClass({
|
||||||
switch (section) {
|
switch (section) {
|
||||||
case 'im.vector.fake.direct':
|
case 'im.vector.fake.direct':
|
||||||
return <div className="mx_RoomList_emptySubListTip">
|
return <div className="mx_RoomList_emptySubListTip">
|
||||||
Press
|
{_tJsx(
|
||||||
<StartChatButton size="16" callout={true}/>
|
"Press <StartChatButton> to start a chat with someone",
|
||||||
to start a chat with someone
|
[/<StartChatButton>/],
|
||||||
|
[
|
||||||
|
(sub) => <StartChatButton size="16" callout={true}/>
|
||||||
|
]
|
||||||
|
)}
|
||||||
</div>;
|
</div>;
|
||||||
case 'im.vector.fake.recent':
|
case 'im.vector.fake.recent':
|
||||||
return <div className="mx_RoomList_emptySubListTip">
|
return <div className="mx_RoomList_emptySubListTip">
|
||||||
You're not in any rooms yet! Press
|
{_tJsx(
|
||||||
<CreateRoomButton size="16" callout={true}/>
|
"You're not in any rooms yet! Press <CreateRoomButton> to make a room or"+
|
||||||
to make a room or
|
" <RoomDirectoryButton> to browse the directory",
|
||||||
<RoomDirectoryButton size="16" callout={true}/>
|
[/<CreateRoomButton>/, /<RoomDirectoryButton>/],
|
||||||
to browse the directory
|
[
|
||||||
|
(sub) => <CreateRoomButton size="16" callout={true}/>,
|
||||||
|
(sub) => <RoomDirectoryButton size="16" callout={true}/>
|
||||||
|
]
|
||||||
|
)}
|
||||||
</div>;
|
</div>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -497,7 +522,7 @@ module.exports = React.createClass({
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
const labelText = 'Drop here to ' + (VERBS[section] || 'tag ' + section);
|
const labelText = phraseForSection(section);
|
||||||
|
|
||||||
return <RoomDropTarget label={labelText} />;
|
return <RoomDropTarget label={labelText} />;
|
||||||
},
|
},
|
||||||
|
|
|
@ -76,14 +76,11 @@ function createRoom(opts) {
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
let modal;
|
const modal = Modal.createDialog(Loader, null, 'mx_Dialog_spinner');
|
||||||
setTimeout(()=>{
|
|
||||||
modal = Modal.createDialog(Loader, null, 'mx_Dialog_spinner');
|
|
||||||
}, 0);
|
|
||||||
|
|
||||||
let roomId;
|
let roomId;
|
||||||
return client.createRoom(createOpts).finally(function() {
|
return client.createRoom(createOpts).finally(function() {
|
||||||
if (modal) modal.close();
|
modal.close();
|
||||||
}).then(function(res) {
|
}).then(function(res) {
|
||||||
roomId = res.room_id;
|
roomId = res.room_id;
|
||||||
if (opts.dmUserId) {
|
if (opts.dmUserId) {
|
||||||
|
|
|
@ -105,7 +105,7 @@
|
||||||
"Can't load user settings": "Benutzereinstellungen können nicht geladen werden",
|
"Can't load user settings": "Benutzereinstellungen können nicht geladen werden",
|
||||||
"changed name": "änderte Namen",
|
"changed name": "änderte Namen",
|
||||||
"changed the power level of": "änderte Berechtigungslevel von",
|
"changed the power level of": "änderte Berechtigungslevel von",
|
||||||
"Clear Cache": "Leere Cache",
|
"Clear Cache": "Cache leeren",
|
||||||
"Click here to fix": "Zum reparieren hier klicken",
|
"Click here to fix": "Zum reparieren hier klicken",
|
||||||
"*️⃣ Commands": "*️⃣ Befehle",
|
"*️⃣ Commands": "*️⃣ Befehle",
|
||||||
"Default": "Standard",
|
"Default": "Standard",
|
||||||
|
@ -207,7 +207,7 @@
|
||||||
"since they joined": "ab dem Zeitpunkt, an dem sie beigetreten sind",
|
"since they joined": "ab dem Zeitpunkt, an dem sie beigetreten sind",
|
||||||
"since they were invited": "ab dem Zeitpunkt, an dem sie eingeladen wurden",
|
"since they were invited": "ab dem Zeitpunkt, an dem sie eingeladen wurden",
|
||||||
"Someone": "Jemand",
|
"Someone": "Jemand",
|
||||||
"Start a chat": "Starte einen Chat",
|
"Start a chat": "Chat starten",
|
||||||
"Start Chat": "Chat beginnen",
|
"Start Chat": "Chat beginnen",
|
||||||
"Success": "Erfolg",
|
"Success": "Erfolg",
|
||||||
"tag direct chat": "Zum kennzeichnen als direkten Chat",
|
"tag direct chat": "Zum kennzeichnen als direkten Chat",
|
||||||
|
@ -425,7 +425,7 @@
|
||||||
"to start a chat with someone": "um einen Chat mit jemandem zu starten",
|
"to start a chat with someone": "um einen Chat mit jemandem zu starten",
|
||||||
"to tag direct chat": "als Direkt-Chat markieren",
|
"to tag direct chat": "als Direkt-Chat markieren",
|
||||||
"You're not in any rooms yet! Press": "Du bist noch keinem Raum beigetreten! Drücke",
|
"You're not in any rooms yet! Press": "Du bist noch keinem Raum beigetreten! Drücke",
|
||||||
"click to reveal": "Klicke zum anzeigen",
|
"click to reveal": "anzeigen",
|
||||||
"To remove other users' messages": "Um Nachrichten anderer Nutzer zu verbergen",
|
"To remove other users' messages": "Um Nachrichten anderer Nutzer zu verbergen",
|
||||||
"You are trying to access %(roomName)s.": "Du versuchst, auf den Raum \"%(roomName)s\" zuzugreifen.",
|
"You are trying to access %(roomName)s.": "Du versuchst, auf den Raum \"%(roomName)s\" zuzugreifen.",
|
||||||
"af": "Afrikaans",
|
"af": "Afrikaans",
|
||||||
|
@ -671,7 +671,7 @@
|
||||||
"%(oneUser)srejected their invitation %(repeats)s times": "%(oneUser)shat die Einladung %(repeats)s mal abgelehnt",
|
"%(oneUser)srejected their invitation %(repeats)s times": "%(oneUser)shat die Einladung %(repeats)s mal abgelehnt",
|
||||||
"%(severalUsers)srejected their invitations": "%(severalUsers)shaben ihre Einladung abgelehnt",
|
"%(severalUsers)srejected their invitations": "%(severalUsers)shaben ihre Einladung abgelehnt",
|
||||||
"%(oneUser)srejected their invitation": "%(oneUser)shat die Einladung abgelehnt",
|
"%(oneUser)srejected their invitation": "%(oneUser)shat die Einladung abgelehnt",
|
||||||
"%(severalUsers)shad their invitations withdrawn %(repeats)s times": "%(severalUsers)szogen ihre Einladungen %(repeats)s mal zurück",
|
"%(severalUsers)shad their invitations withdrawn %(repeats)s times": "%(severalUsers)swurden die ursprünglichen Einladungen %(repeats)s mal wieder entzogen",
|
||||||
"%(oneUser)shad their invitation withdrawn %(repeats)s times": "%(oneUser)swurde die Einladung %(repeats)s mal wieder entzogen",
|
"%(oneUser)shad their invitation withdrawn %(repeats)s times": "%(oneUser)swurde die Einladung %(repeats)s mal wieder entzogen",
|
||||||
"%(severalUsers)shad their invitations withdrawn": "%(severalUsers)szogen ihre Einladungen zurück",
|
"%(severalUsers)shad their invitations withdrawn": "%(severalUsers)szogen ihre Einladungen zurück",
|
||||||
"%(oneUser)shad their invitation withdrawn": "%(oneUser)swurde die ursprüngliche Einladung wieder entzogen",
|
"%(oneUser)shad their invitation withdrawn": "%(oneUser)swurde die ursprüngliche Einladung wieder entzogen",
|
||||||
|
@ -710,7 +710,7 @@
|
||||||
"New passwords don't match": "Die neuen Passwörter stimmen nicht überein",
|
"New passwords don't match": "Die neuen Passwörter stimmen nicht überein",
|
||||||
"olm version:": "Version von olm:",
|
"olm version:": "Version von olm:",
|
||||||
"Passwords can't be empty": "Passwortfelder dürfen nicht leer sein",
|
"Passwords can't be empty": "Passwortfelder dürfen nicht leer sein",
|
||||||
"Report it": "Melde ihn",
|
"Report it": "Melden",
|
||||||
"riot-web version:": "Version von riot-web:",
|
"riot-web version:": "Version von riot-web:",
|
||||||
"Scroll to bottom of page": "Zum Ende der Seite springen",
|
"Scroll to bottom of page": "Zum Ende der Seite springen",
|
||||||
"Show timestamps in 12 hour format (e.g. 2:30pm)": "Zeitstempel im 12-Stunden-Format anzeigen (z. B. 2:30pm)",
|
"Show timestamps in 12 hour format (e.g. 2:30pm)": "Zeitstempel im 12-Stunden-Format anzeigen (z. B. 2:30pm)",
|
||||||
|
@ -815,14 +815,14 @@
|
||||||
"Ongoing conference call%(supportedText)s.": "Laufendes Konferenzgespräch%(supportedText)s.",
|
"Ongoing conference call%(supportedText)s.": "Laufendes Konferenzgespräch%(supportedText)s.",
|
||||||
"You are about to be taken to a third-party site so you can authenticate your account for use with %(integrationsUrl)s. Do you wish to continue?": "Du wirst jetzt auf die Website eines Drittanbieters weitergeleitet, damit du dein Konto für die Verwendung von %(integrationsUrl)s authentifizieren kannst. Möchtest du fortfahren?",
|
"You are about to be taken to a third-party site so you can authenticate your account for use with %(integrationsUrl)s. Do you wish to continue?": "Du wirst jetzt auf die Website eines Drittanbieters weitergeleitet, damit du dein Konto für die Verwendung von %(integrationsUrl)s authentifizieren kannst. Möchtest du fortfahren?",
|
||||||
"Disable URL previews for this room (affects only you)": "URL-Vorschau für diesen Raum deaktivieren (betrifft nur dich)",
|
"Disable URL previews for this room (affects only you)": "URL-Vorschau für diesen Raum deaktivieren (betrifft nur dich)",
|
||||||
"Start automatically after system login": "Starte automatisch nach System-Login",
|
"Start automatically after system login": "Nach System-Login automatisch starten",
|
||||||
"Desktop specific": "Desktopspezifisch",
|
"Desktop specific": "Desktopspezifisch",
|
||||||
"Jump to first unread message.": "Zur ersten ungelesenen Nachricht springen.",
|
"Jump to first unread message.": "Zur ersten ungelesenen Nachricht springen.",
|
||||||
"Options": "Optionen",
|
"Options": "Optionen",
|
||||||
"disabled": "deaktiviert",
|
"disabled": "deaktiviert",
|
||||||
"enabled": "aktiviert",
|
"enabled": "aktiviert",
|
||||||
"Invited": "Eingeladen",
|
"Invited": "Eingeladen",
|
||||||
"Set a Display Name": "Setze einen Anzeigenamen",
|
"Set a Display Name": "Anzeigenamen festlegen",
|
||||||
"for %(amount)ss": "für %(amount)ss",
|
"for %(amount)ss": "für %(amount)ss",
|
||||||
"for %(amount)sm": "seit %(amount)smin",
|
"for %(amount)sm": "seit %(amount)smin",
|
||||||
"for %(amount)sh": "für %(amount)sh",
|
"for %(amount)sh": "für %(amount)sh",
|
||||||
|
@ -974,5 +974,7 @@
|
||||||
"Authentication check failed: incorrect password?": "Authentifizierung fehlgeschlagen: Falsches Passwort?",
|
"Authentication check failed: incorrect password?": "Authentifizierung fehlgeschlagen: Falsches Passwort?",
|
||||||
"Disable Peer-to-Peer for 1:1 calls": "Peer-to-Peer-Verbindung für 1-zu-1-Anrufe deaktivieren",
|
"Disable Peer-to-Peer for 1:1 calls": "Peer-to-Peer-Verbindung für 1-zu-1-Anrufe deaktivieren",
|
||||||
"Do you want to set an email address?": "Möchtest du eine E-Mail-Adresse setzen?",
|
"Do you want to set an email address?": "Möchtest du eine E-Mail-Adresse setzen?",
|
||||||
"This will allow you to reset your password and receive notifications.": "Dies erlaubt dir dein Passwort zurückzusetzen und Benachrichtigungen zu empfangen."
|
"This will allow you to reset your password and receive notifications.": "Dies erlaubt dir dein Passwort zurückzusetzen und Benachrichtigungen zu empfangen.",
|
||||||
|
"Press <StartChatButton> to start a chat with someone": "Klicke auf <StartChatButton> um einen Chat mit jemanden zu starten",
|
||||||
|
"You're not in any rooms yet! Press <CreateRoomButton> to make a room or <RoomDirectoryButton> to browse the directory": "Du bist bisher in keinem Raum! Klicke auf <CreateRoomButton> um einen Raum zu erstellen oder <RoomDirectoryButton> um das Verzeichnis zu durchsuchen"
|
||||||
}
|
}
|
||||||
|
|
|
@ -914,5 +914,7 @@
|
||||||
"were unbanned %(repeats)s times": "ξεμπλοκαρίστηκαν %(repeats)s φορές",
|
"were unbanned %(repeats)s times": "ξεμπλοκαρίστηκαν %(repeats)s φορές",
|
||||||
"was unbanned %(repeats)s times": "ξεμπλοκαρίστηκε %(repeats)s φορές",
|
"was unbanned %(repeats)s times": "ξεμπλοκαρίστηκε %(repeats)s φορές",
|
||||||
"were unbanned": "ξεμπλοκαρίστηκαν",
|
"were unbanned": "ξεμπλοκαρίστηκαν",
|
||||||
"was unbanned": "ξεμπλοκαρίστηκε"
|
"was unbanned": "ξεμπλοκαρίστηκε",
|
||||||
|
"Press <StartChatButton> to start a chat with someone": "Πατήστε <StartChatButton> για να ξεκινήσετε μια συνομιλία",
|
||||||
|
"You're not in any rooms yet! Press <CreateRoomButton> to make a room or <RoomDirectoryButton> to browse the directory": "Δεν είστε σε κανένα δωμάτιο! Πατήστε <CreateRoomButton> για να δημιουργήσετε ένα δωμάτιο ή <RoomDirectoryButton> για να δείτε το ευρετήριο"
|
||||||
}
|
}
|
||||||
|
|
|
@ -440,6 +440,7 @@
|
||||||
"Please Register": "Please Register",
|
"Please Register": "Please Register",
|
||||||
"Power level must be positive integer.": "Power level must be positive integer.",
|
"Power level must be positive integer.": "Power level must be positive integer.",
|
||||||
"Press": "Press",
|
"Press": "Press",
|
||||||
|
"Press <StartChatButton> to start a chat with someone": "Press <StartChatButton> to start a chat with someone",
|
||||||
"Privacy warning": "Privacy warning",
|
"Privacy warning": "Privacy warning",
|
||||||
"Private Chat": "Private Chat",
|
"Private Chat": "Private Chat",
|
||||||
"Privileged Users": "Privileged Users",
|
"Privileged Users": "Privileged Users",
|
||||||
|
@ -648,7 +649,7 @@
|
||||||
"Would you like to <acceptText>accept</acceptText> or <declineText>decline</declineText> this invitation?": "Would you like to <acceptText>accept</acceptText> or <declineText>decline</declineText> this invitation?",
|
"Would you like to <acceptText>accept</acceptText> or <declineText>decline</declineText> this invitation?": "Would you like to <acceptText>accept</acceptText> or <declineText>decline</declineText> this invitation?",
|
||||||
"You already have existing direct chats with this user:": "You already have existing direct chats with this user:",
|
"You already have existing direct chats with this user:": "You already have existing direct chats with this user:",
|
||||||
"You are already in a call.": "You are already in a call.",
|
"You are already in a call.": "You are already in a call.",
|
||||||
"You're not in any rooms yet! Press": "You're not in any rooms yet! Press",
|
"You're not in any rooms yet! Press <CreateRoomButton> to make a room or <RoomDirectoryButton> to browse the directory": "You're not in any rooms yet! Press <CreateRoomButton> to make a room or <RoomDirectoryButton> to browse the directory",
|
||||||
"You are trying to access %(roomName)s.": "You are trying to access %(roomName)s.",
|
"You are trying to access %(roomName)s.": "You are trying to access %(roomName)s.",
|
||||||
"You cannot place a call with yourself.": "You cannot place a call with yourself.",
|
"You cannot place a call with yourself.": "You cannot place a call with yourself.",
|
||||||
"You cannot place VoIP calls in this browser.": "You cannot place VoIP calls in this browser.",
|
"You cannot place VoIP calls in this browser.": "You cannot place VoIP calls in this browser.",
|
||||||
|
@ -911,5 +912,11 @@
|
||||||
"Disable Peer-to-Peer for 1:1 calls": "Disable Peer-to-Peer for 1:1 calls",
|
"Disable Peer-to-Peer for 1:1 calls": "Disable Peer-to-Peer for 1:1 calls",
|
||||||
"Do you want to set an email address?": "Do you want to set an email address?",
|
"Do you want to set an email address?": "Do you want to set an email address?",
|
||||||
"This will allow you to reset your password and receive notifications.": "This will allow you to reset your password and receive notifications.",
|
"This will allow you to reset your password and receive notifications.": "This will allow you to reset your password and receive notifications.",
|
||||||
"Skip":"Skip"
|
"Skip":"Skip",
|
||||||
|
"Start verification": "Start verification",
|
||||||
|
"Share without verifying": "Share without verifying",
|
||||||
|
"Ignore request": "Ignore request",
|
||||||
|
"You added a new device '%(displayName)s', which is requesting encryption keys.": "You added a new device '%(displayName)s', which is requesting encryption keys.",
|
||||||
|
"Your unverified device '%(displayName)s' is requesting encryption keys.": "Your unverified device '%(displayName)s' is requesting encryption keys.",
|
||||||
|
"Encryption key request": "Encryption key request"
|
||||||
}
|
}
|
||||||
|
|
|
@ -557,7 +557,7 @@
|
||||||
"You're not in any rooms yet! Press": "Vous n’êtes dans aucun salon ! Cliquez",
|
"You're not in any rooms yet! Press": "Vous n’êtes dans aucun salon ! Cliquez",
|
||||||
"You are trying to access %(roomName)s.": "Vous essayez d'accéder à %(roomName)s.",
|
"You are trying to access %(roomName)s.": "Vous essayez d'accéder à %(roomName)s.",
|
||||||
"You cannot place a call with yourself.": "Vous ne pouvez pas passer d'appel avec vous-même.",
|
"You cannot place a call with yourself.": "Vous ne pouvez pas passer d'appel avec vous-même.",
|
||||||
"You cannot place VoIP calls in this browser.": "Vous ne pouvez pas passer d'appel voix dans cet explorateur.",
|
"You cannot place VoIP calls in this browser.": "Vous ne pouvez pas passer d'appel vocal dans ce navigateur.",
|
||||||
"You do not have permission to post to this room": "Vous n’avez pas la permission de poster dans ce salon",
|
"You do not have permission to post to this room": "Vous n’avez pas la permission de poster dans ce salon",
|
||||||
"You have been invited to join this room by %(inviterName)s": "Vous avez été invité à joindre ce salon par %(inviterName)s",
|
"You have been invited to join this room by %(inviterName)s": "Vous avez été invité à joindre ce salon par %(inviterName)s",
|
||||||
"You have been logged out of all devices and will no longer receive push notifications. To re-enable notifications, sign in again on each device": "Vous avez été déconnecté de tous vos appareils et ne recevrez plus de notifications. Pour réactiver les notifications, identifiez vous à nouveau sur tous les appareils",
|
"You have been logged out of all devices and will no longer receive push notifications. To re-enable notifications, sign in again on each device": "Vous avez été déconnecté de tous vos appareils et ne recevrez plus de notifications. Pour réactiver les notifications, identifiez vous à nouveau sur tous les appareils",
|
||||||
|
@ -922,5 +922,7 @@
|
||||||
"Authentication check failed: incorrect password?": "Erreur d’identification: mot de passe incorrect ?",
|
"Authentication check failed: incorrect password?": "Erreur d’identification: mot de passe incorrect ?",
|
||||||
"Disable Peer-to-Peer for 1:1 calls": "Désactiver les appels 1:1 pair-à-pair",
|
"Disable Peer-to-Peer for 1:1 calls": "Désactiver les appels 1:1 pair-à-pair",
|
||||||
"Do you want to set an email address?": "Souhaitez-vous configurer une adresse e-mail ?",
|
"Do you want to set an email address?": "Souhaitez-vous configurer une adresse e-mail ?",
|
||||||
"This will allow you to reset your password and receive notifications.": "Ceci va vous permettre de réinitialiser votre mot de passe et de recevoir des notifications."
|
"This will allow you to reset your password and receive notifications.": "Ceci va vous permettre de réinitialiser votre mot de passe et de recevoir des notifications.",
|
||||||
|
"Press <StartChatButton> to start a chat with someone": "Cliquez sur <StartChatButton> pour entamer une discussion avec quelqu'un",
|
||||||
|
"You're not in any rooms yet! Press <CreateRoomButton> to make a room or <RoomDirectoryButton> to browse the directory": "Vous n'avez pas encore rejoint de salle ! Cliquez sur <CreateRoomButton> pour créer une salle ou sur <RoomDirectoryButton> pour explorer l'annuaire"
|
||||||
}
|
}
|
||||||
|
|
|
@ -508,5 +508,175 @@
|
||||||
"%(senderDisplayName)s sent an image.": "%(senderDisplayName)s képet küldött.",
|
"%(senderDisplayName)s sent an image.": "%(senderDisplayName)s képet küldött.",
|
||||||
"%(senderName)s sent an invitation to %(targetDisplayName)s to join the room.": "%(senderName)s meghívót küldött %(targetDisplayName)s felhasználónak, hogy lépjen be a szobába.",
|
"%(senderName)s sent an invitation to %(targetDisplayName)s to join the room.": "%(senderName)s meghívót küldött %(targetDisplayName)s felhasználónak, hogy lépjen be a szobába.",
|
||||||
"sent a video": "videó küldve",
|
"sent a video": "videó küldve",
|
||||||
"Server error": "Szerver hiba"
|
"Server error": "Szerver hiba",
|
||||||
|
"Server may be unavailable or overloaded": "A szerver elérhetetlen vagy túlterhelt",
|
||||||
|
"Server may be unavailable, overloaded, or search timed out :(": "A szerver elérhetetlen, túlterhelt vagy a keresés túllépte az időkorlátot :(",
|
||||||
|
"Server may be unavailable, overloaded, or the file too big": "A szerver elérhetetlen, túlterhelt vagy a fájl túl nagy",
|
||||||
|
"Server may be unavailable, overloaded, or you hit a bug.": "A szerver elérhetetlen, túlterhelt vagy hibára futott.",
|
||||||
|
"Server unavailable, overloaded, or something else went wrong.": "A szerver elérhetetlen, túlterhelt vagy valami más probléma van.",
|
||||||
|
"Session ID": "Kapcsolat azonosító",
|
||||||
|
"%(senderName)s set a profile picture.": "%(senderName)s profil képet állított be.",
|
||||||
|
"%(senderName)s set their display name to %(displayName)s.": "%(senderName)s a megjelenítési nevét megváltoztatta erre: %(displayName)s.",
|
||||||
|
"Set": "Beállít",
|
||||||
|
"Show panel": "Panel megjelenítése",
|
||||||
|
"Show Text Formatting Toolbar": "Szöveg formázási eszköztár megjelenítése",
|
||||||
|
"Show timestamps in 12 hour format (e.g. 2:30pm)": "Az időbélyegek 12 órás formátumban mutatása (pl.: 2:30pm)",
|
||||||
|
"Signed Out": "Kijelentkezett",
|
||||||
|
"Sign in": "Bejelentkezett",
|
||||||
|
"Sign out": "Kijelentkezés",
|
||||||
|
"since the point in time of selecting this option": "onnantól, hogy ez az opció kiválasztásra került",
|
||||||
|
"since they joined": "onnantól, hogy csatlakozott",
|
||||||
|
"since they were invited": "onnantól, hogy meg lett hívva",
|
||||||
|
"Some of your messages have not been sent.": "Néhány üzeneted nem lett elküldve.",
|
||||||
|
"Someone": "Valaki",
|
||||||
|
"Sorry, this homeserver is using a login which is not recognised ": "Bocs, ez a saját szerver olyan beléptetést használ ami nem ismert ",
|
||||||
|
"Start a chat": "Csevegés indítása",
|
||||||
|
"Start authentication": "Azonosítás indítása",
|
||||||
|
"Start Chat": "Csevegés indítása",
|
||||||
|
"Submit": "Elküld",
|
||||||
|
"Success": "Sikeres",
|
||||||
|
"tag as %(tagName)s": "címke beállítása: %(tagName)s",
|
||||||
|
"tag direct chat": "megjelölés közvetlen csevegésnek",
|
||||||
|
"Tagged as: ": "Címkék: ",
|
||||||
|
"The default role for new room members is": "Az alapértelmezett szerep új tagoknak:",
|
||||||
|
"The main address for this room is": "A szoba elsődleges címe:",
|
||||||
|
"The phone number entered looks invalid": "A megadott telefonszám érvénytelennek tűnik",
|
||||||
|
"The signing key you provided matches the signing key you received from %(userId)s's device %(deviceId)s. Device marked as verified.": "Az általad megadott aláíró kulcs megegyezik %(userId)s felhasználótól kapott kulccsal amit %(deviceId)s eszközhöz használ. Az eszköz ellenőrzöttnek jelölve.",
|
||||||
|
"This action cannot be performed by a guest user. Please register to be able to do this.": "Ezt nem teheti vendég felhasználó. Kérlek regisztrálj, hogy megtehesd.",
|
||||||
|
"This email address is already in use": "Ez az e-mail cím már használatban van",
|
||||||
|
"This email address was not found": "Az e-mail cím nem található",
|
||||||
|
"%(actionVerb)s this person?": "Ezt a felhasználót %(actionVerb)s?",
|
||||||
|
"The email address linked to your account must be entered.": "A fiókodhoz kötött e-mail címet add meg.",
|
||||||
|
"Press <StartChatButton> to start a chat with someone": "Nyomd meg a <StartChatButton> gombot ha szeretnél csevegni valakivel",
|
||||||
|
"Privacy warning": "Magánéleti figyelmeztetés",
|
||||||
|
"The file '%(fileName)s' exceeds this home server's size limit for uploads": "'%(fileName)s' fájl túllépte az egyedi szerverben beállított feltöltési méret határt",
|
||||||
|
"The file '%(fileName)s' failed to upload": "'%(fileName)s' fájl feltöltése sikertelen",
|
||||||
|
"The remote side failed to pick up": "A hívott fél nem vette fel",
|
||||||
|
"This Home Server does not support login using email address.": "Az egyedi szerver nem támogatja a belépést e-mail címmel.",
|
||||||
|
"This invitation was sent to an email address which is not associated with this account:": "A meghívó olyan e-mail címre lett küldve ami nincs összekötve ezzel a fiókkal:",
|
||||||
|
"There was a problem logging in.": "Hiba történt a bejelentkezésnél.",
|
||||||
|
"This room has no local addresses": "Ennek a szobának nincs helyi címe",
|
||||||
|
"This room is not recognised.": "Ez a szoba nem ismerős.",
|
||||||
|
"These are experimental features that may break in unexpected ways": "Ezek kísérleti funkciók amik kiszámíthatatlanok lehetnek",
|
||||||
|
"The visibility of existing history will be unchanged": "A már meglévő csevegés előzmények láthatósága nem változik",
|
||||||
|
"This doesn't appear to be a valid email address": "Ez nem tűnik helyes e-mail címnek",
|
||||||
|
"This is a preview of this room. Room interactions have been disabled": "Ez a szoba előnézete. Minden tevékenység ezzel a szobával ki van kapcsolva",
|
||||||
|
"This phone number is already in use": "Ez a telefonszám már használatban van",
|
||||||
|
"This room": "Ez a szoba",
|
||||||
|
"This room is not accessible by remote Matrix servers": "Ez a szoba távoli Matrix szerverről nem érhető el",
|
||||||
|
"This room's internal ID is": "A szoba belső azonosítója:",
|
||||||
|
"times": "alkalommal",
|
||||||
|
"To ban users": "Felhasználó kizárásához",
|
||||||
|
"to browse the directory": "a könyvtárban való kereséshez",
|
||||||
|
"To configure the room": "A szoba beállításához",
|
||||||
|
"to favourite": "kedvencekhez",
|
||||||
|
"To invite users into the room": "Felhasználó szobába való meghívásához",
|
||||||
|
"To kick users": "Felhasználó kirúgásához",
|
||||||
|
"To link to a room it must have <a>an address</a>.": "Szobához való kötéshez szükséges <a>egy cím</a>.",
|
||||||
|
"to make a room or": "szoba létrehozásához vagy",
|
||||||
|
"To remove other users' messages": "Más felhasználók üzeneteinek törléséhez",
|
||||||
|
"To reset your password, enter the email address linked to your account": "A jelszó alaphelyzetbe állításához add meg a fiókodhoz kötött e-mail címet",
|
||||||
|
"to restore": "visszaállításhoz",
|
||||||
|
"To send events of type": "Az alábbi típusú üzenetek küldéséhez",
|
||||||
|
"To send messages": "Üzenetek küldéséhez",
|
||||||
|
"to start a chat with someone": "csevegés indításához valakivel",
|
||||||
|
"to tag as %(tagName)s": "megjelölni mint: %(tagName)s",
|
||||||
|
"to tag direct chat": "megjelölni közvetlen csevegésnek",
|
||||||
|
"To use it, just wait for autocomplete results to load and tab through them.": "A használatához csak várd meg az automatikus kiegészítéshez a találatok betöltését és TAB-bal választhatsz közülük.",
|
||||||
|
"Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "Megpróbáltam betölteni a szoba megadott időpontjának megfelelő adatait, de nincs jogod a kérdéses üzenetek megjelenítéséhez.",
|
||||||
|
"Tried to load a specific point in this room's timeline, but was unable to find it.": "Megpróbáltam betölteni a szoba megadott időpontjának megfelelő adatait, de nem találom.",
|
||||||
|
"Turn Markdown off": "Markdown kikapcsolása",
|
||||||
|
"Turn Markdown on": "Markdown bekapcsolása",
|
||||||
|
"%(senderName)s turned on end-to-end encryption (algorithm %(algorithm)s).": "%(senderName)s bekapcsolta a titkosítást végponttól végpontig (algoritmus %(algorithm)s).",
|
||||||
|
"Unable to add email address": "Az e-mail címet nem sikerült hozzáadni",
|
||||||
|
"Unable to remove contact information": "A névjegy információkat nem sikerült törölni",
|
||||||
|
"Unable to restore previous session": "Az előző kapcsolat visszaállítása sikertelen",
|
||||||
|
"Unable to verify email address.": "Az e-mail cím ellenőrzése sikertelen.",
|
||||||
|
"Unban": "Kitiltás visszavonása",
|
||||||
|
"%(senderName)s unbanned %(targetName)s.": "%(senderName)s visszaengedte %(targetName)s felhasználót.",
|
||||||
|
"Unable to capture screen": "A képernyő felvétele sikertelen",
|
||||||
|
"Unable to enable Notifications": "Az értesítések engedélyezése sikertelen",
|
||||||
|
"Unable to load device list": "Az eszközlista betöltése sikertelen",
|
||||||
|
"Undecryptable": "Visszafejthetetlen",
|
||||||
|
"Unencrypted room": "Titkosítatlan szoba",
|
||||||
|
"unencrypted": "titkosítatlan",
|
||||||
|
"Unencrypted message": "Titkosítatlan üzenet",
|
||||||
|
"unknown caller": "ismeretlen hívó",
|
||||||
|
"Unknown command": "Ismeretlen parancs",
|
||||||
|
"unknown device": "ismeretlen eszköz",
|
||||||
|
"Unknown room %(roomId)s": "Ismeretlen szoba %(roomId)s",
|
||||||
|
"Unknown (user, device) pair:": "Ismeretlen (felhasználó, eszköz) pár:",
|
||||||
|
"unknown": "ismeretlen",
|
||||||
|
"Unmute": "Némítás kikapcsolása",
|
||||||
|
"Unnamed Room": "Névtelen szoba",
|
||||||
|
"Unrecognised command:": "Ismeretlen parancs:",
|
||||||
|
"Unrecognised room alias:": "Ismeretlen szoba becenév:",
|
||||||
|
"Unverified": "Nem ellenőrzött",
|
||||||
|
"Uploading %(filename)s and %(count)s others.zero": "%(filename)s feltöltése",
|
||||||
|
"Uploading %(filename)s and %(count)s others.one": "%(filename)s és még %(count)s db másik feltöltése",
|
||||||
|
"Uploading %(filename)s and %(count)s others.other": "%(filename)s és még %(count)s db másik feltöltése",
|
||||||
|
"uploaded a file": "fájl feltöltése",
|
||||||
|
"Upload avatar": "Avatar kép feltöltése",
|
||||||
|
"Upload Failed": "Feltöltés sikertelen",
|
||||||
|
"Upload Files": "Fájlok feltöltése",
|
||||||
|
"Upload file": "Fájl feltöltése",
|
||||||
|
"Upload new:": "Új feltöltése:",
|
||||||
|
"Usage": "Használat",
|
||||||
|
"Use compact timeline layout": "Egyszerű idővonal séma használata",
|
||||||
|
"Use with caution": "Használd körültekintéssel",
|
||||||
|
"User ID": "Felhasználói azonosító",
|
||||||
|
"User Interface": "Felhasználói felület",
|
||||||
|
"%(user)s is a": "%(user)s egy",
|
||||||
|
"User name": "Felhasználói név",
|
||||||
|
"%(userName)s (power %(powerLevelNumber)s)": "%(userName)s (szint: %(powerLevelNumber)s)",
|
||||||
|
"Username invalid: %(errMessage)s": "Felhasználói név érvénytelen: %(errMessage)s",
|
||||||
|
"Users": "Felhasználók",
|
||||||
|
"User": "Felhasználó",
|
||||||
|
"Verification Pending": "Ellenőrzés függőben",
|
||||||
|
"Verification": "Ellenőrzés",
|
||||||
|
"verified": "ellenőrizve",
|
||||||
|
"Verified": "Ellenőrizve",
|
||||||
|
"Verified key": "Ellenőrzött kulcs",
|
||||||
|
"Video call": "Videó hívás",
|
||||||
|
"Voice call": "Hang hívás",
|
||||||
|
"VoIP conference finished.": "VoIP konferencia befejeződött.",
|
||||||
|
"VoIP conference started.": "VoIP konferencia elkezdődött.",
|
||||||
|
"VoIP is unsupported": "VoIP nem támogatott",
|
||||||
|
"(could not connect media)": "(média kapcsolat nem hozható létre)",
|
||||||
|
"(no answer)": "(nincs válasz)",
|
||||||
|
"(unknown failure: %(reason)s)": "(ismeretlen hiba: %(reason)s)",
|
||||||
|
"(warning: cannot be disabled again!)": "(figyelmeztetés: nem lehet újra kikapcsolni!)",
|
||||||
|
"Warning!": "Figyelem!",
|
||||||
|
"WARNING: Device already verified, but keys do NOT MATCH!": "Figyelem: Az eszköz már ellenőrzött, de a kulcsok NEM EGYEZNEK!",
|
||||||
|
"Who can access this room?": "Ki éri el ezt a szobát?",
|
||||||
|
"Who can read history?": "Ki olvashatja a régi üzeneteket?",
|
||||||
|
"Who would you like to add to this room?": "Kit szeretnél hozzáadni ehhez a szobához?",
|
||||||
|
"Who would you like to communicate with?": "Kivel szeretnél beszélgetni?",
|
||||||
|
"%(senderName)s withdrew %(targetName)s's invitation.": "%(senderName)s visszavonta %(targetName)s meghívóját.",
|
||||||
|
"Would you like to <acceptText>accept</acceptText> or <declineText>decline</declineText> this invitation?": "Ezt a meghívót szeretnéd <acceptText>elfogadni</acceptText> vagy <declineText>elutasítani</declineText>?",
|
||||||
|
"You already have existing direct chats with this user:": "Már van közvetlen csevegésed ezzel a felhasználóval:",
|
||||||
|
"You are already in a call.": "Már hívásban vagy.",
|
||||||
|
"You're not in any rooms yet! Press <CreateRoomButton> to make a room or <RoomDirectoryButton> to browse the directory": "Még egyetlen szobába sem léptél be! Szoba létrehozáshoz nyomd meg: <CreateRoomButton> vagy a szobák közötti kereséshez nyomd meg: <RoomDirectoryButton>",
|
||||||
|
"You are trying to access %(roomName)s.": "%(roomName)s szobába próbálsz belépni.",
|
||||||
|
"You cannot place a call with yourself.": "Nem hívhatod fel saját magadat.",
|
||||||
|
"You cannot place VoIP calls in this browser.": "Nem indíthatsz VoIP hívást ebben a böngészőben.",
|
||||||
|
"You do not have permission to post to this room": "Nincs jogod írni ebben a szobában",
|
||||||
|
"You have been banned from %(roomName)s by %(userName)s.": "%(userName)s kitiltott a szobából: %(roomName)s.",
|
||||||
|
"You have been invited to join this room by %(inviterName)s": "%(inviterName)s meghívott ebbe a szobába",
|
||||||
|
"You have been kicked from %(roomName)s by %(userName)s.": "%(userName)s kirúgott ebből a szobából: %(roomName)s.",
|
||||||
|
"You have been logged out of all devices and will no longer receive push notifications. To re-enable notifications, sign in again on each device": "Kijelentkeztél minden eszközről így nem fogsz \"push\" értesítéseket kapni. Az értesítések engedélyezéséhez jelentkezz vissza mindegyik eszközön",
|
||||||
|
"You have <a>disabled</a> URL previews by default.": "Az URL előnézet alapból <a>tiltva</a> van.",
|
||||||
|
"You have <a>enabled</a> URL previews by default.": "Az URL előnézet alapból <a>engedélyezve</a> van.",
|
||||||
|
"You have entered an invalid contact. Try using their Matrix ID or email address.": "Érvénytelen kapcsolatot adtál meg. Próbáld meg a Matrix azonosítóját vagy e-mail címét használni.",
|
||||||
|
"You have no visible notifications": "Nincsenek látható értesítéseid",
|
||||||
|
"You may wish to login with a different account, or add this email to this account.": "Lehet, hogy más fiókba szeretnél belépni vagy ezt az e-mail címet szeretnéd ehhez a fiókhoz kötni.",
|
||||||
|
"you must be a": "szükséges szerep:",
|
||||||
|
"You must <a>register</a> to use this functionality": "<a>Regisztrálnod kell</a> hogy ezt használhasd",
|
||||||
|
"You need to be able to invite users to do that.": "Hogy ezt csinálhasd meg kell tudnod hívni felhasználókat.",
|
||||||
|
"You need to be logged in.": "Be kell jelentkezz.",
|
||||||
|
"You need to enter a user name.": "Be kell írnod a felhasználói nevet.",
|
||||||
|
"You need to log back in to generate end-to-end encryption keys for this device and submit the public key to your homeserver. This is a once off; sorry for the inconvenience.": "Ahhoz, hogy kulcsot tudjál készíteni a végponttól végpontig való titkosításhoz ehhez az eszközhöz és elküld a kulcsot a egyéni szerverhez vissza kell jelentkezned. Ez egyszeri alkalom, elnézést a kellemetlenségér.",
|
||||||
|
"Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "Ez az e-mail cím, úgy néz ki, nincs összekötve a Matrix azonosítóval ezen az egyedi szerveren.",
|
||||||
|
"Your password has been reset": "A jelszavad visszaállítottuk",
|
||||||
|
"Your password was successfully changed. You will not receive push notifications on other devices until you log back in to them": "A jelszavadat sikeresen megváltoztattuk. Nem kapsz \"push\" értesítéseket amíg a többi eszközön vissza nem jelentkezel"
|
||||||
}
|
}
|
||||||
|
|
|
@ -651,5 +651,24 @@
|
||||||
"(unknown failure: %(reason)s)": "(알 수 없는 오류: %(reason)s)",
|
"(unknown failure: %(reason)s)": "(알 수 없는 오류: %(reason)s)",
|
||||||
"(warning: cannot be disabled again!)": "(주의: 다시 끌 수 없어요!)",
|
"(warning: cannot be disabled again!)": "(주의: 다시 끌 수 없어요!)",
|
||||||
"Warning!": "주의!",
|
"Warning!": "주의!",
|
||||||
"WARNING: Device already verified, but keys do NOT MATCH!": "주의: 장치는 이미 인증했지만, 키가 맞지 않아요!"
|
"WARNING: Device already verified, but keys do NOT MATCH!": "주의: 장치는 이미 인증했지만, 키가 맞지 않아요!",
|
||||||
|
"Who can access this room?": "누가 이 방에 들어올 수 있나요?",
|
||||||
|
"Who can read history?": "누가 기록을 읽을 수 있나요?",
|
||||||
|
"Who would you like to add to this room?": "이 방에 누구를 초대하고 싶으세요?",
|
||||||
|
"Who would you like to communicate with?": "누구와 이야기하고 싶으세요?",
|
||||||
|
"%(senderName)s withdrew %(targetName)s's invitation.": "%(senderName)s님이 %(targetName)s니의 초대를 취소하셨어요.",
|
||||||
|
"Would you like to <acceptText>accept</acceptText> or <declineText>decline</declineText> this invitation?": "초대를 <acceptText>받아들이거나</acceptText> <declineText>거절</declineText>하시겠어요?",
|
||||||
|
"You already have existing direct chats with this user:": "이미 이 사용자와 직접 이야기하는 중이에요:",
|
||||||
|
"You are already in a call.": "이미 자신이 통화 중이네요.",
|
||||||
|
"You're not in any rooms yet! Press": "어떤 방에도 들어가 있지 않으세요! 누르세요",
|
||||||
|
"Press <StartChatButton> to start a chat with someone": "다른 사람과 이야기하려면 <StartChatButton>을 누르세요",
|
||||||
|
"WARNING: KEY VERIFICATION FAILED! The signing key for %(userId)s and device %(deviceId)s is \"%(fprint)s\" which does not match the provided key \"%(fingerprint)s\". This could mean your communications are being intercepted!": "주의: 키 확인 실패! %(userId)s와 장치 %(deviceId)s의 서명 키 \"%(fprint)s\"는 주어진 키 \"%(fingerprint)s\"와 맞지 않아요. 누가 이야기를 가로채는 중일 수도 있어요!",
|
||||||
|
"You're not in any rooms yet! Press <CreateRoomButton> to make a room or <RoomDirectoryButton> to browse the directory": "어떤 방에도 들어가 있지 않으세요! <CreateRoomButton>을 눌러서 방을 만들거나 <RoomDirectoryButton>를 눌러 목록에서 방을 찾아보세요",
|
||||||
|
"You are trying to access %(roomName)s.": "%(roomName)s에 들어가려고 하는 중이에요.",
|
||||||
|
"You cannot place a call with yourself.": "자신에게 전화를 걸 수는 없어요.",
|
||||||
|
"You cannot place VoIP calls in this browser.": "이 브라우저에서는 인터넷전화를 걸 수 없어요.",
|
||||||
|
"You do not have permission to post to this room": "이 방에서 글을 올릴 권한이 없어요",
|
||||||
|
"You have been banned from %(roomName)s by %(userName)s.": "%(userName)s님이 %(roomName)s에서 차단하셨어요.",
|
||||||
|
"You have been invited to join this room by %(inviterName)s": "%(inviterName)s님이 이 방에 초대하셨어요",
|
||||||
|
"You have been kicked from %(roomName)s by %(userName)s.": "%(userName)s님이 %(roomName)s에서 추방하셨어요."
|
||||||
}
|
}
|
||||||
|
|
|
@ -234,7 +234,7 @@
|
||||||
"Mute": "Dempen",
|
"Mute": "Dempen",
|
||||||
"Notifications": "Meldingen",
|
"Notifications": "Meldingen",
|
||||||
"Operation failed": "Actie mislukt",
|
"Operation failed": "Actie mislukt",
|
||||||
"Please Register": "Registreer alstublieft",
|
"Please Register": "Registreer Alstublieft",
|
||||||
"powered by Matrix": "mogelijk gemaakt door Matrix",
|
"powered by Matrix": "mogelijk gemaakt door Matrix",
|
||||||
"Remove": "Verwijderen",
|
"Remove": "Verwijderen",
|
||||||
"Room directory": "Kamerlijst",
|
"Room directory": "Kamerlijst",
|
||||||
|
@ -279,10 +279,10 @@
|
||||||
"%(senderName)s placed a %(callType)s call.": "%(senderName)s heeft een %(callType)s-gesprek gestart.",
|
"%(senderName)s placed a %(callType)s call.": "%(senderName)s heeft een %(callType)s-gesprek gestart.",
|
||||||
"Press": "Druk",
|
"Press": "Druk",
|
||||||
"Privacy warning": "Privacywaarschuwing",
|
"Privacy warning": "Privacywaarschuwing",
|
||||||
"Private Chat": "Direct chatten",
|
"Private Chat": "Privégesprek",
|
||||||
"Privileged Users": "Gebruikers met rechten",
|
"Privileged Users": "Gebruikers met rechten",
|
||||||
"Profile": "Profiel",
|
"Profile": "Profiel",
|
||||||
"Public Chat": "Publiek gesprek",
|
"Public Chat": "Publiek Gesprek",
|
||||||
"Reason": "Reden",
|
"Reason": "Reden",
|
||||||
"Reason: %(reasonText)s": "Reden: %(reasonText)s",
|
"Reason: %(reasonText)s": "Reden: %(reasonText)s",
|
||||||
"Revoke Moderator": "Beheerder terugtrekken",
|
"Revoke Moderator": "Beheerder terugtrekken",
|
||||||
|
@ -291,9 +291,9 @@
|
||||||
"rejected": "verworpen",
|
"rejected": "verworpen",
|
||||||
"%(targetName)s rejected the invitation.": "%(targetName)s heeft de uitnodiging geweigerd.",
|
"%(targetName)s rejected the invitation.": "%(targetName)s heeft de uitnodiging geweigerd.",
|
||||||
"Reject invitation": "Uitnodiging weigeren",
|
"Reject invitation": "Uitnodiging weigeren",
|
||||||
"Rejoin": "Opnieuw lid wordne",
|
"Rejoin": "Opnieuw toetreden",
|
||||||
"Remote addresses for this room:": "Adres op afstand voor deze ruimte:",
|
"Remote addresses for this room:": "Adres op afstand voor deze ruimte:",
|
||||||
"Remove Contact Information?": "Contactinformatie verwijderen?",
|
"Remove Contact Information?": "Contactinformatie Verwijderen?",
|
||||||
"Send Invites": "Uitnodigingen versturen",
|
"Send Invites": "Uitnodigingen versturen",
|
||||||
"Start a chat": "Gesprek starten",
|
"Start a chat": "Gesprek starten",
|
||||||
"Start authentication": "Authenticatie starten",
|
"Start authentication": "Authenticatie starten",
|
||||||
|
@ -502,5 +502,27 @@
|
||||||
"New Composer & Autocomplete": "Nieuwe Componist & Automatisch Aanvullen",
|
"New Composer & Autocomplete": "Nieuwe Componist & Automatisch Aanvullen",
|
||||||
"New passwords don't match": "Nieuwe wachtwoorden komen niet overeen",
|
"New passwords don't match": "Nieuwe wachtwoorden komen niet overeen",
|
||||||
"New passwords must match each other.": "Nieuwe wachtwoorden moeten overeenkomen.",
|
"New passwords must match each other.": "Nieuwe wachtwoorden moeten overeenkomen.",
|
||||||
"Once encryption is enabled for a room it cannot be turned off again (for now)": "Zodra versleuteling in een kamer is ingeschakeld kan het niet meer worden uitgeschakeld (voor nu)"
|
"Once encryption is enabled for a room it cannot be turned off again (for now)": "Zodra versleuteling in een kamer is ingeschakeld kan het niet meer worden uitgeschakeld (voor nu)",
|
||||||
|
"Once you've followed the link it contains, click below": "Zodra je de link dat het bevat hebt gevolgd, klik hieronder",
|
||||||
|
"Only people who have been invited": "Alleen personen die zijn uitgenodigd",
|
||||||
|
"Otherwise, <a>click here</a> to send a bug report.": "Klik anders <a>hier</a> om een foutmelding te versturen.",
|
||||||
|
"Please check your email and click on the link it contains. Once this is done, click continue.": "Bekijk je e-mail en klik op de link die het bevat. Zodra dit klaar is, klik op verder gaan.",
|
||||||
|
"Power level must be positive integer.": "Machtsniveau moet een positief heel getal zijn.",
|
||||||
|
"%(senderName)s removed their display name (%(oldDisplayName)s).": "%(senderName)s heeft zijn of haar weergavenaam (%(oldDisplayName)s) verwijderd.",
|
||||||
|
"%(senderName)s removed their profile picture.": "%(senderName)s heeft zijn of haar profielfoto verwijderd.",
|
||||||
|
"Failed to kick": "Niet gelukt om te kicken",
|
||||||
|
"Press <StartChatButton> to start a chat with someone": "Druk op <StartChatButton> om een gesprek met iemand te starten",
|
||||||
|
"Remove %(threePid)s?": "%(threePid)s verwijderen?",
|
||||||
|
"%(senderName)s requested a VoIP conference.": "%(senderName)s heeft een VoIP gesprek aangevraagd.",
|
||||||
|
"Report it": "Melden",
|
||||||
|
"Resetting password will currently reset any end-to-end encryption keys on all devices, making encrypted chat history unreadable, unless you first export your room keys and re-import them afterwards. In future this will be improved.": "Het wachtwoord veranderen betekent momenteel dat alle eind-tot-eind versleutelingssleutels op alle apparaten veranderen waardoor versleutelde gespreksgeschiedenis onleesbaar wordt, behalve als je eerst de ruimte sleutels exporteert en daarna opnieuw importeert. Dit zal in de toekomst verbeterd worden.",
|
||||||
|
"restore": "herstellen",
|
||||||
|
"Results from DuckDuckGo": "Resultaten van DuckDuckGo",
|
||||||
|
"Return to app": "Naar de app terugkeren",
|
||||||
|
"Return to login screen": "Naar het inlogscherm terugkeren",
|
||||||
|
"Riot does not have permission to send you notifications - please check your browser settings": "Riot heeft geen permissie om je notificaties te versturen - controleer je browser instellingen",
|
||||||
|
"Riot was not given permission to send notifications - please try again": "Riot heeft geen permissie gekregen om notificaties te versturen - probeer het opnieuw",
|
||||||
|
"riot-web version:": "riot-web versie:",
|
||||||
|
"Room %(roomId)s not visible": "Ruimte %(roomId)s is niet zichtbaar",
|
||||||
|
"Room Colour": "Ruimte Kleur"
|
||||||
}
|
}
|
||||||
|
|
|
@ -356,6 +356,7 @@
|
||||||
"%(senderName)s placed a %(callType)s call.": "%(senderName)s fez uma chamada de %(callType)s.",
|
"%(senderName)s placed a %(callType)s call.": "%(senderName)s fez uma chamada de %(callType)s.",
|
||||||
"Power level must be positive integer.": "O nível de permissões tem que ser um número inteiro e positivo.",
|
"Power level must be positive integer.": "O nível de permissões tem que ser um número inteiro e positivo.",
|
||||||
"Press": "Aperte",
|
"Press": "Aperte",
|
||||||
|
"Press <StartChatButton> to start a chat with someone": "Clique em <StartChatButton> para iniciar a conversa com alguém",
|
||||||
"Reason": "Razão",
|
"Reason": "Razão",
|
||||||
"%(targetName)s rejected the invitation.": "%(targetName)s recusou o convite.",
|
"%(targetName)s rejected the invitation.": "%(targetName)s recusou o convite.",
|
||||||
"%(senderName)s removed their display name (%(oldDisplayName)s).": "%(senderName)s removeu o seu nome público (%(oldDisplayName)s).",
|
"%(senderName)s removed their display name (%(oldDisplayName)s).": "%(senderName)s removeu o seu nome público (%(oldDisplayName)s).",
|
||||||
|
@ -398,7 +399,7 @@
|
||||||
"VoIP is unsupported": "Chamada de voz não permitida",
|
"VoIP is unsupported": "Chamada de voz não permitida",
|
||||||
"%(senderName)s withdrew %(targetName)s's invitation.": "%(senderName)s desfez o convite a %(targetName)s.",
|
"%(senderName)s withdrew %(targetName)s's invitation.": "%(senderName)s desfez o convite a %(targetName)s.",
|
||||||
"You are already in a call.": "Você já está em uma chamada.",
|
"You are already in a call.": "Você já está em uma chamada.",
|
||||||
"You're not in any rooms yet! Press": "Você ainda não está em nenhuma sala! Pressione",
|
"You're not in any rooms yet! Press <CreateRoomButton> to make a room or <RoomDirectoryButton> to browse the directory": "Você ainda não está em nenhuma sala! Clique em <CreateRoomButton> para criar uma sala ou em <RoomDirectoryButton> para navegar pela lista pública de salas",
|
||||||
"You are trying to access %(roomName)s.": "Você está tentando acessar a sala %(roomName)s.",
|
"You are trying to access %(roomName)s.": "Você está tentando acessar a sala %(roomName)s.",
|
||||||
"You cannot place a call with yourself.": "Você não pode iniciar uma chamada.",
|
"You cannot place a call with yourself.": "Você não pode iniciar uma chamada.",
|
||||||
"You cannot place VoIP calls in this browser.": "Você não pode fazer chamadas de voz neste navegador.",
|
"You cannot place VoIP calls in this browser.": "Você não pode fazer chamadas de voz neste navegador.",
|
||||||
|
@ -960,5 +961,14 @@
|
||||||
"Your home server does not support device management.": "O seu Servidor de Base não suporta o gerenciamento de dispositivos.",
|
"Your home server does not support device management.": "O seu Servidor de Base não suporta o gerenciamento de dispositivos.",
|
||||||
"(~%(count)s results).one": "(~%(count)s resultado)",
|
"(~%(count)s results).one": "(~%(count)s resultado)",
|
||||||
"(~%(count)s results).other": "(~%(count)s resultados)",
|
"(~%(count)s results).other": "(~%(count)s resultados)",
|
||||||
"Device Name": "Nome do dispositivo"
|
"Device Name": "Nome do dispositivo",
|
||||||
|
"(could not connect media)": "(não foi possível conectar-se à mídia)",
|
||||||
|
"(no answer)": "(sem resposta)",
|
||||||
|
"(unknown failure: %(reason)s)": "(falha desconhecida: %(reason)s)",
|
||||||
|
"Your browser does not support the required cryptography extensions": "O seu navegador não suporta as extensões de criptografia necessárias",
|
||||||
|
"Not a valid Riot keyfile": "Não é um arquivo de chaves Riot válido",
|
||||||
|
"Authentication check failed: incorrect password?": "Falha ao checar a autenticação: senha incorreta?",
|
||||||
|
"Disable Peer-to-Peer for 1:1 calls": "Desabilitar as chamadas 1:1 par-a-par",
|
||||||
|
"Do you want to set an email address?": "Você deseja definir um endereço de e-mail?",
|
||||||
|
"This will allow you to reset your password and receive notifications.": "Isso permitirá que você redefina sua senha e receba notificações."
|
||||||
}
|
}
|
||||||
|
|
|
@ -85,7 +85,7 @@
|
||||||
"Favourite": "Избранное",
|
"Favourite": "Избранное",
|
||||||
"favourite": "Избранное",
|
"favourite": "Избранное",
|
||||||
"Favourites": "Избранное",
|
"Favourites": "Избранное",
|
||||||
"Filter room members": "Фильтр участников комнаты",
|
"Filter room members": "Поиск участников комнаты",
|
||||||
"Forget room": "Забыть комнату",
|
"Forget room": "Забыть комнату",
|
||||||
"Forgot your password?": "Вы забыли пароль?",
|
"Forgot your password?": "Вы забыли пароль?",
|
||||||
"For security, this session has been signed out. Please sign in again.": "Для обеспечения безопасности эта сессия была завершена. Войдите в систему еще раз.",
|
"For security, this session has been signed out. Please sign in again.": "Для обеспечения безопасности эта сессия была завершена. Войдите в систему еще раз.",
|
||||||
|
@ -100,14 +100,14 @@
|
||||||
"Invalid Email Address": "Недействительный адрес электронной почты",
|
"Invalid Email Address": "Недействительный адрес электронной почты",
|
||||||
"invited": "invited",
|
"invited": "invited",
|
||||||
"Invite new room members": "Пригласить новых участников в комнату",
|
"Invite new room members": "Пригласить новых участников в комнату",
|
||||||
"Invites": "Приглашать",
|
"Invites": "Приглашает",
|
||||||
"Invites user with given id to current room": "Пригласить пользователя с данным ID в текущую комнату",
|
"Invites user with given id to current room": "Приглашает пользователя с этим ID в текущую комнату",
|
||||||
"is a": "является",
|
"is a": "является",
|
||||||
"Sign in with": "Я хочу регистрироваться с",
|
"Sign in with": "Я хочу регистрироваться с",
|
||||||
"joined and left": "присоединенный и оставленный",
|
"joined and left": "зашёл и ушёл",
|
||||||
"joined": "присоединенный",
|
"joined": "зашёл",
|
||||||
"joined the room": "joined the room",
|
"joined the room": "joined the room",
|
||||||
"Joins room with given alias": "Присоединяется к комнате с данным псевдонимом",
|
"Joins room with given alias": "зашёл в комнату с этим именем",
|
||||||
"Kicks user with given id": "Выгнать пользователя с заданным id",
|
"Kicks user with given id": "Выгнать пользователя с заданным id",
|
||||||
"Labs": "Лаборатория",
|
"Labs": "Лаборатория",
|
||||||
"Leave room": "Уйти из комнаты",
|
"Leave room": "Уйти из комнаты",
|
||||||
|
@ -116,7 +116,7 @@
|
||||||
"left the room": "left the room",
|
"left the room": "left the room",
|
||||||
"Logged in as": "Зарегистрированный как",
|
"Logged in as": "Зарегистрированный как",
|
||||||
"Login as guest": "Вход в систему как гость",
|
"Login as guest": "Вход в систему как гость",
|
||||||
"Logout": "Выход из системы",
|
"Logout": "Выйти",
|
||||||
"Low priority": "Низкий приоритет",
|
"Low priority": "Низкий приоритет",
|
||||||
"made future room history visible to": "made future room history visible to",
|
"made future room history visible to": "made future room history visible to",
|
||||||
"Manage Integrations": "Управление Интеграциями",
|
"Manage Integrations": "Управление Интеграциями",
|
||||||
|
@ -128,7 +128,7 @@
|
||||||
"Never send encrypted messages to unverified devices from this device": "Никогда не отправлять зашифрованные сообщения на не верифицированные устройства с этого устройства",
|
"Never send encrypted messages to unverified devices from this device": "Никогда не отправлять зашифрованные сообщения на не верифицированные устройства с этого устройства",
|
||||||
"Never send encrypted messages to unverified devices in this room from this device": "Никогда не отправляйте зашифрованные сообщения на непроверенные устройства в этой комнате из вашего устройства",
|
"Never send encrypted messages to unverified devices in this room from this device": "Никогда не отправляйте зашифрованные сообщения на непроверенные устройства в этой комнате из вашего устройства",
|
||||||
"New password": "Новый пароль",
|
"New password": "Новый пароль",
|
||||||
"New passwords must match each other.": "Новые пароли должны соответствовать друг другу.",
|
"New passwords must match each other.": "Новые пароли должны совпадать.",
|
||||||
"none": "никто",
|
"none": "никто",
|
||||||
"Notifications": "Уведомления",
|
"Notifications": "Уведомления",
|
||||||
" (not supported by this browser)": " (not supported by this browser)",
|
" (not supported by this browser)": " (not supported by this browser)",
|
||||||
|
@ -193,7 +193,7 @@
|
||||||
"(warning: cannot be disabled again!)": "(предупреждение: не может быть отключено!)",
|
"(warning: cannot be disabled again!)": "(предупреждение: не может быть отключено!)",
|
||||||
"Warning!": "Предупреждение!",
|
"Warning!": "Предупреждение!",
|
||||||
"was banned": "запрещен",
|
"was banned": "запрещен",
|
||||||
"was invited": "приглашенный",
|
"was invited": "был приглашён",
|
||||||
"was kicked": "выброшен",
|
"was kicked": "выброшен",
|
||||||
"was unbanned": "незапрещенный",
|
"was unbanned": "незапрещенный",
|
||||||
"was": "был",
|
"was": "был",
|
||||||
|
@ -650,10 +650,10 @@
|
||||||
"%(oneUser)schanged their avatar": "%(oneUser)sизменил своё изображение",
|
"%(oneUser)schanged their avatar": "%(oneUser)sизменил своё изображение",
|
||||||
"Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or <a>enable unsafe scripts</a>.": "Не возможно подключиться к серверу через HTTP, когда в строке браузера HTTPS. Используйте HTTPS или <a>включив небезопасные скрипты</a>.",
|
"Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or <a>enable unsafe scripts</a>.": "Не возможно подключиться к серверу через HTTP, когда в строке браузера HTTPS. Используйте HTTPS или <a>включив небезопасные скрипты</a>.",
|
||||||
"Dismiss": "Отказ",
|
"Dismiss": "Отказ",
|
||||||
"Custom Server Options": "Расширенные настройки сервера",
|
"Custom Server Options": "Собственные настройки сервера",
|
||||||
"Mute": "Беззвучный",
|
"Mute": "Беззвучный",
|
||||||
"Operation failed": "Действие не удалось",
|
"Operation failed": "Действие не удалось",
|
||||||
"powered by Matrix": "управляемый с Matrix",
|
"powered by Matrix": "Основано на Matrix",
|
||||||
"Add a topic": "Добавить тему",
|
"Add a topic": "Добавить тему",
|
||||||
"Show timestamps in 12 hour format (e.g. 2:30pm)": "Время отображать в 12 часовом формате (напр. 2:30pm)",
|
"Show timestamps in 12 hour format (e.g. 2:30pm)": "Время отображать в 12 часовом формате (напр. 2:30pm)",
|
||||||
"Use compact timeline layout": "Компактное отображение",
|
"Use compact timeline layout": "Компактное отображение",
|
||||||
|
@ -700,7 +700,7 @@
|
||||||
"Import": "Импорт",
|
"Import": "Импорт",
|
||||||
"Incorrect username and/or password.": "Неверное имя пользователя и/или пароль.",
|
"Incorrect username and/or password.": "Неверное имя пользователя и/или пароль.",
|
||||||
"Invalid file%(extra)s": "Неправильный файл%(extra)s",
|
"Invalid file%(extra)s": "Неправильный файл%(extra)s",
|
||||||
"Invited": "Приглашен",
|
"Invited": "Приглашён",
|
||||||
"Jump to first unread message.": "Перейти к первому непрочитанному сообщению.",
|
"Jump to first unread message.": "Перейти к первому непрочитанному сообщению.",
|
||||||
"List this room in %(domain)s's room directory?": "Показывать эту комнату в списке комнат %(domain)s?",
|
"List this room in %(domain)s's room directory?": "Показывать эту комнату в списке комнат %(domain)s?",
|
||||||
"Message not sent due to unknown devices being present": "Сообщение не было отправлено из-за присутствия неизвестного устройства",
|
"Message not sent due to unknown devices being present": "Сообщение не было отправлено из-за присутствия неизвестного устройства",
|
||||||
|
@ -896,7 +896,7 @@
|
||||||
"Admin tools": "Админ утилита",
|
"Admin tools": "Админ утилита",
|
||||||
"And %(count)s more...": "И %(count)s больше...",
|
"And %(count)s more...": "И %(count)s больше...",
|
||||||
"Alias (optional)": "Псевдоним (опционально)",
|
"Alias (optional)": "Псевдоним (опционально)",
|
||||||
"<a>Click here</a> to join the discussion!": "<a> Нажми здесь</a> чтоб присоединиться к обсуждению!",
|
"<a>Click here</a> to join the discussion!": "<a>Нажмите здесь</a>, чтобы присоединиться к обсуждению!",
|
||||||
"Close": "Закрыть",
|
"Close": "Закрыть",
|
||||||
"Disable Notifications": "Отключить оповещение",
|
"Disable Notifications": "Отключить оповещение",
|
||||||
"Drop File Here": "Вставить сюда файл",
|
"Drop File Here": "Вставить сюда файл",
|
||||||
|
@ -909,7 +909,7 @@
|
||||||
"Incoming call from %(name)s": "Входящий вызов от %(name)s",
|
"Incoming call from %(name)s": "Входящий вызов от %(name)s",
|
||||||
"Incoming video call from %(name)s": "Входящий видио вызов от %(name)s",
|
"Incoming video call from %(name)s": "Входящий видио вызов от %(name)s",
|
||||||
"Incoming voice call from %(name)s": "Входящий голосовой вызов от %(name)s",
|
"Incoming voice call from %(name)s": "Входящий голосовой вызов от %(name)s",
|
||||||
"Join as <voiceText>voice</voiceText> or <videoText>video</videoText>.": "Присоединен как <voiceText> голос</voiceText> или <videoText> видио </videoText>.",
|
"Join as <voiceText>voice</voiceText> or <videoText>video</videoText>.": "Войти как <voiceText>голос</voiceText> или <videoText>видео</videoText>.",
|
||||||
"Last seen": "В последний раз видели",
|
"Last seen": "В последний раз видели",
|
||||||
"Level:": "Уровень:",
|
"Level:": "Уровень:",
|
||||||
"No display name": "Нет отображаемое имя",
|
"No display name": "Нет отображаемое имя",
|
||||||
|
@ -958,5 +958,7 @@
|
||||||
"Your browser does not support the required cryptography extensions": "Ваш браузер не поддерживает требуемые расширения для криптографии",
|
"Your browser does not support the required cryptography extensions": "Ваш браузер не поддерживает требуемые расширения для криптографии",
|
||||||
"Authentication check failed: incorrect password?": "Ошибка авторизации: неверный пароль?",
|
"Authentication check failed: incorrect password?": "Ошибка авторизации: неверный пароль?",
|
||||||
"Do you want to set an email address?": "Вы хотите указать адрес электронной почты?",
|
"Do you want to set an email address?": "Вы хотите указать адрес электронной почты?",
|
||||||
"This will allow you to reset your password and receive notifications.": "Это позволит вам сбросить пароль и получить уведомления."
|
"This will allow you to reset your password and receive notifications.": "Это позволит вам сбросить пароль и получить уведомления.",
|
||||||
|
"Press <StartChatButton> to start a chat with someone": "Нажмите <StartChatButton> для начала чата с кем либо",
|
||||||
|
"You're not in any rooms yet! Press <CreateRoomButton> to make a room or <RoomDirectoryButton> to browse the directory": "Вы еще не в комнатах! Нажмите <CreateRoomButton>, чтобы создать комнату или <RoomDirectoryButton>, чтобы просмотреть каталог"
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue