Merge branch 'develop' into luke/feature-user-settings-password-warning

This commit is contained in:
Luke Barnard 2017-06-20 13:40:34 +01:00 committed by GitHub
commit 4f9c1fe199
17 changed files with 663 additions and 87 deletions

View file

@ -1,3 +1,17 @@
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)

View file

@ -1,6 +1,6 @@
{
"name": "matrix-react-sdk",
"version": "0.9.5",
"version": "0.9.6",
"description": "SDK for matrix.org using React",
"author": "matrix.org",
"repository": {

138
src/KeyRequestHandler.js Normal file
View 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;
}
}

View file

@ -41,6 +41,7 @@ import PageTypes from '../../PageTypes';
import createRoom from "../../createRoom";
import * as UDEHandler from '../../UnknownDeviceErrorHandler';
import KeyRequestHandler from '../../KeyRequestHandler';
import { _t, getCurrentLanguage } from '../../languageHandler';
/** constants for MatrixChat.state.view */
@ -133,11 +134,6 @@ module.exports = React.createClass({
// a thing to call showScreen with once login completes.
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
page_type: null,
@ -385,13 +381,6 @@ module.exports = React.createClass({
this._startRegistration(payload.params || {});
break;
case 'start_login':
if (MatrixClientPeg.get() &&
MatrixClientPeg.get().isGuest()
) {
this.setState({
guestCreds: MatrixClientPeg.getCredentials(),
});
}
this.setStateForNewView({
view: VIEWS.LOGIN,
});
@ -545,12 +534,10 @@ module.exports = React.createClass({
break;
case 'on_logging_in':
// 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
// in once the login completes, then ready once the sync
// completes).
// NB. This does not touch 'ready' since if our dispatches
// are delayed, the sync could already have completed
this.setStateForNewView({
view: VIEWS.LOGGING_IN,
ready: false,
});
break;
case 'on_logged_in':
@ -947,7 +934,6 @@ module.exports = React.createClass({
_onLoggedIn: function(teamToken) {
this.setState({
view: VIEWS.LOGGED_IN,
guestCreds: null,
});
if (teamToken) {
@ -1025,6 +1011,10 @@ module.exports = React.createClass({
*/
_onWillStartClient() {
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();
// 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) {
@ -1270,14 +1268,9 @@ module.exports = React.createClass({
this.showScreen("forgot_password");
},
onReturnToGuestClick: function() {
// reanimate our guest login
if (this.state.guestCreds) {
// 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});
}
onReturnToAppClick: function() {
// treat it the same as if the user had completed the login
this._onLoggedIn(null);
},
// returns a promise which resolves to the new MatrixClient
@ -1457,7 +1450,7 @@ module.exports = React.createClass({
onLoggedIn={this.onRegistered}
onLoginClick={this.onLoginClick}
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}
onForgotPasswordClick={this.onForgotPasswordClick}
enableGuest={this.props.enableGuest}
onCancelClick={this.state.guestCreds ? this.onReturnToGuestClick : null}
onCancelClick={MatrixClientPeg.get() ? this.onReturnToAppClick : null}
/>
);
}

View 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>
);
},
});

View file

@ -154,7 +154,7 @@ export default React.createClass({
/>
<input
type="submit"
value={_t("Cancel")}
value={_t("Skip")}
onClick={this.onCancelled}
/>
</div>

View file

@ -18,7 +18,7 @@ limitations under the License.
'use strict';
var React = require("react");
var ReactDOM = require("react-dom");
import { _t } from '../../../languageHandler';
import { _t, _tJsx } from '../../../languageHandler';
var GeminiScrollbar = require('react-gemini-scrollbar');
var MatrixClientPeg = require("../../../MatrixClientPeg");
var CallHandler = require('../../../CallHandler');
@ -33,11 +33,28 @@ var Receipt = require('../../../utils/Receipt');
const HIDE_CONFERENCE_CHANS = true;
const VERBS = {
'm.favourite': 'favourite',
'im.vector.fake.direct': 'tag direct chat',
'im.vector.fake.recent': 'restore',
'm.lowpriority': 'demote',
function phraseForSection(section) {
// These would probably be better as individual strings,
// but for some reason we have translations for these strings
// as-is, so keeping it like this for now.
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({
@ -478,17 +495,25 @@ module.exports = React.createClass({
switch (section) {
case 'im.vector.fake.direct':
return <div className="mx_RoomList_emptySubListTip">
Press
<StartChatButton size="16" callout={true}/>
to start a chat with someone
{_tJsx(
"Press <StartChatButton> to start a chat with someone",
[/<StartChatButton>/],
[
(sub) => <StartChatButton size="16" callout={true}/>
]
)}
</div>;
case 'im.vector.fake.recent':
return <div className="mx_RoomList_emptySubListTip">
You're not in any rooms yet! Press
<CreateRoomButton size="16" callout={true}/>
to make a room or
<RoomDirectoryButton size="16" callout={true}/>
to browse the directory
{_tJsx(
"You're not in any rooms yet! Press <CreateRoomButton> to make a room or"+
" <RoomDirectoryButton> to browse the directory",
[/<CreateRoomButton>/, /<RoomDirectoryButton>/],
[
(sub) => <CreateRoomButton size="16" callout={true}/>,
(sub) => <RoomDirectoryButton size="16" callout={true}/>
]
)}
</div>;
}
@ -497,7 +522,7 @@ module.exports = React.createClass({
return null;
}
const labelText = 'Drop here to ' + (VERBS[section] || 'tag ' + section);
const labelText = phraseForSection(section);
return <RoomDropTarget label={labelText} />;
},

View file

@ -76,14 +76,11 @@ function createRoom(opts) {
}
];
let modal;
setTimeout(()=>{
modal = Modal.createDialog(Loader, null, 'mx_Dialog_spinner');
}, 0);
const modal = Modal.createDialog(Loader, null, 'mx_Dialog_spinner');
let roomId;
return client.createRoom(createOpts).finally(function() {
if (modal) modal.close();
modal.close();
}).then(function(res) {
roomId = res.room_id;
if (opts.dmUserId) {

View file

@ -105,7 +105,7 @@
"Can't load user settings": "Benutzereinstellungen können nicht geladen werden",
"changed name": "änderte Namen",
"changed the power level of": "änderte Berechtigungslevel von",
"Clear Cache": "Leere Cache",
"Clear Cache": "Cache leeren",
"Click here to fix": "Zum reparieren hier klicken",
"*️⃣ Commands": "*️⃣ Befehle",
"Default": "Standard",
@ -207,7 +207,7 @@
"since they joined": "ab dem Zeitpunkt, an dem sie beigetreten sind",
"since they were invited": "ab dem Zeitpunkt, an dem sie eingeladen wurden",
"Someone": "Jemand",
"Start a chat": "Starte einen Chat",
"Start a chat": "Chat starten",
"Start Chat": "Chat beginnen",
"Success": "Erfolg",
"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 tag direct chat": "als Direkt-Chat markieren",
"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",
"You are trying to access %(roomName)s.": "Du versuchst, auf den Raum \"%(roomName)s\" zuzugreifen.",
"af": "Afrikaans",
@ -671,7 +671,7 @@
"%(oneUser)srejected their invitation %(repeats)s times": "%(oneUser)shat die Einladung %(repeats)s mal abgelehnt",
"%(severalUsers)srejected their invitations": "%(severalUsers)shaben ihre 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",
"%(severalUsers)shad their invitations withdrawn": "%(severalUsers)szogen ihre Einladungen zurück",
"%(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",
"olm version:": "Version von olm:",
"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:",
"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)",
@ -815,14 +815,14 @@
"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?",
"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",
"Jump to first unread message.": "Zur ersten ungelesenen Nachricht springen.",
"Options": "Optionen",
"disabled": "deaktiviert",
"enabled": "aktiviert",
"Invited": "Eingeladen",
"Set a Display Name": "Setze einen Anzeigenamen",
"Set a Display Name": "Anzeigenamen festlegen",
"for %(amount)ss": "für %(amount)ss",
"for %(amount)sm": "seit %(amount)smin",
"for %(amount)sh": "für %(amount)sh",
@ -974,5 +974,7 @@
"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",
"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"
}

View file

@ -914,5 +914,7 @@
"were unbanned %(repeats)s times": "ξεμπλοκαρίστηκαν %(repeats)s φορές",
"was unbanned %(repeats)s times": "ξεμπλοκαρίστηκε %(repeats)s φορές",
"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> για να δείτε το ευρετήριο"
}

View file

@ -440,6 +440,7 @@
"Please Register": "Please Register",
"Power level must be positive integer.": "Power level must be positive integer.",
"Press": "Press",
"Press <StartChatButton> to start a chat with someone": "Press <StartChatButton> to start a chat with someone",
"Privacy warning": "Privacy warning",
"Private Chat": "Private Chat",
"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?",
"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'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 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.",
@ -911,5 +912,12 @@
"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?",
"This will allow you to reset your password and receive notifications.": "This will allow you to reset your password and receive notifications.",
"To return to your account in future you need to set a password": "To return to your account in future you need to set a password"
"To return to your account in future you need to set a password": "To return to your account in future you need to set a password",
"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"
}

View file

@ -557,7 +557,7 @@
"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 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 navez 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 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 didentification: mot de passe incorrect ?",
"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 ?",
"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"
}

View file

@ -508,5 +508,175 @@
"%(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.",
"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"
}

View file

@ -651,5 +651,24 @@
"(unknown failure: %(reason)s)": "(알 수 없는 오류: %(reason)s)",
"(warning: cannot be disabled again!)": "(주의: 다시 끌 수 없어요!)",
"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에서 추방하셨어요."
}

View file

@ -234,7 +234,7 @@
"Mute": "Dempen",
"Notifications": "Meldingen",
"Operation failed": "Actie mislukt",
"Please Register": "Registreer alstublieft",
"Please Register": "Registreer Alstublieft",
"powered by Matrix": "mogelijk gemaakt door Matrix",
"Remove": "Verwijderen",
"Room directory": "Kamerlijst",
@ -279,10 +279,10 @@
"%(senderName)s placed a %(callType)s call.": "%(senderName)s heeft een %(callType)s-gesprek gestart.",
"Press": "Druk",
"Privacy warning": "Privacywaarschuwing",
"Private Chat": "Direct chatten",
"Private Chat": "Privégesprek",
"Privileged Users": "Gebruikers met rechten",
"Profile": "Profiel",
"Public Chat": "Publiek gesprek",
"Public Chat": "Publiek Gesprek",
"Reason": "Reden",
"Reason: %(reasonText)s": "Reden: %(reasonText)s",
"Revoke Moderator": "Beheerder terugtrekken",
@ -291,9 +291,9 @@
"rejected": "verworpen",
"%(targetName)s rejected the invitation.": "%(targetName)s heeft de uitnodiging geweigerd.",
"Reject invitation": "Uitnodiging weigeren",
"Rejoin": "Opnieuw lid wordne",
"Rejoin": "Opnieuw toetreden",
"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",
"Start a chat": "Gesprek starten",
"Start authentication": "Authenticatie starten",
@ -502,5 +502,27 @@
"New Composer & Autocomplete": "Nieuwe Componist & Automatisch Aanvullen",
"New passwords don't match": "Nieuwe wachtwoorden komen niet overeen",
"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&#39;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"
}

View file

@ -356,6 +356,7 @@
"%(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.",
"Press": "Aperte",
"Press <StartChatButton> to start a chat with someone": "Clique em <StartChatButton> para iniciar a conversa com alguém",
"Reason": "Razão",
"%(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).",
@ -398,7 +399,7 @@
"VoIP is unsupported": "Chamada de voz não permitida",
"%(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'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 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.",
@ -960,5 +961,14 @@
"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).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."
}

View file

@ -85,7 +85,7 @@
"Favourite": "Избранное",
"favourite": "Избранное",
"Favourites": "Избранное",
"Filter room members": "Фильтр участников комнаты",
"Filter room members": "Поиск участников комнаты",
"Forget room": "Забыть комнату",
"Forgot your password?": "Вы забыли пароль?",
"For security, this session has been signed out. Please sign in again.": "Для обеспечения безопасности эта сессия была завершена. Войдите в систему еще раз.",
@ -100,14 +100,14 @@
"Invalid Email Address": "Недействительный адрес электронной почты",
"invited": "invited",
"Invite new room members": "Пригласить новых участников в комнату",
"Invites": "Приглашать",
"Invites user with given id to current room": "Пригласить пользователя с данным ID в текущую комнату",
"Invites": "Приглашает",
"Invites user with given id to current room": "Приглашает пользователя с этим ID в текущую комнату",
"is a": "является",
"Sign in with": "Я хочу регистрироваться с",
"joined and left": "присоединенный и оставленный",
"joined": "присоединенный",
"joined and left": "зашёл и ушёл",
"joined": "зашёл",
"joined the room": "joined the room",
"Joins room with given alias": "Присоединяется к комнате с данным псевдонимом",
"Joins room with given alias": "зашёл в комнату с этим именем",
"Kicks user with given id": "Выгнать пользователя с заданным id",
"Labs": "Лаборатория",
"Leave room": "Уйти из комнаты",
@ -116,7 +116,7 @@
"left the room": "left the room",
"Logged in as": "Зарегистрированный как",
"Login as guest": "Вход в систему как гость",
"Logout": "Выход из системы",
"Logout": "Выйти",
"Low priority": "Низкий приоритет",
"made future room history visible to": "made future room history visible to",
"Manage Integrations": "Управление Интеграциями",
@ -128,7 +128,7 @@
"Never send encrypted messages to unverified devices from this device": "Никогда не отправлять зашифрованные сообщения на не верифицированные устройства с этого устройства",
"Never send encrypted messages to unverified devices in this room from this device": "Никогда не отправляйте зашифрованные сообщения на непроверенные устройства в этой комнате из вашего устройства",
"New password": "Новый пароль",
"New passwords must match each other.": "Новые пароли должны соответствовать друг другу.",
"New passwords must match each other.": "Новые пароли должны совпадать.",
"none": "никто",
"Notifications": "Уведомления",
" (not supported by this browser)": " (not supported by this browser)",
@ -193,7 +193,7 @@
"(warning: cannot be disabled again!)": "(предупреждение: не может быть отключено!)",
"Warning!": "Предупреждение!",
"was banned": "запрещен",
"was invited": "приглашенный",
"was invited": "был приглашён",
"was kicked": "выброшен",
"was unbanned": "незапрещенный",
"was": "был",
@ -650,10 +650,10 @@
"%(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>.",
"Dismiss": "Отказ",
"Custom Server Options": "Расширенные настройки сервера",
"Custom Server Options": "Собственные настройки сервера",
"Mute": "Беззвучный",
"Operation failed": "Действие не удалось",
"powered by Matrix": "управляемый с Matrix",
"powered by Matrix": "Основано на Matrix",
"Add a topic": "Добавить тему",
"Show timestamps in 12 hour format (e.g. 2:30pm)": "Время отображать в 12 часовом формате (напр. 2:30pm)",
"Use compact timeline layout": "Компактное отображение",
@ -700,7 +700,7 @@
"Import": "Импорт",
"Incorrect username and/or password.": "Неверное имя пользователя и/или пароль.",
"Invalid file%(extra)s": "Неправильный файл%(extra)s",
"Invited": "Приглашен",
"Invited": "Приглашён",
"Jump to first unread message.": "Перейти к первому непрочитанному сообщению.",
"List this room in %(domain)s's room directory?": "Показывать эту комнату в списке комнат %(domain)s?",
"Message not sent due to unknown devices being present": "Сообщение не было отправлено из-за присутствия неизвестного устройства",
@ -896,7 +896,7 @@
"Admin tools": "Админ утилита",
"And %(count)s more...": "И %(count)s больше...",
"Alias (optional)": "Псевдоним (опционально)",
"<a>Click here</a> to join the discussion!": "<a> Нажми здесь</a> чтоб присоединиться к обсуждению!",
"<a>Click here</a> to join the discussion!": "<a>Нажмите здесь</a>, чтобы присоединиться к обсуждению!",
"Close": "Закрыть",
"Disable Notifications": "Отключить оповещение",
"Drop File Here": "Вставить сюда файл",
@ -909,7 +909,7 @@
"Incoming call from %(name)s": "Входящий вызов от %(name)s",
"Incoming video 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": "В последний раз видели",
"Level:": "Уровень:",
"No display name": "Нет отображаемое имя",
@ -958,5 +958,7 @@
"Your browser does not support the required cryptography extensions": "Ваш браузер не поддерживает требуемые расширения для криптографии",
"Authentication check failed: incorrect password?": "Ошибка авторизации: неверный пароль?",
"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>, чтобы просмотреть каталог"
}