+
diff --git a/src/components/views/messages/MessageEvent.js b/src/components/views/messages/MessageEvent.js
index 7358e297c7..fd51e6074b 100644
--- a/src/components/views/messages/MessageEvent.js
+++ b/src/components/views/messages/MessageEvent.js
@@ -39,8 +39,11 @@ module.exports = React.createClass({
/* callback called when dynamic content in events are loaded */
onWidgetLoad: PropTypes.func,
- /* the shsape of the tile, used */
+ /* the shape of the tile, used */
tileShape: PropTypes.string,
+
+ /* the maximum image height to use, if the event is an image */
+ maxImageHeight: PropTypes.number,
},
getEventTileOps: function() {
@@ -59,17 +62,24 @@ module.exports = React.createClass({
'm.audio': sdk.getComponent('messages.MAudioBody'),
'm.video': sdk.getComponent('messages.MVideoBody'),
};
+ const evTypes = {
+ 'm.sticker': sdk.getComponent('messages.MStickerBody'),
+ };
const content = this.props.mxEvent.getContent();
+ const type = this.props.mxEvent.getType();
const msgtype = content.msgtype;
let BodyType = UnknownBody;
- if (msgtype && bodyTypes[msgtype]) {
- BodyType = bodyTypes[msgtype];
- } else if (this.props.mxEvent.getType() === 'm.sticker') {
- BodyType = sdk.getComponent('messages.MStickerBody');
- } else if (content.url) {
- // Fallback to MFileBody if there's a content URL
- BodyType = bodyTypes['m.file'];
+ if (!this.props.mxEvent.isRedacted()) {
+ // only resolve BodyType if event is not redacted
+ if (type && evTypes[type]) {
+ BodyType = evTypes[type];
+ } else if (msgtype && bodyTypes[msgtype]) {
+ BodyType = bodyTypes[msgtype];
+ } else if (content.url) {
+ // Fallback to MFileBody if there's a content URL
+ BodyType = bodyTypes['m.file'];
+ }
}
return
;
},
});
diff --git a/src/components/views/messages/SenderProfile.js b/src/components/views/messages/SenderProfile.js
index 5ca2fc6ed8..70c9c711fc 100644
--- a/src/components/views/messages/SenderProfile.js
+++ b/src/components/views/messages/SenderProfile.js
@@ -72,14 +72,12 @@ export default React.createClass({
_updateRelatedGroups() {
if (this.unmounted) return;
- const relatedGroupsEvent = this.context.matrixClient
- .getRoom(this.props.mxEvent.getRoomId())
- .currentState
- .getStateEvents('m.room.related_groups', '');
+ const room = this.context.matrixClient.getRoom(this.props.mxEvent.getRoomId());
+ if (!room) return;
+
+ const relatedGroupsEvent = room.currentState.getStateEvents('m.room.related_groups', '');
this.setState({
- relatedGroups: relatedGroupsEvent ?
- relatedGroupsEvent.getContent().groups || []
- : [],
+ relatedGroups: relatedGroupsEvent ? relatedGroupsEvent.getContent().groups || [] : [],
});
},
diff --git a/src/components/views/messages/TextualBody.js b/src/components/views/messages/TextualBody.js
index bc2a715d31..2e5fe2aabc 100644
--- a/src/components/views/messages/TextualBody.js
+++ b/src/components/views/messages/TextualBody.js
@@ -36,6 +36,7 @@ import * as ContextualMenu from '../../structures/ContextualMenu';
import SettingsStore from "../../../settings/SettingsStore";
import PushProcessor from 'matrix-js-sdk/lib/pushprocessor';
import ReplyThread from "../elements/ReplyThread";
+import {host as matrixtoHost} from '../../../matrix-to';
linkifyMatrix(linkify);
@@ -304,7 +305,7 @@ module.exports = React.createClass({
// never preview matrix.to links (if anything we should give a smart
// preview of the room/user they point to: nobody needs to be reminded
// what the matrix.to site looks like).
- if (host == 'matrix.to') return false;
+ if (host === matrixtoHost) return false;
if (node.textContent.toLowerCase().trim().startsWith(host.toLowerCase())) {
// it's a "foo.pl" style link
@@ -336,10 +337,21 @@ module.exports = React.createClass({
left: x,
top: y,
message: successful ? _t('Copied!') : _t('Failed to copy'),
- });
- e.target.onmouseout = close;
+ }, false);
+ e.target.onmouseleave = close;
};
- p.appendChild(button);
+
+ // Wrap a div around
so that the copy button can be correctly positioned
+ // when the overflows and is scrolled horizontally.
+ const div = document.createElement("div");
+ div.className = "mx_EventTile_pre_container";
+
+ // Insert containing div in place of block
+ p.parentNode.replaceChild(div, p);
+
+ // Append block and copy button to container
+ div.appendChild(p);
+ div.appendChild(button);
});
},
@@ -422,8 +434,7 @@ module.exports = React.createClass({
const mxEvent = this.props.mxEvent;
const content = mxEvent.getContent();
- const stripReply = SettingsStore.isFeatureEnabled("feature_rich_quoting") &&
- ReplyThread.getParentEventId(mxEvent);
+ const stripReply = ReplyThread.getParentEventId(mxEvent);
let body = HtmlUtils.bodyToHtml(content, this.props.highlights, {
disableBigEmoji: SettingsStore.getValue('TextualBody.disableBigEmoji'),
// Part of Replies fallback support
diff --git a/src/components/views/room_settings/UrlPreviewSettings.js b/src/components/views/room_settings/UrlPreviewSettings.js
index ed58d610aa..fe2a2bacf4 100644
--- a/src/components/views/room_settings/UrlPreviewSettings.js
+++ b/src/components/views/room_settings/UrlPreviewSettings.js
@@ -1,6 +1,7 @@
/*
Copyright 2016 OpenMarket Ltd
Copyright 2017 Travis Ralston
+Copyright 2018 New Vector Ltd
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -15,6 +16,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
+import {MatrixClient} from "matrix-js-sdk";
const React = require('react');
import PropTypes from 'prop-types';
const sdk = require("../../../index");
@@ -29,6 +31,10 @@ module.exports = React.createClass({
room: PropTypes.object,
},
+ contextTypes: {
+ matrixClient: PropTypes.instanceOf(MatrixClient).isRequired,
+ },
+
saveSettings: function() {
const promises = [];
if (this.refs.urlPreviewsRoom) promises.push(this.refs.urlPreviewsRoom.save());
@@ -39,42 +45,58 @@ module.exports = React.createClass({
render: function() {
const SettingsFlag = sdk.getComponent("elements.SettingsFlag");
const roomId = this.props.room.roomId;
+ const isEncrypted = this.context.matrixClient.isRoomEncrypted(roomId);
let previewsForAccount = null;
- if (SettingsStore.getValueAt(SettingLevel.ACCOUNT, "urlPreviewsEnabled")) {
- previewsForAccount = (
- _t("You have enabled URL previews by default.", {}, { 'a': (sub)=>{ sub } })
- );
- } else {
- previewsForAccount = (
- _t("You have disabled URL previews by default.", {}, { 'a': (sub)=>{ sub } })
- );
- }
-
let previewsForRoom = null;
- if (SettingsStore.canSetValue("urlPreviewsEnabled", roomId, "room")) {
- previewsForRoom = (
-
- );
- } else {
- let str = _td("URL previews are enabled by default for participants in this room.");
- if (!SettingsStore.getValueAt(SettingLevel.ROOM, "urlPreviewsEnabled", roomId, /*explicit=*/true)) {
- str = _td("URL previews are disabled by default for participants in this room.");
+
+ if (!isEncrypted) {
+ // Only show account setting state and room state setting state in non-e2ee rooms where they apply
+ const accountEnabled = SettingsStore.getValueAt(SettingLevel.ACCOUNT, "urlPreviewsEnabled");
+ if (accountEnabled) {
+ previewsForAccount = (
+ _t("You have enabled URL previews by default.", {}, {
+ 'a': (sub)=>{ sub },
+ })
+ );
+ } else if (accountEnabled) {
+ previewsForAccount = (
+ _t("You have disabled URL previews by default.", {}, {
+ 'a': (sub)=>{ sub },
+ })
+ );
}
- previewsForRoom = ();
+
+ if (SettingsStore.canSetValue("urlPreviewsEnabled", roomId, "room")) {
+ previewsForRoom = (
+
+ );
+ } else {
+ let str = _td("URL previews are enabled by default for participants in this room.");
+ if (!SettingsStore.getValueAt(SettingLevel.ROOM, "urlPreviewsEnabled", roomId, /*explicit=*/true)) {
+ str = _td("URL previews are disabled by default for participants in this room.");
+ }
+ previewsForRoom = ();
+ }
+ } else {
+ previewsForAccount = (
+ _t("In encrypted rooms, like this one, URL previews are disabled by default to ensure that your " +
+ "homeserver (where the previews are generated) cannot gather information about links you see in " +
+ "this room.")
+ );
}
- const previewsForRoomAccount = (
-
@@ -83,8 +105,13 @@ module.exports = React.createClass({
return (
{ _t("URL Previews") }
-
-
+
+ { _t('When someone puts a URL in their message, a URL preview can be shown to give more ' +
+ 'information about that link such as the title, description, and an image from the website.') }
+
+
+ { previewsForAccount }
+
{ previewsForRoom }
diff --git a/src/components/views/rooms/AppsDrawer.js b/src/components/views/rooms/AppsDrawer.js
index 8763ea3d7f..04e47f0f9f 100644
--- a/src/components/views/rooms/AppsDrawer.js
+++ b/src/components/views/rooms/AppsDrawer.js
@@ -27,7 +27,7 @@ import SdkConfig from '../../../SdkConfig';
import ScalarAuthClient from '../../../ScalarAuthClient';
import ScalarMessaging from '../../../ScalarMessaging';
import { _t } from '../../../languageHandler';
-import WidgetUtils from '../../../WidgetUtils';
+import WidgetUtils from '../../../utils/WidgetUtils';
import SettingsStore from "../../../settings/SettingsStore";
// The maximum number of widgets that can be added in a room
@@ -94,15 +94,7 @@ module.exports = React.createClass({
const hideWidgetKey = this.props.room.roomId + '_hide_widget_drawer';
switch (action.action) {
case 'appsDrawer':
- // When opening the app drawer when there aren't any apps,
- // auto-launch the integrations manager to skip the awkward
- // click on "Add widget"
if (action.show) {
- const apps = this._getApps();
- if (apps.length === 0) {
- this._launchManageIntegrations();
- }
-
localStorage.removeItem(hideWidgetKey);
} else {
// Store hidden state of widget
@@ -171,14 +163,7 @@ module.exports = React.createClass({
},
_getApps: function() {
- const appsStateEvents = this.props.room.currentState.getStateEvents('im.vector.modular.widgets');
- if (!appsStateEvents) {
- return [];
- }
-
- return appsStateEvents.filter((ev) => {
- return ev.getContent().type && ev.getContent().url;
- }).map((ev) => {
+ return WidgetUtils.getRoomWidgets(this.props.room).map((ev) => {
return this._initAppConfig(ev.getStateKey(), ev.getContent(), ev.sender);
});
},
diff --git a/src/components/views/rooms/EventTile.js b/src/components/views/rooms/EventTile.js
index 589524bb9e..7f376502d7 100644
--- a/src/components/views/rooms/EventTile.js
+++ b/src/components/views/rooms/EventTile.js
@@ -34,6 +34,7 @@ const ContextualMenu = require('../../structures/ContextualMenu');
import dis from '../../../dispatcher';
import {makeEventPermalink} from "../../../matrix-to";
import SettingsStore from "../../../settings/SettingsStore";
+import {EventStatus} from 'matrix-js-sdk';
const ObjectUtils = require('../../../ObjectUtils');
@@ -442,26 +443,27 @@ module.exports = withMatrixClient(React.createClass({
const ev = this.props.mxEvent;
const props = {onClick: this.onCryptoClicked};
-
+ // event could not be decrypted
if (ev.getContent().msgtype === 'm.bad.encrypted') {
return ;
- } else if (ev.isEncrypted()) {
- if (this.state.verified) {
- return ;
- } else {
- return ;
- }
- } else {
- // XXX: if the event is being encrypted (ie eventSendStatus ===
- // encrypting), it might be nice to show something other than the
- // open padlock?
+ }
- // if the event is not encrypted, but it's an e2e room, show the
- // open padlock
- const e2eEnabled = this.props.matrixClient.isRoomEncrypted(ev.getRoomId());
- if (e2eEnabled) {
- return ;
+ // event is encrypted, display padlock corresponding to whether or not it is verified
+ if (ev.isEncrypted()) {
+ return this.state.verified ? : ;
+ }
+
+ if (this.props.matrixClient.isRoomEncrypted(ev.getRoomId())) {
+ // else if room is encrypted
+ // and event is being encrypted or is not_sent (Unknown Devices/Network Error)
+ if (ev.status === EventStatus.ENCRYPTING) {
+ return ;
}
+ if (ev.status === EventStatus.NOT_SENT) {
+ return ;
+ }
+ // if the event is not encrypted, but it's an e2e room, show the open padlock
+ return ;
}
// no padlock needed
@@ -490,7 +492,7 @@ module.exports = withMatrixClient(React.createClass({
}
const isSending = (['sending', 'queued', 'encrypting'].indexOf(this.props.eventSendStatus) !== -1);
- const isRedacted = (eventType === 'm.room.message') && this.props.isRedacted;
+ const isRedacted = isMessageEvent(this.props.mxEvent) && this.props.isRedacted;
const isEncryptionFailure = this.props.mxEvent.isDecryptionFailure();
const classes = classNames({
@@ -608,13 +610,14 @@ module.exports = withMatrixClient(React.createClass({
switch (this.props.tileShape) {
case 'notif': {
+ const EmojiText = sdk.getComponent('elements.EmojiText');
const room = this.props.matrixClient.getRoom(this.props.mxEvent.getRoomId());
return (
{ avatar }
@@ -715,9 +718,15 @@ module.exports = withMatrixClient(React.createClass({
},
}));
+// XXX this'll eventually be dynamic based on the fields once we have extensible event types
+const messageTypes = ['m.room.message', 'm.sticker'];
+function isMessageEvent(ev) {
+ return (messageTypes.includes(ev.getType()));
+}
+
module.exports.haveTileForEvent = function(e) {
// Only messages have a tile (black-rectangle) if redacted
- if (e.isRedacted() && e.getType() !== 'm.room.message') return false;
+ if (e.isRedacted() && !isMessageEvent(e)) return false;
const handler = getHandlerTile(e);
if (handler === undefined) return false;
@@ -736,6 +745,14 @@ function E2ePadlockUndecryptable(props) {
);
}
+function E2ePadlockEncrypting(props) {
+ return
;
+}
+
+function E2ePadlockNotSent(props) {
+ return
;
+}
+
function E2ePadlockVerified(props) {
return (
+ { _t('Share Link to User') }
+
+ );
return (
{ _t("User Options") }
{ readReceiptButton }
+ { shareUserButton }
{ insertPillButton }
{ ignoreButton }
{ inviteUserButton }
@@ -902,7 +914,9 @@ module.exports = withMatrixClient(React.createClass({
return (
-
+
+
+
diff --git a/src/components/views/rooms/MessageComposer.js b/src/components/views/rooms/MessageComposer.js
index 28a90b375a..bac996e65c 100644
--- a/src/components/views/rooms/MessageComposer.js
+++ b/src/components/views/rooms/MessageComposer.js
@@ -159,54 +159,20 @@ export default class MessageComposer extends React.Component {
});
}
- // _startCallApp(isAudioConf) {
- // dis.dispatch({
- // action: 'appsDrawer',
- // show: true,
- // });
-
- // const appsStateEvents = this.props.room.currentState.getStateEvents('im.vector.modular.widgets', '');
- // let appsStateEvent = {};
- // if (appsStateEvents) {
- // appsStateEvent = appsStateEvents.getContent();
- // }
- // if (!appsStateEvent.videoConf) {
- // appsStateEvent.videoConf = {
- // type: 'jitsi',
- // // FIXME -- This should not be localhost
- // url: 'http://localhost:8000/jitsi.html',
- // data: {
- // confId: this.props.room.roomId.replace(/[^A-Za-z0-9]/g, '_') + Date.now(),
- // isAudioConf: isAudioConf,
- // },
- // };
- // MatrixClientPeg.get().sendStateEvent(
- // this.props.room.roomId,
- // 'im.vector.modular.widgets',
- // appsStateEvent,
- // '',
- // ).then(() => console.log('Sent state'), (e) => console.error(e));
- // }
- // }
-
onCallClick(ev) {
- // NOTE -- Will be replaced by Jitsi code (currently commented)
dis.dispatch({
action: 'place_call',
type: ev.shiftKey ? "screensharing" : "video",
room_id: this.props.room.roomId,
});
- // this._startCallApp(false);
}
onVoiceCallClick(ev) {
- // NOTE -- Will be replaced by Jitsi code (currently commented)
dis.dispatch({
action: 'place_call',
type: "voice",
room_id: this.props.room.roomId,
});
- // this._startCallApp(true);
}
onInputContentChanged(content: string, selection: {start: number, end: number}) {
diff --git a/src/components/views/rooms/MessageComposerInput.js b/src/components/views/rooms/MessageComposerInput.js
index 97e8780f0f..90a14d72fc 100644
--- a/src/components/views/rooms/MessageComposerInput.js
+++ b/src/components/views/rooms/MessageComposerInput.js
@@ -28,7 +28,7 @@ import Promise from 'bluebird';
import MatrixClientPeg from '../../../MatrixClientPeg';
import type {MatrixClient} from 'matrix-js-sdk/lib/matrix';
-import SlashCommands from '../../../SlashCommands';
+import {processCommandInput} from '../../../SlashCommands';
import { KeyCode, isOnlyCtrlOrCmdKeyEvent } from '../../../Keyboard';
import Modal from '../../../Modal';
import sdk from '../../../index';
@@ -45,8 +45,7 @@ import Markdown from '../../../Markdown';
import ComposerHistoryManager from '../../../ComposerHistoryManager';
import MessageComposerStore from '../../../stores/MessageComposerStore';
-import {MATRIXTO_URL_PATTERN, MATRIXTO_MD_LINK_PATTERN} from '../../../linkify-matrix';
-const REGEX_MATRIXTO = new RegExp(MATRIXTO_URL_PATTERN);
+import {MATRIXTO_MD_LINK_PATTERN} from '../../../linkify-matrix';
const REGEX_MATRIXTO_MARKDOWN_GLOBAL = new RegExp(MATRIXTO_MD_LINK_PATTERN, 'g');
import {asciiRegexp, shortnameToUnicode, emojioneList, asciiList, mapUnicodeToShort} from 'emojione';
@@ -158,6 +157,7 @@ export default class MessageComposerInput extends React.Component {
this.setDisplayedCompletion = this.setDisplayedCompletion.bind(this);
this.onMarkdownToggleClicked = this.onMarkdownToggleClicked.bind(this);
this.onTextPasted = this.onTextPasted.bind(this);
+ this.focusComposer = this.focusComposer.bind(this);
const isRichtextEnabled = SettingsStore.getValue('MessageComposerInput.isRichTextEnabled');
@@ -271,13 +271,12 @@ export default class MessageComposerInput extends React.Component {
}
onAction = (payload) => {
- const editor = this.refs.editor;
let contentState = this.state.editorState.getCurrentContent();
switch (payload.action) {
case 'reply_to_event':
case 'focus_composer':
- editor.focus();
+ this.focusComposer();
break;
case 'insert_mention': {
// Pretend that we've autocompleted this user because keeping two code
@@ -320,7 +319,7 @@ export default class MessageComposerInput extends React.Component {
let editorState = EditorState.push(this.state.editorState, contentState, 'insert-characters');
editorState = EditorState.moveSelectionToEnd(editorState);
this.onEditorContentChanged(editorState);
- editor.focus();
+ this.focusComposer();
}
}
break;
@@ -722,7 +721,7 @@ export default class MessageComposerInput extends React.Component {
// Some commands (/join) require pills to be replaced with their text content
const commandText = this.removeMDLinks(contentState, ['#']);
- const cmd = SlashCommands.processInput(this.props.room.roomId, commandText);
+ const cmd = processCommandInput(this.props.room.roomId, commandText);
if (cmd) {
if (!cmd.error) {
this.historyManager.save(contentState, this.state.isRichtextEnabled ? 'html' : 'markdown');
@@ -1156,6 +1155,10 @@ export default class MessageComposerInput extends React.Component {
this.handleKeyCommand('toggle-mode');
};
+ focusComposer() {
+ this.refs.editor.focus();
+ }
+
render() {
const activeEditorState = this.state.originalEditorState || this.state.editorState;
@@ -1180,9 +1183,9 @@ export default class MessageComposerInput extends React.Component {
activeEditorState.getCurrentContent().getBlocksAsArray());
return (
-
+
- { SettingsStore.isFeatureEnabled("feature_rich_quoting") &&
}
+
this.autocomplete = e}
room={this.props.room}
diff --git a/src/components/views/rooms/PinnedEventTile.js b/src/components/views/rooms/PinnedEventTile.js
index b63fdde0a8..d0572e489a 100644
--- a/src/components/views/rooms/PinnedEventTile.js
+++ b/src/components/views/rooms/PinnedEventTile.js
@@ -22,6 +22,7 @@ import AccessibleButton from "../elements/AccessibleButton";
import MessageEvent from "../messages/MessageEvent";
import MemberAvatar from "../avatars/MemberAvatar";
import { _t } from '../../../languageHandler';
+import {formatFullDate} from '../../../DateUtils';
module.exports = React.createClass({
displayName: 'PinnedEventTile',
@@ -80,11 +81,20 @@ module.exports = React.createClass({
{ unpinButton }
-
+
+
+
{ sender.name }
-
+
+ { formatFullDate(new Date(this.props.mxEvent.getTs())) }
+
+
+ {}} // we need to give this, apparently
+ />
+
);
},
diff --git a/src/components/views/rooms/RoomHeader.js b/src/components/views/rooms/RoomHeader.js
index 1851e03383..e40c715052 100644
--- a/src/components/views/rooms/RoomHeader.js
+++ b/src/components/views/rooms/RoomHeader.js
@@ -149,6 +149,13 @@ module.exports = React.createClass({
dis.dispatch({ action: 'show_right_panel' });
},
+ onShareRoomClick: function(ev) {
+ const ShareDialog = sdk.getComponent("dialogs.ShareDialog");
+ Modal.createTrackedDialog('share room dialog', '', ShareDialog, {
+ target: this.props.room,
+ });
+ },
+
_hasUnreadPins: function() {
const currentPinEvent = this.props.room.currentState.getStateEvents("m.room.pinned_events", '');
if (!currentPinEvent) return false;
@@ -379,6 +386,14 @@ module.exports = React.createClass({
;
}
+ let shareRoomButton;
+ if (this.props.inRoom) {
+ shareRoomButton =
+
+
+ ;
+ }
+
let rightPanelButtons;
if (this.props.collapsedRhs) {
rightPanelButtons =
@@ -400,6 +415,7 @@ module.exports = React.createClass({
{ settingsButton }
{ pinnedEventsButton }
+ { shareRoomButton }
{ manageIntegsButton }
{ forgetButton }
{ searchButton }
diff --git a/src/components/views/rooms/RoomList.js b/src/components/views/rooms/RoomList.js
index fc1872249f..62ae96f47f 100644
--- a/src/components/views/rooms/RoomList.js
+++ b/src/components/views/rooms/RoomList.js
@@ -583,14 +583,18 @@ module.exports = React.createClass({
}
},
- _makeGroupInviteTiles() {
+ _makeGroupInviteTiles(filter) {
const ret = [];
+ const lcFilter = filter && filter.toLowerCase();
const GroupInviteTile = sdk.getComponent('groups.GroupInviteTile');
for (const group of MatrixClientPeg.get().getGroups()) {
- if (group.myMembership !== 'invite') continue;
-
- ret.push(
);
+ const {groupId, name, myMembership} = group;
+ // filter to only groups in invite state and group_id starts with filter or group name includes it
+ if (myMembership !== 'invite') continue;
+ if (lcFilter && !groupId.toLowerCase().startsWith(lcFilter) &&
+ !(name && name.toLowerCase().includes(lcFilter))) continue;
+ ret.push(
);
}
return ret;
@@ -607,10 +611,10 @@ module.exports = React.createClass({
const self = this;
return (
+ autoshow={true} onScroll={self._whenScrolling} onResize={self._whenScrolling} wrappedRef={this._collectGemini}>
+
+ { _t('You have no historical rooms') }
+
+
+ }
label={_t('Historical')}
editable={false}
order="recent"
@@ -708,7 +719,7 @@ module.exports = React.createClass({
alwaysShowHeader={true}
startAsHidden={true}
showSpinner={self.state.isLoadingLeftRooms}
- onHeaderClick= {self.onArchivedHeaderClick}
+ onHeaderClick={self.onArchivedHeaderClick}
incomingCall={self.state.incomingCall}
searchFilter={self.props.searchFilter}
onShowMoreRooms={self.onShowMoreRooms} />
diff --git a/src/components/views/rooms/RoomTile.js b/src/components/views/rooms/RoomTile.js
index 05aaf79e0b..ee7f8a76c7 100644
--- a/src/components/views/rooms/RoomTile.js
+++ b/src/components/views/rooms/RoomTile.js
@@ -1,6 +1,7 @@
/*
Copyright 2015, 2016 OpenMarket Ltd
Copyright 2017 New Vector Ltd
+Copyright 2018 Michael Telatynski <7t3chguy@gmail.com>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -15,19 +16,17 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
-'use strict';
-const React = require('react');
-const ReactDOM = require("react-dom");
+import React from 'react';
import PropTypes from 'prop-types';
-const classNames = require('classnames');
+import classNames from 'classnames';
import dis from '../../../dispatcher';
-const MatrixClientPeg = require('../../../MatrixClientPeg');
+import MatrixClientPeg from '../../../MatrixClientPeg';
import DMRoomMap from '../../../utils/DMRoomMap';
-const sdk = require('../../../index');
-const ContextualMenu = require('../../structures/ContextualMenu');
-const RoomNotifs = require('../../../RoomNotifs');
-const FormattingUtils = require('../../../utils/FormattingUtils');
+import sdk from '../../../index';
+import {createMenu} from '../../structures/ContextualMenu';
+import * as RoomNotifs from '../../../RoomNotifs';
+import * as FormattingUtils from '../../../utils/FormattingUtils';
import AccessibleButton from '../elements/AccessibleButton';
import ActiveRoomObserver from '../../../ActiveRoomObserver';
import RoomViewStore from '../../../stores/RoomViewStore';
@@ -72,16 +71,12 @@ module.exports = React.createClass({
},
_shouldShowMentionBadge: function() {
- return this.state.notifState != RoomNotifs.MUTE;
+ return this.state.notifState !== RoomNotifs.MUTE;
},
_isDirectMessageRoom: function(roomId) {
const dmRooms = DMRoomMap.shared().getUserIdForRoomId(roomId);
- if (dmRooms) {
- return true;
- } else {
- return false;
- }
+ return Boolean(dmRooms);
},
onRoomTimeline: function(ev, room) {
@@ -99,7 +94,7 @@ module.exports = React.createClass({
},
onAccountData: function(accountDataEvent) {
- if (accountDataEvent.getType() == 'm.push_rules') {
+ if (accountDataEvent.getType() === 'm.push_rules') {
this.setState({
notifState: RoomNotifs.getRoomNotifsState(this.props.room.roomId),
});
@@ -187,6 +182,32 @@ module.exports = React.createClass({
this.badgeOnMouseLeave();
},
+ _showContextMenu: function(x, y, chevronOffset) {
+ const RoomTileContextMenu = sdk.getComponent('context_menus.RoomTileContextMenu');
+
+ createMenu(RoomTileContextMenu, {
+ chevronOffset,
+ left: x,
+ top: y,
+ room: this.props.room,
+ onFinished: () => {
+ this.setState({ menuDisplayed: false });
+ this.props.refreshSubList();
+ },
+ });
+ this.setState({ menuDisplayed: true });
+ },
+
+ onContextMenu: function(e) {
+ // Prevent the RoomTile onClick event firing as well
+ e.preventDefault();
+ // Only allow non-guests to access the context menu
+ if (MatrixClientPeg.get().isGuest()) return;
+
+ const chevronOffset = 12;
+ this._showContextMenu(e.clientX, e.clientY - (chevronOffset + 8), chevronOffset);
+ },
+
badgeOnMouseEnter: function() {
// Only allow non-guests to access the context menu
// and only change it if it needs to change
@@ -200,37 +221,25 @@ module.exports = React.createClass({
},
onBadgeClicked: function(e) {
- // Only allow none guests to access the context menu
- if (!MatrixClientPeg.get().isGuest()) {
- // If the badge is clicked, then no longer show tooltip
- if (this.props.collapsed) {
- this.setState({ hover: false });
- }
-
- const RoomTileContextMenu = sdk.getComponent('context_menus.RoomTileContextMenu');
- const elementRect = e.target.getBoundingClientRect();
-
- // The window X and Y offsets are to adjust position when zoomed in to page
- const x = elementRect.right + window.pageXOffset + 3;
- const chevronOffset = 12;
- let y = (elementRect.top + (elementRect.height / 2) + window.pageYOffset);
- y = y - (chevronOffset + 8); // where 8 is half the height of the chevron
-
- const self = this;
- ContextualMenu.createMenu(RoomTileContextMenu, {
- chevronOffset: chevronOffset,
- left: x,
- top: y,
- room: this.props.room,
- onFinished: function() {
- self.setState({ menuDisplayed: false });
- self.props.refreshSubList();
- },
- });
- this.setState({ menuDisplayed: true });
- }
// Prevent the RoomTile onClick event firing as well
e.stopPropagation();
+ // Only allow non-guests to access the context menu
+ if (MatrixClientPeg.get().isGuest()) return;
+
+ // If the badge is clicked, then no longer show tooltip
+ if (this.props.collapsed) {
+ this.setState({ hover: false });
+ }
+
+ const elementRect = e.target.getBoundingClientRect();
+
+ // The window X and Y offsets are to adjust position when zoomed in to page
+ const x = elementRect.right + window.pageXOffset + 3;
+ const chevronOffset = 12;
+ let y = (elementRect.top + (elementRect.height / 2) + window.pageYOffset);
+ y = y - (chevronOffset + 8); // where 8 is half the height of the chevron
+
+ this._showContextMenu(x, y, chevronOffset);
},
render: function() {
@@ -250,7 +259,7 @@ module.exports = React.createClass({
'mx_RoomTile_unread': this.props.unread,
'mx_RoomTile_unreadNotify': notifBadges,
'mx_RoomTile_highlight': mentionBadges,
- 'mx_RoomTile_invited': (me && me.membership == 'invite'),
+ 'mx_RoomTile_invited': (me && me.membership === 'invite'),
'mx_RoomTile_menuDisplayed': this.state.menuDisplayed,
'mx_RoomTile_noBadges': !badges,
'mx_RoomTile_transparent': this.props.transparent,
@@ -268,7 +277,6 @@ module.exports = React.createClass({
let name = this.state.roomName;
name = name.replace(":", ":\u200b"); // add a zero-width space to allow linewrapping after the colon
- let badge;
let badgeContent;
if (this.state.badgeHover || this.state.menuDisplayed) {
@@ -280,7 +288,7 @@ module.exports = React.createClass({
badgeContent = '\u200B';
}
- badge = { badgeContent }
;
+ const badge = { badgeContent }
;
const EmojiText = sdk.getComponent('elements.EmojiText');
let label;
@@ -301,7 +309,7 @@ module.exports = React.createClass({
}
} else if (this.state.hover) {
const RoomTooltip = sdk.getComponent("rooms.RoomTooltip");
- tooltip = ;
+ tooltip = ;
}
//var incomingCallBox;
@@ -312,16 +320,22 @@ module.exports = React.createClass({
const RoomAvatar = sdk.getComponent('avatars.RoomAvatar');
- let directMessageIndicator;
+ let dmIndicator;
if (this._isDirectMessageRoom(this.props.room.roomId)) {
- directMessageIndicator =
;
+ dmIndicator =
;
}
- return
+ return
- { directMessageIndicator }
+ { dmIndicator }
diff --git a/src/components/views/rooms/RoomTooltip.js b/src/components/views/rooms/RoomTooltip.js
index b17f54ef3c..bce0922637 100644
--- a/src/components/views/rooms/RoomTooltip.js
+++ b/src/components/views/rooms/RoomTooltip.js
@@ -14,11 +14,10 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
-'use strict';
-var React = require('react');
-var ReactDOM = require('react-dom');
-var dis = require('../../../dispatcher');
+import React from 'react';
+import ReactDOM from 'react-dom';
+import dis from '../../../dispatcher';
import classNames from 'classnames';
const MIN_TOOLTIP_HEIGHT = 25;
@@ -77,25 +76,21 @@ module.exports = React.createClass({
},
_renderTooltip: function() {
- var label = this.props.room ? this.props.room.name : this.props.label;
-
// Add the parent's position to the tooltips, so it's correctly
// positioned, also taking into account any window zoom
// NOTE: The additional 6 pixels for the left position, is to take account of the
// tooltips chevron
- var parent = ReactDOM.findDOMNode(this).parentNode;
- var style = {};
+ const parent = ReactDOM.findDOMNode(this).parentNode;
+ let style = {};
style = this._updatePosition(style);
style.display = "block";
- const tooltipClasses = classNames(
- "mx_RoomTooltip", this.props.tooltipClassName,
- );
+ const tooltipClasses = classNames("mx_RoomTooltip", this.props.tooltipClassName);
- var tooltip = (
-
-
- { label }
+ const tooltip = (
+
);
diff --git a/src/components/views/rooms/Stickerpicker.js b/src/components/views/rooms/Stickerpicker.js
index 6152809c1a..4cb7c59ce6 100644
--- a/src/components/views/rooms/Stickerpicker.js
+++ b/src/components/views/rooms/Stickerpicker.js
@@ -15,7 +15,6 @@ limitations under the License.
*/
import React from 'react';
import { _t } from '../../../languageHandler';
-import Widgets from '../../../utils/widgets';
import AppTile from '../elements/AppTile';
import MatrixClientPeg from '../../../MatrixClientPeg';
import Modal from '../../../Modal';
@@ -24,6 +23,7 @@ import SdkConfig from '../../../SdkConfig';
import ScalarAuthClient from '../../../ScalarAuthClient';
import dis from '../../../dispatcher';
import AccessibleButton from '../elements/AccessibleButton';
+import WidgetUtils from '../../../utils/WidgetUtils';
const widgetType = 'm.stickerpicker';
@@ -67,7 +67,7 @@ export default class Stickerpicker extends React.Component {
}
this.setState({showStickers: false});
- Widgets.removeStickerpickerWidgets().then(() => {
+ WidgetUtils.removeStickerpickerWidgets().then(() => {
this.forceUpdate();
}).catch((e) => {
console.error('Failed to remove sticker picker widget', e);
@@ -119,7 +119,7 @@ export default class Stickerpicker extends React.Component {
}
_updateWidget() {
- const stickerpickerWidget = Widgets.getStickerpickerWidgets()[0];
+ const stickerpickerWidget = WidgetUtils.getStickerpickerWidgets()[0];
this.setState({
stickerpickerWidget,
widgetId: stickerpickerWidget ? stickerpickerWidget.id : null,
diff --git a/src/components/views/settings/ChangeDisplayName.js b/src/components/views/settings/ChangeDisplayName.js
index a74e223349..afe1521f0f 100644
--- a/src/components/views/settings/ChangeDisplayName.js
+++ b/src/components/views/settings/ChangeDisplayName.js
@@ -1,5 +1,6 @@
/*
Copyright 2015, 2016 OpenMarket Ltd
+Copyright 2018 New Vector Ltd
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,36 +15,28 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
-'use strict';
-const React = require('react');
-const sdk = require('../../../index');
-const MatrixClientPeg = require("../../../MatrixClientPeg");
+import React from 'react';
+import sdk from '../../../index';
+import MatrixClientPeg from '../../../MatrixClientPeg';
import { _t } from '../../../languageHandler';
module.exports = React.createClass({
displayName: 'ChangeDisplayName',
- _getDisplayName: function() {
+ _getDisplayName: async function() {
const cli = MatrixClientPeg.get();
- return cli.getProfileInfo(cli.credentials.userId).then(function(result) {
- let displayname = result.displayname;
- if (!displayname) {
- if (MatrixClientPeg.get().isGuest()) {
- displayname = "Guest " + MatrixClientPeg.get().getUserIdLocalpart();
- } else {
- displayname = MatrixClientPeg.get().getUserIdLocalpart();
- }
- }
- return displayname;
- }, function(error) {
+ try {
+ const res = await cli.getProfileInfo(cli.getUserId());
+ return res.displayname;
+ } catch (e) {
throw new Error("Failed to fetch display name");
- });
+ }
},
- _changeDisplayName: function(new_displayname) {
+ _changeDisplayName: function(newDisplayname) {
const cli = MatrixClientPeg.get();
- return cli.setDisplayName(new_displayname).catch(function(e) {
- throw new Error("Failed to set display name");
+ return cli.setDisplayName(newDisplayname).catch(function(e) {
+ throw new Error("Failed to set display name", e);
});
},
diff --git a/src/components/views/settings/ChangePassword.js b/src/components/views/settings/ChangePassword.js
index 9cac25e6cc..b2ffe531b5 100644
--- a/src/components/views/settings/ChangePassword.js
+++ b/src/components/views/settings/ChangePassword.js
@@ -1,5 +1,6 @@
/*
Copyright 2015, 2016 OpenMarket Ltd
+Copyright 2018 New Vector Ltd
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,14 +15,13 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
-'use strict';
-
const React = require('react');
import PropTypes from 'prop-types';
const MatrixClientPeg = require("../../../MatrixClientPeg");
const Modal = require("../../../Modal");
const sdk = require("../../../index");
+import dis from "../../../dispatcher";
import Promise from 'bluebird';
import AccessibleButton from '../elements/AccessibleButton';
import { _t } from '../../../languageHandler';
@@ -143,6 +143,9 @@ module.exports = React.createClass({
});
cli.setPassword(authDict, newPassword).then(() => {
+ // Notify SessionStore that the user's password was changed
+ dis.dispatch({action: 'password_changed'});
+
if (this.props.shouldAskForEmail) {
return this._optionallySetEmail().then((confirmed) => {
this.props.onFinished({
diff --git a/src/cryptodevices.js b/src/cryptodevices.js
index c0b7e3da6e..d11aa47cda 100644
--- a/src/cryptodevices.js
+++ b/src/cryptodevices.js
@@ -16,6 +16,7 @@ limitations under the License.
import Resend from './Resend';
import sdk from './index';
+import dis from './dispatcher';
import Modal from './Modal';
import { _t } from './languageHandler';
@@ -65,6 +66,10 @@ export function getUnknownDevicesForRoom(matrixClient, room) {
});
}
+function focusComposer() {
+ dis.dispatch({action: 'focus_composer'});
+}
+
/**
* Show the UnknownDeviceDialog for a given room. The dialog will inform the user
* that messages they sent to this room have not been sent due to unknown devices
@@ -86,6 +91,7 @@ export function showUnknownDeviceDialogForMessages(matrixClient, room) {
sendAnywayLabel: _t("Send anyway"),
sendLabel: _t("Send"),
onSend: onSendClicked,
+ onFinished: focusComposer,
}, 'mx_Dialog_unknownDevice');
});
}
diff --git a/src/i18n/strings/be.json b/src/i18n/strings/be.json
index 7e79f5d355..31360c87f4 100644
--- a/src/i18n/strings/be.json
+++ b/src/i18n/strings/be.json
@@ -31,7 +31,6 @@
"Noisy": "Шумна",
"Resend": "Паўторна",
"On": "Уключыць",
- "Permalink": "Пастаянная спасылка",
"remove %(name)s from the directory.": "выдаліць %(name)s з каталога.",
"Off": "Выключыць",
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Выдаліць псеўданім пакоя %(alias)s і выдаліць %(name)s з каталога?",
diff --git a/src/i18n/strings/bg.json b/src/i18n/strings/bg.json
index d157f4dff8..5ec9a93bc5 100644
--- a/src/i18n/strings/bg.json
+++ b/src/i18n/strings/bg.json
@@ -136,7 +136,6 @@
"Missing room_id in request": "Липсва room_id в заявката",
"Room %(roomId)s not visible": "Стая %(roomId)s не е видима",
"Missing user_id in request": "Липсва user_id в заявката",
- "Failed to lookup current room": "Неуспешно намиране на текущата стая",
"/ddg is not a command": "/ddg не е команда",
"To use it, just wait for autocomplete results to load and tab through them.": "За използване, изчакайте зареждането на списъка с предложения и изберете от него.",
"Unrecognised room alias:": "Непознат псевдоним на стая:",
@@ -204,9 +203,7 @@
"Not a valid Riot keyfile": "Невалиден файл с ключ за Riot",
"Authentication check failed: incorrect password?": "Неуспешна автентикация: неправилна парола?",
"Failed to join room": "Неуспешно присъединяване към стаята",
- "Message Replies": "Отговори на съобщението",
"Message Pinning": "Функция за закачане на съобщения",
- "Tag Panel": "Панел с етикети",
"Disable Emoji suggestions while typing": "Изключване на предложенията за емотиконите при писане",
"Use compact timeline layout": "Използване на компактно оформление за списъка със съобщения",
"Hide removed messages": "Скриване на премахнати съобщения",
@@ -491,7 +488,6 @@
"Decrypt %(text)s": "Разшифровай %(text)s",
"Download %(text)s": "Изтегли %(text)s",
"(could not connect media)": "(неуспешно свързване на медийните устройства)",
- "Must be viewing a room": "Трябва да извършите това в стая",
"Usage": "Употреба",
"Remove from community": "Премахни от общността",
"Disinvite this user from community?": "Оттегляне на поканата към този потребител от общността?",
@@ -520,8 +516,6 @@
"Community %(groupId)s not found": "Общност %(groupId)s не е намерена",
"Create a new community": "Създаване на нова общност",
"Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "Създайте общност, за да групирате потребители и стаи! Изградете персонализирана начална страница, за да маркирате своето пространство в Matrix Вселената.",
- "Join an existing community": "Присъединяване към съществуваща общност",
- "To join an existing community you'll have to know its community identifier; this will look something like
+example:matrix.org.": "За да се присъедините към вече съществуваща общност, трябва да знаете нейния идентификатор; той изглежда нещо подобно на
+example:matrix.org.",
"Unknown (user, device) pair:": "Непозната двойка (потребител, устройство):",
"The signing key you provided matches the signing key you received from %(userId)s's device %(deviceId)s. Device marked as verified.": "Подписващият ключ, който сте предоставили, съвпада с подписващия ключ, който сте получили от устройството %(deviceId)s на %(userId)s. Устройството е маркирано като потвърдено.",
"Hide avatars in user and room mentions": "Скриване на аватара на потребители и стаи при споменаването им",
@@ -888,7 +882,6 @@
"This homeserver doesn't offer any login flows which are supported by this client.": "Този Home сървър не предлага методи за влизане, които се поддържат от този клиент.",
"Error: Problem communicating with the given homeserver.": "Грешка: Проблем при комуникацията с дадения Home сървър.",
"Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or
enable unsafe scripts.": "Не е възможно свързване към Home сървъра чрез HTTP, когато има HTTPS адрес в лентата на браузъра Ви. Или използвайте HTTPS или
включете функция небезопасни скриптове.",
- "Login as guest": "Влез като гост",
"Sign in to get started": "Влезте в профила си, за да започнете",
"Set a display name:": "Задаване на име:",
"Upload an avatar:": "Качване на профилна снимка:",
@@ -1125,7 +1118,6 @@
"Set Password": "Задаване на парола",
"An error occurred whilst saving your email notification preferences.": "Възникна грешка при запазване на настройките за имейл известяване.",
"Enable audible notifications in web client": "Включване на звукови известия в уеб клиент",
- "Permalink": "Permalink",
"Off": "Изключено",
"Riot does not know how to join a room on this network": "Riot не знае как да се присъедини към стая от тази мрежа",
"Mentions only": "Само при споменаване",
@@ -1188,5 +1180,6 @@
"Terms and Conditions": "Правила и условия",
"To continue using the %(homeserverDomain)s homeserver you must review and agree to our terms and conditions.": "За да продължите да ползвате %(homeserverDomain)s е необходимо да прегледате и да се съгласите с правилата и условията за ползване.",
"Review terms and conditions": "Прегледай правилата и условията",
- "Failed to indicate account erasure": "Неуспешно указване на желанието за изтриване на акаунта"
+ "Failed to indicate account erasure": "Неуспешно указване на желанието за изтриване на акаунта",
+ "Try the app first": "Първо пробвайте приложението"
}
diff --git a/src/i18n/strings/ca.json b/src/i18n/strings/ca.json
index 407b9f61d4..98d51e99ac 100644
--- a/src/i18n/strings/ca.json
+++ b/src/i18n/strings/ca.json
@@ -134,10 +134,8 @@
"You are not in this room.": "No heu entrat a aquesta sala.",
"You do not have permission to do that in this room.": "No teniu el permís per realitzar aquesta acció en aquesta sala.",
"Missing room_id in request": "Falta l'ID de la sala en la vostra sol·licitud",
- "Must be viewing a room": "Hauríeu de veure una sala",
"Room %(roomId)s not visible": "La sala %(roomId)s no és visible",
"Missing user_id in request": "Falta l'ID d'usuari a la vostre sol·licitud",
- "Failed to lookup current room": "No s'ha pogut buscar la sala actual",
"Usage": "Ús",
"/ddg is not a command": "/ddg no és un comandament",
"To use it, just wait for autocomplete results to load and tab through them.": "Per utilitzar-lo, simplement espereu que es completin els resultats automàticament i seleccioneu-ne el desitjat.",
@@ -211,9 +209,7 @@
"Not a valid Riot keyfile": "El fitxer no és un fitxer de claus de Riot valid",
"Authentication check failed: incorrect password?": "Ha fallat l'autenticació: heu introduït correctament la contrasenya?",
"Failed to join room": "No s'ha pogut entrar a la sala",
- "Message Replies": "Respostes del missatge",
"Message Pinning": "Fixació de missatges",
- "Tag Panel": "Tauler d'etiquetes",
"Disable Emoji suggestions while typing": "Desactiva els suggeriments d'Emoji mentre s'escriu",
"Use compact timeline layout": "Utilitza el disseny compacte de la línia de temps",
"Hide join/leave messages (invites/kicks/bans unaffected)": "Amaga els missatges d'entrada i sortida (no afecta a les invitacions, expulsions o prohibicions)",
@@ -579,7 +575,6 @@
"%(nameList)s %(transitionList)s": "%(transitionList)s%(nameList)s",
"%(severalUsers)sjoined %(count)s times|one": "%(severalUsers)s han entrat",
"Guest access is disabled on this Home Server.": "L'accés a usuaris d'altres xarxes no està permès en aquest servidor.",
- "Login as guest": "Inicia sessió com a convidat",
"Unblacklist": "Treure de la llista negre",
"%(oneUser)sjoined %(count)s times|one": "%(oneUser)s s'ha unit",
"%(severalUsers)sleft %(count)s times|one": "%(severalUsers)s han sortit",
@@ -772,8 +767,6 @@
"Error whilst fetching joined communities": "S'ha produït un error en buscar comunitats unides",
"Create a new community": "Crea una nova comunitat",
"Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "Crea una comunitat per agrupar usuaris i sales! Creeu una pàgina d'inici personalitzada per definir el vostre espai a l'univers Matrix.",
- "Join an existing community": "Uneix-te a una comunitat existent",
- "To join an existing community you'll have to know its community identifier; this will look something like
+example:matrix.org.": "Per unir-se a una comunitat existent, haureu de conèixer l'identificador de la comunitat; això es veurà com
+exemple:matrix.org.",
"You have no visible notifications": "No teniu cap notificació visible",
"Scroll to bottom of page": "Desplaça't fins a la part inferior de la pàgina",
"Message not sent due to unknown devices being present": "El missatge no s'ha enviat perquè hi ha dispositius desconeguts presents",
@@ -1004,7 +997,6 @@
"Unable to fetch notification target list": "No s'ha pogut obtenir la llista d'objectius de les notificacions",
"Set Password": "Establiu una contrasenya",
"Enable audible notifications in web client": "Habilita les notificacions d'àudio al client web",
- "Permalink": "Enllaç permanent",
"Off": "Apagat",
"Riot does not know how to join a room on this network": "El Riot no sap com unir-se a una sala en aquesta xarxa",
"Mentions only": "Només mencions",
diff --git a/src/i18n/strings/cs.json b/src/i18n/strings/cs.json
index 33c7a3d5f1..b7298f80ab 100644
--- a/src/i18n/strings/cs.json
+++ b/src/i18n/strings/cs.json
@@ -239,7 +239,6 @@
"Level:": "Úroveň:",
"Local addresses for this room:": "Místní adresy této místnosti:",
"Logged in as:": "Přihlášen/a jako:",
- "Login as guest": "Přihlášen/a jako host",
"matrix-react-sdk version:": "Verze matrix-react-sdk:",
"Mobile phone number": "Číslo mobilního telefonu",
"Mobile phone number (optional)": "Číslo mobilního telefonu (nepovinné)",
@@ -633,9 +632,7 @@
"Show these rooms to non-members on the community page and room list?": "Zobrazovat tyto místnosti na domovské stránce skupiny a v seznamu místností i pro nečleny?",
"Restricted": "Omezené",
"Missing room_id in request": "V zadání chybí room_id",
- "Must be viewing a room": "Musí být zobrazena místnost",
"Missing user_id in request": "V zadání chybí user_id",
- "Failed to lookup current room": "Nepodařilo se vyhledat aktuální místnost",
"(could not connect media)": "(média se nepodařilo spojit)",
"%(senderName)s placed a %(callType)s call.": "%(senderName)s uskutečnil %(callType)s hovor.",
"%(senderName)s made future room history visible to unknown (%(visibility)s).": "%(senderName)s zpřístupnil budoucí historii místnosti neznámým (%(visibility)s).",
@@ -860,8 +857,6 @@
"Error whilst fetching joined communities": "Při získávání vašich skupin se vyskytla chyba",
"Create a new community": "Vytvořit novou skupinu",
"Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "Vytvořte skupinu s cílem seskupit uživatele a místnosti! Vytvořte si vlastní domovskou stránku a vymezte tak váš prostor ve světe Matrix.",
- "Join an existing community": "Vstoupit do existující skupiny",
- "To join an existing community you'll have to know its community identifier; this will look something like
+example:matrix.org.": "Aby jste mohli vstoupit do existující skupiny, musíte znát její identifikátor; Měl by vypadat asi takto
+priklad:matrix.org.",
"You have no visible notifications": "Nejsou dostupná žádná oznámení",
"Connectivity to the server has been lost.": "Spojení se serverem bylo přerušené.",
"Sent messages will be stored until your connection has returned.": "Odeslané zprávy zůstanou uložené, dokud se spojení znovu neobnoví.",
@@ -919,7 +914,6 @@
"Claimed Ed25519 fingerprint key": "Údajný klíč s otiskem prstu Ed25519",
"This process allows you to import encryption keys that you had previously exported from another Matrix client. You will then be able to decrypt any messages that the other client could decrypt.": "Tento proces vás provede importem šifrovacích klíčů, které jste si stáhli z jiného Matrix klienta. Po úspěšném naimportování budete v tomto klientovi moci dešifrovat všechny zprávy, které jste mohli dešifrovat v původním klientovi.",
"The export file will be protected with a passphrase. You should enter the passphrase here, to decrypt the file.": "Stažený soubor je chráněn heslem. Soubor můžete naimportovat pouze pokud zadáte odpovídající heslo.",
- "Tag Panel": "Připnout panel",
"Call Failed": "Hovor selhal",
"There are unknown devices in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "V této místnosti jsou neznámá zařízení: Pokud budete pokračovat bez jejich ověření, někdo může Váš hovor odposlouchávat.",
"Review Devices": "Ověřit zařízení",
@@ -1062,7 +1056,6 @@
"Set Password": "Nastavit heslo",
"An error occurred whilst saving your email notification preferences.": "Při ukládání nastavení e-mailových upozornění nastala chyba.",
"Enable audible notifications in web client": "Povolit zvuková upozornění ve webové aplikaci",
- "Permalink": "Trvalý odkaz",
"Off": "Vypnout",
"#example": "#příklad",
"Mentions only": "Pouze zmínky",
diff --git a/src/i18n/strings/da.json b/src/i18n/strings/da.json
index 2a59530d5a..e90de5edfc 100644
--- a/src/i18n/strings/da.json
+++ b/src/i18n/strings/da.json
@@ -39,7 +39,6 @@
"Searches DuckDuckGo for results": "Søger DuckDuckGo for resultater",
"Commands": "kommandoer",
"Emoji": "Emoji",
- "Login as guest": "Log ind som gæst",
"Sign in": "Log ind",
"Warning!": "Advarsel!",
"Account": "Konto",
@@ -194,10 +193,8 @@
"You are not in this room.": "Du er ikke i dette rum.",
"You do not have permission to do that in this room.": "Du har ikke tilladelse til at gøre dét i dette rum.",
"Missing room_id in request": "Mangler room_id i forespørgsel",
- "Must be viewing a room": "Du skal være i gang med at se på rummet",
"Room %(roomId)s not visible": "rum %(roomId)s ikke synligt",
"Missing user_id in request": "Manglende user_id i forespørgsel",
- "Failed to lookup current room": "Kunne ikke slå nuværende rum op",
"Usage": "Brug",
"/ddg is not a command": "/ddg er ikke en kommando",
"To use it, just wait for autocomplete results to load and tab through them.": "For at bruge det skal du bare vente på autocomplete resultaterne indlæser og tab'e igennem dem.",
@@ -371,7 +368,6 @@
"Unable to fetch notification target list": "Kan ikke hente meddelelsesmålliste",
"Set Password": "Indstil Password",
"Enable audible notifications in web client": "Aktivér hørbare underretninger i webklienten",
- "Permalink": "Permanent link",
"Resend": "Send igen",
"Riot does not know how to join a room on this network": "Riot ved ikke, hvordan man kan deltage i et rum på dette netværk",
"Mentions only": "Kun nævninger",
diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json
index d3787a15a3..9b1c5acb8d 100644
--- a/src/i18n/strings/de_DE.json
+++ b/src/i18n/strings/de_DE.json
@@ -40,7 +40,6 @@
"Searches DuckDuckGo for results": "Verwendet DuckDuckGo für Suchergebnisse",
"Commands": "Kommandos",
"Emoji": "Emoji",
- "Login as guest": "Als Gast anmelden",
"Sign in": "Anmelden",
"Warning!": "Warnung!",
"Error": "Fehler",
@@ -250,7 +249,6 @@
"%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s hat das Thema geändert in \"%(topic)s\".",
"/ddg is not a command": "/ddg ist kein Kommando",
"%(senderName)s ended the call.": "%(senderName)s hat den Anruf beendet.",
- "Failed to lookup current room": "Fehler beim Nachschlagen des Raums",
"Failed to send request.": "Anfrage konnte nicht gesendet werden.",
"%(userId)s from %(fromPowerLevel)s to %(toPowerLevel)s": "%(userId)s von %(fromPowerLevel)s zu %(toPowerLevel)s",
"%(senderName)s invited %(targetName)s.": "%(senderName)s hat %(targetName)s eingeladen.",
@@ -265,7 +263,6 @@
"%(senderName)s made future room history visible to unknown (%(visibility)s).": "%(senderName)s hat den zukünftigen Chatverlauf sichtbar gemacht für unbekannt (%(visibility)s).",
"Missing room_id in request": "Fehlende room_id in Anfrage",
"Missing user_id in request": "Fehlende user_id in Anfrage",
- "Must be viewing a room": "Muss einen Raum ansehen",
"(not supported by this browser)": "(wird von diesem Browser nicht unterstützt)",
"%(senderName)s placed a %(callType)s call.": "%(senderName)s startete einen %(callType)s-Anruf.",
"Power level must be positive integer.": "Berechtigungslevel muss eine positive ganze Zahl sein.",
@@ -785,8 +782,6 @@
"Failed to load %(groupId)s": "'%(groupId)s' konnte nicht geladen werden",
"Error whilst fetching joined communities": "Fehler beim Laden beigetretener Communities",
"Create a new community": "Neue Community erstellen",
- "Join an existing community": "Einer bestehenden Community beitreten",
- "To join an existing community you'll have to know its community identifier; this will look something like
+example:matrix.org.": "Um einer bereits bestehenden Community beitreten zu können, musst dir deren Community-ID bekannt sein. Diese sieht z. B. aus wie
+example:matrix.org.",
"Your Communities": "Deine Communities",
"You're not currently a member of any communities.": "Du gehörst aktuell keiner Community an.",
"Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "Erstelle eine Community, um Benutzer und Räume miteinander zu verbinden! Erstelle zusätzlich eine eigene Homepage, um deinen individuellen Bereich im Matrix-Universum zu gestalten.",
@@ -951,8 +946,6 @@
"Your homeserver's URL": "Die URL deines Homeservers",
"Your identity server's URL": "Die URL deines Identitätsservers",
"%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s",
- "Tag Panel": "Beschriftungsfeld",
- "Message Replies": "Antworten auf Nachrichten",
"You will not be able to undo this change as you are demoting yourself, if you are the last privileged user in the room it will be impossible to regain privileges.": "Du wirst nicht in der Lage sein, die Änderung zurückzusetzen, da du dich degradierst. Wenn du der letze Nutzer mit Berechtigungen bist, wird es unmöglich sein die Privilegien zurückzubekommen.",
"Community IDs cannot not be empty.": "Community-IDs können nicht leer sein.",
"
Show devices,
send anyway or
cancel.": "
Geräte anzeigen,
trotzdem senden oder
abbrechen.",
@@ -1126,7 +1119,6 @@
"Unable to fetch notification target list": "Liste der Benachrichtigungsempfänger konnte nicht abgerufen werden",
"Set Password": "Passwort einrichten",
"Enable audible notifications in web client": "Audio-Benachrichtigungen im Web-Client aktivieren",
- "Permalink": "Permanenter Link",
"Off": "Aus",
"Riot does not know how to join a room on this network": "Riot weiß nicht, wie es einem Raum auf diesem Netzwerk beitreten soll",
"Mentions only": "Nur, wenn du erwähnt wirst",
@@ -1169,9 +1161,6 @@
"At this time it is not possible to reply with an emote.": "An dieser Stelle ist es nicht möglich mit einer Umschreibung zu antworten.",
"Enable widget screenshots on supported widgets": "Widget-Screenshots bei unterstützten Widgets aktivieren",
"Send analytics data": "Analysedaten senden",
- "Help improve Riot by sending usage data? This will use a cookie. (See our
cookie and privacy policies).": "Möchtest du Riot helfen indem du Nutzungsdaten sendest? Dies wird ein Cookie verwenden. (Siehe unsere
Datenschutzerklärung).",
- "Help improve Riot by sending usage data? This will use a cookie.": "Möchtest du Riot helfen indem du Nutzungsdaten sendest? Dies wird ein Cookie verwenden.",
- "Yes please": "Ja, bitte",
"e.g. %(exampleValue)s": "z.B. %(exampleValue)s",
"Reload widget": "Widget neu laden",
"To notify everyone in the room, you must be a": "Notwendiges Berechtigungslevel, um jeden im Raum zu benachrichten:",
@@ -1191,5 +1180,20 @@
"This room is used for important messages from the Homeserver, so you cannot leave it.": "Du kannst diesen Raum nicht verlassen, da dieser Raum für wichtige Nachrichten vom Heimserver verwendet wird.",
"Terms and Conditions": "Geschäftsbedingungen",
"To continue using the %(homeserverDomain)s homeserver you must review and agree to our terms and conditions.": "Um den %(homeserverDomain)s -Heimserver weiter zu verwenden, musst du die Geschäftsbedingungen sichten und ihnen zustimmen.",
- "Review terms and conditions": "Geschäftsbedingungen anzeigen"
+ "Review terms and conditions": "Geschäftsbedingungen anzeigen",
+ "Encrypting": "Verschlüssele",
+ "Encrypted, not sent": "Verschlüsselt, nicht gesendet",
+ "Share Link to User": "Sende Link an Benutzer",
+ "Share room": "Teile Raum",
+ "Share Room": "Teile Raum",
+ "Link to most recent message": "Link zur aktuellsten Nachricht",
+ "Share User": "Teile Benutzer",
+ "Share Community": "Teile Community",
+ "Share Room Message": "Teile Raumnachricht",
+ "Link to selected message": "Link zur ausgewählten Nachricht",
+ "COPY": "KOPIEREN",
+ "Share Message": "Teile Nachricht",
+ "No Audio Outputs detected": "Keine Ton-Ausgabe erkannt",
+ "Audio Output": "Ton-Ausgabe",
+ "Try the app first": "App erst ausprobieren"
}
diff --git a/src/i18n/strings/el.json b/src/i18n/strings/el.json
index fabd88c74a..c4514f629b 100644
--- a/src/i18n/strings/el.json
+++ b/src/i18n/strings/el.json
@@ -107,7 +107,7 @@
"Failed to reject invitation": "Δεν ήταν δυνατή η απόρριψη της πρόσκλησης",
"Failed to save settings": "Δεν ήταν δυνατή η αποθήκευση των ρυθμίσεων",
"Failed to send email": "Δεν ήταν δυνατή η αποστολή ηλ. αλληλογραφίας",
- "Failed to verify email address: make sure you clicked the link in the email": "Δεν ήταν δυνατή η επιβεβαίωση του μηνύματος ηλεκτρονικής αλληλογραφίας βεβαιωθείτε οτι κάνατε κλικ στον σύνδεσμο που σας στάλθηκε",
+ "Failed to verify email address: make sure you clicked the link in the email": "Δεν ήταν δυνατή η επιβεβαίωση της διεύθυνσης ηλεκτρονικής αλληλογραφίας: βεβαιωθείτε οτι κάνατε κλικ στον σύνδεσμο που σας στάλθηκε",
"Favourite": "Αγαπημένο",
"Favourites": "Αγαπημένα",
"Fill screen": "Γέμισε την οθόνη",
@@ -142,7 +142,6 @@
"%(targetName)s left the room.": "Ο χρήστης %(targetName)s έφυγε από το δωμάτιο.",
"Local addresses for this room:": "Τοπική διεύθυνση για το δωμάτιο:",
"Logged in as:": "Συνδεθήκατε ως:",
- "Login as guest": "Σύνδεση ως επισκέπτης",
"Logout": "Αποσύνδεση",
"Low priority": "Χαμηλής προτεραιότητας",
"matrix-react-sdk version:": "Έκδοση matrix-react-sdk:",
@@ -265,7 +264,7 @@
"Room %(roomId)s not visible": "Το δωμάτιο %(roomId)s δεν είναι ορατό",
"%(roomName)s does not exist.": "Το %(roomName)s δεν υπάρχει.",
"Searches DuckDuckGo for results": "Γίνεται αναζήτηση στο DuckDuckGo για αποτελέσματα",
- "Seen by %(userName)s at %(dateTime)s": "Διαβάστηκε από %(userName)s στις %(dateTime)s",
+ "Seen by %(userName)s at %(dateTime)s": "Διαβάστηκε από τον/την %(userName)s στις %(dateTime)s",
"Send anyway": "Αποστολή ούτως ή άλλως",
"Send Invites": "Αποστολή προσκλήσεων",
"Send Reset Email": "Αποστολή μηνύματος επαναφοράς",
@@ -425,7 +424,6 @@
"Failed to ban user": "Δεν ήταν δυνατό ο αποκλεισμός του χρήστη",
"Failed to change power level": "Δεν ήταν δυνατή η αλλαγή του επιπέδου δύναμης",
"Failed to fetch avatar URL": "Δεν ήταν δυνατή η ανάκτηση της διεύθυνσης εικόνας",
- "Failed to lookup current room": "Δεν ήταν δυνατή η εύρεση του τρέχοντος δωματίου",
"Failed to unban": "Δεν ήταν δυνατή η άρση του αποκλεισμού",
"%(userId)s from %(fromPowerLevel)s to %(toPowerLevel)s": "%(userId)s από %(fromPowerLevel)s σε %(toPowerLevel)s",
"Guest access is disabled on this Home Server.": "Έχει απενεργοποιηθεί η πρόσβαση στους επισκέπτες σε αυτόν τον διακομιστή.",
@@ -448,7 +446,6 @@
"%(senderName)s made future room history visible to unknown (%(visibility)s).": "Ο %(senderName)s έκανε το μελλοντικό ιστορικό του δωματίου δημόσιο άγνωστο (%(visibility)s).",
"Missing user_id in request": "Λείπει το user_id στο αίτημα",
"Mobile phone number (optional)": "Αριθμός κινητού τηλεφώνου (προαιρετικό)",
- "Must be viewing a room": "Πρέπει να βλέπετε ένα δωμάτιο",
"Never send encrypted messages to unverified devices from this device": "Να μη γίνει ποτέ αποστολή κρυπτογραφημένων μηνυμάτων σε ανεπιβεβαίωτες συσκευές από αυτή τη συσκευή",
"Never send encrypted messages to unverified devices in this room from this device": "Να μη γίνει ποτέ αποστολή κρυπτογραφημένων μηνυμάτων σε ανεπιβεβαίωτες συσκευές, σε αυτό το δωμάτιο, από αυτή τη συσκευή",
"not set": "δεν έχει οριστεί",
@@ -466,7 +463,7 @@
"%(senderName)s removed their profile picture.": "Ο %(senderName)s αφαίρεσε τη φωτογραφία του προφίλ του.",
"%(senderName)s requested a VoIP conference.": "Ο %(senderName)s αιτήθηκε μια συνδιάσκεψη VoIP.",
"Riot does not have permission to send you notifications - please check your browser settings": "Το Riot δεν έχει δικαιώματα για αποστολή ειδοποιήσεων - παρακαλούμε ελέγξτε τις ρυθμίσεις του περιηγητή σας",
- "Riot was not given permission to send notifications - please try again": "Δεν δόθηκαν δικαιώματα στο Riot να αποστείλει ειδοποιήσεις - παρακαλούμε προσπαθήστε ξανά",
+ "Riot was not given permission to send notifications - please try again": "Δεν δόθηκαν δικαιώματα αποστολής ειδοποιήσεων στο Riot - παρακαλούμε προσπαθήστε ξανά",
"Room contains unknown devices": "Το δωμάτιο περιέχει άγνωστες συσκευές",
"%(roomName)s is not accessible at this time.": "Το %(roomName)s δεν είναι προσβάσιμο αυτή τη στιγμή.",
"Scroll to bottom of page": "Μετάβαση στο τέλος της σελίδας",
@@ -746,7 +743,6 @@
"What's New": "Τι νέο υπάρχει",
"Set Password": "Ορισμός κωδικού πρόσβασης",
"Enable audible notifications in web client": "Ενεργοποίηση ηχητικών ειδοποιήσεων",
- "Permalink": "Μόνιμος σύνδεσμος",
"Off": "Ανενεργό",
"#example": "#παράδειγμα",
"Mentions only": "Μόνο αναφορές",
@@ -774,5 +770,84 @@
"e.g.
": "π.χ. ",
"Your device resolution": "Η ανάλυση της συσκευής σας",
"The information being sent to us to help make Riot.im better includes:": "Οι πληροφορίες που στέλνονται σε εμάς με σκοπό την βελτίωση του Riot.im περιλαμβάνουν:",
- "Call Failed": "Η κλήση απέτυχε"
+ "Call Failed": "Η κλήση απέτυχε",
+ "Whether or not you're logged in (we don't record your user name)": "Εάν είστε συνδεδεμένος/η ή όχι (δεν καταγράφουμε το όνομα χρήστη σας)",
+ "e.g. %(exampleValue)s": "π.χ. %(exampleValue)s",
+ "Review Devices": "Ανασκόπηση συσκευών",
+ "Call Anyway": "Κλήση όπως και να 'χει",
+ "Answer Anyway": "Απάντηση όπως και να 'χει",
+ "Call": "Κλήση",
+ "Answer": "Απάντηση",
+ "AM": "ΠΜ",
+ "PM": "ΜΜ",
+ "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s",
+ "Who would you like to add to this community?": "Ποιον/α θα θέλατε να προσθέσετε σε αυτή την κοινότητα;",
+ "Warning: any person you add to a community will be publicly visible to anyone who knows the community ID": "Προσοχή: κάθε άτομο που προσθέτετε στην κοινότητα θε είναι δημοσίως ορατό σε οποιονδήποτε γνωρίζει το αναγνωριστικό της κοινότητας",
+ "Invite new community members": "Προσκαλέστε νέα μέλη στην κοινότητα",
+ "Name or matrix ID": "Όνομα ή αναγνωριστικό του matrix",
+ "Invite to Community": "Πρόσκληση στην κοινότητα",
+ "Which rooms would you like to add to this community?": "Ποια δωμάτια θα θέλατε να προσθέσετε σε αυτή την κοινότητα;",
+ "Add rooms to the community": "Προσθήκη δωματίων στην κοινότητα",
+ "Add to community": "Προσθήκη στην κοινότητα",
+ "Failed to invite the following users to %(groupId)s:": "Αποτυχία πρόσκλησης των ακόλουθων χρηστών στο %(groupId)s :",
+ "Failed to invite users to community": "Αποτυχία πρόσκλησης χρηστών στην κοινότητα",
+ "Failed to invite users to %(groupId)s": "Αποτυχία πρόσκλησης χρηστών στο %(groupId)s",
+ "Failed to add the following rooms to %(groupId)s:": "Αποτυχία προσθήκης των ακόλουθων δωματίων στο %(groupId)s:",
+ "There are unknown devices in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "Υπάρχουν άγνωστες συσκευές στο δωμάτιο: εάν συνεχίσετε χωρίς να τις επιβεβαιώσετε, θα μπορούσε κάποιος να κρυφακούει την κλήση σας.",
+ "Show these rooms to non-members on the community page and room list?": "Εμφάνιση αυτών των δωματίων σε μη-μέλη στην σελίδα της κοινότητας και στη λίστα δωματίων;",
+ "Room name or alias": "Όνομα η ψευδώνυμο δωματίου",
+ "Restricted": "Περιορισμένο",
+ "Unable to create widget.": "Αδυναμία δημιουργίας widget.",
+ "Reload widget": "Ανανέωση widget",
+ "You are not in this room.": "Δεν είστε μέλος αυτού του δωματίου.",
+ "You do not have permission to do that in this room.": "Δεν έχετε την άδεια να το κάνετε αυτό σε αυτό το δωμάτιο.",
+ "You are now ignoring %(userId)s": "Τώρα αγνοείτε τον/την %(userId)s",
+ "You are no longer ignoring %(userId)s": "Δεν αγνοείτε πια τον/την %(userId)s",
+ "%(oldDisplayName)s changed their display name to %(displayName)s.": "Ο/Η %(oldDisplayName)s άλλαξε το εμφανιζόμενο όνομά του/της σε %(displayName)s.",
+ "%(senderName)s changed the pinned messages for the room.": "Ο/Η %(senderName)s άλλαξε τα καρφιτσωμένα μηνύματα του δωματίου.",
+ "%(widgetName)s widget modified by %(senderName)s": "Έγινε αλλαγή στο widget %(widgetName)s από τον/την %(senderName)s",
+ "%(widgetName)s widget added by %(senderName)s": "Προστέθηκε το widget %(widgetName)s από τον/την %(senderName)s",
+ "%(widgetName)s widget removed by %(senderName)s": "Το widget %(widgetName)s αφαιρέθηκε από τον/την %(senderName)s",
+ "%(names)s and %(count)s others are typing|other": "Ο/Η %(names)s και άλλοι/ες %(count)s πληκτρολογούν",
+ "%(names)s and %(count)s others are typing|one": "Ο/Η %(names)s και άλλος ένας πληκτρολογούν",
+ "Message Pinning": "Καρφίτσωμα Μηνυμάτων",
+ "Hide avatar changes": "Απόκρυψη αλλαγών εικονιδίων χρηστών",
+ "Hide display name changes": "Απόκρυψη αλλαγών εμφανιζόμενων ονομάτων",
+ "Hide avatars in user and room mentions": "Απόκρυψη εικονιδίων στις αναφορές χρηστών και δωματίων",
+ "Enable URL previews for this room (only affects you)": "Ενεργοποίηση προεπισκόπισης URL για αυτό το δωμάτιο (επηρεάζει μόνο εσάς)",
+ "Delete %(count)s devices|other": "Διαγραφή %(count)s συσκευών",
+ "Delete %(count)s devices|one": "Διαγραφή συσκευής",
+ "Select devices": "Επιλογή συσκευών",
+ "Cannot add any more widgets": "Δεν είναι δυνατή η προσθήκη άλλων widget",
+ "The maximum permitted number of widgets have already been added to this room.": "Ο μέγιστος επιτρεπτός αριθμός widget έχει ήδη προστεθεί σε αυτό το δωμάτιο.",
+ "Add a widget": "Προσθήκη widget",
+ "%(senderName)s sent an image": "Ο/Η %(senderName)s έστειλε μία εικόνα",
+ "%(senderName)s sent a video": "Ο/Η %(senderName)s έστειλε ένα βίντεο",
+ "%(senderName)s uploaded a file": "Ο/Η %(senderName)s αναφόρτωσε ένα αρχείο",
+ "If your other devices do not have the key for this message you will not be able to decrypt them.": "Εάν οι άλλες συσκευές σας δεν έχουν το κλειδί για αυτό το μήνυμα, τότε δεν θα μπορείτε να το αποκρυπτογραφήσετε.",
+ "Disinvite this user?": "Ακύρωση πρόσκλησης αυτού του χρήστη;",
+ "Mention": "Αναφορά",
+ "Invite": "Πρόσκληση",
+ "User Options": "Επιλογές Χρήστη",
+ "Send an encrypted reply…": "Αποστολή κρυπτογραφημένης απάντησης…",
+ "Send a reply (unencrypted)…": "Αποστολή απάντησης (μη κρυπτογραφημένης)…",
+ "Send an encrypted message…": "Αποστολή κρυπτογραφημένου μηνύματος…",
+ "Send a message (unencrypted)…": "Αποστολή μηνύματος (μη κρυπτογραφημένου)…",
+ "Unable to reply": "Αδυναμία απάντησης",
+ "Unpin Message": "Ξεκαρφίτσωμα μηνύματος",
+ "Jump to message": "Πηγαίντε στο μήνυμα",
+ "No pinned messages.": "Κανένα καρφιτσωμένο μήνυμα.",
+ "Loading...": "Φόρτωση...",
+ "Pinned Messages": "Καρφιτσωμένα Μηνύματα",
+ "%(duration)ss": "%(duration)sδ",
+ "%(duration)sm": "%(duration)sλ",
+ "%(duration)sh": "%(duration)sω",
+ "%(duration)sd": "%(duration)sμ",
+ "Online for %(duration)s": "Σε σύνδεση για %(duration)s",
+ "Idle for %(duration)s": "Αδρανής για %(duration)s",
+ "Offline for %(duration)s": "Εκτός σύνδεσης για %(duration)s",
+ "Seen by %(displayName)s (%(userName)s) at %(dateTime)s": "Διαβάστηκε από τον/την %(displayName)s (%(userName)s) στις %(dateTime)s",
+ "Room Notification": "Ειδοποίηση Δωματίου",
+ "Notify the whole room": "Ειδοποιήστε όλο το δωμάτιο",
+ "Sets the room topic": "Ορίζει το θέμα του δωματίου"
}
diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json
index 8698e6108f..7717d45aa5 100644
--- a/src/i18n/strings/en_EN.json
+++ b/src/i18n/strings/en_EN.json
@@ -33,12 +33,14 @@
"VoIP is unsupported": "VoIP is unsupported",
"You cannot place VoIP calls in this browser.": "You cannot place VoIP calls in this browser.",
"You cannot place a call with yourself.": "You cannot place a call with yourself.",
- "Conference calls are not supported in this client": "Conference calls are not supported in this client",
"Conference calls are not supported in encrypted rooms": "Conference calls are not supported in encrypted rooms",
+ "Conference calls are not supported in this client": "Conference calls are not supported in this client",
"Warning!": "Warning!",
"Conference calling is in development and may not be reliable.": "Conference calling is in development and may not be reliable.",
"Failed to set up conference call": "Failed to set up conference call",
"Conference call failed.": "Conference call failed.",
+ "Call in Progress": "Call in Progress",
+ "A call is already in progress!": "A call is already in progress!",
"The file '%(fileName)s' failed to upload": "The file '%(fileName)s' failed to upload",
"The file '%(fileName)s' exceeds this home server's size limit for uploads": "The file '%(fileName)s' exceeds this home server's size limit for uploads",
"Upload Failed": "Upload Failed",
@@ -104,7 +106,6 @@
"You need to be logged in.": "You need to be logged in.",
"You need to be able to invite users to do that.": "You need to be able to invite users to do that.",
"Unable to create widget.": "Unable to create widget.",
- "Reload widget": "Reload widget",
"Missing roomId.": "Missing roomId.",
"Failed to send request.": "Failed to send request.",
"This room is not recognised.": "This room is not recognised.",
@@ -112,24 +113,39 @@
"You are not in this room.": "You are not in this room.",
"You do not have permission to do that in this room.": "You do not have permission to do that in this room.",
"Missing room_id in request": "Missing room_id in request",
- "Must be viewing a room": "Must be viewing a room",
"Room %(roomId)s not visible": "Room %(roomId)s not visible",
"Missing user_id in request": "Missing user_id in request",
- "Failed to lookup current room": "Failed to lookup current room",
"Usage": "Usage",
+ "Searches DuckDuckGo for results": "Searches DuckDuckGo for results",
"/ddg is not a command": "/ddg is not a command",
"To use it, just wait for autocomplete results to load and tab through them.": "To use it, just wait for autocomplete results to load and tab through them.",
+ "Changes your display nickname": "Changes your display nickname",
+ "Changes colour scheme of current room": "Changes colour scheme of current room",
+ "Sets the room topic": "Sets the room topic",
+ "Invites user with given id to current room": "Invites user with given id to current room",
+ "Joins room with given alias": "Joins room with given alias",
+ "Leave room": "Leave room",
"Unrecognised room alias:": "Unrecognised room alias:",
+ "Kicks user with given id": "Kicks user with given id",
+ "Bans user with given id": "Bans user with given id",
+ "Unbans user with given id": "Unbans user with given id",
+ "Ignores a user, hiding their messages from you": "Ignores a user, hiding their messages from you",
"Ignored user": "Ignored user",
"You are now ignoring %(userId)s": "You are now ignoring %(userId)s",
+ "Stops ignoring a user, showing their messages going forward": "Stops ignoring a user, showing their messages going forward",
"Unignored user": "Unignored user",
"You are no longer ignoring %(userId)s": "You are no longer ignoring %(userId)s",
+ "Define the power level of a user": "Define the power level of a user",
+ "Deops user with given id": "Deops user with given id",
+ "Opens the Developer Tools dialog": "Opens the Developer Tools dialog",
+ "Verifies a user, device, and pubkey tuple": "Verifies a user, device, and pubkey tuple",
"Unknown (user, device) pair:": "Unknown (user, device) pair:",
"Device already verified!": "Device already verified!",
"WARNING: Device already verified, but keys do NOT MATCH!": "WARNING: Device already verified, but keys do NOT MATCH!",
"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!": "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!",
"Verified key": "Verified key",
"The signing key you provided matches the signing key you received from %(userId)s's device %(deviceId)s. Device marked as verified.": "The signing key you provided matches the signing key you received from %(userId)s's device %(deviceId)s. Device marked as verified.",
+ "Displays action": "Displays action",
"Unrecognised command:": "Unrecognised command:",
"Reason": "Reason",
"%(targetName)s accepted the invitation for %(displayName)s.": "%(targetName)s accepted the invitation for %(displayName)s.",
@@ -189,9 +205,8 @@
"Not a valid Riot keyfile": "Not a valid Riot keyfile",
"Authentication check failed: incorrect password?": "Authentication check failed: incorrect password?",
"Failed to join room": "Failed to join room",
- "Message Replies": "Message Replies",
"Message Pinning": "Message Pinning",
- "Tag Panel": "Tag Panel",
+ "Jitsi Conference Calling": "Jitsi Conference Calling",
"Disable Emoji suggestions while typing": "Disable Emoji suggestions while typing",
"Use compact timeline layout": "Use compact timeline layout",
"Hide removed messages": "Hide removed messages",
@@ -316,6 +331,8 @@
"Key request sent.": "Key request sent.",
"Re-request encryption keys from your other devices.": "Re-request encryption keys from your other devices.",
"Undecryptable": "Undecryptable",
+ "Encrypting": "Encrypting",
+ "Encrypted, not sent": "Encrypted, not sent",
"Encrypted by a verified device": "Encrypted by a verified device",
"Encrypted by an unverified device": "Encrypted by an unverified device",
"Unencrypted message": "Unencrypted message",
@@ -347,6 +364,7 @@
"Jump to read receipt": "Jump to read receipt",
"Mention": "Mention",
"Invite": "Invite",
+ "Share Link to User": "Share Link to User",
"User Options": "User Options",
"Direct chats": "Direct chats",
"Unmute": "Unmute",
@@ -428,6 +446,7 @@
"Settings": "Settings",
"Forget room": "Forget room",
"Search": "Search",
+ "Share room": "Share room",
"Show panel": "Show panel",
"Drop here to favourite": "Drop here to favourite",
"Drop here to tag direct chat": "Drop here to tag direct chat",
@@ -442,6 +461,7 @@
"People": "People",
"Rooms": "Rooms",
"Low priority": "Low priority",
+ "You have no historical rooms": "You have no historical rooms",
"Historical": "Historical",
"Unable to ascertain that the address this invite was sent to matches one associated with your account.": "Unable to ascertain that the address this invite was sent to matches one associated with your account.",
"This invitation was sent to an email address which is not associated with this account:": "This invitation was sent to an email address which is not associated with this account:",
@@ -498,7 +518,6 @@
"Muted Users": "Muted Users",
"Banned users": "Banned users",
"This room is not accessible by remote Matrix servers": "This room is not accessible by remote Matrix servers",
- "Leave room": "Leave room",
"Favourite": "Favourite",
"Tagged as: ": "Tagged as: ",
"To link to a room it must have an address.": "To link to a room it must have an address.",
@@ -553,7 +572,9 @@
"You have disabled URL previews by default.": "You have disabled URL previews by default.",
"URL previews are enabled by default for participants in this room.": "URL previews are enabled by default for participants in this room.",
"URL previews are disabled by default for participants in this room.": "URL previews are disabled by default for participants in this room.",
+ "In encrypted rooms, like this one, URL previews are disabled by default to ensure that your homeserver (where the previews are generated) cannot gather information about links you see in this room.": "In encrypted rooms, like this one, URL previews are disabled by default to ensure that your homeserver (where the previews are generated) cannot gather information about links you see in this room.",
"URL Previews": "URL Previews",
+ "When someone puts a URL in their message, a URL preview can be shown to give more information about that link such as the title, description, and an image from the website.": "When someone puts a URL in their message, a URL preview can be shown to give more information about that link such as the title, description, and an image from the website.",
"Sunday": "Sunday",
"Monday": "Monday",
"Tuesday": "Tuesday",
@@ -598,6 +619,10 @@
"Code": "Code",
"Start authentication": "Start authentication",
"powered by Matrix": "powered by Matrix",
+ "The email field must not be blank.": "The email field must not be blank.",
+ "The user name field must not be blank.": "The user name field must not be blank.",
+ "The phone number field must not be blank.": "The phone number field must not be blank.",
+ "The password field must not be blank.": "The password field must not be blank.",
"Username on %(hs)s": "Username on %(hs)s",
"User name": "User name",
"Mobile phone number": "Mobile phone number",
@@ -664,6 +689,7 @@
"Delete widget": "Delete widget",
"Revoke widget access": "Revoke widget access",
"Minimize apps": "Minimize apps",
+ "Reload widget": "Reload widget",
"Popout widget": "Popout widget",
"Picture": "Picture",
"Edit": "Edit",
@@ -748,8 +774,8 @@
"Matrix ID": "Matrix ID",
"Matrix Room ID": "Matrix Room ID",
"email address": "email address",
- "Try using one of the following valid address types: %(validTypesList)s.": "Try using one of the following valid address types: %(validTypesList)s.",
"You have entered an invalid address.": "You have entered an invalid address.",
+ "Try using one of the following valid address types: %(validTypesList)s.": "Try using one of the following valid address types: %(validTypesList)s.",
"Preparing to send logs": "Preparing to send logs",
"Logs sent": "Logs sent",
"Thank you!": "Thank you!",
@@ -856,6 +882,13 @@
"(HTTP status %(httpStatus)s)": "(HTTP status %(httpStatus)s)",
"Please set a password!": "Please set a password!",
"This will allow you to return to your account after signing out, and sign in on other devices.": "This will allow you to return to your account after signing out, and sign in on other devices.",
+ "Share Room": "Share Room",
+ "Link to most recent message": "Link to most recent message",
+ "Share User": "Share User",
+ "Share Community": "Share Community",
+ "Share Room Message": "Share Room Message",
+ "Link to selected message": "Link to selected message",
+ "COPY": "COPY",
"You are currently blacklisting unverified devices; to send messages to these devices you must verify them.": "You are currently blacklisting unverified devices; to send messages to these devices you must verify them.",
"We recommend you go through the verification process for each device to confirm they belong to their legitimate owner, but you can resend the message without verifying if you prefer.": "We recommend you go through the verification process for each device to confirm they belong to their legitimate owner, but you can resend the message without verifying if you prefer.",
"Room contains unknown devices": "Room contains unknown devices",
@@ -865,6 +898,10 @@
"Public Chat": "Public Chat",
"Custom": "Custom",
"Alias (optional)": "Alias (optional)",
+ "Reject invitation": "Reject invitation",
+ "Are you sure you want to reject the invitation?": "Are you sure you want to reject the invitation?",
+ "Unable to reject invite": "Unable to reject invite",
+ "Reject": "Reject",
"You cannot delete this message. (%(code)s)": "You cannot delete this message. (%(code)s)",
"Resend": "Resend",
"Cancel Sending": "Cancel Sending",
@@ -874,7 +911,7 @@
"View Source": "View Source",
"View Decrypted Source": "View Decrypted Source",
"Unhide Preview": "Unhide Preview",
- "Permalink": "Permalink",
+ "Share Message": "Share Message",
"Quote": "Quote",
"Source URL": "Source URL",
"Collapse Reply Thread": "Collapse Reply Thread",
@@ -884,7 +921,6 @@
"Mentions only": "Mentions only",
"Leave": "Leave",
"Forget": "Forget",
- "Reject": "Reject",
"Low Priority": "Low Priority",
"Direct Chat": "Direct Chat",
"View Community": "View Community",
@@ -919,7 +955,6 @@
"Failed to upload image": "Failed to upload image",
"Failed to update community": "Failed to update community",
"Unable to accept invite": "Unable to accept invite",
- "Unable to reject invite": "Unable to reject invite",
"Unable to join community": "Unable to join community",
"Leave Community": "Leave Community",
"Leave %(groupName)s?": "Leave %(groupName)s?",
@@ -945,8 +980,6 @@
"Failed to load %(groupId)s": "Failed to load %(groupId)s",
"Couldn't load home page": "Couldn't load home page",
"Login": "Login",
- "Reject invitation": "Reject invitation",
- "Are you sure you want to reject the invitation?": "Are you sure you want to reject the invitation?",
"Failed to reject invitation": "Failed to reject invitation",
"This room is not public. You will not be able to rejoin without an invite.": "This room is not public. You will not be able to rejoin without an invite.",
"Are you sure you want to leave the room '%(roomName)s'?": "Are you sure you want to leave the room '%(roomName)s'?",
@@ -967,8 +1000,6 @@
"Error whilst fetching joined communities": "Error whilst fetching joined communities",
"Create a new community": "Create a new community",
"Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.",
- "Join an existing community": "Join an existing community",
- "To join an existing community you'll have to know its community identifier; this will look something like +example:matrix.org.": "To join an existing community you'll have to know its community identifier; this will look something like +example:matrix.org.",
"You have no visible notifications": "You have no visible notifications",
"Members": "Members",
"%(count)s Members|other": "%(count)s Members",
@@ -999,6 +1030,7 @@
"Scroll to bottom of page": "Scroll to bottom of page",
"Message not sent due to unknown devices being present": "Message not sent due to unknown devices being present",
"Show devices, send anyway or cancel.": "Show devices, send anyway or cancel.",
+ "You can't send any messages until you review and agree to our terms and conditions.": "You can't send any messages until you review and agree to our terms and conditions.",
"%(count)s of your messages have not been sent.|other": "Some of your messages have not been sent.",
"%(count)s of your messages have not been sent.|one": "Your message was not sent.",
"%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|other": "Resend all or cancel all now. You can also select individual messages to resend or cancel.",
@@ -1077,9 +1109,11 @@
"No media permissions": "No media permissions",
"You may need to manually permit Riot to access your microphone/webcam": "You may need to manually permit Riot to access your microphone/webcam",
"Missing Media Permissions, click here to request.": "Missing Media Permissions, click here to request.",
+ "No Audio Outputs detected": "No Audio Outputs detected",
"No Microphones detected": "No Microphones detected",
"No Webcams detected": "No Webcams detected",
"Default Device": "Default Device",
+ "Audio Output": "Audio Output",
"Microphone": "Microphone",
"Camera": "Camera",
"VoIP": "VoIP",
@@ -1121,7 +1155,7 @@
"Error: Problem communicating with the given homeserver.": "Error: Problem communicating with the given homeserver.",
"Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or enable unsafe scripts.": "Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or enable unsafe scripts.",
"Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.",
- "Login as guest": "Login as guest",
+ "Try the app first": "Try the app first",
"Sign in to get started": "Sign in to get started",
"Failed to fetch avatar URL": "Failed to fetch avatar URL",
"Set a display name:": "Set a display name:",
@@ -1135,22 +1169,6 @@
"You need to enter a user name.": "You need to enter a user name.",
"An unknown error occurred.": "An unknown error occurred.",
"I already have an account": "I already have an account",
- "Displays action": "Displays action",
- "Bans user with given id": "Bans user with given id",
- "Unbans user with given id": "Unbans user with given id",
- "Define the power level of a user": "Define the power level of a user",
- "Deops user with given id": "Deops user with given id",
- "Invites user with given id to current room": "Invites user with given id to current room",
- "Joins room with given alias": "Joins room with given alias",
- "Sets the room topic": "Sets the room topic",
- "Kicks user with given id": "Kicks user with given id",
- "Changes your display nickname": "Changes your display nickname",
- "Searches DuckDuckGo for results": "Searches DuckDuckGo for results",
- "Changes colour scheme of current room": "Changes colour scheme of current room",
- "Verifies a user, device, and pubkey tuple": "Verifies a user, device, and pubkey tuple",
- "Ignores a user, hiding their messages from you": "Ignores a user, hiding their messages from you",
- "Stops ignoring a user, showing their messages going forward": "Stops ignoring a user, showing their messages going forward",
- "Opens the Developer Tools dialog": "Opens the Developer Tools dialog",
"Commands": "Commands",
"Results from DuckDuckGo": "Results from DuckDuckGo",
"Emoji": "Emoji",
diff --git a/src/i18n/strings/en_US.json b/src/i18n/strings/en_US.json
index 43e2041020..6f0708f0c2 100644
--- a/src/i18n/strings/en_US.json
+++ b/src/i18n/strings/en_US.json
@@ -135,7 +135,6 @@
"Failed to kick": "Failed to kick",
"Failed to leave room": "Failed to leave room",
"Failed to load timeline position": "Failed to load timeline position",
- "Failed to lookup current room": "Failed to lookup current room",
"Failed to mute user": "Failed to mute user",
"Failed to reject invite": "Failed to reject invite",
"Failed to reject invitation": "Failed to reject invitation",
@@ -209,7 +208,6 @@
"Publish this room to the public in %(domain)s's room directory?": "Publish this room to the public in %(domain)s's room directory?",
"Local addresses for this room:": "Local addresses for this room:",
"Logged in as:": "Logged in as:",
- "Login as guest": "Login as guest",
"Logout": "Logout",
"Low priority": "Low priority",
"%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s made future room history visible to all room members, from the point they are invited.",
@@ -228,7 +226,6 @@
"Mobile phone number": "Mobile phone number",
"Mobile phone number (optional)": "Mobile phone number (optional)",
"Moderator": "Moderator",
- "Must be viewing a room": "Must be viewing a room",
"Mute": "Mute",
"Name": "Name",
"Never send encrypted messages to unverified devices from this device": "Never send encrypted messages to unverified devices from this device",
@@ -816,7 +813,6 @@
"Unable to fetch notification target list": "Unable to fetch notification target list",
"Set Password": "Set Password",
"Enable audible notifications in web client": "Enable audible notifications in web client",
- "Permalink": "Permalink",
"Off": "Off",
"Riot does not know how to join a room on this network": "Riot does not know how to join a room on this network",
"Mentions only": "Mentions only",
diff --git a/src/i18n/strings/eo.json b/src/i18n/strings/eo.json
index 68645ffd9c..abcbcd636a 100644
--- a/src/i18n/strings/eo.json
+++ b/src/i18n/strings/eo.json
@@ -90,10 +90,8 @@
"You are not in this room.": "Vi ne estas en tiu ĉi ĉambro.",
"You do not have permission to do that in this room.": "Vi ne havas permeson fari tion en tiu ĉi ĉambro.",
"Missing room_id in request": "En peto mankas «room_id»",
- "Must be viewing a room": "Necesas vidi ĉambron",
"Room %(roomId)s not visible": "Ĉambro %(roomId)s ne videblas",
"Missing user_id in request": "En peto mankas «user_id»",
- "Failed to lookup current room": "Malsukcesis trovi nunan ĉambron",
"Usage": "Uzo",
"/ddg is not a command": "/ddg ne estas komando",
"To use it, just wait for autocomplete results to load and tab through them.": "Por uzi ĝin, atendu aperon de sugestaj rezultoj, kaj tabu tra ili.",
@@ -165,7 +163,6 @@
"Authentication check failed: incorrect password?": "Aŭtentiga kontrolo malsukcesis: ĉu pro malĝusta pasvorto?",
"Failed to join room": "Malsukcesis aliĝi al ĉambro",
"Message Pinning": "Fikso de mesaĝoj",
- "Tag Panel": "Etikeda panelo",
"Disable Emoji suggestions while typing": "Malŝalti mienetajn sugestojn dum tajpado",
"Use compact timeline layout": "Uzi densan okazordan aranĝon",
"Hide removed messages": "Kaŝi forigitajn mesaĝojn",
@@ -746,8 +743,6 @@
"Error whilst fetching joined communities": "Okazis eraro dum venigado de viaj komunumoj",
"Create a new community": "Krei novan komunumon",
"Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "Kreu komunumon por kunigi uzantojn kaj ĉambrojn! Fari propran hejmpaĝon por montri vian spacon en la universo de Matrix.",
- "Join an existing community": "Aliĝi al jama komunumo",
- "To join an existing community you'll have to know its community identifier; this will look something like +example:matrix.org.": "Por aliĝi al jama komunumo, vi devos scii ĝian komunuman identigilon; ĝi aspektas proksimume tiel ĉi: +ekzemplo:matrix.org.",
"You have no visible notifications": "Neniuj videblaj sciigoj",
"Scroll to bottom of page": "Rulumi al susbo de la paĝo",
"Message not sent due to unknown devices being present": "Mesaĝoj ne sendiĝis pro ĉeesto de nekonataj aparatoj",
@@ -862,7 +857,6 @@
"Error: Problem communicating with the given homeserver.": "Eraro: Estas problemo en komunikado kun la hejmservilo.",
"Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or enable unsafe scripts.": "Hejmservilo ne alkonekteblas per HTTP kun HTTPS URL en via adresbreto. Aŭ uzu HTTPS aŭ ŝaltu malsekurajn skriptojn.",
"Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "Ne eblas konekti al hejmservilo – bonvolu kontroli vian konekton, certigi ke la SSL-atestilo de via hejmservilo estas fidata, kaj ke neniu foliumila kromprogramo baras petojn.",
- "Login as guest": "Saluti kiel gasto",
"Sign in to get started": "Komencu per saluto",
"Failed to fetch avatar URL": "Malsukcesis venigi adreson de profilbildo",
"Set a display name:": "Agordi vidigan nomon:",
@@ -1077,7 +1071,6 @@
"Unable to fetch notification target list": "Malsukcesis akiri la liston de celoj por sciigoj",
"Set Password": "Agordi pasvorton",
"Enable audible notifications in web client": "Ŝalti aŭdeblajn sciigojn en la retkliento",
- "Permalink": "Konstanta ligilo",
"Off": "For",
"Riot does not know how to join a room on this network": "Riot ne scias aliĝi al ĉambroj en tiu ĉi reto",
"Mentions only": "Nur mencioj",
diff --git a/src/i18n/strings/es.json b/src/i18n/strings/es.json
index 8e7925ba36..5434c570f7 100644
--- a/src/i18n/strings/es.json
+++ b/src/i18n/strings/es.json
@@ -108,7 +108,6 @@
"Failed to kick": "Falló al expulsar",
"Failed to leave room": "Falló al dejar la sala",
"Failed to load timeline position": "Falló al cargar el historico",
- "Failed to lookup current room": "Falló al buscar la actual sala",
"Failed to mute user": "Falló al silenciar el usuario",
"Failed to reject invite": "Falló al rechazar invitación",
"Failed to reject invitation": "Falló al rechazar la invitación",
@@ -166,7 +165,6 @@
"%(targetName)s left the room.": "%(targetName)s ha dejado la sala.",
"Local addresses for this room:": "Direcciones locales para esta sala:",
"Logged in as:": "Sesión iniciada como:",
- "Login as guest": "Iniciar sesión como invitado",
"Logout": "Cerrar Sesión",
"Low priority": "Baja prioridad",
"Accept": "Aceptar",
@@ -314,7 +312,6 @@
"Mobile phone number": "Número de teléfono móvil",
"Mobile phone number (optional)": "Número de teléfono móvil (opcional)",
"Moderator": "Moderador",
- "Must be viewing a room": "Debe estar viendo una sala",
"Mute": "Silenciar",
"%(serverName)s Matrix ID": "%(serverName)s ID de Matrix",
"Name": "Nombre",
@@ -717,7 +714,6 @@
"Riot does not know how to join a room on this network": "Riot no sabe cómo unirse a una sala en esta red",
"Set Password": "Establecer contraseña",
"Enable audible notifications in web client": "Habilitar notificaciones audibles en el cliente web",
- "Permalink": "Enlace permanente",
"Off": "Apagado",
"#example": "#ejemplo",
"Mentions only": "Sólo menciones",
diff --git a/src/i18n/strings/eu.json b/src/i18n/strings/eu.json
index 909b466da3..1abaec65c7 100644
--- a/src/i18n/strings/eu.json
+++ b/src/i18n/strings/eu.json
@@ -140,7 +140,6 @@
"Identity Server is": "Identitate zerbitzaria:",
"Mobile phone number (optional)": "Mugikor zenbakia (aukerazkoa)",
"Moderator": "Moderatzailea",
- "Must be viewing a room": "Gela bat ikusten egon behar da",
"Account": "Kontua",
"Access Token:": "Sarbide tokena:",
"Active call (%(roomName)s)": "Dei aktiboa (%(roomName)s)",
@@ -243,7 +242,6 @@
"Failed to kick": "Huts egin du kanporatzean",
"Failed to leave room": "Huts egin du gelatik ateratzean",
"Failed to load timeline position": "Huts egin du denbora-lerroko puntua kargatzean",
- "Failed to lookup current room": "Huts egin du uneko gela bilatzean",
"Failed to mute user": "Huts egin du erabiltzailea mututzean",
"Failed to reject invite": "Huts egin du gonbidapena baztertzean",
"Failed to reject invitation": "Huts egin du gonbidapena baztertzean",
@@ -298,7 +296,6 @@
"Level:": "Maila:",
"Local addresses for this room:": "Gela honen tokiko helbideak:",
"Logged in as:": "Saioa hasteko erabiltzailea:",
- "Login as guest": "Hasi saioa bisitari gisa",
"%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s erabiltzaileak etorkizuneko gelaren historiala ikusgai jarri du gelako kide guztientzat, gonbidapena egiten zaienetik.",
"%(senderName)s made future room history visible to all room members, from the point they joined.": "%(senderName)s erabiltzaileak etorkizuneko gelaren historiala ikusgai jarri du gelako kide guztientzat, elkartzen direnetik.",
"%(senderName)s made future room history visible to all room members.": "%(senderName)s erabiltzaileak etorkizuneko gelaren historiala ikusgai jarri du gelako kide guztientzat.",
@@ -587,7 +584,7 @@
"Please enter the code it contains:": "Sartu dakarren kodea:",
"If you don't specify an email address, you won't be able to reset your password. Are you sure?": "Ez baduzu e-mail helbide bat zehazten, ezin izango duzu zure pasahitza berrezarri. Ziur zaude?",
"You are registering with %(SelectedTeamName)s": "%(SelectedTeamName)s erabiliz erregistratzen ari zara",
- "Default server": "Zerbitzari lenetetsia",
+ "Default server": "Zerbitzari lehenetsia",
"Custom server": "Zerbitzari aukeratua",
"Home server URL": "Hasiera zerbitzariaren URLa",
"Identity server URL": "Identitate zerbitzariaren URLa",
@@ -723,7 +720,6 @@
"%(names)s and %(count)s others are typing|one": "%(names)s eta beste bat idazten ari dira",
"Send": "Bidali",
"Message Pinning": "Mezuak finkatzea",
- "Tag Panel": "Etiketen panela",
"Hide avatar changes": "Ezkutatu abatar aldaketak",
"Hide display name changes": "Ezkutatu pantaila izenen aldaketak",
"Disable big emoji in chat": "Desgaitu emoji handiak txatean",
@@ -808,7 +804,6 @@
"Old cryptography data detected": "Kriptografia datu zaharrak atzeman dira",
"Your Communities": "Zure komunitateak",
"Create a new community": "Sortu komunitate berria",
- "Join an existing community": "Elkartu badagoen komunitate batetara",
"Warning": "Abisua",
"Please note you are logging into the %(hs)s server, not matrix.org.": "Kontuan izan %(hs)s zerbitzarira elkartu zarela, ez matrix.org.",
"Sign in to get started": "Hasi saioa hasteko",
@@ -845,8 +840,8 @@
"were unbanned %(count)s times|one": "debekua kendu zaie",
"was unbanned %(count)s times|other": "%(count)s aldiz kendu zaio debekua",
"was unbanned %(count)s times|one": "debekua kendu zaio",
- "were kicked %(count)s times|other": "%(count)s kanporatu zaie",
- "were kicked %(count)s times|one": "kanporatu zaie",
+ "were kicked %(count)s times|other": "%(count)s aldiz kanporatu zaie",
+ "were kicked %(count)s times|one": "(r) kanporatu zaie",
"was kicked %(count)s times|other": "%(count)s aldiz kanporatu zaio",
"was kicked %(count)s times|one": "kanporatu zaio",
"%(severalUsers)schanged their name %(count)s times|other": "%(severalUsers)s erabiltzaileek bere izena aldatu dute %(count)s aldiz",
@@ -927,7 +922,6 @@
"Custom of %(powerLevel)s": "%(powerLevel)s pertsonalizatua",
"Data from an older version of Riot has been detected. This will have caused end-to-end cryptography to malfunction in the older version. End-to-end encrypted messages exchanged recently whilst using the older version may not be decryptable in this version. This may also cause messages exchanged with this version to fail. If you experience problems, log out and back in again. To retain message history, export and re-import your keys.": "Riot bertsio zahar batek datuak antzeman dira. Honek bertsio zaharrean muturretik muturrerako zifratzea ez funtzionatzea eragingo du. Azkenaldian bertsio zaharrean bidali edo jasotako zifratutako mezuak agian ezin izango dira deszifratu bertsio honetan. Honek ere Bertsio honekin egindako mezu trukeak huts egitea ekar dezake. Arazoak badituzu, amaitu saioa eta hasi berriro saioa. Mezuen historiala gordetzeko, esportatu eta berriro inportatu zure gakoak.",
"Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "Sortu komunitate bat erabiltzaileak eta gelak biltzeko! Sortu zure hasiera orria eta markatu zure espazioa Matrix unibertsoan.",
- "To join an existing community you'll have to know its community identifier; this will look something like +example:matrix.org.": "Bdagoen komunitate batera elkartzeko, komunitatearen identifikatzailea jakin behar duzu; honen antza izango du +adibidea:matrix.org.",
"There's no one else here! Would you like to invite others or stop warning about the empty room?": "Ez dago beste inor hemen! Beste batzuk gonbidatu nahi dituzu edo gela hutsik dagoela abisatzeari utzi?",
"Light theme": "Itxura argia",
"Dark theme": "Itxura iluna",
@@ -938,7 +932,6 @@
"%(count)s of your messages have not been sent.|one": "Zure mezua ez da bidali.",
"%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|other": "Birbidali guztiak edo baztertu guztiak orain. Mezuak banaka birbidali edo baztertu ditzakezu ere.",
"%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|one": "Birbidali mezua edo baztertu mezua orain.",
- "Message Replies": "Mezuei erantzunak",
"Send an encrypted reply…": "Bidali zifratutako erantzun bat…",
"Send a reply (unencrypted)…": "Bidali erantzun bat (zifratu gabea)…",
"Send an encrypted message…": "Bidali zifratutako mezu bat…",
@@ -1127,7 +1120,6 @@
"Unable to fetch notification target list": "Ezin izan da jakinarazpen helburuen zerrenda eskuratu",
"Set Password": "Ezarri pasahitza",
"Enable audible notifications in web client": "Gaitu jakinarazpen entzungarriak web bezeroan",
- "Permalink": "Esteka iraunkorra",
"Off": "Ez",
"Riot does not know how to join a room on this network": "Riotek ez daki nola elkartu gela batetara sare honetan",
"Mentions only": "Aipamenak besterik ez",
@@ -1170,20 +1162,13 @@
"Enable widget screenshots on supported widgets": "Gaitu trepeten pantaila-argazkiak onartzen duten trepetetan",
"Send analytics data": "Bidali datu analitikoak",
"Muted Users": "Mutututako erabiltzaileak",
- "Help improve Riot by sending usage data? This will use a cookie. (See our cookie and privacy policies).": "Riot hobetzen lagundu nahi erabilera datuak bidaliz? Honek cookie bat erabiliko du. (Ikusi gure Cookie eta pribatutasun politikak).",
- "Help improve Riot by sending usage data? This will use a cookie.": "Riot hobetzen lagundu nahi erabilera datuak bidaliz? Honek cookie bat erabiliko du.",
- "Yes please": "Bai mesedez",
"Warning: This widget might use cookies.": "Abisua: Trepeta honek cookie-ak erabili litzake.",
"Terms and Conditions": "Termino eta baldintzak",
"To continue using the %(homeserverDomain)s homeserver you must review and agree to our terms and conditions.": "%(homeserverDomain)s hasiera-zerbitzaria erabiltzen jarraitzeko gure termino eta baldintzak irakurri eta onartu behar dituzu.",
"Review terms and conditions": "Irakurri termino eta baldintzak",
"Failed to indicate account erasure": "Ezin izan da kontuaren ezabaketa jakinarazi",
- "This will make your account permanently unusable. You will not be able to log in, and no one will be able to re-register the same user ID. This action is irreversible.": "Honek zure kontua betiko erabilgaitz bihurtuko du. Ezin izango duzu saioa hasi, eta beste inork ezin izango du erabiltzaile ID bera erabili. Ez dago ekintza hau desegiterik.",
- "Deactivating your account does not by default erase messages you have sent. If you would like to erase your messages, please tick the box below.": "Zure kontua desaktibatzean ez dira lehenetsita zuk bidalitako mezuak ezabatuko. Zuk bidalitako mezuak ezabatu nahi badituzu, markatu beheko kutxa.",
- "Message visibility in Matrix is similar to email. Erasing your messages means that messages have you sent will not be shared with any new or unregistered users, but registered users who already had access to these messages will still have access to their copy.": "Matrix-eko mezuen ikusgaitasuna, e-mail mezuen antzekoa da. Zure mezuak ezabatzeak esan nahi du bidali dituzun mezuak ez direla erabiltzaile berriekin partekatuko, baina aurretik zure mezuak jaso dituzten erabiltzaile erregistratuek bere kopia izango dute.",
"To continue, please enter your password:": "Jarraitzeko, sartu zure pasahitza:",
"password": "pasahitza",
- "Please erase all messages I have sent when my account is deactivated. (Warning: this will cause future users to see an incomplete view of conversations, which is a bad experience).": "Ezabatu bidali ditudan mezu guztiak nire kontua desaktibatzean. (Abisua: Etorkizuneko erabiltzaileek elkarrizketa partzialak ikusiko dituzte, esperientzia kaskarra sortuz).",
"e.g. %(exampleValue)s": "adib. %(exampleValue)s",
"Reload widget": "Birkargatu trepeta",
"To notify everyone in the room, you must be a": "Gelan dauden guztiei jakinarazteko",
@@ -1195,5 +1180,20 @@
"Message visibility in Matrix is similar to email. Our forgetting your messages means that messages you have sent will not be shared with any new or unregistered users, but registered users who already have access to these messages will still have access to their copy.": "Matrix-eko mezuen ikusgaitasuna e-mail sistemaren antekoa da. Guk zure mezuak ahaztean ez dizkiogu erabiltzaile berriei edo izena eman ez dutenei erakutsiko, baina jada zure mezuak jaso dituzten erregistratutako erabiltzaileen bere kopia izaten jarraituko dute.",
"Please forget all messages I have sent when my account is deactivated (Warning: this will cause future users to see an incomplete view of conversations)": "Ahaztu bidali ditudan mezu guztiak kontua desaktibatzean (Abisua: Honekin etorkizuneko erabiltzaileek elkarrizketaren bertsio ez oso bat ikusiko dute)",
"Can't leave Server Notices room": "Ezin zara Server Notices gelatik atera",
- "This room is used for important messages from the Homeserver, so you cannot leave it.": "Gela hau mezu hasiera zerbitzariaren garrantzitsuak bidaltzeko erabiltzen da, eta ezin zara atera."
+ "This room is used for important messages from the Homeserver, so you cannot leave it.": "Gela hau mezu hasiera zerbitzariaren garrantzitsuak bidaltzeko erabiltzen da, eta ezin zara atera.",
+ "Try the app first": "Probatu aplikazioa aurretik",
+ "Encrypting": "Zifratzen",
+ "Encrypted, not sent": "Zifratua, bidali gabe",
+ "Share Link to User": "Partekatu esteka erabiltzailearekin",
+ "Share room": "Partekatu gela",
+ "Share Room": "Partekatu gela",
+ "Link to most recent message": "Esteka azken mezura",
+ "Share User": "Partekatu erabiltzailea",
+ "Share Community": "Partekatu komunitatea",
+ "Share Room Message": "Partekatu gelako mezua",
+ "Link to selected message": "Esteka hautatutako mezura",
+ "COPY": "KOPIATU",
+ "Share Message": "Partekatu mezua",
+ "No Audio Outputs detected": "Ez da audio irteerarik antzeman",
+ "Audio Output": "Audio irteera"
}
diff --git a/src/i18n/strings/fa.json b/src/i18n/strings/fa.json
index 0e532d9483..2b18ba7693 100644
--- a/src/i18n/strings/fa.json
+++ b/src/i18n/strings/fa.json
@@ -124,7 +124,6 @@
"Set Password": "پسوردتان را انتخاب کنید",
"An error occurred whilst saving your email notification preferences.": "خطایی در حین ذخیرهی ترجیجات شما دربارهی رایانامه رخ داد.",
"Enable audible notifications in web client": "آگاهسازی صدادار را در کارگزار وب فعال کن",
- "Permalink": "پایاپیوند",
"Off": "خاموش",
"Riot does not know how to join a room on this network": "رایوت از چگونگی ورود به یک گپ در این شبکه اطلاعی ندارد",
"Mentions only": "فقط نامبردنها",
diff --git a/src/i18n/strings/fi.json b/src/i18n/strings/fi.json
index e5787ab561..d39091b619 100644
--- a/src/i18n/strings/fi.json
+++ b/src/i18n/strings/fi.json
@@ -198,7 +198,6 @@
"Level:": "Taso:",
"Local addresses for this room:": "Tämän huoneen paikalliset osoitteet:",
"Logged in as:": "Kirjautunut käyttäjänä:",
- "Login as guest": "Kirjaudu vieraana",
"Logout": "Kirjaudu ulos",
"Low priority": "Alhainen prioriteetti",
"Manage Integrations": "Hallinoi integraatioita",
@@ -451,7 +450,6 @@
"End-to-end encryption is in beta and may not be reliable": "Päästä päähän salaus on vielä testausvaiheessa ja saattaa toimia epävarmasti",
"Error: Problem communicating with the given homeserver.": "Virhe: Ongelma yhteydenpidossa kotipalvelimeen.",
"Existing Call": "Käynnissä oleva puhelu",
- "Failed to lookup current room": "Nykyisen huoneen löytäminen epäonnistui",
"Join as voice or video.": "Liity käyttäen ääntä tai videota.",
"%(targetName)s joined the room.": "%(targetName)s liittyi huoneeseen.",
"%(senderName)s kicked %(targetName)s.": "%(senderName)s poisti käyttäjän %(targetName)s huoneesta.",
@@ -459,7 +457,6 @@
"Publish this room to the public in %(domain)s's room directory?": "Julkaise tämä huone domainin %(domain)s huoneluettelossa?",
"Missing room_id in request": "room_id puuttuu kyselystä",
"Missing user_id in request": "user_id puuttuu kyselystä",
- "Must be viewing a room": "Pakko olla huoneessa",
"Never send encrypted messages to unverified devices from this device": "Älä koskaa lähetä salattuja viestejä varmentamattomiin laitteisiin tältä laitteelta",
"Never send encrypted messages to unverified devices in this room from this device": "Älä koskaa lähetä salattuja viestejä varmentamattomiin laitteisiin tässä huoneessa tältä laitteelta",
"New address (e.g. #foo:%(localDomain)s)": "Uusi osoite (esim. #foo:%(localDomain)s)",
@@ -790,7 +787,6 @@
"You're not currently a member of any communities.": "Et ole minkään yhteisön jäsen tällä hetkellä.",
"Error whilst fetching joined communities": "Virhe ladatessa listaa yhteistöistä joihin olet liittynyt",
"Create a new community": "Luo uusi yhteisö",
- "Join an existing community": "Liity olemassaolevaan yhteisöön",
"Light theme": "Vaalea ulkoasu",
"Dark theme": "Tumma ulkoasu",
"Status.im theme": "Status.im ulkoasu",
@@ -824,7 +820,6 @@
"%(widgetName)s widget added by %(senderName)s": "%(widgetName)s pienoisohjelman lisännyt %(senderName)s",
"%(widgetName)s widget removed by %(senderName)s": "%(widgetName)s pienoisohjelman poistanut %(senderName)s",
"Send": "Lähetä",
- "Tag Panel": "Tagit",
"Delete %(count)s devices|other": "Poista %(count)s laitetta",
"Delete %(count)s devices|one": "Poista laite",
"Select devices": "Valitse laitteet",
@@ -1050,7 +1045,6 @@
"Set Password": "Aseta salasana",
"An error occurred whilst saving your email notification preferences.": "Sähköposti-ilmoitusasetuksia tallettaessa tapahtui virhe.",
"Enable audible notifications in web client": "Ota käyttöön äänelliset ilmoitukset",
- "Permalink": "Pysyvä linkki",
"remove %(name)s from the directory.": "poista %(name)s hakemistosta.",
"Off": "Pois päältä",
"Riot does not know how to join a room on this network": "Riot ei tiedä miten liittya huoneeseen tässä verkossa",
diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json
index 8dd45192e6..8843ad89ca 100644
--- a/src/i18n/strings/fr.json
+++ b/src/i18n/strings/fr.json
@@ -105,7 +105,6 @@
"Failed to kick": "Échec de l'exclusion",
"Failed to leave room": "Échec du départ du salon",
"Failed to load timeline position": "Échec du chargement de la position dans l'historique",
- "Failed to lookup current room": "Échec de la recherche du salon actuel",
"Failed to mute user": "Échec de la mise en sourdine de l'utilisateur",
"Failed to reject invite": "Échec du rejet de l'invitation",
"Failed to reject invitation": "Échec du rejet de l'invitation",
@@ -166,7 +165,6 @@
"%(targetName)s left the room.": "%(targetName)s a quitté le salon.",
"Local addresses for this room:": "Adresses locales pour ce salon :",
"Logged in as:": "Identifié en tant que :",
- "Login as guest": "Se connecter en tant que visiteur",
"Logout": "Se déconnecter",
"Low priority": "Priorité basse",
"%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s a rendu l'historique visible à tous les membres du salon, depuis le moment où ils ont été invités.",
@@ -183,7 +181,6 @@
"Missing user_id in request": "Absence du user_id dans la requête",
"Mobile phone number": "Numéro de téléphone mobile",
"Moderator": "Modérateur",
- "Must be viewing a room": "Doit être en train de visualiser un salon",
"%(serverName)s Matrix ID": "%(serverName)s identifiant Matrix",
"Name": "Nom",
"Never send encrypted messages to unverified devices from this device": "Ne jamais envoyer de message chiffré aux appareils non vérifiés depuis cet appareil",
@@ -864,8 +861,6 @@
"Error whilst fetching joined communities": "Erreur lors de l'obtention des communautés rejointes",
"Create a new community": "Créer une nouvelle communauté",
"Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "Créez une communauté pour grouper des utilisateurs et des salons ! Construisez une page d'accueil personnalisée pour distinguer votre espace dans l'univers Matrix.",
- "Join an existing community": "Rejoindre une communauté existante",
- "To join an existing community you'll have to know its community identifier; this will look something like +example:matrix.org.": "Pour rejoindre une communauté existante, vous devrez connaître son identifiant. Cela ressemblera à +exemple:matrix.org.",
"Disable Emoji suggestions while typing": "Désactiver les suggestions d'emojis lors de la saisie",
"Disable big emoji in chat": "Désactiver les gros emojis dans les discussions",
"Mirror local video feed": "Refléter le flux vidéo local",
@@ -919,7 +914,6 @@
"Flair will appear if enabled in room settings": "Les badges n'apparaîtront que s'ils sont activés dans les paramètres de chaque salon",
"Flair will not appear": "Les badges n'apparaîtront pas",
"Display your community flair in rooms configured to show it.": "Sélectionnez les badges dans les paramètres de chaque salon pour les afficher.",
- "Tag Panel": "Panneau des étiquettes",
"Addresses": "Adresses",
"expand": "développer",
"collapse": "réduire",
@@ -938,7 +932,6 @@
"%(count)s of your messages have not been sent.|one": "Votre message n'a pas été envoyé.",
"%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|other": "Tout renvoyer ou tout annuler maintenant. Vous pouvez aussi choisir des messages individuels à renvoyer ou annuler.",
"%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|one": "Renvoyer le message ou annuler le message maintenant.",
- "Message Replies": "Réponses",
"Send an encrypted reply…": "Envoyer une réponse chiffrée…",
"Send a reply (unencrypted)…": "Envoyer une réponse (non chiffrée)…",
"Send an encrypted message…": "Envoyer un message chiffré…",
@@ -1121,7 +1114,6 @@
"Unable to fetch notification target list": "Impossible de récupérer la liste des appareils recevant les notifications",
"Set Password": "Définir un mot de passe",
"Enable audible notifications in web client": "Activer les notifications sonores pour le client web",
- "Permalink": "Permalien",
"Off": "Désactivé",
"Riot does not know how to join a room on this network": "Riot ne peut pas joindre un salon sur ce réseau",
"Mentions only": "Seulement les mentions",
@@ -1169,25 +1161,17 @@
"Collapse Reply Thread": "Dévoiler le fil de réponse",
"Enable widget screenshots on supported widgets": "Activer les captures d'écran des widgets pris en charge",
"Send analytics data": "Envoyer les données analytiques",
- "Help improve Riot by sending usage data? This will use a cookie. (See our cookie and privacy policies).": "Aider Riot à s'améliorer en envoyant des données d'utilisation ? Ceci utilisera un cookie. (Voir nos politiques de cookie et de confidentialité).",
- "Help improve Riot by sending usage data? This will use a cookie.": "Aider Riot à s'améliorer en envoyant des données d'utilisation ? Ceci utilisera un cookie.",
- "Yes please": "Oui, s'il vous plaît",
"Muted Users": "Utilisateurs ignorés",
"Warning: This widget might use cookies.": "Avertissement : ce widget utilise peut-être des cookies.",
"Terms and Conditions": "Conditions générales",
"To continue using the %(homeserverDomain)s homeserver you must review and agree to our terms and conditions.": "Pour continuer à utiliser le serveur d'accueil %(homeserverDomain)s, vous devez lire et accepter nos conditions générales.",
"Review terms and conditions": "Voir les conditions générales",
"Failed to indicate account erasure": "Échec de notification de la suppression du compte",
- "This will make your account permanently unusable. You will not be able to log in, and no one will be able to re-register the same user ID. This action is irreversible.": "Cela rendra votre compte inutilisable de façon permanente. Vous ne pourrez plus vous connecter et ne pourrez plus vous enregistrer avec le même identifiant d'utilisateur. Cette action est irréversible.",
- "Deactivating your account does not by default erase messages you have sent. If you would like to erase your messages, please tick the box below.": "Désactiver votre compte ne supprime pas les messages que vous avez envoyés par défaut. Si vous souhaitez supprimer vos messages, cochez la case ci-dessous.",
- "Message visibility in Matrix is similar to email. Erasing your messages means that messages have you sent will not be shared with any new or unregistered users, but registered users who already had access to these messages will still have access to their copy.": "La visibilité des messages dans Matrix est la même que celle des e-mails. Supprimer vos messages signifie que les messages que vous avez envoyés ne seront pas partagés avec de nouveaux utilisateurs ou les utilisateurs non enregistrés, mais les utilisateurs enregistrés qui ont déjà eu accès à vos messages continueront d'en avoir une copie.",
"To continue, please enter your password:": "Pour continuer, veuillez renseigner votre mot de passe :",
"password": "mot de passe",
- "Please erase all messages I have sent when my account is deactivated. (Warning: this will cause future users to see an incomplete view of conversations, which is a bad experience).": "Veuillez supprimer tous les messages que j'ai envoyé quand mon compte est désactivé. (Attention : les futurs utilisateurs verront alors des conversations incomplètes, ce qui est une mauvaise expérience).",
"This will make your account permanently unusable. You will not be able to log in, and no one will be able to re-register the same user ID. This will cause your account to leave all rooms it is participating in, and it will remove your account details from your identity server. This action is irreversible.": "Votre compte sera inutilisable de façon permanente. Vous ne pourrez plus vous reconnecter et personne ne pourra se réenregistrer avec le même identifiant d'utilisateur. Votre compte quittera tous les salons auxquels il participe et tous ses détails seront supprimés du serveur d'identité. Cette action est irréversible.",
"Deactivating your account does not by default cause us to forget messages you have sent. If you would like us to forget your messages, please tick the box below.": "La désactivation du compte ne nous fait pas oublier les messages que vous avez envoyés par défaut. Si vous souhaitez que nous les oubliions, cochez la case ci-dessous.",
"e.g. %(exampleValue)s": "par ex. %(exampleValue)s",
- "Help improve Riot by sending usage data? This will use a cookie. (See our cookie and privacy policies).": "Aider Riot à s'améliorer en envoyant des données d'utilisation ? Cela utilisera un cookie. (Voir nos politiques de cookie et de confidentialité).",
"Message visibility in Matrix is similar to email. Our forgetting your messages means that messages you have sent will not be shared with any new or unregistered users, but registered users who already have access to these messages will still have access to their copy.": "La visibilité des messages dans Matrix est la même que celle des e-mails. Quand nous oublions vos messages, cela signifie que les messages que vous avez envoyés ne seront partagés avec aucun nouvel utilisateur ou avec les utilisateurs non enregistrés, mais les utilisateurs enregistrés qui ont déjà eu accès à ces messages en conserveront leur propre copie.",
"Please forget all messages I have sent when my account is deactivated (Warning: this will cause future users to see an incomplete view of conversations)": "Veuillez oublier tous les messages que j'ai envoyé quand mon compte sera désactivé (Avertissement : les futurs utilisateurs verront des conversations incomplètes)",
"Reload widget": "Recharger le widget",
@@ -1196,5 +1180,20 @@
"Yes, I want to help!": "Oui, je veux aider !",
"Can't leave Server Notices room": "Impossible de quitter le salon des Annonces du serveur",
"This room is used for important messages from the Homeserver, so you cannot leave it.": "Ce salon est utilisé pour les messages importants du serveur d'accueil, donc vous ne pouvez pas en partir.",
- "To notify everyone in the room, you must be a": "Pour notifier tout le monde dans le salon, vous devez être un(e)"
+ "To notify everyone in the room, you must be a": "Pour notifier tout le monde dans le salon, vous devez être un(e)",
+ "Try the app first": "Essayer d'abord l'application",
+ "Encrypting": "Chiffrement en cours",
+ "Encrypted, not sent": "Chiffré, pas envoyé",
+ "No Audio Outputs detected": "Aucune sortie audio détectée",
+ "Audio Output": "Sortie audio",
+ "Share Link to User": "Partager le lien vers l'utilisateur",
+ "Share room": "Partager le salon",
+ "Share Room": "Partager le salon",
+ "Link to most recent message": "Lien vers le message le plus récent",
+ "Share User": "Partager l'utilisateur",
+ "Share Community": "Partager la communauté",
+ "Share Room Message": "Partager le message du salon",
+ "Link to selected message": "Lien vers le message sélectionné",
+ "COPY": "COPIER",
+ "Share Message": "Partager le message"
}
diff --git a/src/i18n/strings/gl.json b/src/i18n/strings/gl.json
index fdab066031..57d8301df6 100644
--- a/src/i18n/strings/gl.json
+++ b/src/i18n/strings/gl.json
@@ -1,31 +1,31 @@
{
- "This email address is already in use": "Este enderezo de correo xa está a ser utilizado",
- "This phone number is already in use": "Este número de teléfono xa está a ser utilizado",
+ "This email address is already in use": "Xa se está a usar este correo",
+ "This phone number is already in use": "Xa se está a usar este teléfono",
"Failed to verify email address: make sure you clicked the link in the email": "Fallo na verificación do enderezo de correo: asegúrese de ter picado na ligazón do correo",
"The remote side failed to pick up": "O interlocutor non respondeu",
- "Unable to capture screen": "Non se puido pillar a pantalla",
- "Existing Call": "Chamada existente",
+ "Unable to capture screen": "Non se puido capturar a pantalla",
+ "Existing Call": "Rexistro de chamadas",
"You are already in a call.": "Xa está nunha chamada.",
- "VoIP is unsupported": "VoIP non admitida",
- "You cannot place VoIP calls in this browser.": "Non pode establecer chamadas VoIP en este navegador.",
- "You cannot place a call with yourself.": "Non pode chamarse a vostede mesma.",
- "Conference calls are not supported in this client": "Non pode establecer chamadas de Reunión en este cliente",
- "Conference calls are not supported in encrypted rooms": "Nas salas cifradas non se pode establecer Chamadas de Reunión",
+ "VoIP is unsupported": "Sen soporte para VoIP",
+ "You cannot place VoIP calls in this browser.": "Non pode establecer chamadas VoIP neste navegador.",
+ "You cannot place a call with yourself.": "Non pode facer unha chamada a si mesmo.",
+ "Conference calls are not supported in this client": "Non pode establecer chamadas de reunión neste cliente",
+ "Conference calls are not supported in encrypted rooms": "Nas salas cifradas non se pode establecer chamadas de reunión",
"Warning!": "Aviso!",
- "Conference calling is in development and may not be reliable.": "As chamadas de Reunión poderían non ser totalmente estables xa que están en desenvolvemento.",
+ "Conference calling is in development and may not be reliable.": "As chamadas de reunión poderían non ser totalmente estables xa que están en desenvolvemento.",
"Failed to set up conference call": "Fallo ao establecer a chamada de reunión",
"Conference call failed.": "Fallo na chamada de reunión.",
"Call Failed": "Fallou a chamada",
- "There are unknown devices in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "Hai dispositivos descoñecidos en esta sala: si sigue adiante sen verificalos, pode ser posible que alguén bote un ollo a súa chamada.",
+ "There are unknown devices in this room: if you proceed without verifying them, it will be possible for someone to eavesdrop on your call.": "Hai dispositivos descoñecidos en esta sala: se segue adiante sen verificalos, pode ser posible que alguén bote un ollo a súa chamada.",
"Review Devices": "Revisar dispositivos",
"Call Anyway": "Chamar igualmente",
- "Answer Anyway": "Respostar igualmente",
+ "Answer Anyway": "Responder igualmente",
"Call": "Chamar",
- "Answer": "Respostar",
- "Call Timeout": "Finou a chamada",
- "The file '%(fileName)s' failed to upload": "O ficheiro '%(fileName)s' non se puido subir",
- "The file '%(fileName)s' exceeds this home server's size limit for uploads": "O ficheiro '%(fileName)s' excede o límite establecido polo servidor para subidas",
- "Upload Failed": "Fallou a subida",
+ "Answer": "Resposta",
+ "Call Timeout": "Tempo de resposta de chamada",
+ "The file '%(fileName)s' failed to upload": "Non se puido subir o ficheiro '%(fileName)s'",
+ "The file '%(fileName)s' exceeds this home server's size limit for uploads": "O ficheiro '%(fileName)s' excede o límite de tamaño establecido para este servidor",
+ "Upload Failed": "Fallou o envío",
"Sun": "Dom",
"Mon": "Lun",
"Tue": "Mar",
@@ -50,66 +50,65 @@
"%(weekDayName)s %(time)s": "%(weekDayName)s %(time)s",
"%(weekDayName)s, %(monthName)s %(day)s %(time)s": "%(weekDayName)s, %(day)s %(monthName)s %(time)s",
"%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s": "%(weekDayName)s, %(day)s %(monthName)s %(fullYear)s %(time)s",
- "Who would you like to add to this community?": "A quén lle gustaría engadir a esta comunidade?",
- "Warning: any person you add to a community will be publicly visible to anyone who knows the community ID": "Aviso: calquer persoa que vostede engada a unha comunidade será públicamente visible para calquera que coñeza o ID da comunidade",
- "Invite new community members": "Convidar a novos membros da comunidade",
+ "Who would you like to add to this community?": "A quen quere engadir a esta comunidade?",
+ "Warning: any person you add to a community will be publicly visible to anyone who knows the community ID": "Aviso: calquera persoa que engada a unha comunidade estará publicamente visible para calquera que coñeza a ID da comunidade",
+ "Invite new community members": "Convidará comunidade a novos participantes",
"Name or matrix ID": "Nome ou ID matrix",
- "Invite to Community": "Convide a comunidade",
- "Which rooms would you like to add to this community?": "Qué salas desexaría engadir a esta comunidade?",
- "Show these rooms to non-members on the community page and room list?": "Mostrar estas salas a non-membros na páxina da comunidade e lista de salas?",
- "Add rooms to the community": "Engadir salas a comunidade",
+ "Invite to Community": "Convidar á comunidade",
+ "Which rooms would you like to add to this community?": "Que salas desexaría engadir a esta comunidade?",
+ "Show these rooms to non-members on the community page and room list?": "Quere que estas salas se lle mostren a outros membros de fóra da comunidade na lista de salas?",
+ "Add rooms to the community": "Engadir salas á comunidade",
"Room name or alias": "Nome da sala ou alcume",
- "Add to community": "Engadir a comunidade",
- "Failed to invite the following users to %(groupId)s:": "Fallo ao convidar as seguintes usuarias a %(groupId)s:",
- "Failed to invite users to community": "Fallou o convite de usuarias a comunidade",
- "Failed to invite users to %(groupId)s": "Fallou o convite de usuarias a %(groupId)s",
+ "Add to community": "Engadir á comunidade",
+ "Failed to invite the following users to %(groupId)s:": "Fallo ao convidar os seguintes usuarios a %(groupId)s:",
+ "Failed to invite users to community": "Houbo un fallo convidando usuarios á comunidade",
+ "Failed to invite users to %(groupId)s": "Houbo un fallo convidando usuarios a %(groupId)s",
"Failed to add the following rooms to %(groupId)s:": "Fallo ao engadir as seguintes salas a %(groupId)s:",
- "Riot does not have permission to send you notifications - please check your browser settings": "Riot non ten permiso para enviarlle notificacións - por favor comprobe os axustes do navegador",
- "Riot was not given permission to send notifications - please try again": "Riot non ten permiso para enviar notificacións - inténteo de novo",
- "Unable to enable Notifications": "Non se puideron habilitar as notificacións",
+ "Riot does not have permission to send you notifications - please check your browser settings": "Riot non ten permiso para enviarlle notificacións: comprobe os axustes do navegador",
+ "Riot was not given permission to send notifications - please try again": "Riot non ten permiso para enviar notificacións: inténteo de novo",
+ "Unable to enable Notifications": "Non se puideron activar as notificacións",
"This email address was not found": "Non se atopou este enderezo de correo",
- "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "O seu enderezo de correo semella non estar asociado a un ID Matrix en este servidor.",
- "Default": "Por omisión",
+ "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "O seu enderezo de correo semella non estar asociado a un ID Matrix neste servidor.",
+ "Default": "Por defecto",
"Restricted": "Restrinxido",
"Moderator": "Moderador",
"Admin": "Administrador",
"Start a chat": "Iniciar unha conversa",
- "Who would you like to communicate with?": "Con quén desexa comunicarse?",
+ "Who would you like to communicate with?": "Con quen desexa comunicarse?",
"Email, name or matrix ID": "Correo, nome ou ID matrix",
"Start Chat": "Iniciar conversa",
- "Invite new room members": "Convidar a sala a novos membros",
- "Who would you like to add to this room?": "A quén desexaría engadir a esta sala?",
+ "Invite new room members": "Convidar a novos participantes",
+ "Who would you like to add to this room?": "A quen desexaría engadir a esta sala?",
"Send Invites": "Enviar convites",
"Failed to invite user": "Fallo ao convidar usuaria",
"Operation failed": "Fallou a operación",
"Failed to invite": "Fallou o convite",
- "Failed to invite the following users to the %(roomName)s room:": "Non se puideron convidar as seguintes usuarias a sala %(roomName)s:",
+ "Failed to invite the following users to the %(roomName)s room:": "Houbo un fallo convidando os seguintes usuarios á sala %(roomName)s:",
"You need to be logged in.": "Precisa estar conectada.",
- "You need to be able to invite users to do that.": "Vostede precisa estar autorizada a convidar usuarias para facer iso.",
- "Unable to create widget.": "Non se puido crear o widget.",
+ "You need to be able to invite users to do that.": "Precisa autorización para convidar a outros usuarias para poder facer iso.",
+ "Unable to create widget.": "Non se puido crear o trebello.",
"Failed to send request.": "Fallo ao enviar a petición.",
"This room is not recognised.": "Non se recoñece esta sala.",
"Power level must be positive integer.": "O nivel de poder ten que ser un enteiro positivo.",
- "You are not in this room.": "Vostede non está en esta sala.",
- "You do not have permission to do that in this room.": "Non ten permiso para facer eso en esta sala.",
+ "You are not in this room.": "Non está nesta sala.",
+ "You do not have permission to do that in this room.": "Non ten permiso para facer iso nesta sala.",
"Missing room_id in request": "Falta o room_id na petición",
- "Must be viewing a room": "Debería estar vendo unha sala",
"Room %(roomId)s not visible": "A sala %(roomId)s non é visible",
- "Missing user_id in request": "Falata o user_id na petición",
+ "Missing user_id in request": "Falta o user_id na petición",
"Usage": "Uso",
"/ddg is not a command": "/ddg non é unha orde",
"To use it, just wait for autocomplete results to load and tab through them.": "Para utilizala, agarde que carguen os resultados de autocompletado e escolla entre eles.",
"Unrecognised room alias:": "Alcumes de sala non recoñecidos:",
"Ignored user": "Usuaria ignorada",
"You are now ignoring %(userId)s": "Agora está a ignorar %(userId)s",
- "Unignored user": "Usuarias non ignorada",
+ "Unignored user": "Usuarios non ignorados",
"You are no longer ignoring %(userId)s": "Xa non está a ignorar a %(userId)s",
"Unknown (user, device) pair:": "Parella descoñecida (dispositivo, usuaria):",
"Device already verified!": "Dispositivo xa verificado!",
- "WARNING: Device already verified, but keys do NOT MATCH!": "AVISO: o dispositivo xa está verificado, que as chaves NON CONCORDAN!",
- "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!": "AVISO: FALLOU A VERIFICACIÓN DE CHAVES! A chave de firma para %(userId)s e dispositivo %(deviceId)s é \"%(fprint)s\" que non concorda coa chave proporcionada \"%(fingerprint)s\". Esto podería significar que as súas comunicacións están a ser interceptadas!",
+ "WARNING: Device already verified, but keys do NOT MATCH!": "Aviso: o dispositivo xa está verificado só que as chaves NON CONCORDAN!",
+ "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!": "AVISO: FALLOU A VERIFICACIÓN DE CHAVES! A chave de firma para o %(userId)s e dispositivo %(deviceId)s é \"%(fprint)s\" que non concorda coa chave proporcionada \"%(fingerprint)s\". Isto podería significar que as súas comunicacións están a ser interceptadas!",
"Verified key": "Chave verificada",
- "The signing key you provided matches the signing key you received from %(userId)s's device %(deviceId)s. Device marked as verified.": "A chave de firma que proporcionou concorda coa chave de firma que recibeu do dispositivo %(deviceId)s de %(userId)s. Dispositivo marcado como verificado.",
+ "The signing key you provided matches the signing key you received from %(userId)s's device %(deviceId)s. Device marked as verified.": "A chave de firma que proporcionou concorda coa chave de firma que recibiu do dispositivo %(deviceId)s de %(userId)s. Dispositivo marcado como verificado.",
"Unrecognised command:": "Orde non recoñecida:",
"Reason": "Razón",
"%(targetName)s accepted the invitation for %(displayName)s.": "%(targetName)s aceptou o convite para %(displayName)s.",
@@ -123,7 +122,7 @@
"%(senderName)s changed their profile picture.": "%(senderName)s cambiou a súa imaxe de perfil.",
"%(senderName)s set a profile picture.": "%(senderName)s estableceu a imaxe de perfil.",
"VoIP conference started.": "Comezou a conferencia VoIP.",
- "%(targetName)s joined the room.": "%(targetName)s uneuse a sala.",
+ "%(targetName)s joined the room.": "%(targetName)s uniuse a sala.",
"VoIP conference finished.": "Rematou a conferencia VoIP.",
"%(targetName)s rejected the invitation.": "%(targetName)s rexeitou a invitación.",
"%(targetName)s left the room.": "%(targetName)s deixou a sala.",
@@ -143,25 +142,25 @@
"%(senderName)s ended the call.": "%(senderName)s rematou a chamada.",
"%(senderName)s placed a %(callType)s call.": "%(senderName)s estableceu unha chamada %(callType)s.",
"%(senderName)s sent an invitation to %(targetDisplayName)s to join the room.": "%(senderName)s enviou un convite a %(targetDisplayName)s para unirse a sala.",
- "%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s fixo o historial da sala visible para toda a membresía, desde o punto en que foron convidadas.",
- "%(senderName)s made future room history visible to all room members, from the point they joined.": "%(senderName)s estableceu o historial futuro visible a toda a membresía, desde o punto en que se uniron.",
- "%(senderName)s made future room history visible to all room members.": "%(senderName)s fixo visible para toda a membresía o historial futuro da sala.",
+ "%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s fixo o historial da sala visible para todos os participantes, desde o punto en que foron convidadas.",
+ "%(senderName)s made future room history visible to all room members, from the point they joined.": "%(senderName)s estableceu o historial futuro visible a todos os participantes, desde o punto en que se uniron.",
+ "%(senderName)s made future room history visible to all room members.": "%(senderName)s fixo visible para todos participantes o historial futuro da sala.",
"%(senderName)s made future room history visible to anyone.": "%(senderName)s fixo visible para calquera o historial futuro da sala.",
"%(senderName)s made future room history visible to unknown (%(visibility)s).": "%(senderName)s fixo visible o historial futuro da sala para descoñecidos (%(visibility)s).",
- "%(senderName)s turned on end-to-end encryption (algorithm %(algorithm)s).": "%(senderName)s activou o cifrado extremo-a-extremo (algoritmo %(algorithm)s).",
+ "%(senderName)s turned on end-to-end encryption (algorithm %(algorithm)s).": "%(senderName)s activou o cifrado de par-a-par (algoritmo %(algorithm)s).",
"%(userId)s from %(fromPowerLevel)s to %(toPowerLevel)s": "%(userId)s desde %(fromPowerLevel)s a %(toPowerLevel)s",
"%(senderName)s changed the power level of %(powerLevelDiffText)s.": "%(senderName)s cambiou o nivel de autoridade a %(powerLevelDiffText)s.",
"%(senderName)s changed the pinned messages for the room.": "%(senderName)s cambiou as mensaxes fixadas para a sala.",
- "%(widgetName)s widget modified by %(senderName)s": "O engadido %(widgetName)s modificado por %(senderName)s",
- "%(widgetName)s widget added by %(senderName)s": "O %(widgetName)s engadido por %(senderName)s",
+ "%(widgetName)s widget modified by %(senderName)s": "O trebello %(widgetName)s modificado por %(senderName)s",
+ "%(widgetName)s widget added by %(senderName)s": "O trebello %(widgetName)s engadido por %(senderName)s",
"%(widgetName)s widget removed by %(senderName)s": "%(widgetName)s eliminado por %(senderName)s",
"%(displayName)s is typing": "%(displayName)s está a escribir",
"%(names)s and %(count)s others are typing|other": "%(names)s e %(count)s outras están a escribir",
"%(names)s and %(count)s others are typing|one": "%(names)s e outra está a escribir",
"%(names)s and %(lastPerson)s are typing": "%(names)s e %(lastPerson)s están a escribir",
- "Failure to create room": "Fallo ao crear a sala",
+ "Failure to create room": "Fallou a creación da sala",
"Server may be unavailable, overloaded, or you hit a bug.": "O servidor podería non estar dispoñible, con sobrecarga ou ter un fallo.",
- "Send anyway": "Enviar de todos xeitos",
+ "Send anyway": "Enviar de todos os xeitos",
"Send": "Enviar",
"Unnamed Room": "Sala sen nome",
"Your browser does not support the required cryptography extensions": "O seu navegador non soporta as extensións de criptografía necesarias",
@@ -169,8 +168,7 @@
"Authentication check failed: incorrect password?": "Fallou a comprobación de autenticación: contrasinal incorrecto?",
"Failed to join room": "Non se puido unir a sala",
"Message Pinning": "Fixando mensaxe",
- "Tag Panel": "Panel de etiquetas",
- "Disable Emoji suggestions while typing": "Deshabilitar a suxestión de Emoji mentras escribe",
+ "Disable Emoji suggestions while typing": "Desactivar a suxestión de Emoji mentres escribe",
"Use compact timeline layout": "Utilizar a disposición compacta da liña temporal",
"Hide removed messages": "Ocultar mensaxes eliminadas",
"Hide join/leave messages (invites/kicks/bans unaffected)": "Ocultar mensaxes de unión/saída (convites/expulsións/bloqueos non afectados)",
@@ -178,19 +176,19 @@
"Hide display name changes": "Ocultar cambios no nome público",
"Hide read receipts": "Ocultar avisos de recepción",
"Show timestamps in 12 hour format (e.g. 2:30pm)": "Mostrar marcas de tempo con formato 12 horas (ex. 2:30pm)",
- "Always show message timestamps": "Mostar sempre marcas de tempo",
+ "Always show message timestamps": "Mostrar sempre marcas de tempo",
"Autoplay GIFs and videos": "Reprodución automática de GIFs e vídeos",
- "Enable automatic language detection for syntax highlighting": "Habilitar a detección automática de idioma para o resalte da sintaxe",
+ "Enable automatic language detection for syntax highlighting": "Activar a detección automática de idioma para o resalte da sintaxe",
"Hide avatars in user and room mentions": "Ocultar avatares nas mencións de usuarios e salas",
- "Disable big emoji in chat": "Deshabilitar emojis grandes nas conversas",
+ "Disable big emoji in chat": "Desactivar emojis grandes nas conversas",
"Don't send typing notifications": "Non enviar notificacións de escritura",
"Automatically replace plain text Emoji": "Substituír automaticamente Emoji en texto plano",
- "Disable Peer-to-Peer for 1:1 calls": "Deshabilitar Peer-to-Peer para chamadas 1:1",
- "Never send encrypted messages to unverified devices from this device": "Non enviar mensaxes cifradas a dispositivos non verificados desde este dispositivo",
- "Never send encrypted messages to unverified devices in this room from this device": "Non enviar mensaxes cifradas a dispositivos non verificados en esta sala desde este dispositivo",
- "Enable inline URL previews by default": "Habilitar por omisión vistas previas en liña de URL",
- "Enable URL previews for this room (only affects you)": "Habilitar vista previa de URL en esta sala (só lle afecta a vostede)",
- "Enable URL previews by default for participants in this room": "Habilitar vista previa de URL por omisión para as participantes en esta sala",
+ "Disable Peer-to-Peer for 1:1 calls": "Desactivar Peer-to-Peer para chamadas 1:1",
+ "Never send encrypted messages to unverified devices from this device": "Nunca enviar mensaxes cifradas aos dispositivos que non estean verificados neste dispositivo",
+ "Never send encrypted messages to unverified devices in this room from this device": "Nunca enviar mensaxes cifradas aos dispositivos que non estean verificados nesta sala desde este dispositivo",
+ "Enable inline URL previews by default": "Activar por defecto as vistas previas en liña de URL",
+ "Enable URL previews for this room (only affects you)": "Activar avista previa de URL nesta sala (só lle afecta a vostede)",
+ "Enable URL previews by default for participants in this room": "Activar a vista previa de URL por defecto para as participantes nesta sala",
"Room Colour": "Cor da sala",
"Active call (%(roomName)s)": "Chamada activa (%(roomName)s)",
"unknown caller": "interlocutora descoñecida",
@@ -211,8 +209,8 @@
"Upload new:": "Subir nova:",
"No display name": "Sen nome público",
"New passwords don't match": "Os contrasinais novos non coinciden",
- "Passwords can't be empty": "Os contranais non poden estar baldeiros",
- "Changing 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.": "Ao cambiar o contrasinal restablecerá todas as chaves de cifrado extremo-a-extremo en todos os dispositivos, facendo ilexible o historial da conversa a menos que primeiro exporte as chaves da sala e posteriormente as importe. No futuro melloraremos esto.",
+ "Passwords can't be empty": "Os contrasinais non poden estar baleiros",
+ "Changing 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.": "Ao cambiar o contrasinal restablecerá todas as chaves de cifrado extremo-a-extremo en todos os dispositivos, facendo ilexible o historial da conversa a menos que primeiro exporte as chaves da sala e posteriormente as importe. No futuro melloraremos isto.",
"Continue": "Continuar",
"Export E2E room keys": "Exportar chaves E2E da sala",
"Do you want to set an email address?": "Quere establecer un enderezo de correo electrónico?",
@@ -231,14 +229,13 @@
"Last seen": "Visto por última vez",
"Select devices": "Escolla dispositivos",
"Failed to set display name": "Fallo ao establecer o nome público",
- "Disable Notifications": "Deshabilitar notificacións",
- "Enable Notifications": "Habilitar notificacións",
+ "Disable Notifications": "Desactivar notificacións",
+ "Enable Notifications": "Activar ass notificacións",
"%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(weekDayName)s, %(day)s %(monthName)s %(fullYear)s",
- "Message Replies": "Respostas a mensaxe",
"Mirror local video feed": "Copiar fonte de vídeo local",
- "Cannot add any more widgets": "Non pode engadir máis widgets",
- "The maximum permitted number of widgets have already been added to this room.": "Xa se engadeu o número máximo de widgets a esta sala.",
- "Add a widget": "Engadir widget",
+ "Cannot add any more widgets": "Non pode engadir máis trebellos",
+ "The maximum permitted number of widgets have already been added to this room.": "Xa se lle engadiron o número máximo de trebellos a esta sala.",
+ "Add a widget": "Engadir un trebello",
"Drop File Here": "Solte aquí o ficheiro",
"Drop file here to upload": "Solte aquí o ficheiro para subilo",
" (unsupported)": " (non soportado)",
@@ -246,7 +243,7 @@
"Ongoing conference call%(supportedText)s.": "Chamada de conferencia en curso%(supportedText)s.",
"%(senderName)s sent an image": "%(senderName)s enviou unha imaxe",
"%(senderName)s sent a video": "%(senderName)s enviou un vídeo",
- "%(senderName)s uploaded a file": "%(senderName)s subeu un ficheiro",
+ "%(senderName)s uploaded a file": "%(senderName)s subiu un ficheiro",
"Options": "Axustes",
"Undecryptable": "Non descifrable",
"Encrypted by a verified device": "Cifrado por un dispositivo verificado",
@@ -271,7 +268,7 @@
"Failed to toggle moderator status": "Fallo ao mudar a estado de moderador",
"Failed to change power level": "Fallo ao cambiar o nivel de permisos",
"Are you sure?": "Está segura?",
- "You will not be able to undo this change as you are promoting the user to have the same power level as yourself.": "Non poderá desfacer este cambio xa que está promovendo a usaria a ter o mesmo nivel de permisos que vostede.",
+ "You will not be able to undo this change as you are promoting the user to have the same power level as yourself.": "Non poderá desfacer este cambio xa que lle estará promocionando e outorgándolle a outra persoa os mesmos permisos que os seus.",
"No devices with registered encryption keys": "Sen dispositivos con chaves de cifrado rexistradas",
"Devices": "Dispositivos",
"Unignore": "Non ignorar",
@@ -290,7 +287,7 @@
"and %(count)s others...|other": "e %(count)s outras...",
"and %(count)s others...|one": "e outra máis...",
"Invited": "Convidada",
- "Filter room members": "Filtrar membros da conversa",
+ "Filter room members": "Filtrar os participantes da conversa",
"%(userName)s (power %(powerLevelNumber)s)": "%(userName)s (permiso %(powerLevelNumber)s)",
"Attachment": "Anexo",
"Upload Files": "Subir ficheiros",
@@ -306,9 +303,9 @@
"Send a reply (unencrypted)…": "Enviar unha resposta (non cifrada)…",
"Send an encrypted message…": "Enviar unha mensaxe cifrada…",
"Send a message (unencrypted)…": "Enviar unha mensaxe (non cifrada)…",
- "You do not have permission to post to this room": "Non ten permiso para comentar en esta sala",
- "Turn Markdown on": "Habilitar Markdown",
- "Turn Markdown off": "Deshabilitar Markdown",
+ "You do not have permission to post to this room": "Non ten permiso para comentar nesta sala",
+ "Turn Markdown on": "Activar Markdown",
+ "Turn Markdown off": "Desactivar Markdown",
"Hide Text Formatting Toolbar": "Agochar barra de formato de texto",
"Server error": "Fallo no servidor",
"Server unavailable, overloaded, or something else went wrong.": "Servidor non dispoñible, sobrecargado, ou outra cousa puido fallar.",
@@ -321,8 +318,8 @@
"quote": "cita",
"bullet": "lista",
"numbullet": "lista numerada",
- "Markdown is disabled": "Markdown deshabilitado",
- "Markdown is enabled": "Markdown habilitado",
+ "Markdown is disabled": "Markdown desactivado",
+ "Markdown is enabled": "Markdown activado",
"Unpin Message": "Desfixar mensaxe",
"Jump to message": "Ir a mensaxe",
"No pinned messages.": "Sen mensaxes fixadas.",
@@ -340,7 +337,7 @@
"Idle": "En pausa",
"Offline": "Fóra de liña",
"Unknown": "Descoñecido",
- "Replying": "Respostando",
+ "Replying": "Respondendo",
"Seen by %(userName)s at %(dateTime)s": "Visto por %(userName)s as %(dateTime)s",
"No rooms to show": "Sen salas que mostrar",
"Unnamed room": "Sala sen nome",
@@ -357,11 +354,11 @@
"Forget room": "Esquecer sala",
"Search": "Busca",
"Show panel": "Mostra panel",
- "Drop here to favourite": "Solte aqui para favorito",
+ "Drop here to favourite": "Solte aquí para favorito",
"Drop here to tag direct chat": "Solte aquí para etiquetar chat directo",
"Drop here to restore": "Solte aquí para restablecer",
"Drop here to tag %(section)s": "Solte aquí para etiquetar %(section)s",
- "You will not be able to undo this change as you are demoting yourself, if you are the last privileged user in the room it will be impossible to regain privileges.": "Non poderá desfacer este cambio xa que está a diminuír a súa autoridade, si vostede é a única usuaria con autorización na sala será imposible voltar a obter privilexios.",
+ "You will not be able to undo this change as you are demoting yourself, if you are the last privileged user in the room it will be impossible to regain privileges.": "Non poderá desfacer este cambio xa que está a diminuír a súa autoridade, se é a única persoa con autorización na sala será imposible volver a obter privilexios.",
"Drop here to demote": "Arrastre aquí para degradar",
"Press to start a chat with someone": "Pulse para iniciar a conversa con alguén",
"You're not in any rooms yet! Press to make a room or to browse the directory": "Aínda non está en ningunha sala! Pulse para crear unha sala ou para buscar no directorio",
@@ -377,75 +374,75 @@
"You have been invited to join this room by %(inviterName)s": "Foi convidada por %(inviterName)s a unirse a esta sala",
"Would you like to accept or decline this invitation?": "Quere aceptar ou rexeitar este convite?",
"Reason: %(reasonText)s": "Razón: %(reasonText)s",
- "Rejoin": "Voltar a unirse",
+ "Rejoin": "Volver a unirse",
"You have been kicked from %(roomName)s by %(userName)s.": "Foi expulsada de %(roomName)s por %(userName)s.",
- "You have been kicked from this room by %(userName)s.": "Foi expulsada de esta sala por %(userName)s.",
+ "You have been kicked from this room by %(userName)s.": "Foi expulsada desta sala por %(userName)s.",
"You have been banned from %(roomName)s by %(userName)s.": "Non se lle permite acceder a %(roomName)s por %(userName)s.",
"You have been banned from this room by %(userName)s.": "Non se lle permite o acceso a esta sala por %(userName)s.",
"This room": "Esta sala",
"%(roomName)s does not exist.": "%(roomName)s non existe.",
- "%(roomName)s is not accessible at this time.": "%(roomName)s non está accesible en este momento.",
+ "%(roomName)s is not accessible at this time.": "%(roomName)s non está accesible neste momento.",
"You are trying to access %(roomName)s.": "Está intentando acceder a %(roomName)s.",
"You are trying to access a room.": "Está intentando acceder a unha sala.",
"Click here to join the discussion!": "Pulse aquí para unirse a conversa!",
- "This is a preview of this room. Room interactions have been disabled": "Esta é unha vista previa de esta sala. Desactiváronse as interaccións coa sala",
+ "This is a preview of this room. Room interactions have been disabled": "Esta é unha vista previa desta sala. Desactiváronse as interaccións coa sala",
"To change the room's avatar, you must be a": "Para cambiar o avatar da sala, debe ser",
"To change the room's name, you must be a": "Para cambiar o nome da sala, debe ser",
"To change the room's main address, you must be a": "Para cambiar o enderezo principal da sala, debe ser",
"To change the room's history visibility, you must be a": "Para cambiar a visibilidade do histórico da sala, debe ser",
"To change the permissions in the room, you must be a": "Para cambiar os permisos na sala, debe ser",
"To change the topic, you must be a": "Para cambiar o asunto, debe ser",
- "To modify widgets in the room, you must be a": "Para modificar os widgets da sala, debe ser",
+ "To modify widgets in the room, you must be a": "Para modificar os trebellos da sala, debe ser",
"Failed to unban": "Fallou eliminar a prohibición",
"Banned by %(displayName)s": "Non aceptado por %(displayName)s",
"Privacy warning": "Aviso de intimidade",
- "Changes to who can read history will only apply to future messages in this room": "Os cambios sobre quen pode ler o histórico serán de aplicación a futuras mensaxes en esta sala",
+ "Changes to who can read history will only apply to future messages in this room": "Os cambios sobre quen pode ler o histórico serán de aplicación para as futuras mensaxes nesta sala",
"The visibility of existing history will be unchanged": "A visibilidade do histórico existente non cambiará",
"unknown error code": "código de fallo descoñecido",
"Failed to forget room %(errCode)s": "Fallo ao esquecer sala %(errCode)s",
- "End-to-end encryption is in beta and may not be reliable": "O cifrado de extremo-a-extremo está en beta e podería non ser fiable",
+ "End-to-end encryption is in beta and may not be reliable": "O cifrado de par-a-par está en beta e podería non ser fiable",
"You should not yet trust it to secure data": "Polo de agora non debería confiarlle datos seguros",
"Devices will not yet be able to decrypt history from before they joined the room": "Os dispositivos non poderán descifrar o histórico anterior a que se uniron a sala",
- "Once encryption is enabled for a room it cannot be turned off again (for now)": "Unha vez habilitado o cifrado para unha sala non se poderá desactivar (por agora)",
+ "Once encryption is enabled for a room it cannot be turned off again (for now)": "Unha vez activou o cifrado para unha sala non se poderá desactivar (por agora)",
"Encrypted messages will not be visible on clients that do not yet implement encryption": "As mensaxes cifradas non será visibles en clientes que non aínda non teñan implementado o cifrado",
- "Enable encryption": "Habilitar cifrado",
- "(warning: cannot be disabled again!)": "(aviso: non se pode deshabilitar!)",
- "Encryption is enabled in this room": "O cifrado está habilitado en esta sala",
- "Encryption is not enabled in this room": "O cifrado non se habilitou para esta sala",
+ "Enable encryption": "Activar o cifrado",
+ "(warning: cannot be disabled again!)": "(aviso: non se pode desactivar!)",
+ "Encryption is enabled in this room": "O cifrado está activado nesta sala",
+ "Encryption is not enabled in this room": "Non se activou o cifrado nesta sala",
"Privileged Users": "Usuarios con privilexios",
- "No users have specific privileges in this room": "Non hai usuarias con privilexios específicos en esta sala",
- "Banned users": "Usuarias non permitidas",
+ "No users have specific privileges in this room": "Non hai usuarios con privilexios específicos nesta sala",
+ "Banned users": "Usuarios excluídos",
"This room is not accessible by remote Matrix servers": "Esta sala non é accesible por servidores Matrix remotos",
"Leave room": "Deixar a sala",
"Favourite": "Favorita",
"Tagged as: ": "Etiquetada como: ",
"To link to a room it must have an address.": "Para ligar a unha sala deberá ter un enderezo.",
- "Guests cannot join this room even if explicitly invited.": "As convidadas non se poden unir a esta sala incluso se foro explicitamente convidadas.",
+ "Guests cannot join this room even if explicitly invited.": "Os convidados non se poden unir a esta sala inda que fosen convidados explicitamente.",
"Click here to fix": "Pulse aquí para solución",
- "Who can access this room?": "Quén pode acceder a esta sala?",
+ "Who can access this room?": "Quen pode acceder a esta sala?",
"Only people who have been invited": "Só persoas que foron convidadas",
"Anyone who knows the room's link, apart from guests": "Calquera que coñeza o enderezo da sala, aparte das convidadas",
"Anyone who knows the room's link, including guests": "Calquera que coñeza a ligazón a sala, incluíndo as convidadas",
"Publish this room to the public in %(domain)s's room directory?": "Publicar esta sala no directorio público de salas de %(domain)s?",
- "Who can read history?": "Quén pode ler o histórico?",
+ "Who can read history?": "Quen pode ler o histórico?",
"Anyone": "Calquera",
"Members only (since the point in time of selecting this option)": "Só membros (desde o momento en que se selecciona esta opción)",
"Members only (since they were invited)": "Só membros (desde que foron convidados)",
"Members only (since they joined)": "Só membros (desde que se uniron)",
"Permissions": "Permisos",
- "The default role for new room members is": "Por omisión o rol na sala para novos membros é",
+ "The default role for new room members is": "O rol por defecto na sala para novos participantes é",
"To send messages, you must be a": "Para enviar mensaxes, deberá ser",
- "To invite users into the room, you must be a": "Para convidar a usuarias a esta sala, debe ser",
+ "To invite users into the room, you must be a": "Para convidar a usuarios a esta sala, debe ser",
"To configure the room, you must be a": "Para configurar a sala, debe ser",
- "To kick users, you must be a": "Para expulsar usuarias, debe ser",
- "To ban users, you must be a": "Para prohibir usuarias, debe ser",
- "To remove other users' messages, you must be a": "Para eliminar mensaxes de outras usuarias, debe ser",
+ "To kick users, you must be a": "Para expulsar usuarios, debe ser",
+ "To ban users, you must be a": "Para prohibir usuarios, debe ser",
+ "To remove other users' messages, you must be a": "Para eliminar mensaxes doutras usuarios, debe ser",
"To send events of type , you must be a": "Para enviar eventos de tipo , debe ser",
"Advanced": "Avanzado",
- "This room's internal ID is": "O ID interno de esta sala é",
+ "This room's internal ID is": "O ID interno desta sala é",
"Add a topic": "Engadir asunto",
"Cancel": "Cancelar",
- "Scroll to unread messages": "Desplace ate mensaxes non lidas",
+ "Scroll to unread messages": "Desprazarse ate mensaxes non lidas",
"Jump to first unread message.": "Ir a primeira mensaxe non lida.",
"Close": "Pechar",
"Invalid alias format": "Formato de alias non válido",
@@ -463,10 +460,10 @@
"Invalid community ID": "ID da comunidade non válido",
"'%(groupId)s' is not a valid community ID": "'%(groupId)s' non é un ID de comunidade válido",
"New community ID (e.g. +foo:%(localDomain)s)": "Novo ID da comunidade (ex. +foo:%(localDomain)s)",
- "You have enabled URL previews by default.": "Vostede habilitou a vista previa de URL por omisión.",
- "You have disabled URL previews by default.": "Vostede desactivou a vista previa de URL por omisión.",
- "URL previews are enabled by default for participants in this room.": "As vistas previas de URL están habilitadas por omisión para os participantes de esta sala.",
- "URL previews are disabled by default for participants in this room.": "As vistas previas de URL están desactivadas por omisión para os participantes de esta sala.",
+ "You have enabled URL previews by default.": "Activou a vista previa de URL por defecto.",
+ "You have disabled URL previews by default.": "Desactivou a vista previa de URL por defecto.",
+ "URL previews are enabled by default for participants in this room.": "As vistas previas de URL están activas por defecto para os participantes desta sala.",
+ "URL previews are disabled by default for participants in this room.": "As vistas previas de URL están desactivadas por defecto para os participantes desta sala.",
"URL Previews": "Vista previa de URL",
"Error decrypting audio": "Fallo ao descifrar audio",
"Error decrypting attachment": "Fallo descifrando o anexo",
@@ -486,17 +483,17 @@
"Message removed by %(userId)s": "Mensaxe eliminada por %(userId)s",
"Message removed": "Mensaxe eliminada",
"Robot check is currently unavailable on desktop - please use a web browser": "Comprobación por Robot non está dispoñible en escritorio - por favor utilice un navegador web",
- "This Home Server would like to make sure you are not a robot": "Este Servidor quere asegurarse de que vostede non é un robot",
+ "This Home Server would like to make sure you are not a robot": "Este servidor quere asegurarse de que vostede non é un robot",
"Sign in with CAS": "Conectarse con CAS",
"Custom Server Options": "Opcións personalizadas do servidor",
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.": "Pode utilizar as opcións personalizadas do servidor para conectarse a outros servidores Matrix indicando un URL de servidor de inicio diferente.",
- "This allows you to use this app with an existing Matrix account on a different home server.": "Así pode utilizar este aplicativo con unha conta Matrix existente en un servidor de incio diferente.",
- "You can also set a custom identity server but this will typically prevent interaction with users based on email address.": "Tamén pode establecer un servidor de identidade personalizado pero esto normalmente dificulta a interacción con usuarias basándose non enderezo de correo.",
+ "This allows you to use this app with an existing Matrix account on a different home server.": "Así pode utilizar este aplicativo con unha conta Matrix existente en un servidor de inicio diferente.",
+ "You can also set a custom identity server but this will typically prevent interaction with users based on email address.": "Tamén pode establecer un servidor de identidade personalizado pero isto normalmente dificulta a interacción con usuarios baseándose non enderezo de correo.",
"Dismiss": "Rexeitar",
"To continue, please enter your password.": "Para continuar, por favor introduza o seu contrasinal.",
"Password:": "Contrasinal:",
"An email has been sent to %(emailAddress)s": "Enviouse un correo a %(emailAddress)s",
- "Please check your email to continue registration.": "Por favor comprobe o seu correo para continuar co rexistro.",
+ "Please check your email to continue registration.": "Comprobe o seu correo para continuar co rexistro.",
"Token incorrect": "Testemuño incorrecto",
"A text message has been sent to %(msisdn)s": "Enviouse unha mensaxe de texto a %(msisdn)s",
"Please enter the code it contains:": "Por favor introduza o código que contén:",
@@ -510,22 +507,22 @@
"Sign in with": "Conectarse con",
"Email address": "Enderezo de correo",
"Sign in": "Conectar",
- "If you don't specify an email address, you won't be able to reset your password. Are you sure?": "Si non indica un enderezo de correo non poderá restablecer o contrasinal, está segura?",
+ "If you don't specify an email address, you won't be able to reset your password. Are you sure?": "Se non indica un enderezo de correo non poderá restablecer o contrasinal, está seguro?",
"Email address (optional)": "Enderezo de correo (opcional)",
"You are registering with %(SelectedTeamName)s": "Estase a rexistrar con %(SelectedTeamName)s",
"Mobile phone number (optional)": "Número de teléfono móbil (opcional)",
- "Register": "Rexistar",
- "Default server": "Servidor por omisión",
+ "Register": "Rexistrar",
+ "Default server": "Servidor por defecto",
"Custom server": "Servidor personalizado",
"Home server URL": "URL do servidor de inicio",
"Identity server URL": "URL do servidor de identidade",
- "What does this mean?": "Qué significa esto?",
+ "What does this mean?": "Que significa isto?",
"Remove from community": "Eliminar da comunidade",
"Disinvite this user from community?": "Retirar o convite a comunidade a esta usuaria?",
"Remove this user from community?": "Quitar a esta usuaria da comunidade?",
"Failed to withdraw invitation": "Fallo ao retirar o convite",
"Failed to remove user from community": "Fallo ao quitar a usuaria da comunidade",
- "Filter community members": "Filtrar membros da comunidade",
+ "Filter community members": "Filtrar participantes na comunidade",
"Are you sure you want to remove '%(roomName)s' from %(groupId)s?": "Está segura de que quere eliminar '%(roomName)s' de %(groupId)s?",
"Removing a room from the community will also remove it from the community page.": "Eliminar unha sala da comunidade tamén a quitará da páxina da comunidade.",
"Remove": "Eliminar",
@@ -535,18 +532,18 @@
"The visibility of '%(roomName)s' in %(groupId)s could not be updated.": "A visibilidade de '%(roomName)s' en %(groupId)s non se puido actualizar.",
"Visibility in Room List": "Visibilidade na Lista de Salas",
"Visible to everyone": "Visible para todo o mundo",
- "Only visible to community members": "Só visible para membros da comunidade",
+ "Only visible to community members": "Só visible para os participantes da comunidade",
"Filter community rooms": "Filtrar salas da comunidade",
"Something went wrong when trying to get your communities.": "Algo fallou ao intentar obter as súas comunidades.",
"You're not currently a member of any communities.": "Ate o momento non é membro de ningunha comunidade.",
"Unknown Address": "Enderezo descoñecido",
- "NOTE: Apps are not end-to-end encrypted": "NOTA: As Apps non están cifradas de extremo-a-extremo",
- "Do you want to load widget from URL:": "Quere cargar o widget da URL:",
+ "NOTE: Apps are not end-to-end encrypted": "NOTA: As Apps non están cifradas de par-a-par",
+ "Do you want to load widget from URL:": "Quere cargar o trebello da URL:",
"Allow": "Permitir",
- "Delete Widget": "Eliminar Widget",
- "Deleting a widget removes it for all users in this room. Are you sure you want to delete this widget?": "Quitando un widget eliminao para todas as usuarias de esta sala. Está segura de querer eliminar este widget?",
- "Delete widget": "Eliminar widget",
- "Revoke widget access": "Retirar acceso ao widget",
+ "Delete Widget": "Eliminar trebello",
+ "Deleting a widget removes it for all users in this room. Are you sure you want to delete this widget?": "Quitando un trebello elimínao para todas os usuarios desta sala. Está seguro de querer eliminar este trebello?",
+ "Delete widget": "Eliminar trebello",
+ "Revoke widget access": "Retirar acceso ao trebello",
"Minimize apps": "Minimizar apps",
"Edit": "Editar",
"Create new room": "Crear unha nova sala",
@@ -565,25 +562,25 @@
"%(severalUsers)sjoined %(count)s times|other": "%(severalUsers)s uníronse %(count)s veces",
"%(severalUsers)sjoined %(count)s times|one": "%(severalUsers)s uníronse",
"%(oneUser)sjoined %(count)s times|other": "%(oneUser)s uniuse %(count)s veces",
- "%(oneUser)sjoined %(count)s times|one": "%(oneUser)s uníuse",
+ "%(oneUser)sjoined %(count)s times|one": "%(oneUser)s uniuse",
"%(severalUsers)sleft %(count)s times|other": "%(severalUsers)s saíron %(count)s veces",
"%(severalUsers)sleft %(count)s times|one": "%(severalUsers)s saíron",
- "%(oneUser)sleft %(count)s times|other": "%(oneUser)s saiu %(count)s veces",
- "%(oneUser)sleft %(count)s times|one": "%(oneUser)s saiu",
+ "%(oneUser)sleft %(count)s times|other": "%(oneUser)s saíu %(count)s veces",
+ "%(oneUser)sleft %(count)s times|one": "%(oneUser)s saio",
"%(severalUsers)sjoined and left %(count)s times|other": "%(severalUsers)s uníronse e saíron %(count)s veces",
"%(severalUsers)sjoined and left %(count)s times|one": "%(severalUsers)s uníronse e saíron",
- "%(oneUser)sjoined and left %(count)s times|other": "%(oneUser)s uniuse e saiu %(count)s veces",
- "%(oneUser)sjoined and left %(count)s times|one": "%(oneUser)s uníuse e saiu",
- "%(severalUsers)sleft and rejoined %(count)s times|other": "%(severalUsers)s saíron e voltaron %(count)s veces",
- "%(severalUsers)sleft and rejoined %(count)s times|one": "%(severalUsers)s saíron e voltaron",
- "%(oneUser)sleft and rejoined %(count)s times|other": "%(oneUser)s saiu e voltou %(count)s veces",
- "%(oneUser)sleft and rejoined %(count)s times|one": "%(oneUser)s saiu e voltou",
+ "%(oneUser)sjoined and left %(count)s times|other": "%(oneUser)s uniuse e saio %(count)s veces",
+ "%(oneUser)sjoined and left %(count)s times|one": "%(oneUser)s uniuse e saíu",
+ "%(severalUsers)sleft and rejoined %(count)s times|other": "%(severalUsers)s saíron e volveron %(count)s veces",
+ "%(severalUsers)sleft and rejoined %(count)s times|one": "%(severalUsers)s saíron e votaron",
+ "%(oneUser)sleft and rejoined %(count)s times|other": "%(oneUser)s saíu e volveu %(count)s veces",
+ "%(oneUser)sleft and rejoined %(count)s times|one": "%(oneUser)s saíu e volveu",
"%(severalUsers)srejected their invitations %(count)s times|other": "%(severalUsers)s rexeitaron convites %(count)s veces",
"%(severalUsers)srejected their invitations %(count)s times|one": "%(severalUsers)s rexeitaron os seus convites",
"%(oneUser)srejected their invitation %(count)s times|other": "%(oneUser)s rexeitou o seu convite %(count)s veces",
"%(oneUser)srejected their invitation %(count)s times|one": "%(oneUser)s rexeitou o seu convite",
"%(severalUsers)shad their invitations withdrawn %(count)s times|other": "retiróuselle o convite a %(severalUsers)s %(count)s veces",
- "%(severalUsers)shad their invitations withdrawn %(count)s times|one": "retirouselle o convite a %(severalUsers)s",
+ "%(severalUsers)shad their invitations withdrawn %(count)s times|one": "retiróuselle o convite a %(severalUsers)s",
"%(oneUser)shad their invitation withdrawn %(count)s times|other": "retiróuselle o convite a %(oneUser)s %(count)s veces",
"%(oneUser)shad their invitation withdrawn %(count)s times|one": "retiróuselle o convite a %(oneUser)s",
"were invited %(count)s times|other": "foron convidados %(count)s veces",
@@ -594,9 +591,9 @@
"were banned %(count)s times|one": "foron prohibidas",
"was banned %(count)s times|other": "foi prohibida %(count)s veces",
"was banned %(count)s times|one": "foi prohibida",
- "were unbanned %(count)s times|other": "retirouselle a prohibición %(count)s veces",
- "were unbanned %(count)s times|one": "retirouselle a prohibición",
- "was unbanned %(count)s times|other": "retirouselle a prohibición %(count)s veces",
+ "were unbanned %(count)s times|other": "retiróuselle a prohibición %(count)s veces",
+ "were unbanned %(count)s times|one": "retrouseille a prohibición",
+ "was unbanned %(count)s times|other": "retrouseille a prohibición %(count)s veces",
"was unbanned %(count)s times|one": "retiróuselle a prohibición",
"were kicked %(count)s times|other": "foron expulsadas %(count)s veces",
"were kicked %(count)s times|one": "foron expulsadas",
@@ -626,7 +623,7 @@
"Matrix Room ID": "ID sala Matrix",
"email address": "enderezo de correo",
"Try using one of the following valid address types: %(validTypesList)s.": "Intentar utilizar algún dos seguintes tipos de enderezo válidos: %(validTypesList)s.",
- "You have entered an invalid address.": "Introduxo un enderezo non válido.",
+ "You have entered an invalid address.": "Introduciu un enderezo non válido.",
"Create a new chat or reuse an existing one": "Crear un novo chat ou reutilizar un xa existente",
"Start new chat": "Iniciar un novo chat",
"You already have existing direct chats with this user:": "Xa ten unha conversa directa con esta usuaria:",
@@ -634,10 +631,10 @@
"Click on the button below to start chatting!": "Pulse non botón inferior para iniciar a conversar!",
"Start Chatting": "Iniciar a conversa",
"Confirm Removal": "Confirme a retirada",
- "Are you sure you wish to remove (delete) this event? Note that if you delete a room name or topic change, it could undo the change.": "Está certa de que quere quitar (eliminar) este evento? Sepa que si elimina un nome de sala ou cambia o asunto, podería desfacer o cambio.",
+ "Are you sure you wish to remove (delete) this event? Note that if you delete a room name or topic change, it could undo the change.": "Está certa de que quere quitar (eliminar) este evento? Saiba que si elimina un nome de sala ou cambia o asunto, podería desfacer o cambio.",
"Community IDs may only contain characters a-z, 0-9, or '=_-./'": "Os ID de comunidade só poden conter caracteres a-z, 0-9, or '=_-./'",
"Community IDs cannot not be empty.": "O ID de comunidade non pode quedar baldeiro.",
- "Something went wrong whilst creating your community": "Algo fallou mentras se creaba a súa comunidade",
+ "Something went wrong whilst creating your community": "Algo fallou mentres se creaba a súa comunidade",
"Create Community": "Crear comunidade",
"Community Name": "Nome da comunidade",
"Example": "Exemplo",
@@ -647,37 +644,37 @@
"Create Room": "Crear sala",
"Room name (optional)": "Nome da sala (opcional)",
"Advanced options": "Axustes avanzados",
- "Block users on other matrix homeservers from joining this room": "Evitar que usuarias de outros servidores matrix se unan a esta sala",
+ "Block users on other matrix homeservers from joining this room": "Evitar que usuarios doutros servidores matrix se unan a esta sala",
"This setting cannot be changed later!": "Esta preferencia non se pode cambiar máis tarde!",
"Unknown error": "Fallo descoñecido",
"Incorrect password": "Contrasinal incorrecto",
"Deactivate Account": "Desactivar conta",
"Unable to ascertain that the address this invite was sent to matches one associated with your account.": "Non se pode determinar si o enderezo ao que foi enviado este convite coincide con un dos asociados a súa conta.",
- "To verify that this device can be trusted, please contact its owner using some other means (e.g. in person or a phone call) and ask them whether the key they see in their User Settings for this device matches the key below:": "Para verificar que se pode confiar en este dispositivo, contacte co seu dono utilizando algún outro medio (ex. en persoa ou chamada de teléfono) e pregúntelle si a chave que ven nos Axustes de Usuaria do se dispositivo coincide coa chave inferior:",
+ "To verify that this device can be trusted, please contact its owner using some other means (e.g. in person or a phone call) and ask them whether the key they see in their User Settings for this device matches the key below:": "Para verificar que se pode confiar neste dispositivo, contacte co seu dono utilizando algún outro medio (ex. en persoa ou chamada de teléfono) e pregúntelle se a clave que ven nos axustes de usuario do se dispositivo coincide coa clave inferior:",
"Device name": "Nome do dispositivo",
"Device key": "Chave do dispositivo",
- "If it matches, press the verify button below. If it doesn't, then someone else is intercepting this device and you probably want to press the blacklist button instead.": "Si concorda, pulse o botón verificar. Si non, entón alguén está interceptando este dispositivo e probablemente vostede desexe pulsar o botón lista negra.",
+ "If it matches, press the verify button below. If it doesn't, then someone else is intercepting this device and you probably want to press the blacklist button instead.": "Se concorda, pulse o botón verificar. Si non, entón alguén está interceptando este dispositivo e probablemente vostede desexe pulsar o botón lista negra.",
"In future this verification process will be more sophisticated.": "No futuro este proceso de verificación será máis sofisticado.",
"Verify device": "Verificar dispositivo",
"I verify that the keys match": "Certifico que coinciden as chaves",
"An error has occurred.": "Algo fallou.",
"OK": "OK",
- "You added a new device '%(displayName)s', which is requesting encryption keys.": "Engadeu un novo dispositivo '%(displayName)s', que está a solicitar as chaves de cifrado.",
+ "You added a new device '%(displayName)s', which is requesting encryption keys.": "Engadiu un novo dispositivo '%(displayName)s', que está a solicitar as chaves de cifrado.",
"Your unverified device '%(displayName)s' is requesting encryption keys.": "O seu dispositivo non verificado '%(displayName)s' está solicitando chaves de cifrado.",
"Start verification": "Iniciar verificación",
- "Share without verifying": "Compartir sin verificar",
+ "Share without verifying": "Compartir sen verificar",
"Ignore request": "Ignorar petición",
"Loading device info...": "Cargando información do dispositivo...",
"Encryption key request": "Petición de chave de cifrado",
"Unable to restore session": "Non se puido restaurar a sesión",
- "If you have previously used a more recent version of Riot, your session may be incompatible with this version. Close this window and return to the more recent version.": "Si anteriormente utilizou unha versión máis recente de Riot, a súa sesión podería non ser compatible con esta versión. Peche esta ventá e volte a versión máis recente.",
- "Invalid Email Address": "Enderezo de email non válido",
- "This doesn't appear to be a valid email address": "Este non semella ser un enderezo de email válido",
+ "If you have previously used a more recent version of Riot, your session may be incompatible with this version. Close this window and return to the more recent version.": "Si anteriormente utilizou unha versión máis recente de Riot, a súa sesión podería non ser compatible con esta versión. Peche esta ventá e volva a versión máis recente.",
+ "Invalid Email Address": "Enderezo de correo non válido",
+ "This doesn't appear to be a valid email address": "Este non semella ser un enderezo de correo válido",
"Verification Pending": "Verificación pendente",
- "Please check your email and click on the link it contains. Once this is done, click continue.": "Por favor comprobe o seu email e pulse na ligazón que contén. Unha vez feito, pulse continuar.",
- "Unable to add email address": "Non se puido engadir enderezo de email",
- "Unable to verify email address.": "Non se puido verificar enderezo de email.",
- "This will allow you to reset your password and receive notifications.": "Esto permitiralle restablecer o seu contrasinal e recibir notificacións.",
+ "Please check your email and click on the link it contains. Once this is done, click continue.": "Comprobe o seu correo electrónico e pulse na ligazón que contén. Unha vez feito iso prema continuar.",
+ "Unable to add email address": "Non se puido engadir enderezo de correo",
+ "Unable to verify email address.": "Non se puido verificar enderezo de correo electrónico.",
+ "This will allow you to reset your password and receive notifications.": "Isto permitiralle restablecer o seu contrasinal e recibir notificacións.",
"Skip": "Saltar",
"User names may only contain letters, numbers, dots, hyphens and underscores.": "Os nomes de usuaria só poden conter letras, números, puntos e guión alto e baixo.",
"Username not available": "Nome de usuaria non dispoñible",
@@ -686,8 +683,8 @@
"Username available": "Nome de usuaria dispoñible",
"To get started, please pick a username!": "Para comezar, escolla un nome de usuaria!",
"This will be your account name on the homeserver, or you can pick a different server.": "Este será o nome da súa conta no servidor, ou pode escoller un servidor diferente.",
- "If you already have a Matrix account you can log in instead.": "Si xa ten unha conta Matrix entón pode conectarse.",
- "You are currently blacklisting unverified devices; to send messages to these devices you must verify them.": "En este momento está por na lista negra os dispositivos non verificados; para enviar mensaxes a eses dispositivos debe verificalos.",
+ "If you already have a Matrix account you can log in instead.": "Se xa ten unha conta Matrix entón pode conectarse.",
+ "You are currently blacklisting unverified devices; to send messages to these devices you must verify them.": "Neste momento está por na lista negra os dispositivos non verificados; para enviar mensaxes a eses dispositivos debe verificalos.",
"We recommend you go through the verification process for each device to confirm they belong to their legitimate owner, but you can resend the message without verifying if you prefer.": "Recomendámoslle que vaia ao proceso de verificación para cada dispositivo para confirmar que pertencen ao seu dono lexítimos, pero se o prefire pode enviar a mensaxe sen ter verificado.",
"Room contains unknown devices": "A sala contén dispositivos descoñecidos",
"\"%(RoomName)s\" contains devices that you haven't seen before.": "\"%(RoomName)s\" contén dispositivos que vostede non vira antes.",
@@ -699,22 +696,22 @@
"Name": "Nome",
"Topic": "Asunto",
"Make this room private": "Facer que esta sala sexa privada",
- "Share message history with new users": "Compartir o histórico de mensaxes coas novas usuarias",
- "Encrypt room": "Cifrar sala",
+ "Share message history with new users": "Compartir o histórico de mensaxes cos novos usuarios",
+ "Encrypt room": "Cifrar a sala",
"You must register to use this functionality": "Debe rexistrarse para utilizar esta función",
"You must join the room to see its files": "Debe unirse a sala para ver os seus ficheiros",
- "There are no visible files in this room": "Non hai ficheiros visibles en esta sala",
+ "There are no visible files in this room": "Non hai ficheiros visibles nesta sala",
"HTML for your community's page
\n\n Use the long description to introduce new members to the community, or distribute\n some important links\n
\n\n You can even use 'img' tags\n
\n": "HTML para a páxina da súa comunidade
\n\n Utilice a descrición longa para presentar novos membros a comunidade, ou publicar algunha ligazón importante\n \n
\n\n Tamén pode utilizar etiquetas 'img'\n
\n",
"Add rooms to the community summary": "Engadir salas ao resumo da comunidade",
- "Which rooms would you like to add to this summary?": "Qué salas desexa engadir a este resumo?",
+ "Which rooms would you like to add to this summary?": "Que salas desexa engadir a este resumo?",
"Add to summary": "Engadir ao resumo",
"Failed to add the following rooms to the summary of %(groupId)s:": "Algo fallou ao engadir estas salas ao resumo de %(groupId)s:",
"Add a Room": "Engadir unha sala",
"Failed to remove the room from the summary of %(groupId)s": "Algo fallou ao quitar a sala do resumo de %(groupId)s",
"The room '%(roomName)s' could not be removed from the summary.": "A sala '%(roomName)s' non se puido eliminar do resumo.",
- "Add users to the community summary": "Engadir usuarias ao resumo da comunidade",
- "Who would you like to add to this summary?": "A quén desexa engadir a este resumo?",
- "Failed to add the following users to the summary of %(groupId)s:": "Algo fallou ao engadir as seguintes usuarias ao resumo de %(groupId)s:",
+ "Add users to the community summary": "Engadir usuarios ao resumo da comunidade",
+ "Who would you like to add to this summary?": "A quen desexa engadir a este resumo?",
+ "Failed to add the following users to the summary of %(groupId)s:": "Algo fallou ao engadir aos seguintes usuarios ao resumo de %(groupId)s:",
"Add a User": "Engadir unha usuaria",
"Failed to remove a user from the summary of %(groupId)s": "Algo fallou ao eliminar a usuaria do resumo de %(groupId)s",
"The user '%(displayName)s' could not be removed from the summary.": "A usuaria '%(displayName)s' non se puido eliminar do resumo.",
@@ -726,14 +723,14 @@
"Leave %(groupName)s?": "Deixar %(groupName)s?",
"Leave": "Saír",
"Community Settings": "Axustes da comunidade",
- "These rooms are displayed to community members on the community page. Community members can join the rooms by clicking on them.": "Estas salas son mostradas aos membros da comunidade na páxina da comunidade. Os membros da comunidade poden unirse as salas pulsando en elas.",
+ "These rooms are displayed to community members on the community page. Community members can join the rooms by clicking on them.": "Estas salas móstranselle aos membros da comunidade na páxina da comunidade.Os participantes da comunidade poden unirse ás salas premendo nelas.",
"Add rooms to this community": "Engadir salas a esta comunidade",
"Featured Rooms:": "Salas destacadas:",
- "Featured Users:": "Usuarias destacadas:",
+ "Featured Users:": "Usuarios destacados:",
"%(inviter)s has invited you to join this community": "%(inviter)s convidouna a unirse a esta comunidade",
"You are an administrator of this community": "Vostede administra esta comunidade",
- "You are a member of this community": "Vostede é membro de esta comunidade",
- "Your community hasn't got a Long Description, a HTML page to show to community members.
Click here to open settings and give it one!": "A súa comunidade non ten unha Descrición Longa, unha páxina HTML para mostrar aos membros.
Pulse aquí para abrir os axustes e publicar unha!",
+ "You are a member of this community": "É membro desta comunidade",
+ "Your community hasn't got a Long Description, a HTML page to show to community members.
Click here to open settings and give it one!": "A súa comunidade non ten unha descrición longa, ou unha páxina HTML que lle mostrar aos seus participantes.
Pulse aquí para abrir os axustes e publicar unha!",
"Long Description (HTML)": "Descrición longa (HTML)",
"Description": "Descrición",
"Community %(groupId)s not found": "Non se atopou a comunidade %(groupId)s",
@@ -749,13 +746,11 @@
"Old cryptography data detected": "Detectouse o uso de criptografía sobre datos antigos",
"Logout": "Desconectar",
"Your Communities": "As súas Comunidades",
- "Error whilst fetching joined communities": "Fallo mentras se obtiñas as comunidades unidas",
+ "Error whilst fetching joined communities": "Fallo mentres se obtiñas as comunidades unidas",
"Create a new community": "Crear unha nova comunidade",
"Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "Crear unha comunidade para agrupar usuarias e salas! Poña unha páxina de inicio personalizada para destacar o seu lugar no universo Matrix.",
- "Join an existing community": "Unirse a unha comunidade existente",
- "To join an existing community you'll have to know its community identifier; this will look something like +example:matrix.org.": "Para unirse a unha comunidade existente deberá coñecer o identificador de esa comunidade; terá un aspecto como +exemplo:matrix.org.",
"You have no visible notifications": "Non ten notificacións visibles",
- "Scroll to bottom of page": "Desplácese ate o final da páxina",
+ "Scroll to bottom of page": "Desprácese ate o final da páxina",
"Message not sent due to unknown devices being present": "Non se enviou a mensaxe porque hai dispositivos non coñecidos",
"Show devices, send anyway or cancel.": "Mostrar dispositivos, enviar igualmente ou cancelar.",
"%(count)s of your messages have not been sent.|other": "Algunha das súas mensaxes non foron enviadas.",
@@ -764,7 +759,7 @@
"%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|one": "Reenviar mensaxe ou cancelar mensaxe agora.",
"Warning": "Aviso",
"Connectivity to the server has been lost.": "Perdeuse a conexión ao servidor.",
- "Sent messages will be stored until your connection has returned.": "As mensaxes enviadas gardaránse ate que retome a conexión.",
+ "Sent messages will be stored until your connection has returned.": "As mensaxes enviadas gardaranse ate que retome a conexión.",
"%(count)s new messages|other": "%(count)s novas mensaxes",
"%(count)s new messages|one": "%(count)s nova mensaxe",
"Active call": "Chamada activa",
@@ -785,19 +780,19 @@
"Click to mute video": "Pulse para acalar video",
"Click to unmute audio": "Pulse para escoitar audio",
"Click to mute audio": "Pulse para acalar audio",
- "Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "Intentouse cargar un punto concreto do historial de esta sala, pero vostede non ten permiso para ver a mensaxe en cuestión.",
- "Tried to load a specific point in this room's timeline, but was unable to find it.": "Intentouse cargar un punto específico do historial de esta sala, pero non se puido atopar.",
+ "Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "Intentouse cargar un punto concreto do historial desta sala, pero non ten permiso para ver a mensaxe en cuestión.",
+ "Tried to load a specific point in this room's timeline, but was unable to find it.": "Intentouse cargar un punto específico do historial desta sala, pero non se puido atopar.",
"Failed to load timeline position": "Fallo ao cargar posición da liña temporal",
"Uploading %(filename)s and %(count)s others|other": "Subindo %(filename)s e %(count)s máis",
"Uploading %(filename)s and %(count)s others|zero": "Subindo %(filename)s",
"Uploading %(filename)s and %(count)s others|one": "Subindo %(filename)s e %(count)s máis",
"Light theme": "Decorado claro",
- "Dark theme": "Decorado oscuro",
+ "Dark theme": "Decorado escuro",
"Status.im theme": "Decorado Status.im",
"Can't load user settings": "Non se puideron cargar os axustes de usuaria",
"Server may be unavailable or overloaded": "O servidor podería non está dispoñible ou sobrecargado",
"Sign out": "Desconectar",
- "For security, logging out will delete any end-to-end encryption keys from this browser. If you want to be able to decrypt your conversation history from future Riot sessions, please export your room keys for safe-keeping.": "Por seguridade, ao desconectarse borrará todas as chaves de cifrado extremo-a-extremo en este navegador. Si quere poder descifrar o historial da conversa en futuras sesións en Riot, por favor exporte as chaves da sala e gárdeas en lugar seguro.",
+ "For security, logging out will delete any end-to-end encryption keys from this browser. If you want to be able to decrypt your conversation history from future Riot sessions, please export your room keys for safe-keeping.": "Por seguridade, ao desconectarse borrará todas as chaves de cifrado par-a-par ste navegador. Se quere poder descifrar o historial da conversa en futuras sesións en Riot, por favor exporte as chaves da sala e gárdeas en lugar seguro.",
"Failed to change password. Is your password correct?": "Fallo ao cambiar o contrasinal. É correcto o contrasinal?",
"Success": "Parabéns",
"Your password was successfully changed. You will not receive push notifications on other devices until you log back in to them": "O seu contrasinal cambiouse correctamente. Non recibirá notificacións tipo push en outros dispositivos ate que se conecte novamente en eles",
@@ -807,17 +802,17 @@
"Refer a friend to Riot:": "Convide a un amigo a Riot:",
"Interface Language": "Idioma da Interface",
"User Interface": "Interface de usuaria",
- "Autocomplete Delay (ms):": "Retraso no autocompletado (ms):",
+ "Autocomplete Delay (ms):": "Atraso no autocompletado (ms):",
"": "",
"Import E2E room keys": "Importar chaves E2E da sala",
"Cryptography": "Criptografía",
"Device ID:": "ID de dispositivo:",
"Device key:": "Chave do dispositivo:",
- "Ignored Users": "Usuarias ignoradas",
+ "Ignored Users": "Usuarios ignorados",
"Analytics": "Analytics",
"Riot collects anonymous analytics to allow us to improve the application.": "Riot recolle información analítica anónima para permitirnos mellorar o aplicativo.",
"Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.": "A intimidade impórtanos, así que non recollemos información personal ou identificable nos datos dos nosos análises.",
- "Learn more about how we use analytics.": "Saber máis sobre cómo utilizamos analytics.",
+ "Learn more about how we use analytics.": "Saber máis sobre como utilizamos analytics.",
"Labs": "Labs",
"These are experimental features that may break in unexpected ways": "Estas son características experimentais que poderían dar lugar a fallos non agardados",
"Use with caution": "Utilice con precaución",
@@ -828,24 +823,24 @@
"Check for update": "Comprobar actualización",
"Reject all %(invitedRooms)s invites": "Rexeitar todos os %(invitedRooms)s convites",
"Bulk Options": "Opcións en bloque",
- "Desktop specific": "Específicas de escritorio",
- "Start automatically after system login": "Iniciar automáticamente despóis de iniciar sesión",
+ "Desktop specific": "Configuracións de escritorio",
+ "Start automatically after system login": "Iniciar automaticamente despois de iniciar sesión",
"No media permissions": "Sen permisos de medios",
"You may need to manually permit Riot to access your microphone/webcam": "Igual ten que permitir manualmente a Riot acceder ao seus micrófono e cámara",
"Missing Media Permissions, click here to request.": "Faltan permisos de medios, pulse aquí para solicitalos.",
"No Microphones detected": "Non se detectaron micrófonos",
"No Webcams detected": "Non se detectaron cámaras",
- "Default Device": "Dispositivo por omisión",
+ "Default Device": "Dispositivo por defecto",
"Microphone": "Micrófono",
"Camera": "Cámara",
"VoIP": "VoIP",
- "Email": "Correo-e",
- "Add email address": "Engadir enderezo correo-e",
+ "Email": "Correo electrónico",
+ "Add email address": "Engadir enderezo correo electrónico",
"Notifications": "Notificacións",
"Profile": "Perfil",
"Display name": "Nome mostrado",
"Account": "Conta",
- "To return to your account in future you need to set a password": "Estableza un contrasinal para voltar a súa conta con posterioridade",
+ "To return to your account in future you need to set a password": "Estableza un contrasinal para volver a súa conta con posterioridade",
"Logged in as:": "Conectada como:",
"Access Token:": "Testemuño de acceso:",
"click to reveal": "pulse para revelar",
@@ -854,32 +849,31 @@
"matrix-react-sdk version:": "versión matrix-react-sdk:",
"riot-web version:": "versión riot-web:",
"olm version:": "versión olm:",
- "Failed to send email": "Fallo ao enviar correo-e",
- "The email address linked to your account must be entered.": "Debe introducir o correo-e ligado a súa conta.",
+ "Failed to send email": "Fallo ao enviar correo electrónico",
+ "The email address linked to your account must be entered.": "Debe introducir o correo electrónico ligado a súa conta.",
"A new password must be entered.": "Debe introducir un novo contrasinal.",
"New passwords must match each other.": "Os novos contrasinais deben ser coincidentes.",
- "Data from an older version of Riot has been detected. This will have caused end-to-end cryptography to malfunction in the older version. End-to-end encrypted messages exchanged recently whilst using the older version may not be decryptable in this version. This may also cause messages exchanged with this version to fail. If you experience problems, log out and back in again. To retain message history, export and re-import your keys.": "Detectáronse datos de una versión anterior de Riot. Esto causará un mal funcionamento da criptografía extremo-a-extremo na versión antiga. As mensaxes cifradas extremo-a-extremo intercambiadas mentras utilizaba a versión anterior poderían non ser descifrables en esta versión. Esto tamén podería causar que mensaxes intercambiadas con esta versión tampouco funcionasen. Si ten problemas, desconéctese e conéctese de novo. Para manter o historial de mensaxes, exporte e reimporte as súas chaves.",
- "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.": "O restablecemento do contrasinal restablecerá tamén as chaves de cifrado extremo-a-extremo en todos os dispositivos, facendo o historial de chat cifrado non lexible, a menos que primeiro exporte as chaves da sala e as reimporte posteriormente. No futuro melloraremos esto.",
- "An email has been sent to %(emailAddress)s. Once you've followed the link it contains, click below.": "Enviouse un email a %(emailAddress)s. Unha vez siga a ligazón que contén, pulse abaixo.",
- "I have verified my email address": "Validei o meu enderezo de correo-e",
+ "Data from an older version of Riot has been detected. This will have caused end-to-end cryptography to malfunction in the older version. End-to-end encrypted messages exchanged recently whilst using the older version may not be decryptable in this version. This may also cause messages exchanged with this version to fail. If you experience problems, log out and back in again. To retain message history, export and re-import your keys.": "Detectáronse datos de una versión anterior de Riot. Isto causará un mal funcionamento da criptografía extremo-a-extremo na versión antiga. As mensaxes cifradas extremo-a-extremo intercambiadas mentres utilizaba a versión anterior poderían non ser descifrables en esta versión. Isto tamén podería causar que mensaxes intercambiadas con esta versión tampouco funcionasen. Se ten problemas, desconéctese e conéctese de novo. Para manter o historial de mensaxes, exporte e reimporte as súas chaves.",
+ "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.": "O restablecemento do contrasinal restablecerá tamén as chaves de cifrado extremo-a-extremo en todos os dispositivos, facendo o historial de chat cifrado non lexible, a menos que primeiro exporte as chaves da sala e as reimporte posteriormente. No futuro melloraremos isto.",
+ "An email has been sent to %(emailAddress)s. Once you've followed the link it contains, click below.": "Enviouse un correo a %(emailAddress)s. Unha vez siga a ligazón que contén, pulse abaixo.",
+ "I have verified my email address": "Validei o meu enderezo de correo electrónico",
"Your password has been reset": "Restableceuse o seu contrasinal",
"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": "Foi desconectado de todos os seus dispositivos e xa non recibirá notificacións push. Para reactivar as notificacións, conéctese de novo en cada dispositivo",
- "Return to login screen": "Voltar a pantalla de conexión",
+ "Return to login screen": "Volver a pantalla de conexión",
"To reset your password, enter the email address linked to your account": "Para restablecer o seu contrasinal, introduza o enderezo de correo electrónico ligado a súa conta",
"New password": "Novo contrasinal",
"Confirm your new password": "Confirme o seu novo contrasinal",
- "Send Reset Email": "Enviar correo-e de restablecemento",
+ "Send Reset Email": "Enviar correo electrónico de restablecemento",
"Create an account": "Crear unha conta",
- "This Home Server does not support login using email address.": "Este servidor non soporta a conexión utilizando un enderezo de correo-e.",
+ "This Home Server does not support login using email address.": "Este servidor non soporta a conexión utilizando un enderezo de correo electrónico.",
"Incorrect username and/or password.": "Nome de usuaria ou contrasinal non válidos.",
"Please note you are logging into the %(hs)s server, not matrix.org.": "Teña en conta que se está a conectar ao servidor %(hs)s, non a matrix.org.",
- "Guest access is disabled on this Home Server.": "O acceso de convidados está deshabilitado en este servidor de inicio.",
+ "Guest access is disabled on this Home Server.": "O acceso de convidados está desactivado neste servidor de inicio.",
"The phone number entered looks invalid": "O número de teléfono introducido non semella ser válido",
"This homeserver doesn't offer any login flows which are supported by this client.": "Este servidor non ofrece ningún sistema de conexión que soporte este cliente.",
"Error: Problem communicating with the given homeserver.": "Fallo: problema ao comunicarse con servidor proporcionado.",
"Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or enable unsafe scripts.": "Non se pode conectar ao servidor vía HTTP cando na barra de enderezos do navegador está HTTPS. Utilice HTTPS ou active scripts non seguros.",
- "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "Non se conectou ao servidor - por favor comprobe a conexión, asegúrese de o certificado SSL do servidor é de confianza, e que ningún engadido do navegador está bloqueando as peticións.",
- "Login as guest": "Conexión como convidado",
+ "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "Non se conectou ao servidor - por favor comprobe a conexión, asegúrese de que ocertificado SSL do servidor sexa de confianza, e que ningún engadido do navegador estea bloqueando as peticións.",
"Sign in to get started": "Conéctese para iniciar",
"Failed to fetch avatar URL": "Fallo ao obter o URL do avatar",
"Set a display name:": "Establecer nome público:",
@@ -888,7 +882,7 @@
"Missing password.": "Falta contrasinal.",
"Passwords don't match.": "Non coinciden os contrasinais.",
"Password too short (min %(MIN_PASSWORD_LENGTH)s).": "Contrasinal demasiado curto (min %(MIN_PASSWORD_LENGTH)s).",
- "This doesn't look like a valid email address.": "Non semella ser un enderezo de correo-e válido.",
+ "This doesn't look like a valid email address.": "Non semella ser un enderezo de correo electrónico válido.",
"This doesn't look like a valid phone number.": "Non semella ser un número de teléfono válido.",
"You need to enter a user name.": "É preciso que introduza un nome de usuaria.",
"An unknown error occurred.": "Aconteceu un erro descoñecido.",
@@ -911,8 +905,8 @@
"Results from DuckDuckGo": "Resultados desde DuckDuckGo",
"Emoji": "Emoji",
"Notify the whole room": "Notificar a toda a sala",
- "Room Notification": "Notificación da Sala",
- "Users": "Usuarias",
+ "Room Notification": "Notificación da sala",
+ "Users": "Usuarios",
"unknown device": "dispositivo descoñecido",
"NOT verified": "Non validado",
"verified": "validado",
@@ -932,86 +926,85 @@
"Passphrases must match": "As frases de paso deben coincidir",
"Passphrase must not be empty": "A frase de paso non pode quedar baldeira",
"Export room keys": "Exportar chaves da sala",
- "This process allows you to export the keys for messages you have received in encrypted rooms to a local file. You will then be able to import the file into another Matrix client in the future, so that client will also be able to decrypt these messages.": "Este proceso permítelle exportar a un ficheiro local as chaves para as mensaxes que recibeu en salas cifradas. Posteriormente permitiralle importar as chaves en outro cliente Matrix no futuro, así o cliente poderá descifrar esas mensaxes.",
- "The exported file will allow anyone who can read it to decrypt any encrypted messages that you can see, so you should be careful to keep it secure. To help with this, you should enter a passphrase below, which will be used to encrypt the exported data. It will only be possible to import the data by using the same passphrase.": "O ficheiro exportado permitiralle a calquera que poida lelo descifrar e cifrar mensaxes que vostede ve, así que debería ter coidado e gardalo de xeito seguro. Para axudarlle, debe introducir unha frase de paso aquí abaixo que será utilizada para cifrar os datos exportados. Só será posible importar os datos utilizando a misma frase de paso.",
+ "This process allows you to export the keys for messages you have received in encrypted rooms to a local file. You will then be able to import the file into another Matrix client in the future, so that client will also be able to decrypt these messages.": "Este proceso permítelle exportar a un ficheiro local as chaves para as mensaxes que recibiu en salas cifradas. Posteriormente permitiralle importar as chaves en outro cliente Matrix no futuro, así o cliente poderá descifrar esas mensaxes.",
+ "The exported file will allow anyone who can read it to decrypt any encrypted messages that you can see, so you should be careful to keep it secure. To help with this, you should enter a passphrase below, which will be used to encrypt the exported data. It will only be possible to import the data by using the same passphrase.": "O ficheiro exportado permitiralle a calquera que poida lelo descifrar e cifrar mensaxes que vostede ve, así que debería ter coidado e gardalo de xeito seguro. Para axudarlle, debe introducir unha frase de paso aquí abaixo que será utilizada para cifrar os datos exportados. Só será posible importar os datos utilizando a mesma frase de paso.",
"Enter passphrase": "Introduza a frase de paso",
"Confirm passphrase": "Confirme a frase de paso",
"Export": "Exportar",
"Import room keys": "Importar chaves de sala",
- "This process allows you to import encryption keys that you had previously exported from another Matrix client. You will then be able to decrypt any messages that the other client could decrypt.": "Este proceso permítelle importar chaves de cifrado que vostede exportou de outro cliente Matrix. Así poderá descifrar calquer mensaxe que o outro cliente puidese cifrar.",
+ "This process allows you to import encryption keys that you had previously exported from another Matrix client. You will then be able to decrypt any messages that the other client could decrypt.": "Este proceso permítelle importar chaves de cifrado que vostede exportou de outro cliente Matrix. Así poderá descifrar calquera mensaxe que o outro cliente puidese cifrar.",
"The export file will be protected with a passphrase. You should enter the passphrase here, to decrypt the file.": "O ficheiro exportado estará protexido con unha frase de paso. Debe introducir aquí esa frase de paso para descifrar o ficheiro.",
"File to import": "Ficheiro a importar",
"Import": "Importar",
"The information being sent to us to help make Riot.im better includes:": "A información enviada a Riot.im para axudarnos a mellorar inclúe:",
- "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Si esta páxina inclúe información identificable como ID de grupo, usuario ou sala, estes datos son eliminados antes de ser enviados ao servidor.",
+ "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Se esta páxina inclúe información identificable como ID de grupo, usuario ou sala, estes datos son eliminados antes de ser enviados ao servidor.",
"The platform you're on": "A plataforma na que está",
"The version of Riot.im": "A versión de Riot.im",
- "Whether or not you're logged in (we don't record your user name)": "Si está ou non conectada (non gardamos o nome de usuaria)",
+ "Whether or not you're logged in (we don't record your user name)": "Se está ou non conectado/a (non gardamos os nomes de usuarios)",
"Your language of choice": "A súa preferencia de idioma",
- "Which officially provided instance you are using, if any": "Qué instancia oficial está a utilizar, si algunha",
- "Whether or not you're using the Richtext mode of the Rich Text Editor": "Si utiliza o modo Richtext ou non do Editor Rich Text",
+ "Which officially provided instance you are using, if any": "Se a houbese, que instancia oficial está a utilizar",
+ "Whether or not you're using the Richtext mode of the Rich Text Editor": "Se utiliza o modo Richtext ou non do editor de texto enriquecido",
"Your homeserver's URL": "O URL do seu servidor de inicio",
"Your identity server's URL": "O URL da súa identidade no servidor",
"In reply to ": "En resposta a ",
- "This room is not public. You will not be able to rejoin without an invite.": "Esta sala non é pública. Non poderá voltar a ela sin un convite.",
+ "This room is not public. You will not be able to rejoin without an invite.": "Esta sala non é pública. Non poderá volver a ela sen un convite.",
"This room is not showing flair for any communities": "Esta sala non mostra popularidade para as comunidades",
"%(oldDisplayName)s changed their display name to %(displayName)s.": "%(oldDisplayName)s cambiou o seu nome mostrado a %(displayName)s.",
"Clear filter": "Quitar filtro",
"Failed to set direct chat tag": "Fallo ao establecer etiqueta do chat directo",
"Failed to remove tag %(tagName)s from room": "Fallo ao eliminar a etiqueta %(tagName)s da sala",
"Failed to add tag %(tagName)s to room": "Fallo ao engadir a etiqueta %(tagName)s a sala",
- "Failed to lookup current room": "Fallo ao bloquear a sala actual",
"Disable Community Filter Panel": "Deshabilitar o panel de filtro de comunidades",
"Your key share request has been sent - please check your other devices for key share requests.": "Enviouse a solicitude de compartir chave - por favor comprobe as peticións de compartir chaves nos seus outros dispositivos.",
- "Key share requests are sent to your other devices automatically. If you rejected or dismissed the key share request on your other devices, click here to request the keys for this session again.": "As peticións de compartir chaves envíanse de xeito automático aos seus outros dispositivos. Si rexeita o obvia estas peticións nos outros dispositivos, pulse aquí para solicitar novamente as chaves para esta sesión.",
- "If your other devices do not have the key for this message you will not be able to decrypt them.": "Si os seus outros dispositivos non teñen as chaves para est mensaxe non poderán descifrala.",
+ "Key share requests are sent to your other devices automatically. If you rejected or dismissed the key share request on your other devices, click here to request the keys for this session again.": "As peticións de compartir chaves envíanse de xeito automático aos seus outros dispositivos. Se rexeita o obvia estas peticións nos outros dispositivos, pulse aquí para solicitar novamente as chaves para esta sesión.",
+ "If your other devices do not have the key for this message you will not be able to decrypt them.": "Se os seus outros dispositivos non teñen as chaves para este mensaxe non poderán descifrala.",
"Key request sent.": "Petición de chave enviada.",
- "Re-request encryption keys from your other devices.": "Voltar a pedir chaves de cifrado desde os outros dispositivos.",
+ "Re-request encryption keys from your other devices.": "Volver a pedir chaves de cifrado desde os outros dispositivos.",
"%(user)s is a %(userRole)s": "%(user)s é %(userRole)s",
"Flair": "Aura",
- "Showing flair for these communities:": "Mostrar o aura para estas comunidades:",
- "Flair will appear if enabled in room settings": "O Aura aparecerá si está habilitada nas preferencias da sala",
- "Flair will not appear": "O Aura non aparecerá",
- "Display your community flair in rooms configured to show it.": "Mostrar o aura da súa comunidade en salas configuradas para mostralo.",
+ "Showing flair for these communities:": "Mostrar a aura para estas comunidades:",
+ "Flair will appear if enabled in room settings": "A aura aparecerá se está activada nas preferencias da sala",
+ "Flair will not appear": "A aura non aparecerá",
+ "Display your community flair in rooms configured to show it.": "Mostrar a aura da súa comunidade nas salas configuradas para que a mostren.",
"Did you know: you can use communities to filter your Riot.im experience!": "Sabía que pode utilizar as comunidades para mellorar a súa experiencia con Riot.im!",
- "To set up a filter, drag a community avatar over to the filter panel on the far left hand side of the screen. You can click on an avatar in the filter panel at any time to see only the rooms and people associated with that community.": "Para establecer un filtro, arrastre un avatar da comunidade sobre o panel de filtros na parte esquerda da pantalla. Pode pulsar nun avatar no panel de filtrado en calquer moemento para ver só salas e xente asociada a esa comunidade.",
- "Deops user with given id": "Degradar usuaria co id dado",
+ "To set up a filter, drag a community avatar over to the filter panel on the far left hand side of the screen. You can click on an avatar in the filter panel at any time to see only the rooms and people associated with that community.": "Para establecer un filtro, arrastre un avatar da comunidade sobre o panel de filtros na parte esquerda da pantalla. Pode pulsar nun avatar no panel de filtrado en calquera momento para ver só salas e xente asociada a esa comunidade.",
+ "Deops user with given id": "Degradar o usuario con esa ID",
"Seen by %(displayName)s (%(userName)s) at %(dateTime)s": "Visto por %(displayName)s(%(userName)s en %(dateTime)s",
"Code": "Código",
"Unable to join community": "Non se puido unir a comunidade",
"Unable to leave community": "Non se puido deixar a comunidade",
- "Changes made to your community name and avatar might not be seen by other users for up to 30 minutes.": "Os cambios realizados a súa comunidade name e avatarname and avatar might not be seen by other users for up to 30 minutes.": "Os cambios realizados a súa comunidade name e avatar poida que non os vexan outros usuarios ate dentro de 30 minutos.",
"Join this community": "Únase a esta comunidade",
"Leave this community": "Deixar esta comunidade",
"Debug Logs Submission": "Envío de rexistro de depuración",
- "If you've submitted a bug via GitHub, debug logs can help us track down the problem. Debug logs contain application usage data including your username, the IDs or aliases of the rooms or groups you have visited and the usernames of other users. They do not contain messages.": "Si enviou un reporte de fallo a través de GitHub, os informes poden axudarnos a examinar o problema. Os informes de fallo conteñen datos do uso do aplicativo incluíndo o seu nome de usuaria, os IDs ou alcumes das salas e grupos que visitou e os nomes de usuaria de outras personas. Non conteñen mensaxes.",
+ "If you've submitted a bug via GitHub, debug logs can help us track down the problem. Debug logs contain application usage data including your username, the IDs or aliases of the rooms or groups you have visited and the usernames of other users. They do not contain messages.": "Si enviou un reporte de fallo a través de GitHub, os informes poden axudarnos a examinar o problema. Os informes de fallo conteñen datos do uso do aplicativo incluíndo o seu nome de usuaria, os IDs ou alcumes das salas e grupos que visitou e os nomes de usuaria de outras persoas. Non conteñen mensaxes.",
"Submit debug logs": "Enviar informes de depuración",
- "Opens the Developer Tools dialog": "Abre o cadro de Ferramentas de Desenvolvedoras",
- "Stickerpack": "Peganitas",
- "You don't currently have any stickerpacks enabled": "Non ten paquetes de pegatinas habilitados",
- "Add a stickerpack": "Engadir un paquete de pegatinas",
- "Hide Stickers": "Agochar pegatinas",
- "Show Stickers": "Mostrar pegatinas",
- "Who can join this community?": "Quén pode unirse a esta comunidade?",
+ "Opens the Developer Tools dialog": "Abre o cadro de Ferramentas de desenvolvemento",
+ "Stickerpack": "Iconas",
+ "You don't currently have any stickerpacks enabled": "Non ten paquetes de iconas activados",
+ "Add a stickerpack": "Engadir un paquete de iconas",
+ "Hide Stickers": "Agochar iconas",
+ "Show Stickers": "Mostrar iconas",
+ "Who can join this community?": "Quen pode unirse a esta comunidade?",
"Everyone": "Todo o mundo",
"Fetching third party location failed": "Fallo ao obter a localización de terceiros",
"A new version of Riot is available.": "Está dispoñible unha nova versión de Riot.",
"Couldn't load home page": "Non se cargou a páxina de inicio",
"Send Account Data": "Enviar datos da conta",
- "All notifications are currently disabled for all targets.": "Todas as notificacións están deshabilitadas para todos os destinos.",
+ "All notifications are currently disabled for all targets.": "Todas as notificacións están desactivadas para todos os destinos.",
"Uploading report": "Informe da subida",
"Sunday": "Domingo",
- "Notification targets": "Obxetivos das notificacións",
+ "Notification targets": "Obxectivos das notificacións",
"Today": "Hoxe",
"Failed to get protocol list from Home Server": "Fallo ao obter a lista de protocolo desde o servidor",
"You are not receiving desktop notifications": "Non está a recibir notificacións de escritorio",
"Friday": "Venres",
"Update": "Actualizar",
- "What's New": "Qué hai de novo",
+ "What's New": "Que hai de novo",
"Add an email address above to configure email notifications": "Engada un enderezo de correo electrónico para configurar as notificacións",
"Expand panel": "Expandir panel",
"On": "On",
- "%(count)s Members|other": "%(count)s Membros",
+ "%(count)s Members|other": "%(count)s participantes",
"Filter room names": "Filtrar nomes de sala",
"Changelog": "Rexistro de cambios",
"Waiting for response from server": "Agardando pola resposta do servidor",
@@ -1019,14 +1012,14 @@
"Advanced notification settings": "Axustes avanzados de notificación",
"Failed to send logs: ": "Fallo ao enviar os informes: ",
"delete the alias.": "borrar alcume.",
- "To return to your account in future you need to set a password": "Para voltar a súa conta no futuro debe establecer un contrasinal>/u>",
+ "To return to your account in future you need to set a password": "Para volver a súa conta no futuro debe establecer un contrasinal>/u>",
"Forget": "Esquecer",
"#example": "#exemplo",
"Hide panel": "Agochar panel",
"You cannot delete this image. (%(code)s)": "Non pode eliminar esta imaxe. (%(code)s)",
"Cancel Sending": "Cancelar o envío",
"This Room": "Esta sala",
- "The Home Server may be too old to support third party networks": "O servidor de inicio podería ser demasiando antigo como para aceptar redes de terceiros",
+ "The Home Server may be too old to support third party networks": "O servidor de inicio podería ser demasiado antigo como para aceptar redes de terceiros",
"Noisy": "Ruidoso",
"Error saving email notification preferences": "Fallo ao cargar os axustes de notificacións",
"Messages containing my display name": "Mensaxes que conteñen o meu nome público",
@@ -1036,25 +1029,25 @@
"Failed to update keywords": "Fallo ao actualizar as palabras chave",
"Notes:": "Notas:",
"remove %(name)s from the directory.": "eliminar %(name)s do directorio.",
- "Notifications on the following keywords follow rules which can’t be displayed here:": "Notificacións das reglas de seguimento das seguintes palabras que non se mostrarán aquí:",
+ "Notifications on the following keywords follow rules which can’t be displayed here:": "Notificacións das regras de seguimento das seguintes palabras que non se mostrarán aquí:",
"Safari and Opera work too.": "Safari e Opera tamén funcionan.",
"Please set a password!": "Por favor estableza un contrasinal!",
"You have successfully set a password!": "Mudou con éxito o seu contrasinal!",
- "An error occurred whilst saving your email notification preferences.": "Algo fallou mentras se gardaban as súas preferencias de notificaicón.",
+ "An error occurred whilst saving your email notification preferences.": "Algo fallou mentres se gardaban as súas preferencias de notificación.",
"Explore Room State": "Explorar estado da sala",
"Search for a room": "Buscar unha sala",
"Source URL": "URL fonte",
"Messages sent by bot": "Mensaxes enviadas por bot",
"Filter results": "Filtrar resultados",
- "Members": "Membresía",
+ "Members": "Participantes",
"No update available.": "Sen actualizacións.",
- "Resend": "Voltar a enviar",
+ "Resend": "Volver a enviar",
"Files": "Ficheiros",
"Collecting app version information": "Obtendo información sobre a versión da app",
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Eliminar o alcume da sala %(alias)s e borrar %(name)s do directorio?",
- "This will allow you to return to your account after signing out, and sign in on other devices.": "Esto permitiralle voltar a súa conta tras desconectarse, e conectarse en outros dispositivos.",
+ "This will allow you to return to your account after signing out, and sign in on other devices.": "Isto permitiralle volver a súa conta tras desconectarse, e conectarse en outros dispositivos.",
"Keywords": "Palabras chave",
- "Enable notifications for this account": "Habilitar notificacións para esta conta",
+ "Enable notifications for this account": "Activar notificacións para esta conta",
"Directory": "Directorio",
"Invite to this community": "Convidar a esta comunidade",
"Failed to get public room list": "Fallo ao obter a lista de salas públicas",
@@ -1064,22 +1057,22 @@
"Enter keywords separated by a comma:": "Introduza palabras chave separadas por vírgulas:",
"Search…": "Buscar…",
"Remove %(name)s from the directory?": "Eliminar %(name)s do directorio?",
- "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot utiliza características avanzadas do navegador, algunhas das cales non están dispoñibles ou son experimentales no seu navegador actual.",
+ "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot utiliza características avanzadas do navegador, algunhas das cales non están dispoñibles ou son experimentais no seu navegador actual.",
"Developer Tools": "Ferramentas para desenvolver",
"Preparing to send logs": "Preparándose para enviar informe",
- "Enable desktop notifications": "Habilitar notificacións de escritorio",
- "Remember, you can always set an email address in user settings if you change your mind.": "Lembre, sempre poderá poñer un enderezo de correo nos axustes de usuario si cambia de idea.",
+ "Enable desktop notifications": "Activar as notificacións de escritorio",
+ "Remember, you can always set an email address in user settings if you change your mind.": "Lembre que sempre poderá poñer un enderezo de correo nos axustes de usuario se cambiase de idea.",
"Explore Account Data": "Explorar datos da conta",
"All messages (noisy)": "Todas as mensaxes (alto)",
"Saturday": "Sábado",
- "I understand the risks and wish to continue": "Entendos os riscos e desexo continuar",
+ "I understand the risks and wish to continue": "Entendo os riscos e desexo continuar",
"Direct Chat": "Chat directo",
"The server may be unavailable or overloaded": "O servidor podería non estar dispoñible ou sobrecargado",
"Reject": "Rexeitar",
"Failed to set Direct Message status of room": "Fallo ao establecer o estado Mensaxe Directa da sala",
"Monday": "Luns",
"Remove from Directory": "Eliminar do directorio",
- "Enable them now": "Habilitalas agora",
+ "Enable them now": "Activalos agora",
"Messages containing my user name": "Mensaxes que conteñen o meu nome de usuaria",
"Toolbox": "Ferramentas",
"Collecting logs": "Obtendo rexistros",
@@ -1098,10 +1091,10 @@
"Downloading update...": "Descargando actualización...",
"You have successfully set a password and an email address!": "Estableceu correctamente un contrasinal e enderezo de correo!",
"Failed to send custom event.": "Fallo ao enviar evento personalizado.",
- "What's new?": "Qué hai de novo?",
- "Notify me for anything else": "Notificarme todo o demáis",
+ "What's new?": "Que hai de novo?",
+ "Notify me for anything else": "Notificarme todo o demais",
"When I'm invited to a room": "Cando son convidado a unha sala",
- "Can't update user notification settings": "Non se poden actualizar os axutes de notificación",
+ "Can't update user notification settings": "Non se poden actualizar os axustes de notificación",
"Notify for all other messages/rooms": "Notificar para todas as outras mensaxes/salas",
"Unable to look up room ID from server": "Non se puido atopar o ID da sala do servidor",
"Couldn't find a matching Matrix room": "Non coincide con ningunha sala de Matrix",
@@ -1113,8 +1106,8 @@
"Back": "Atrás",
"Reply": "Resposta",
"Show message in desktop notification": "Mostrar mensaxe nas notificacións de escritorio",
- "Debug logs contain application usage data including your username, the IDs or aliases of the rooms or groups you have visited and the usernames of other users. They do not contain messages.": "Os informes de depuración conteñen datos de utilización do aplicativo como o seu nome de usuaria, os IDs ou alcumes de salas e grupos que vostede visitou e os nomes de usuaria de outras usuarias. Non conteñen mensaxes.",
- "Unhide Preview": "Desagochar a vista previsa",
+ "Debug logs contain application usage data including your username, the IDs or aliases of the rooms or groups you have visited and the usernames of other users. They do not contain messages.": "Os informes de depuración conteñen datos de utilización do aplicativo como o seu nome de usuario, os IDs ou alcumes de salas e grupos que vostede visitou e os nomes de usuarios doutras usuarias. Non conteñen mensaxes.",
+ "Unhide Preview": "Desagochar a vista previa",
"Unable to join network": "Non se puido conectar a rede",
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Pode que os configurase nun cliente diferente de Riot. Non pode establecelos desde Riot pero aínda así aplicaranse",
"Sorry, your browser is not able to run Riot.": "Desculpe, o seu navegador non pode executar Riot.",
@@ -1124,41 +1117,40 @@
"Error encountered (%(errorDetail)s).": "Houbo un erro (%(errorDetail)s).",
"Login": "Conectar",
"Low Priority": "Baixa prioridade",
- "Unable to fetch notification target list": "Non se puido procesar a lista de obxetivo de notificacións",
+ "Unable to fetch notification target list": "Non se puido procesar a lista de obxectivo de notificacións",
"Set Password": "Establecer contrasinal",
- "Enable audible notifications in web client": "Habilitar notificacións audibles no cliente web",
- "Permalink": "Ligazón permanente",
+ "Enable audible notifications in web client": "Activar as notificacións audibles no cliente web",
"Off": "Off",
- "Riot does not know how to join a room on this network": "Riot non sabe cómo conectar con unha sala en esta rede",
+ "Riot does not know how to join a room on this network": "Riot non sabe como conectar cunha sala nesta rede",
"Mentions only": "Só mencións",
- "You can now return to your account after signing out, and sign in on other devices.": "Pode voltar a súa contra tras desconectarse, e conectarse en outros dispositivos.",
- "Enable email notifications": "Habilitar notificacións de correo",
+ "You can now return to your account after signing out, and sign in on other devices.": "Pode volver a súa contra tras desconectarse, e conectarse en outros dispositivos.",
+ "Enable email notifications": "Activar notificacións de correo",
"Event Type": "Tipo de evento",
"Download this file": "Descargue este ficheiro",
"Pin Message": "Fixar mensaxe",
"Failed to change settings": "Fallo ao cambiar os axustes",
"View Community": "Ver Comunidade",
- "%(count)s Members|one": "%(count)s Membro",
+ "%(count)s Members|one": "%(count)s participante",
"Event sent!": "Evento enviado!",
"View Source": "Ver fonte",
"Event Content": "Contido do evento",
"Thank you!": "Grazas!",
"Collapse panel": "Agochar panel",
- "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Co seu navegador actual a apareciencia e uso do aplicativo poderían estar totalmente falseadas, e algunhas características poderían non funcionar. Se quere pode continuar, pero debe ser consciente de que poden haber fallos!",
+ "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Co seu navegador actual a aparencia e uso do aplicativo poderían estar totalmente falseadas, e algunhas características poderían non funcionar. Se quere pode continuar, pero debe ser consciente de que poden haber fallos!",
"Checking for an update...": "Comprobando as actualizacións...",
"There are advanced notifications which are not shown here": "Existen notificacións avanzadas que non se mostran aquí",
- "Every page you use in the app": "Cada páxina que vostede utiliza no aplicativo",
- "e.g. ": "ex. ",
- "Your User Agent": "User Agent",
+ "Every page you use in the app": "Cada páxina que use na aplicación",
+ "e.g. ": "p.ex. ",
+ "Your User Agent": "Axente de usuario",
"Your device resolution": "Resolución do dispositivo",
- "Missing roomId.": "Falta o id da sala.",
+ "Missing roomId.": "Falta o ID da sala.",
"Always show encryption icons": "Mostra sempre iconas de cifrado",
- "At this time it is not possible to reply with a file so this will be sent without being a reply.": "En este intre non é posible respostar con un ficheiro así que este será enviado sin ser considerado resposta.",
- "Unable to reply": "Non puido respostar",
- "At this time it is not possible to reply with an emote.": "En este intre non é posible respostar con un emote.",
- "Popout widget": "Widget emerxente",
+ "At this time it is not possible to reply with a file so this will be sent without being a reply.": "Neste intre non é posible responder con un ficheiro así que este será enviado sen ser considerado resposta.",
+ "Unable to reply": "Non puido responder",
+ "At this time it is not possible to reply with an emote.": "Neste intre non é posible responder con un emote.",
+ "Popout widget": "trebello emerxente",
"Picture": "Imaxe",
- "Unable to load event that was replied to, it either does not exist or you do not have permission to view it.": "Non se cargou o evento ao que respostaba, ou non existe ou non ten permiso para velo.",
+ "Unable to load event that was replied to, it either does not exist or you do not have permission to view it.": "Non se cargou o evento ao que respondía, ou non existe ou non ten permiso para velo.",
"Riot bugs are tracked on GitHub: create a GitHub issue.": "Os fallos de Riot séguense en GitHub: crear un informe en GitHub.",
"Log out and remove encryption keys?": "Desconectar e eliminar as chaves de cifrado?",
"Send Logs": "Enviar informes",
@@ -1166,5 +1158,42 @@
"Refresh": "Actualizar",
"We encountered an error trying to restore your previous session.": "Atopamos un fallo intentando restablecer a súa sesión anterior.",
"Clearing your browser's storage may fix the problem, but will sign you out and cause any encrypted chat history to become unreadable.": "Limpando o almacenamento do navegador podería resolver o problema, pero desconectarao e non poderá ler o historial cifrado da conversa.",
- "Collapse Reply Thread": "Comprimir o fío de respostas"
+ "Collapse Reply Thread": "Comprimir o fío de respostas",
+ "e.g. %(exampleValue)s": "p.ex. %(exampleValue)s",
+ "Send analytics data": "Enviar datos de análises",
+ "Enable widget screenshots on supported widgets": "Activar as capturas de trebellos para aqueles que as permiten",
+ "Encrypting": "Cifrando",
+ "Encrypted, not sent": "Cifrado, sen enviar",
+ "Share Link to User": "Compartir a ligazón co usuario",
+ "Share room": "Compartir sala",
+ "To notify everyone in the room, you must be a": "Para avisar a todos os da sala ten que ser",
+ "Muted Users": "Usuarios silenciados",
+ "Please help improve Riot.im by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Mellore Riot.im enviando os datos anónimos de uso. Iso suporá o emprego dunha cookie (véxase a nosa Política de Cookies).",
+ "Please help improve Riot.im by sending anonymous usage data. This will use a cookie.": "Mellore Riot.im enviando o uso de datos anónimo. Iso usará unha cookie.",
+ "Yes, I want to help!": "Si, quero axuda",
+ "Warning: This widget might use cookies.": "Aviso: este trebello podería usar algunha cookie.",
+ "Reload widget": "Volver a cargar o trebello",
+ "Failed to indicate account erasure": "Non se deu indicado a eliminación de conta",
+ "This will make your account permanently unusable. You will not be able to log in, and no one will be able to re-register the same user ID. This will cause your account to leave all rooms it is participating in, and it will remove your account details from your identity server. This action is irreversible.": "Iso fará que a súa deixe de ter uso de xeito permanente. Non poderá acceder e ninguén vai a poder volver a rexistrar esa mesma ID de usuario. Suporá que saía de todas as salas de conversas nas que estaba e eliminará os detalles da súa conta do servidores de identificación.Isto non se poderá desfacer",
+ "Deactivating your account does not by default cause us to forget messages you have sent. If you would like us to forget your messages, please tick the box below.": "Desactivando a súa conta non supón que por defecto esquezamos as súas mensaxes enviadas. Se quere que nos esquezamos das súas mensaxes, prema na caixa de embaixo.",
+ "To continue, please enter your password:": "Para continuar introduza o seu contrasinal:",
+ "password": "contrasinal",
+ "Message visibility in Matrix is similar to email. Our forgetting your messages means that messages you have sent will not be shared with any new or unregistered users, but registered users who already have access to these messages will still have access to their copy.": "A visibilidade das mensaxes en Matrix é parecida ás dos correos electrónicos. Que esquezamos as súas mensaxes significa que as súas mensaxes non se van a compartir con ningún novo membro ou usuario que non estea rexistrado. Mais aqueles usuarios que xa tiveron acceso a estas mensaxes si que seguirán tendo acceso as súas propias copias desas mensaxes.",
+ "Please forget all messages I have sent when my account is deactivated (Warning: this will cause future users to see an incomplete view of conversations)": "Esquezan todas as mensaxes que eu enviara no momento en que elimine a miña conta. (Aviso: iso suporá que os seguintes participantes só verán unha versión incompleta das conversas.)",
+ "Share Room": "Compartir sala",
+ "Link to most recent message": "Ligazón ás mensaxes máis recentes",
+ "Share User": "Compartir usuario",
+ "Share Community": "Compartir comunidade",
+ "Share Room Message": "Compartir unha mensaxe da sala",
+ "Link to selected message": "Ligazón á mensaxe escollida",
+ "COPY": "Copiar",
+ "Share Message": "Compartir mensaxe",
+ "Can't leave Server Notices room": "Non se pode saír da sala de información do servidor",
+ "This room is used for important messages from the Homeserver, so you cannot leave it.": "Esta sala emprégase para mensaxes importantes do servidor da sala, as que non pode saír dela.",
+ "Terms and Conditions": "Termos e condicións",
+ "To continue using the %(homeserverDomain)s homeserver you must review and agree to our terms and conditions.": "Para continuar usando o servidor %(homeserverDomain)s ten que revisar primeiro os seus termos e condicións e logo aceptalos.",
+ "Review terms and conditions": "Revise os termos e condicións",
+ "No Audio Outputs detected": "Non se detectou unha saída de audio",
+ "Audio Output": "Saída de audio",
+ "Try the app first": "Probe a aplicación primeiro"
}
diff --git a/src/i18n/strings/he.json b/src/i18n/strings/he.json
index dbae2858a9..7d96dfa089 100644
--- a/src/i18n/strings/he.json
+++ b/src/i18n/strings/he.json
@@ -221,7 +221,6 @@
"Unable to fetch notification target list": "לא ניתן לאחזר רשימת יעדי התראה",
"Set Password": "הגדר סיסמא",
"Enable audible notifications in web client": "אפשר התראות קוליות בדפדפן",
- "Permalink": "קישור קבוע",
"Off": "סגור",
"Riot does not know how to join a room on this network": "Riot אינו יודע כיצד להצטרף לחדר ברשת זו",
"Mentions only": "מאזכר בלבד",
diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json
index 6b52958ea6..2aea205a15 100644
--- a/src/i18n/strings/hu.json
+++ b/src/i18n/strings/hu.json
@@ -168,7 +168,6 @@
"Failed to kick": "Kirúgás nem sikerült",
"Failed to leave room": "A szobát nem sikerült elhagyni",
"Failed to load timeline position": "Az idővonal pozíciót nem sikerült betölteni",
- "Failed to lookup current room": "Az aktuális szoba felkeresése sikertelen",
"Failed to mute user": "A felhasználót nem sikerült hallgatásra bírni",
"Failed to reject invite": "A meghívót nem sikerült elutasítani",
"Failed to reject invitation": "A meghívót nem sikerült elutasítani",
@@ -238,7 +237,6 @@
"Level:": "Szint:",
"Local addresses for this room:": "A szoba helyi címe:",
"Logged in as:": "Bejelentkezve mint:",
- "Login as guest": "Belépés vendégként",
"Logout": "Kilép",
"Low priority": "Alacsony prioritás",
"%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s elérhetővé tette a szoba új üzeneteit nekik minden résztvevő a szobában, amióta meg van hívva.",
@@ -256,7 +254,6 @@
"Mobile phone number": "Mobil telefonszám",
"Mobile phone number (optional)": "Mobill telefonszám (opcionális)",
"Moderator": "Moderátor",
- "Must be viewing a room": "Meg kell nézni a szobát",
"%(serverName)s Matrix ID": "%(serverName)s Matrix azonosítóm",
"Name": "Név",
"Never send encrypted messages to unverified devices from this device": "Soha ne küldj titkosított üzenetet ellenőrizetlen eszközre erről az eszközről",
@@ -783,8 +780,6 @@
"This Home server does not support communities": "Ez a saját szerver nem támogatja a közösségeket",
"Error whilst fetching joined communities": "Hiba a csatlakozott közösségek betöltésénél",
"Create a new community": "Új közösség létrehozása",
- "Join an existing community": "Meglévő közösséghez csatlakozás",
- "To join an existing community you'll have to know its community identifier; this will look something like +example:matrix.org.": "Ahhoz hogy csatlakozni tudj egy meglévő közösséghez ismerned kell a közösségi azonosítót ami például így nézhet ki: +pelda:matrix.org.",
"example": "példa",
"Failed to load %(groupId)s": "Nem sikerült betölteni: %(groupId)s",
"Your Communities": "Közösségeid",
@@ -919,7 +914,6 @@
"Something went wrong when trying to get your communities.": "Valami nem sikerült a közösségeid elérésénél.",
"Display your community flair in rooms configured to show it.": "Közösségi jelvényeid megjelenítése azokban a szobákban ahol ez engedélyezett.",
"This homeserver doesn't offer any login flows which are supported by this client.": "Ez a saját szerver egyetlen bejelentkezési metódust sem támogat amit ez a kliens ismer.",
- "Tag Panel": "Címke panel",
"Addresses": "Címek",
"collapse": "becsuk",
"expand": "kinyit",
@@ -938,7 +932,6 @@
"%(count)s of your messages have not been sent.|one": "Az üzeneted nem lett elküldve.",
"%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|other": "Újraküldöd mind vagy elveted mind. Az üzeneteket egyenként is elküldheted vagy elvetheted.",
"%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|one": "Üzenet újraküldése vagy üzenet elvetése most.",
- "Message Replies": "Üzenet válaszok",
"Send an encrypted reply…": "Titkosított válasz küldése…",
"Send a reply (unencrypted)…": "Válasz küldése (titkosítatlanul)…",
"Send an encrypted message…": "Titkosított üzenet küldése…",
@@ -1126,7 +1119,6 @@
"Unable to fetch notification target list": "Nem sikerült letölteni az értesítési célok listáját",
"Set Password": "Jelszó beállítása",
"Enable audible notifications in web client": "Hangértesítések engedélyezése a webkliensben",
- "Permalink": "Állandó hivatkozás",
"Off": "Ki",
"Riot does not know how to join a room on this network": "A Riot nem tud csatlakozni szobához ezen a hálózaton",
"Mentions only": "Csak ha megemlítenek",
@@ -1169,32 +1161,39 @@
"Collapse Reply Thread": "Beszélgetés szál becsukása",
"Enable widget screenshots on supported widgets": "Ahol az a kisalkalmazásban támogatott ott képernyőkép készítés engedélyezése",
"Send analytics data": "Analitikai adatok küldése",
- "Help improve Riot by sending usage data? This will use a cookie. (See our cookie and privacy policies).": "Szeretnél segíteni a Riot javításában analitikai adatok elküldésével? Ez sütit (cookie) használ. (Nézd meg a sütikről és titoktartási irányelvekről szóló leírást).",
- "Help improve Riot by sending usage data? This will use a cookie.": "Szeretnél segíteni a Riot javításában analitikai adatok elküldésével? Ez sütit (cookie) használ.",
- "Yes please": "Igen, kérlek",
"Muted Users": "Elnémított felhasználók",
"Warning: This widget might use cookies.": "Figyelmeztetés: Ez a kisalkalmazás sütiket (cookies) használhat.",
"Terms and Conditions": "Általános Szerződési Feltételek",
"To continue using the %(homeserverDomain)s homeserver you must review and agree to our terms and conditions.": "A %(homeserverDomain)s szerver használatának folytatásához el kell olvasnod és el kell fogadnod az általános szerződési feltételeket.",
"Review terms and conditions": "Általános Szerződési Feltételek elolvasása",
"Failed to indicate account erasure": "A fiók törlésének jelzése sikertelen",
- "This will make your account permanently unusable. You will not be able to log in, and no one will be able to re-register the same user ID. This action is irreversible.": "Ezzel a felhasználói fiókod végleg használhatatlanná válik. Nem tudsz bejelentkezni, és senki más sem fog tudni újra regisztrálni ugyanezzel az azonosítóval. Ez a művelet visszafordíthatatlan.",
- "Deactivating your account does not by default erase messages you have sent. If you would like to erase your messages, please tick the box below.": "A felhasználói fiók felfüggesztése alapértelmezetten nem töröli semelyik általad küldött üzenetet. Ha az elküldött üzeneteidet törölni szeretnéd pipáld be a jelölőnégyzetet alul.",
- "Message visibility in Matrix is similar to email. Erasing your messages means that messages have you sent will not be shared with any new or unregistered users, but registered users who already had access to these messages will still have access to their copy.": "Az üzenetek láthatósága a Matrixban olyan mint az e-mail. Az üzeneted törlése azt jelenti, hogy amit elküldtél már nem lesz megosztva új- vagy vendég felhasználóval, de azok a regisztrált felhasználók akik már látták az üzenetet továbbra is hozzáférnek a saját példányukhoz.",
"To continue, please enter your password:": "Folytatáshoz add meg a jelszavad:",
"password": "jelszó",
- "Please erase all messages I have sent when my account is deactivated. (Warning: this will cause future users to see an incomplete view of conversations, which is a bad experience).": "Töröld az összes üzenetet amit küldtem amikor felfüggeszted a felhasználói fiókomat. (Figyelem: ezzel a jövőbeni felhasználók csak részleges beszélgetést láthatnak majd, ami rosszul eshet).",
"This will make your account permanently unusable. You will not be able to log in, and no one will be able to re-register the same user ID. This will cause your account to leave all rooms it is participating in, and it will remove your account details from your identity server. This action is irreversible.": "Ez végleg használhatatlanná teszi a fiókodat. Ezután nem fogsz tudni bejelentkezni, és más sem tud majd ezzel az azonosítóval fiókot létrehozni. Minden szobából amibe beléptél ki fogsz lépni, és törölni fogja minden fiók adatod az \"identity\" szerverről. Ez a művelet visszafordíthatatlan.",
"Deactivating your account does not by default cause us to forget messages you have sent. If you would like us to forget your messages, please tick the box below.": "A fiókod felfüggesztése nem jelenti alapértelmezetten azt, hogy az általad küldött üzenetek elfelejtődnek. Ha törölni szeretnéd az általad küldött üzeneteket, pipáld be a jelölőnégyzetet alul.",
"Message visibility in Matrix is similar to email. Our forgetting your messages means that messages you have sent will not be shared with any new or unregistered users, but registered users who already have access to these messages will still have access to their copy.": "Az üzenetek láthatósága a Matrixban hasonlít az emailhez. Az általad küldött üzenet törlése azt jelenti, hogy nem osztjuk meg új-, vagy vendég felhasználóval de a már regisztrált felhasználók akik már hozzáfértek az üzenethez továbbra is elérik a saját másolatukat.",
"Please forget all messages I have sent when my account is deactivated (Warning: this will cause future users to see an incomplete view of conversations)": "Kérlek töröld az összes általam küldött üzenetet amikor a fiókomat felfüggesztem (Figyelem: ez azt eredményezheti, hogy a jövőbeni felhasználók csak részleges beszélgetést látnak majd)",
"e.g. %(exampleValue)s": "pl. %(exampleValue)s",
- "Help improve Riot by sending usage data? This will use a cookie. (See our cookie and privacy policies).": "Segítesz jobbá tenni a Riotot használati adat küldésével? Ez sütit (cookie) fog használni. (Nézd meg az Általános Szerződési Feltételeket).",
"Reload widget": "Kisalkalmazás újratöltése",
"Please help improve Riot.im by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Kérlek segíts javítani a Riot.im-et azzal, hogy anonim felhasználási adatokat küldesz. Ez szütit (cookie) fog használni (lásd a sütire vonatkozó szabályozásunkat).",
"Please help improve Riot.im by sending anonymous usage data. This will use a cookie.": "Kérlek segíts javítani a Riot.im-et azzal, hogy anonim felhasználási adatokat küldesz. Ez szütit (cookie) fog használni.",
"Yes, I want to help!": "Igen, segítek!",
"Can't leave Server Notices room": "Nem lehet elhagyni a Szerver Üzenetek szobát",
"This room is used for important messages from the Homeserver, so you cannot leave it.": "Ez a szoba fontos szerverüzenetek közlésére jött létre, nem tudsz kilépni belőle.",
- "To notify everyone in the room, you must be a": "Hogy mindenkinek tudj üzenni ahhoz ilyen szinten kell lenned:"
+ "To notify everyone in the room, you must be a": "Hogy mindenkinek tudj üzenni ahhoz ilyen szinten kell lenned:",
+ "Try the app first": "Először próbáld ki az alkalmazást",
+ "Encrypting": "Titkosít",
+ "Encrypted, not sent": "Titkosítva, de nincs elküldve",
+ "No Audio Outputs detected": "Nem található hang kimenet",
+ "Audio Output": "Hang kimenet",
+ "Share Link to User": "Hivatkozás megosztása felhasználóval",
+ "Share room": "Szoba megosztása",
+ "Share Room": "Szoba megosztása",
+ "Link to most recent message": "A legfrissebb üzenetre hivatkozás",
+ "Share User": "Felhasználó megosztás",
+ "Share Community": "Közösség megosztás",
+ "Share Room Message": "Szoba üzenet megosztás",
+ "Link to selected message": "Hivatkozás a kijelölt üzenetre",
+ "COPY": "Másol",
+ "Share Message": "Üzenet megosztása"
}
diff --git a/src/i18n/strings/id.json b/src/i18n/strings/id.json
index 9db1a4a99c..86605c1d41 100644
--- a/src/i18n/strings/id.json
+++ b/src/i18n/strings/id.json
@@ -62,7 +62,6 @@
"Sign in with": "Masuk dengan",
"Leave room": "Meninggalkan ruang",
"Level:": "Tingkat:",
- "Login as guest": "Masuk sebagai tamu",
"Logout": "Keluar",
"Low priority": "Prioritas rendah",
"Markdown is disabled": "Markdown dinonaktifkan",
@@ -324,7 +323,6 @@
"Unable to fetch notification target list": "Tidak dapat mengambil daftar notifikasi target",
"Set Password": "Ubah Password",
"Enable audible notifications in web client": "Aktifkan notifikasi suara di klien web",
- "Permalink": "Permalink",
"Off": "Mati",
"Riot does not know how to join a room on this network": "Riot tidak tau bagaimana gabung ruang di jaringan ini",
"Mentions only": "Hanya jika disinggung",
diff --git a/src/i18n/strings/is.json b/src/i18n/strings/is.json
index d901c52f60..6770a0ea25 100644
--- a/src/i18n/strings/is.json
+++ b/src/i18n/strings/is.json
@@ -380,7 +380,6 @@
"View Source": "Skoða frumkóða",
"View Decrypted Source": "Skoða afkóðaða upprunaskrá",
"Unhide Preview": "Birta forskoðun",
- "Permalink": "Varanlegur tengill",
"Quote": "Tilvitnun",
"Source URL": "Upprunaslóð",
"All messages (noisy)": "Öll skilaboð (hávært)",
@@ -628,7 +627,6 @@
"No Microphones detected": "Engir hljóðnemar fundust",
"No Webcams detected": "Engar vefmyndavélar fundust",
"Homeserver is": "Heimanetþjónn er",
- "Login as guest": "Skrá inn sem gestur",
"Sign in to get started": "Skráðu þig inn til að komast í gang",
"Failed to fetch avatar URL": "Ekki tókst að sækja slóð á auðkennismynd",
"Set a display name:": "Stilltu birtingarnafn:",
diff --git a/src/i18n/strings/it.json b/src/i18n/strings/it.json
index fa22725f78..0957bc156d 100644
--- a/src/i18n/strings/it.json
+++ b/src/i18n/strings/it.json
@@ -160,10 +160,8 @@
"You are not in this room.": "Non sei in questa stanza.",
"You do not have permission to do that in this room.": "Non hai l'autorizzazione per farlo in questa stanza.",
"Missing room_id in request": "Manca l'id_stanza nella richiesta",
- "Must be viewing a room": "Devi vedere una stanza",
"Room %(roomId)s not visible": "Stanza %(roomId)s non visibile",
"Missing user_id in request": "Manca l'id_utente nella richiesta",
- "Failed to lookup current room": "Impossibile cercare la stanza attuale",
"Usage": "Utilizzo",
"/ddg is not a command": "/ddg non è un comando",
"To use it, just wait for autocomplete results to load and tab through them.": "Per usarlo, attendi l'autocompletamento dei risultati e selezionali con tab.",
@@ -231,7 +229,6 @@
"Not a valid Riot keyfile": "Non è una chiave di Riot valida",
"Authentication check failed: incorrect password?": "Controllo di autenticazione fallito: password sbagliata?",
"Failed to join room": "Accesso alla stanza fallito",
- "Tag Panel": "Pannello etichette",
"Disable Emoji suggestions while typing": "Disattiva i suggerimenti delle emoji durante la digitazione",
"Use compact timeline layout": "Usa impaginazione cronologia compatta",
"Hide join/leave messages (invites/kicks/bans unaffected)": "Nascondi i messaggi di entrata/uscita (inviti/kick/ban esclusi)",
@@ -794,8 +791,6 @@
"Error whilst fetching joined communities": "Errore nella rilevazione delle comunità a cui ti sei unito",
"Create a new community": "Crea una nuova comunità",
"Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "Crea una comunità per raggruppare utenti e stanze! Crea una pagina iniziale personalizzata per stabilire il tuo spazio nell'universo di Matrix.",
- "Join an existing community": "Unisciti ad una comunità esistente",
- "To join an existing community you'll have to know its community identifier; this will look something like +example:matrix.org.": "Per unirti ad una comunità esistente devi conoscere il suo identificativo; è qualcosa del tipo +esempio:matrix.org.",
"You have no visible notifications": "Non hai alcuna notifica visibile",
"Scroll to bottom of page": "Scorri in fondo alla pagina",
"Message not sent due to unknown devices being present": "Messaggio non inviato data la presenza di dispositivi sconosciuti",
@@ -909,7 +904,6 @@
"Error: Problem communicating with the given homeserver.": "Errore: problema di comunicazione con l'homeserver dato.",
"Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or enable unsafe scripts.": "Impossibile connettersi all'homeserver via HTTP quando c'è un URL HTTPS nella barra del tuo browser. Usa HTTPS o attiva gli script non sicuri.",
"Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "Impossibile connettersi all'homeserver - controlla la tua connessione, assicurati che il certificato SSL dell'homeserver sia fidato e che un'estensione del browser non stia bloccando le richieste.",
- "Login as guest": "Accedi come ospite",
"Sign in to get started": "Accedi per iniziare",
"Failed to fetch avatar URL": "Ricezione URL dell'avatar fallita",
"Set a display name:": "Imposta un nome visualizzato:",
@@ -1122,7 +1116,6 @@
"What's New": "Novità",
"Set Password": "Imposta Password",
"Enable audible notifications in web client": "Abilita notifiche audio nel client web",
- "Permalink": "Link permanente",
"Off": "Spento",
"#example": "#esempio",
"Mentions only": "Solo le citazioni",
@@ -1159,9 +1152,6 @@
"Refresh": "Aggiorna",
"We encountered an error trying to restore your previous session.": "Abbiamo riscontrato un errore tentando di ripristinare la tua sessione precedente.",
"Send analytics data": "Invia dati statistici",
- "Help improve Riot by sending usage data? This will use a cookie. (See our cookie and privacy policies).": "Aiutare a migliorare Riot inviando statistiche d'uso? Verrà usato un cookie. (Vedi la nostra politica sui cookie e sulla privacy).",
- "Help improve Riot by sending usage data? This will use a cookie.": "Aiutare a migliorare Riot inviando statistiche d'uso? Verrà usato un cookie.",
- "Yes please": "Sì grazie",
"Clear Storage and Sign Out": "Elimina lo storage e disconnetti",
"Send Logs": "Invia i log",
"Clearing your browser's storage may fix the problem, but will sign you out and cause any encrypted chat history to become unreadable.": "Eliminare lo storage del browser potrebbe risolvere il problema, ma verrai disconnesso e la cronologia delle chat criptate sarà illeggibile.",
@@ -1184,5 +1174,11 @@
"Terms and Conditions": "Termini e condizioni",
"To continue using the %(homeserverDomain)s homeserver you must review and agree to our terms and conditions.": "Per continuare a usare l'homeserver %(homeserverDomain)s devi leggere e accettare i nostri termini e condizioni.",
"Review terms and conditions": "Leggi i termini e condizioni",
- "Muted Users": "Utenti silenziati"
+ "Muted Users": "Utenti silenziati",
+ "Message Pinning": "Messaggi appuntati",
+ "Mirror local video feed": "Feed video dai ripetitori locali",
+ "Replying": "Rispondere",
+ "Popout widget": "Oggetto a comparsa",
+ "Failed to indicate account erasure": "Impossibile indicare la cancellazione dell'account",
+ "Bulk Options": "Opzioni applicate in massa"
}
diff --git a/src/i18n/strings/ja.json b/src/i18n/strings/ja.json
index 80bd4f1ff5..741de4b551 100644
--- a/src/i18n/strings/ja.json
+++ b/src/i18n/strings/ja.json
@@ -223,7 +223,6 @@
"Event Type": "イベントの形式",
"What's New": "新着",
"Enable audible notifications in web client": "ウェブクライアントで音による通知を有効化",
- "Permalink": "パーマリンク",
"remove %(name)s from the directory.": "ディレクトリから %(name)s を消去する。",
"Riot does not know how to join a room on this network": "Riotはこのネットワークで部屋に参加する方法を知りません",
"You can now return to your account after signing out, and sign in on other devices.": "サインアウト後にあなたの\nアカウントに戻る、また、他の端末でサインインすることができます。",
diff --git a/src/i18n/strings/ko.json b/src/i18n/strings/ko.json
index 4e0a988223..23b7efd97d 100644
--- a/src/i18n/strings/ko.json
+++ b/src/i18n/strings/ko.json
@@ -169,7 +169,6 @@
"Failed to kick": "내쫓지 못했어요",
"Failed to leave room": "방을 떠나지 못했어요",
"Failed to load timeline position": "타임라인 위치를 불러오지 못했어요",
- "Failed to lookup current room": "현재 방을 찾지 못했어요",
"Failed to mute user": "사용자의 알림을 끄지 못했어요",
"Failed to reject invite": "초대를 거절하지 못했어요",
"Failed to reject invitation": "초대를 거절하지 못했어요",
@@ -240,7 +239,6 @@
"Level:": "등급:",
"Local addresses for this room:": "이 방의 로컬 주소:",
"Logged in as:": "로그인:",
- "Login as guest": "손님으로 로그인",
"Logout": "로그아웃",
"Low priority": "낮은 우선순위",
"%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s님이 이후 방의 기록을 볼 수 있게 하셨어요 방 구성원 모두, 초대받은 시점부터.",
@@ -258,7 +256,6 @@
"Mobile phone number": "휴대 전화번호",
"Mobile phone number (optional)": "휴대 전화번호 (선택)",
"Moderator": "조정자",
- "Must be viewing a room": "방을 둘러봐야만 해요",
"Name": "이름",
"Never send encrypted messages to unverified devices from this device": "이 장치에서 인증받지 않은 장치로 암호화한 메시지를 보내지 마세요",
"Never send encrypted messages to unverified devices in this room from this device": "이 장치에서 이 방의 인증받지 않은 장치로 암호화한 메시지를 보내지 마세요",
@@ -754,7 +751,6 @@
"Riot does not know how to join a room on this network": "라이엇이 이 네트워크에서 방에 들어가는 법을 알 수 없어요",
"Set Password": "비밀번호 설정",
"Enable audible notifications in web client": "웹 클라이언트에서 알림 소리 켜기",
- "Permalink": "고유주소",
"Off": "끄기",
"#example": "#예",
"Mentions only": "답만 하기",
diff --git a/src/i18n/strings/lt.json b/src/i18n/strings/lt.json
index bd46c25ed8..e1525f7af1 100644
--- a/src/i18n/strings/lt.json
+++ b/src/i18n/strings/lt.json
@@ -161,7 +161,6 @@
"Set Password": "Nustatyti slaptažodį",
"An error occurred whilst saving your email notification preferences.": "Įrašant pranešimų el. paštu nuostatas, įvyko klaida.",
"Unable to join network": "Nepavyko prisijungti prie tinklo",
- "Permalink": "Pastovioji nuoroda",
"Register": "Registruotis",
"Off": "Išjungta",
"Edit": "Koreguoti",
diff --git a/src/i18n/strings/lv.json b/src/i18n/strings/lv.json
index 01e3ae5c6d..0c6bcb0977 100644
--- a/src/i18n/strings/lv.json
+++ b/src/i18n/strings/lv.json
@@ -153,7 +153,6 @@
"Failed to kick": "Neizdevās izspert/padzīt (kick)",
"Failed to leave room": "Neizdevās pamest istabu",
"Failed to load timeline position": "Neizdevās ielādēt laikpaziņojumu pozīciju",
- "Failed to lookup current room": "Neizdevās uziet pašreizējo istabu",
"Failed to mute user": "Neizdevās apklusināt lietotāju",
"Failed to reject invite": "Neizdevās noraidīt uzaicinājumu",
"Failed to reject invitation": "Neizdevās noraidīt uzaicinājumu",
@@ -224,7 +223,6 @@
"Level:": "Līmenis:",
"Local addresses for this room:": "Šīs istabas lokālās adreses:",
"Logged in as:": "Pierakstījās kā:",
- "Login as guest": "Pierakstīties kā viesim",
"Logout": "Izrakstīties",
"Low priority": "Zemas prioritātes",
"%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s padarīja istabas ziņu turpmāko vēsturi redzamu visiem istabas biedriem no brīža, kad tie tika uzaicināti.",
@@ -245,7 +243,6 @@
"Mobile phone number": "Mobilā telefona numurs",
"Mobile phone number (optional)": "Mobilā telefona numurs (nav obligāts)",
"Moderator": "Moderators",
- "Must be viewing a room": "Jāapskata istaba",
"Mute": "Noklusināt (izslēgt skaņu)",
"%(serverName)s Matrix ID": "%(serverName)s Matrix Id",
"Name": "Vārds",
@@ -720,9 +717,7 @@
"%(widgetName)s widget modified by %(senderName)s": "%(widgetName)s vidžets, kuru mainīja %(senderName)s",
"%(names)s and %(count)s others are typing|other": "%(names)s un %(count)s citi raksta",
"%(names)s and %(count)s others are typing|one": "%(names)s un vēl kāds raksta",
- "Message Replies": "Atbildes uz ziņām",
"Message Pinning": "Ziņu piekabināšana",
- "Tag Panel": "Birku panelis",
"Disable Emoji suggestions while typing": "Atspējot Emoji ieteikumus teksta rakstīšanas laikā",
"Hide avatar changes": "Slēpt avatara izmaiņas",
"Hide display name changes": "Slēpt attēlojamā/redzamā vārda izmaiņas",
@@ -973,8 +968,6 @@
"Did you know: you can use communities to filter your Riot.im experience!": "Vai zināji: Tu vari izmantot kopienas, lai filtrētu (atlasītu) savu Riot.im pieredzi!",
"To set up a filter, drag a community avatar over to the filter panel on the far left hand side of the screen. You can click on an avatar in the filter panel at any time to see only the rooms and people associated with that community.": "Lai uzstādītu filtru, uzvelc kopienas avataru uz filtru paneļa ekrāna kreisajā malā. Lai redzētu tikai istabas un cilvēkus, kas saistīti ar šo kopienu, Tu vari klikšķināt uz avatara filtru panelī jebkurā brīdī.",
"Create a new community": "Izveidot jaunu kopienu",
- "Join an existing community": "Pievienoties esošai kopienai",
- "To join an existing community you'll have to know its community identifier; this will look something like +example:matrix.org.": "Lai pievienotos esošai kopienai Tev jāzina tā ID; tas izskatīties piemēram šādi +paraugs:matrix.org.",
"%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|other": "Tagadvisas atkārtoti sūtīt vai visas atcelt. Tu vari atzīmēt arī individuālas ziņas, kuras atkārtoti sūtīt vai atcelt.",
"Clear filter": "Attīrīt filtru",
"Debug Logs Submission": "Iesniegt atutošanas logfailus",
@@ -1115,7 +1108,6 @@
"Unable to fetch notification target list": "Neizdevās iegūt paziņojumu mērķu sarakstu",
"Set Password": "Iestatīt paroli",
"Enable audible notifications in web client": "Iespējot skaņus paziņojumus web klientā",
- "Permalink": "Pastāvīgā saite",
"Off": "izslēgts",
"Riot does not know how to join a room on this network": "Riot nezin kā pievienoties šajā tīklā esošajai istabai",
"Mentions only": "Vienīgi atsauces",
diff --git a/src/i18n/strings/ml.json b/src/i18n/strings/ml.json
index 6de7e92df7..a4bf0b421a 100644
--- a/src/i18n/strings/ml.json
+++ b/src/i18n/strings/ml.json
@@ -137,7 +137,6 @@
"Unable to fetch notification target list": "നോട്ടിഫിക്കേഷന് ടാര്ഗെറ്റ് ലിസ്റ്റ് നേടാനായില്ല",
"Set Password": "രഹസ്യവാക്ക് സജ്ജീകരിക്കുക",
"Enable audible notifications in web client": "വെബ് പതിപ്പിലെ അറിയിപ്പുകള് കേള്ക്കാവുന്നതാക്കുക",
- "Permalink": "പെര്മാലിങ്ക്",
"remove %(name)s from the directory.": "%(name)s ഡയറക്റ്ററിയില് നിന്ന് നീക്കം ചെയ്യുക.",
"Off": "ഓഫ്",
"Riot does not know how to join a room on this network": "ഈ നെറ്റ്വര്ക്കിലെ ഒരു റൂമില് എങ്ങനെ അംഗമാകാമെന്ന് റയട്ടിന് അറിയില്ല",
diff --git a/src/i18n/strings/nb_NO.json b/src/i18n/strings/nb_NO.json
index 47da50122c..9a2b859854 100644
--- a/src/i18n/strings/nb_NO.json
+++ b/src/i18n/strings/nb_NO.json
@@ -98,7 +98,6 @@
"Riot does not know how to join a room on this network": "Riot vet ikke hvordan man kan komme inn på et rom på dette nettverket",
"An error occurred whilst saving your email notification preferences.": "En feil oppsto i forbindelse med lagring av epost varsel innstillinger.",
"Enable audible notifications in web client": "Aktiver lyd-varsel i webklient",
- "Permalink": "Permanent lenke",
"remove %(name)s from the directory.": "fjern %(name)s fra katalogen.",
"Off": "Av",
"#example": "#eksempel",
diff --git a/src/i18n/strings/nl.json b/src/i18n/strings/nl.json
index f09c63118e..1ba068daa0 100644
--- a/src/i18n/strings/nl.json
+++ b/src/i18n/strings/nl.json
@@ -64,7 +64,7 @@
"Active call (%(roomName)s)": "Actief gesprek (%(roomName)s)",
"Add": "Toevoegen",
"Add a topic": "Een onderwerp toevoegen",
- "Admin Tools": "Beheerhulpmiddelen",
+ "Admin Tools": "Beheerdershulpmiddelen",
"VoIP": "VoiP",
"Missing Media Permissions, click here to request.": "Ontbrekende mediatoestemmingen, klik hier om aan te vragen.",
"No Microphones detected": "Geen microfoons gevonden",
@@ -101,7 +101,6 @@
"OK": "OK",
"Failed to change password. Is your password correct?": "Wachtwoord wijzigen mislukt. Is uw wachtwoord juist?",
"Moderator": "Moderator",
- "Must be viewing a room": "Moet een ruimte weergeven",
"%(serverName)s Matrix ID": "%(serverName)s Matrix-ID",
"Name": "Naam",
"New password": "Nieuw wachtwoord",
@@ -238,7 +237,6 @@
"Failed to join room": "Niet gelukt om tot de ruimte toe te treden",
"Failed to leave room": "Niet gelukt om de ruimte te verlaten",
"Failed to load timeline position": "Niet gelukt om de tijdlijnpositie te laden",
- "Failed to lookup current room": "Niet gelukt om de huidige ruimte op te zoeken",
"Failed to mute user": "Niet gelukt om de gebruiker te dempen",
"Failed to reject invite": "Niet gelukt om de uitnodiging te weigeren",
"Failed to reject invitation": "Niet gelukt om de uitnodiging te weigeren",
@@ -305,7 +303,6 @@
"Level:": "Niveau:",
"Local addresses for this room:": "Lokale adressen voor deze ruimte:",
"Logged in as:": "Ingelogd als:",
- "Login as guest": "Als gast inloggen",
"Logout": "Uitloggen",
"Low priority": "Lage prioriteit",
"%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s heeft de toekomstige ruimtegeschiedenis zichtbaar gemaakt voor alle ruimte deelnemers, vanaf het moment dat ze uitgenodigd zijn.",
@@ -410,7 +407,7 @@
"Tried to load a specific point in this room's timeline, but was unable to find it.": "Het is niet gelukt om een specifiek punt in de tijdlijn van deze ruimte te laden.",
"Turn Markdown off": "Zet Markdown uit",
"Turn Markdown on": "Zet Markdown aan",
- "%(senderName)s turned on end-to-end encryption (algorithm %(algorithm)s).": "%(senderName)s heeft eind-tot-eind versleuteling aangezet (algoritme %(algorithm)s).",
+ "%(senderName)s turned on end-to-end encryption (algorithm %(algorithm)s).": "%(senderName)s heeft end-to-endbeveiliging aangezet (algoritme %(algorithm)s).",
"Unable to add email address": "Niet mogelijk om e-mailadres toe te voegen",
"Unable to remove contact information": "Niet mogelijk om contactinformatie te verwijderen",
"Unable to verify email address.": "Niet mogelijk om het e-mailadres te verifiëren.",
@@ -581,7 +578,7 @@
"Add User": "Gebruiker Toevoegen",
"This Home Server would like to make sure you are not a robot": "Deze thuisserver wil er zeker van zijn dat je geen robot bent",
"Sign in with CAS": "Inloggen met CAS",
- "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.": "Je kan de aangepaste server opties gebruiken om bij andere Matrix-servers in te loggen door een andere thuisserver-URL te specificeren.",
+ "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.": "Je kan de alternatieve-serverinstellingen gebruiken om bij andere Matrix-servers in te loggen door een andere thuisserver-URL te specificeren.",
"This allows you to use this app with an existing Matrix account on a different home server.": "Dit maakt het mogelijk om deze applicatie te gebruiken met een bestaand Matrix-account op een andere thuisserver.",
"You can also set a custom identity server but this will typically prevent interaction with users based on email address.": "Je kan ook een aangepaste identiteitsserver instellen maar dit zal waarschijnlijk interactie met gebruikers gebaseerd op een e-mailadres voorkomen.",
"Please check your email to continue registration.": "Bekijk je e-mail om door te gaan met de registratie.",
@@ -590,7 +587,7 @@
"If you don't specify an email address, you won't be able to reset your password. Are you sure?": "Als je geen e-mailadres specificeert zal je niet je wachtwoord kunnen resetten. Weet je het zeker?",
"You are registering with %(SelectedTeamName)s": "Je registreert je met %(SelectedTeamName)s",
"Default server": "Standaardserver",
- "Custom server": "Aangepaste server",
+ "Custom server": "Alternatieve server",
"Home server URL": "Thuisserver-URL",
"Identity server URL": "Identiteitsserver-URL",
"What does this mean?": "Wat betekent dit?",
@@ -603,7 +600,7 @@
"URL Previews": "URL-Voorvertoningen",
"Drop file here to upload": "Bestand hier laten vallen om te uploaden",
" (unsupported)": " (niet ondersteund)",
- "Ongoing conference call%(supportedText)s.": "Lopend vergaderingsgesprek %(supportedText)s.",
+ "Ongoing conference call%(supportedText)s.": "Lopend groepsgesprek%(supportedText)s.",
"Online": "Online",
"Idle": "Afwezig",
"Offline": "Offline",
@@ -708,8 +705,6 @@
"%(names)s and %(count)s others are typing|one": "%(names)s en iemand anders is aan het typen",
"Send": "Verstuur",
"Message Pinning": "Boodschap vastpinnen",
- "Message Replies": "Antwoorden op bericht",
- "Tag Panel": "Label Paneel",
"Disable Emoji suggestions while typing": "Emoji suggesties tijdens het typen uitzetten",
"Hide avatar changes": "Avatar veranderingen verbergen",
"%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(weekDayName)s, %(day)s %(monthName)s %(fullYear)s",
@@ -759,7 +754,7 @@
"World readable": "Leesbaar voor iedereen",
"Guests can join": "Gasten kunnen toetreden",
"Remove avatar": "Avatar verwijderen",
- "To change the room's avatar, you must be a": "Om de avatar van de ruimte te verwijderen, moet het volgende zijn:",
+ "To change the room's avatar, you must be a": "Om de avatar van de ruimte te verwijderen, moet je het volgende zijn:",
"Drop here to favourite": "Hier laten vallen om aan favorieten toe te voegen",
"Drop here to tag direct chat": "Hier laten vallen om als privégesprek te markeren",
"Drop here to restore": "Hier laten vallen om te herstellen",
@@ -923,13 +918,11 @@
"This Home server does not support communities": "Deze Thuisserver ondersteunt geen gemeenschappen",
"Failed to load %(groupId)s": "Het is niet gelukt om %(groupId)s te laden",
"Old cryptography data detected": "Oude cryptografie gegevens gedetecteerd",
- "Data from an older version of Riot has been detected. This will have caused end-to-end cryptography to malfunction in the older version. End-to-end encrypted messages exchanged recently whilst using the older version may not be decryptable in this version. This may also cause messages exchanged with this version to fail. If you experience problems, log out and back in again. To retain message history, export and re-import your keys.": "Er zijn gegevens van een oudere versie van Riot gedetecteerd. Dit zal eind-tot-eind versleuteling laten storen in de oudere versie. Eind-tot-eind berichten dat recent zijn uitgewisseld zal misschien niet ontsleutelbaar zijn in deze versie. Dit zou er misschien ook voor kunnen zorgen dat berichten die zijn uitgewisseld in deze versie falen. Indien je problemen ervaart, log opnieuw in. Om de berichtgeschiedenis te behouden, exporteer de sleutels en importeer ze achteraf weer.",
+ "Data from an older version of Riot has been detected. This will have caused end-to-end cryptography to malfunction in the older version. End-to-end encrypted messages exchanged recently whilst using the older version may not be decryptable in this version. This may also cause messages exchanged with this version to fail. If you experience problems, log out and back in again. To retain message history, export and re-import your keys.": "Er zijn gegevens van een oudere versie van Riot gedetecteerd. Dit verstoorde end-to-endbeveiliging in de oude versie. End-to-endbeveiligde berichten die recent uitgewisseld zijn met de oude versie zijn wellicht niet te ontsleutelen in deze versie. Dit zou er ook voor kunnen zorgen dat berichten die zijn uitgewisseld in deze versie falen. Log opnieuw in als je problemen ervaart. Exporteer de sleutels en importeer ze achteraf weer om de berichtgeschiedenis te behouden.",
"Your Communities": "Jouw Gemeenschappen",
"Error whilst fetching joined communities": "Er is een fout opgetreden tijdens het ophalen van de gemeenschappen waar je lid van bent",
"Create a new community": "Maak een nieuwe gemeenschap aan",
"Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "Maak een gemeenschap aan om gebruikers en ruimtes samen te groeperen! Bouw een aangepaste homepagina om je eigen plek in het Matrix universum te maken.",
- "Join an existing community": "Treed tot een bestaande gemeenschap toe",
- "To join an existing community you'll have to know its community identifier; this will look something like +example:matrix.org.": "Je moet het gemeenschaps-ID weten om tot de gemeenschap toe te treden; dit zal er uitzien zoals +voorbeeld:matrix.org.",
"Show devices, send anyway or cancel.": "Toon apparaten, Toch versturen of annuleren.",
"%(count)s of your messages have not been sent.|one": "Je bericht was niet verstuurd.",
"%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|other": "Nu alles opnieuw versturen of annuleren. Je kan ook individuele berichten selecteren om opnieuw te versturen of te annuleren.",
@@ -1120,7 +1113,6 @@
"Unable to fetch notification target list": "Het is mislukt om de lijst van notificatiedoelen op te halen",
"Set Password": "Wachtwoord instellen",
"Enable audible notifications in web client": "Geluidsmeldingen in de webclient aanzetten",
- "Permalink": "Permanente link",
"Off": "Uit",
"Riot does not know how to join a room on this network": "Riot weet niet hoe het moet deelnemen in een ruimte op dit netwerk",
"Mentions only": "Alleen vermeldingen",
@@ -1166,7 +1158,7 @@
"Please help improve Riot.im by sending anonymous usage data. This will use a cookie.": "Help Riot.im te verbeteren door het versturen van anonieme gebruiksgegevens. Dit zal een cookie gebruiken.",
"Yes, I want to help!": "Ja, ik wil helpen!",
"Warning: This widget might use cookies.": "Waarschuwing: deze widget gebruikt misschien cookies.",
- "Popout widget": "Opspringende widget",
+ "Popout widget": "Widget in nieuw venster openen",
"Picture": "Afbeelding",
"Unable to load event that was replied to, it either does not exist or you do not have permission to view it.": "Niet mogelijk om de gebeurtenis te laden waar op gereageerd was. Het kan zijn dat het niet bestaat of dat je niet toestemming hebt om het te bekijken.",
"Riot bugs are tracked on GitHub: create a GitHub issue.": "Riot fouten worden bijgehouden op GitHub: maak een GitHub melding.",
diff --git a/src/i18n/strings/pl.json b/src/i18n/strings/pl.json
index d3dcb72f49..0088028aed 100644
--- a/src/i18n/strings/pl.json
+++ b/src/i18n/strings/pl.json
@@ -232,7 +232,6 @@
"Failed to kick": "Nie udało się wykopać użytkownika",
"Failed to leave room": "Nie udało się opuścić pokoju",
"Failed to load timeline position": "Nie udało się wczytać pozycji osi czasu",
- "Failed to lookup current room": "Nie udało się wyszukać aktualnego pokoju",
"Failed to mute user": "Nie udało się wyciszyć użytkownika",
"Failed to reject invite": "Nie udało się odrzucić zaproszenia",
"Failed to reject invitation": "Nie udało się odrzucić zaproszenia",
@@ -303,7 +302,6 @@
"Publish this room to the public in %(domain)s's room directory?": "Czy opublikować ten pokój dla ogółu w spisie pokojów domeny %(domain)s?",
"Local addresses for this room:": "Lokalne adresy dla tego pokoju:",
"Logged in as:": "Zalogowany jako:",
- "Login as guest": "Zaloguj jako gość",
"Logout": "Wyloguj",
"Low priority": "Niski priorytet",
"%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s uczynił przyszłą historię pokoju widoczną dla wszyscy członkowie pokoju, od momentu ich zaproszenia.",
@@ -435,7 +433,6 @@
"The signing key you provided matches the signing key you received from %(userId)s's device %(deviceId)s. Device marked as verified.": "Podany klucz podpisu odpowiada kluczowi podpisania otrzymanemu z urządzenia %(userId)s %(deviceId)s. Urządzenie oznaczone jako zweryfikowane.",
"This email address is already in use": "Podany adres e-mail jest już w użyciu",
"This email address was not found": "Podany adres e-mail nie został znaleziony",
- "Must be viewing a room": "Musi być w trakcie wyświetlania pokoju",
"The email address linked to your account must be entered.": "Musisz wpisać adres e-mail połączony z twoim kontem.",
"The file '%(fileName)s' exceeds this home server's size limit for uploads": "Rozmiar pliku '%(fileName)s' przekracza możliwy limit do przesłania na serwer domowy",
"The file '%(fileName)s' failed to upload": "Przesyłanie pliku '%(fileName)s' nie powiodło się",
@@ -901,7 +898,6 @@
"Unable to fetch notification target list": "Nie można pobrać listy docelowej dla powiadomień",
"Set Password": "Ustaw hasło",
"Enable audible notifications in web client": "Włącz dźwiękowe powiadomienia w kliencie internetowym",
- "Permalink": "Odnośnik bezpośredni",
"Off": "Wyłącz",
"Riot does not know how to join a room on this network": "Riot nie wie, jak dołączyć do pokoju w tej sieci",
"Mentions only": "Tylko, gdy wymienieni",
@@ -922,5 +918,42 @@
"Collapse panel": "Ukryj panel",
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Z Twoją obecną przeglądarką, wygląd oraz wrażenia z używania aplikacji mogą być niepoprawne, a niektóre funkcje wcale nie działać. Kontynuuj jeśli chcesz spróbować, jednak trudno będzie pomóc w przypadku błędów, które mogą nastąpić!",
"Checking for an update...": "Sprawdzanie aktualizacji...",
- "There are advanced notifications which are not shown here": "Masz zaawansowane powiadomienia, nie pokazane tutaj"
+ "There are advanced notifications which are not shown here": "Masz zaawansowane powiadomienia, nie pokazane tutaj",
+ "e.g. %(exampleValue)s": "np. %(exampleValue)s",
+ "Always show encryption icons": "Zawsze wyświetlaj ikony szyfrowania",
+ "Send analytics data": "Wysyłaj dane analityczne",
+ "%(duration)ss": "%(duration)ss",
+ "%(duration)sm": "%(duration)sm",
+ "%(duration)sh": "%(duration)sg",
+ "%(duration)sd": "%(duration)sd",
+ "%(user)s is a %(userRole)s": "%(user)s ma rolę %(userRole)s",
+ "Members only (since the point in time of selecting this option)": "Tylko członkowie (od momentu włączenia tej opcji)",
+ "Members only (since they were invited)": "Tylko członkowie (od kiedy zostali zaproszeni)",
+ "Members only (since they joined)": "Tylko członkowie (od kiedy dołączyli)",
+ "Copied!": "Skopiowano!",
+ "Failed to copy": "Kopiowanie nieudane",
+ "Message removed by %(userId)s": "Wiadomość usunięta przez %(userId)s",
+ "Message removed": "Wiadomość usunięta",
+ "An email has been sent to %(emailAddress)s": "Email został wysłany do %(emailAddress)s",
+ "A text message has been sent to %(msisdn)s": "Wysłano wiadomość tekstową do %(msisdn)s",
+ "Code": "Kod",
+ "Please help improve Riot.im by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Pomóż nam ulepszyć Riot.im wysyłając anonimowe dane analityczne UsageDataLink>. Spowoduje to użycie pliku cookie (zobacz naszą Politykę plików cookie PolicyLink>).",
+ "Please help improve Riot.im by sending anonymous usage data. This will use a cookie.": "Pomóż nam ulepszyć Riot.im wysyłając anonimowe dane analityczne UsageDataLink>. Spowoduje to użycie pliku cookie.",
+ "Yes, I want to help!": "Tak, chcę pomóc!",
+ "Warning: This widget might use cookies.": "Uwaga: Ten widżet może używać ciasteczek.",
+ "Delete Widget": "Usuń widżet",
+ "Deleting a widget removes it for all users in this room. Are you sure you want to delete this widget?": "Usunięcie widżetu usuwa go dla wszystkich użytkowników w tym pokoju. Czy na pewno chcesz usunąć ten widżet?",
+ "Communities": "Społeczności",
+ "%(nameList)s %(transitionList)s": "%(nameList)s %(transitionList)s",
+ "collapse": "Zwiń",
+ "expand": "Rozwiń",
+ "Custom of %(powerLevel)s": "Poziom niestandardowy %(powerLevel)s",
+ "In reply to ": "W odpowiedzi do ",
+ "Matrix ID": "Matrix ID",
+ "email address": "adres e-mail",
+ "example": "przykład",
+ "Advanced options": "Opcje zaawansowane",
+ "To continue, please enter your password:": "Aby kontynuować, proszę wprowadzić swoje hasło:",
+ "password": "hasło",
+ "Refresh": "Odśwież"
}
diff --git a/src/i18n/strings/pt.json b/src/i18n/strings/pt.json
index d165c6c057..7cc80cfc78 100644
--- a/src/i18n/strings/pt.json
+++ b/src/i18n/strings/pt.json
@@ -83,7 +83,6 @@
"Kicks user with given id": "Remove usuário com o identificador informado",
"Labs": "Laboratório",
"Leave room": "Sair da sala",
- "Login as guest": "Entrar como visitante",
"Logout": "Sair",
"Low priority": "Baixa prioridade",
"Manage Integrations": "Gerenciar integrações",
@@ -217,7 +216,6 @@
"Drop here to tag %(section)s": "Arraste aqui para marcar como %(section)s",
"%(senderName)s ended the call.": "%(senderName)s finalizou a chamada.",
"Existing Call": "Chamada em andamento",
- "Failed to lookup current room": "Não foi possível buscar na sala atual",
"Failed to send email": "Falha ao enviar email",
"Failed to send request.": "Não foi possível mandar requisição.",
"Failed to set up conference call": "Não foi possível montar a chamada de conferência",
@@ -236,7 +234,6 @@
"%(senderName)s made future room history visible to unknown (%(visibility)s).": "%(senderName)s deixou o histórico futuro da sala visível para desconhecido (%(visibility)s).",
"Missing room_id in request": "Faltou o id da sala na requisição",
"Missing user_id in request": "Faltou o id de usuário na requisição",
- "Must be viewing a room": "Tem que estar visualizando uma sala",
"(not supported by this browser)": "(não é compatível com este navegador)",
"%(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.",
@@ -826,7 +823,6 @@
"Unable to fetch notification target list": "Não foi possível obter a lista de alvos de notificação",
"Set Password": "Definir palavra-passe",
"Enable audible notifications in web client": "Ativar notificações de áudio no cliente web",
- "Permalink": "Link permanente",
"Off": "Desativado",
"Riot does not know how to join a room on this network": "O Riot não sabe como entrar numa sala nesta rede",
"Mentions only": "Apenas menções",
diff --git a/src/i18n/strings/pt_BR.json b/src/i18n/strings/pt_BR.json
index 0a4d847805..c583e795cb 100644
--- a/src/i18n/strings/pt_BR.json
+++ b/src/i18n/strings/pt_BR.json
@@ -83,7 +83,6 @@
"Kicks user with given id": "Remove usuário com o identificador informado",
"Labs": "Laboratório",
"Leave room": "Sair da sala",
- "Login as guest": "Entrar como visitante",
"Logout": "Sair",
"Low priority": "Baixa prioridade",
"Manage Integrations": "Gerenciar integrações",
@@ -217,7 +216,6 @@
"Drop here to tag %(section)s": "Arraste aqui para marcar como %(section)s",
"%(senderName)s ended the call.": "%(senderName)s finalizou a chamada.",
"Existing Call": "Chamada em andamento",
- "Failed to lookup current room": "Não foi possível buscar na sala atual",
"Failed to send email": "Não foi possível enviar email",
"Failed to send request.": "Não foi possível mandar requisição.",
"Failed to set up conference call": "Não foi possível montar a chamada de conferência",
@@ -236,7 +234,6 @@
"%(senderName)s made future room history visible to unknown (%(visibility)s).": "%(senderName)s deixou o histórico futuro da sala visível para desconhecido (%(visibility)s).",
"Missing room_id in request": "Faltou o id da sala na requisição",
"Missing user_id in request": "Faltou o id de usuário na requisição",
- "Must be viewing a room": "Tem que estar visualizando uma sala",
"(not supported by this browser)": "(não é compatível com este navegador)",
"%(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.",
@@ -684,9 +681,7 @@
"%(names)s and %(count)s others are typing|other": "%(names)s e %(count)s outras pessoas estão escrevendo",
"%(names)s and %(count)s others are typing|one": "%(names)s e uma outra pessoa estão escrevendo",
"Send": "Enviar",
- "Message Replies": "Respostas",
"Message Pinning": "Fixar mensagem",
- "Tag Panel": "Painel de tags",
"Disable Emoji suggestions while typing": "Desativar sugestões de emojis enquanto estiver escrevendo",
"Hide join/leave messages (invites/kicks/bans unaffected)": "Ocultar mensagens de entrada e de saída (não afeta convites, expulsões e banimentos)",
"Hide avatar changes": "Ocultar alterações da imagem de perfil",
@@ -933,8 +928,6 @@
"Error whilst fetching joined communities": "Erro baixando comunidades das quais você faz parte",
"Create a new community": "Criar nova comunidade",
"Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "Crie uma comunidade para agrupar em um mesmo local pessoas e salas! Monte uma página inicial personalizada para dar uma identidade ao seu espaço no universo Matrix.",
- "Join an existing community": "Entrar numa comunidade existente",
- "To join an existing community you'll have to know its community identifier; this will look something like +example:matrix.org.": "Para entrar em uma comunidade, você terá que conhecer o seu ID; um ID de comunidade normalmente tem este formato: +exemplo:matrix.org.",
"Show devices, send anyway or cancel.": "Exibir dispositivos, enviar assim mesmo ou cancelar.",
"%(count)s of your messages have not been sent.|one": "Sua mensagem não foi enviada.",
"%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|other": "Reenviar todas ou cancelar todas agora. Você também pode selecionar mensagens individualmente a serem reenviadas ou canceladas.",
@@ -1101,7 +1094,6 @@
"Unable to fetch notification target list": "Não foi possível obter a lista de alvos de notificação",
"Set Password": "Definir senha",
"Enable audible notifications in web client": "Ativar notificações de áudio no cliente web",
- "Permalink": "Link permanente",
"Off": "Desativado",
"Riot does not know how to join a room on this network": "O sistema não sabe como entrar na sala desta rede",
"Mentions only": "Apenas menções",
diff --git a/src/i18n/strings/ru.json b/src/i18n/strings/ru.json
index 9d7f8901ab..ae889c5677 100644
--- a/src/i18n/strings/ru.json
+++ b/src/i18n/strings/ru.json
@@ -75,7 +75,6 @@
"Kicks user with given id": "Выкидывает пользователя с заданным ID",
"Labs": "Лаборатория",
"Leave room": "Покинуть комнату",
- "Login as guest": "Войти как гость",
"Logout": "Выйти",
"Low priority": "Неважные",
"Manage Integrations": "Управление интеграциями",
@@ -156,7 +155,6 @@
"Drop here to tag %(section)s": "Перетащите сюда, чтобы пометить как %(section)s",
"%(senderName)s ended the call.": "%(senderName)s завершил(а) звонок.",
"Existing Call": "Текущий вызов",
- "Failed to lookup current room": "Не удалось найти текущую комнату",
"Failed to send request.": "Не удалось отправить запрос.",
"Failed to set up conference call": "Не удалось сделать конференц-звонок",
"Failed to verify email address: make sure you clicked the link in the email": "Не удалось проверить email: убедитесь, что вы перешли по ссылке в письме",
@@ -175,7 +173,6 @@
"%(senderName)s made future room history visible to unknown (%(visibility)s).": "%(senderName)s сделал(а) историю комнаты видимой в неизвестном режиме (%(visibility)s).",
"Missing room_id in request": "Отсутствует room_id в запросе",
"Missing user_id in request": "Отсутствует user_id в запросе",
- "Must be viewing a room": "Вы должны просматривать комнату",
"(not supported by this browser)": "(не поддерживается этим браузером)",
"Connectivity to the server has been lost.": "Связь с сервером потеряна.",
"Sent messages will be stored until your connection has returned.": "Отправленные сообщения будут сохранены, пока соединение не восстановится.",
@@ -788,8 +785,6 @@
"Error whilst fetching joined communities": "Ошибка при загрузке сообществ",
"Create a new community": "Создать новое сообщество",
"Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "Создайте сообщество для объединения пользователей и комнат! Создайте собственную домашнюю страницу, чтобы выделить свое пространство во вселенной Matrix.",
- "Join an existing community": "Присоединиться к существующему сообществу",
- "To join an existing community you'll have to know its community identifier; this will look something like +example:matrix.org.": "Чтобы присоединиться к существующему сообществу, вам нужно знать его ID; это будет выглядеть примерно так+primer:matrix.org.",
"Something went wrong whilst creating your community": "При создании сообщества что-то пошло не так",
"%(names)s and %(count)s others are typing|other": "%(names)s и еще %(count)s печатают",
"And %(count)s more...|other": "Еще %(count)s…",
@@ -909,7 +904,6 @@
"Unknown for %(duration)s": "Неизвестно %(duration)s",
"There's no one else here! Would you like to invite others or stop warning about the empty room?": "Здесь никого нет! Хотите пригласить кого-нибудь или выключить предупреждение о пустой комнате?",
"Something went wrong when trying to get your communities.": "Что-то пошло не так при попытке получить список ваших сообществ.",
- "Tag Panel": "Панель тегов",
"Delete %(count)s devices|other": "Удалить (%(count)s)",
"Delete %(count)s devices|one": "Удалить",
"Select devices": "Выбрать",
@@ -938,7 +932,6 @@
"%(count)s of your messages have not been sent.|one": "Ваше сообщение не было отправлено.",
"%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|other": "Отправить все или отменить все сейчас. Можно также выбрать отдельные сообщения для отправки или отмены.",
"%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|one": "Отправить или отменить сообщение сейчас.",
- "Message Replies": "Сообщения-ответы",
"Send an encrypted reply…": "Отправить зашифрованный ответ…",
"Send a reply (unencrypted)…": "Отправить ответ (нешифрованный)…",
"Send an encrypted message…": "Отправить зашифрованное сообщение…",
@@ -1125,7 +1118,6 @@
"Unable to fetch notification target list": "Не удалось получить список устройств для уведомлений",
"Set Password": "Задать пароль",
"Enable audible notifications in web client": "Включить звуковые уведомления в веб-клиенте",
- "Permalink": "Постоянная ссылка",
"Off": "Выключить",
"Riot does not know how to join a room on this network": "Riot не знает, как присоединиться к комнате, принадлежащей к этой сети",
"Mentions only": "Только при упоминаниях",
@@ -1167,16 +1159,12 @@
"Enable widget screenshots on supported widgets": "Включить скриншоты виджета в поддерживаемых виджетах",
"Collapse Reply Thread": "Ответить с цитированием",
"Send analytics data": "Отправить данные аналитики",
- "Help improve Riot by sending usage data? This will use a cookie. (See our cookie and privacy policies).": "Помогите улучшить Riot, отправляя данные об использовании? Будут использоваться файлы cookie. (См. наши политики cookie и конфиденциальности).",
- "Help improve Riot by sending usage data? This will use a cookie.": "Помогите улучшить Riot, отправляя данные об использовании? Будут использоваться файлы cookie.",
- "Yes please": "Да, пожалуйста",
"Muted Users": "Приглушенные пользователи",
"Warning: This widget might use cookies.": "Внимание: этот виджет может использовать cookie.",
"Terms and Conditions": "Условия и положения",
"To continue using the %(homeserverDomain)s homeserver you must review and agree to our terms and conditions.": "Для продолжения использования сервера %(homeserverDomain)s вы должны ознакомиться и принять условия и положения.",
"Review terms and conditions": "Просмотр условий и положений",
"e.g. %(exampleValue)s": "напр. %(exampleValue)s",
- "Help improve Riot by sending usage data? This will use a cookie. (See our cookie and privacy policies).": "Помогите улучшить Riot, отправляя данные использования? Будут использоваться файлы cookie. (Смотрите наши политики cookie и конфиденциальности).",
"Failed to indicate account erasure": "Не удается удалить учетную запись",
"This will make your account permanently unusable. You will not be able to log in, and no one will be able to re-register the same user ID. This will cause your account to leave all rooms it is participating in, and it will remove your account details from your identity server. This action is irreversible.": "Это навсегда сделает вашу учетную запись невозможной для использования. Вы не сможете войти в систему, и никто не сможет перерегистрировать тот же идентификатор пользователя. Это приведет к тому, что ваша учетная запись выйдет из всех комнат, в которые она входит, и будут удалены данные вашей учетной записи с сервера идентификации. Это действие необратимо.",
"Deactivating your account does not by default cause us to forget messages you have sent. If you would like us to forget your messages, please tick the box below.": "По умолчанию деактивация вашей учетной записи не приведет к удалению всех ваших сообщений. Если вы хотите, чтобы мы удалили ваши сообщения, поставьте отметку в поле ниже.",
@@ -1189,6 +1177,19 @@
"Yes, I want to help!": "Да, я хочу помочь!",
"Reload widget": "Перезагрузить виджет",
"To notify everyone in the room, you must be a": "Для уведомления всех в комнате, вы должны быть",
- "Can't leave Server Notices room": "Невозможно покинуть комнату для сервера по заметкам",
- "This room is used for important messages from the Homeserver, so you cannot leave it.": "Эта комната для важных сообщений от сервера, потому ее не возможно покинуть."
+ "Can't leave Server Notices room": "Невозможно покинуть комнату сервера уведомлений",
+ "This room is used for important messages from the Homeserver, so you cannot leave it.": "Эта комната используется для важных сообщений от сервера, поэтому вы не можете ее покинуть.",
+ "Try the app first": "Сначала попробуйте приложение",
+ "Encrypting": "Шифрование",
+ "Encrypted, not sent": "Зашифровано, не отправлено",
+ "No Audio Outputs detected": "Аудиовыход не обнаружен",
+ "Audio Output": "Аудиовыход",
+ "Share Link to User": "Поделиться ссылкой с пользователем",
+ "Share room": "Поделиться комнатой",
+ "Share Room": "Поделиться комнатой",
+ "Link to most recent message": "Ссылка на последнее сообщение",
+ "Share User": "Поделиться пользователем",
+ "Share Community": "Поделиться сообществом",
+ "Link to selected message": "Ссылка на выбранное сообщение",
+ "COPY": "КОПИРОВАТЬ"
}
diff --git a/src/i18n/strings/sk.json b/src/i18n/strings/sk.json
index ed07ff5c09..b1f3f4260d 100644
--- a/src/i18n/strings/sk.json
+++ b/src/i18n/strings/sk.json
@@ -84,10 +84,8 @@
"You are not in this room.": "Nenachádzate sa v tejto miestnosti.",
"You do not have permission to do that in this room.": "V tejto miestnosti nemáte oprávnenie na vykonanie takejto akcie.",
"Missing room_id in request": "V požiadavke chýba room_id",
- "Must be viewing a room": "Musí byť zobrazená miestnosť",
"Room %(roomId)s not visible": "Miestnosť %(roomId)s nie je viditeľná",
"Missing user_id in request": "V požiadavke chýba user_id",
- "Failed to lookup current room": "Nepodarilo sa vyhľadať aktuálnu miestnosť",
"Usage": "Použitie",
"/ddg is not a command": "/ddg nie je žiaden príkaz",
"To use it, just wait for autocomplete results to load and tab through them.": "Ak to chcete použiť, len počkajte na načítanie výsledkov automatického dopĺňania a cyklicky prechádzajte stláčaním klávesu tab..",
@@ -691,8 +689,6 @@
"Error whilst fetching joined communities": "Pri získavaní vašich komunít sa vyskytla chyba",
"Create a new community": "Vytvoriť novú komunitu",
"Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "Vytvorte si komunitu s cieľom zoskupiť miestnosti a používateľov! Zostavte si vlastnú domovskú stránku a vymedzte tak svoj priestor vo svete Matrix.",
- "Join an existing community": "Vstúpiť do existujúcej komunity",
- "To join an existing community you'll have to know its community identifier; this will look something like +example:matrix.org.": "Aby ste mohli vstúpiť do existujúcej komunity, musíte poznať jej identifikátor; Mal by vizerať nejako takto +priklad:matrix.org.",
"You have no visible notifications": "Nie sú k dispozícii žiadne oznámenia",
"Scroll to bottom of page": "Posunúť na spodok stránky",
"Connectivity to the server has been lost.": "Spojenie so serverom bolo prerušené.",
@@ -822,7 +818,6 @@
"Error: Problem communicating with the given homeserver.": "Chyba: Nie je možné komunikovať so zadaným domovským serverom.",
"Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or enable unsafe scripts.": "K domovskému serveru nie je možné pripojiť sa použitím protokolu HTTP keďže v adresnom riadku prehliadača máte HTTPS adresu. Použite protokol HTTPS alebo povolte nezabezpečené skripty.",
"Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "Nie je možné pripojiť sa k domovskému serveru - skontrolujte prosím funkčnosť vašeho pripojenia na internet, uistite sa že certifikát domovského servera je dôverihodný, a že žiaden doplnok nainštalovaný v prehliadači nemôže blokovať požiadavky.",
- "Login as guest": "Prihlásiť sa ako hosť",
"Failed to fetch avatar URL": "Nepodarilo sa získať URL adresu obrázka",
"Set a display name:": "Nastaviť zobrazované meno:",
"Upload an avatar:": "Nahrať obrázok:",
@@ -908,7 +903,6 @@
"Call": "Hovor",
"Answer": "Prijať",
"Send": "Odoslať",
- "Tag Panel": "Panel so značkami",
"Delete %(count)s devices|other": "Vymazať %(count)s zariadení",
"Delete %(count)s devices|one": "Vymazať zariadenie",
"Select devices": "Vybrať zariadenia",
@@ -935,7 +929,6 @@
"Flair will not appear": "Príslušnosť ku komunite nebude zobrazená",
"Display your community flair in rooms configured to show it.": "Zobrazovať vašu príslušnosť ku komunite v miestnostiach, ktoré sú nastavené na zobrazovanie tejto príslušnosti.",
"%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(weekDayName)s, %(day)s %(monthName)s %(fullYear)s",
- "Message Replies": "Odpovede na správy",
"You will not be able to undo this change as you are demoting yourself, if you are the last privileged user in the room it will be impossible to regain privileges.": "Túto zmenu nebudete môcť vrátiť späť pretože znižujete vašu vlastnú úroveň moci. Ak ste jediný poverený používateľ v miestnosti, nebudete môcť znovu získať úroveň, akú máte teraz.",
"Send an encrypted reply…": "Odoslať šifrovanú odpoveď…",
"Send a reply (unencrypted)…": "Odoslať odpoveď (nešifrovanú)…",
@@ -1126,7 +1119,6 @@
"Set Password": "Nastaviť Heslo",
"An error occurred whilst saving your email notification preferences.": "Počas ukladania vašich nastavení oznamovania emailom sa vyskytla chyba.",
"Enable audible notifications in web client": "Povoliť zvukové oznámenia vo webovom klientovi",
- "Permalink": "Trvalý odkaz",
"Off": "Zakázané",
"Riot does not know how to join a room on this network": "Riot nedokáže vstúpiť do miestnosti na tejto sieti",
"Mentions only": "Len zmienky",
diff --git a/src/i18n/strings/sq.json b/src/i18n/strings/sq.json
index 2936695a6d..680c63e458 100644
--- a/src/i18n/strings/sq.json
+++ b/src/i18n/strings/sq.json
@@ -106,9 +106,7 @@
"Power level must be positive integer.": "Niveli fuqie duhet të jetë numër i plotë pozitiv.",
"You are not in this room.": "Ti nuk je në këtë dhomë.",
"You do not have permission to do that in this room.": "Nuk ke leje të bësh këtë në këtë dhomë.",
- "Must be viewing a room": "Duhet të shikohet një dhomë",
"Room %(roomId)s not visible": "Dhoma %(roomId)s e padukshme",
- "Failed to lookup current room": "Dhoma aktuale nuk mundi të kërkohej",
"Usage": "Përdorimi",
"/ddg is not a command": "/ddg s'është komandë",
"To use it, just wait for autocomplete results to load and tab through them.": "Për të përdorur, thjesht prit derisa të mbushën rezultatat vetëplotësuese dhe pastaj shfletoji.",
@@ -269,7 +267,6 @@
"Set Password": "Caktoni Fjalëkalim",
"An error occurred whilst saving your email notification preferences.": "Ndodhi një gabim teksa ruheshin parapëlqimet tuaja për njoftime me email.",
"Enable audible notifications in web client": "Aktivizoni njoftime audio te klienti web",
- "Permalink": "Permalidhje",
"Register": "Regjistrohuni",
"Off": "Off",
"Edit": "Përpunoni",
diff --git a/src/i18n/strings/sr.json b/src/i18n/strings/sr.json
index ebacd28a5c..6d217d5349 100644
--- a/src/i18n/strings/sr.json
+++ b/src/i18n/strings/sr.json
@@ -85,7 +85,6 @@
"You are not in this room.": "Нисте у овој соби.",
"You do not have permission to do that in this room.": "Немате овлашћење да урадите то у овој соби.",
"Missing room_id in request": "Недостаје room_id у захтеву",
- "Must be viewing a room": "Морате гледати собу",
"Room %(roomId)s not visible": "Соба %(roomId)s није видљива",
"Missing user_id in request": "Недостаје user_id у захтеву",
"Call Failed": "Позивање неуспешно",
@@ -97,7 +96,6 @@
"Answer": "Одговори",
"Call Timeout": "Прекорачено време позивања",
"%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(weekDayName)s, %(day)s %(monthName)s %(fullYear)s",
- "Failed to lookup current room": "Неуспех при потраживању тренутне собе",
"Usage": "Коришћење",
"/ddg is not a command": "/ddg није наредба",
"To use it, just wait for autocomplete results to load and tab through them.": "Да бисте је користили, само сачекајте да се исходи самодовршавања учитају и табом прођите кроз њих.",
@@ -170,9 +168,7 @@
"Not a valid Riot keyfile": "Није исправана Riot кључ-датотека",
"Authentication check failed: incorrect password?": "Провера идентитета није успела: нетачна лозинка?",
"Failed to join room": "Нисам успео да уђем у собу",
- "Message Replies": "Одговори",
"Message Pinning": "Закачене поруке",
- "Tag Panel": "Означи површ",
"Disable Emoji suggestions while typing": "Онемогући предлагање емоџија приликом куцања",
"Use compact timeline layout": "Користи збијени распоред временске линије",
"Hide removed messages": "Сакриј уклоњене поруке",
@@ -778,8 +774,6 @@
"Error whilst fetching joined communities": "Грешка приликом добављања списка са приступљеним заједницама",
"Create a new community": "Направи нову заједницу",
"Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "Направите заједницу да бисте спојили кориснике и собе! Направите прилагођену почетну страницу да бисте означили ваш кутак у Матрикс универзуму.",
- "Join an existing community": "Приступи већ постојећој заједници",
- "To join an existing community you'll have to know its community identifier; this will look something like +example:matrix.org.": "Да бисте приступили већ постојећој заједници, морате знати њен идентификатор заједнице. Ово изгледа нешто као +primer:matrix.org.",
"You have no visible notifications": "Немате видљивих обавештења",
"Scroll to bottom of page": "Превуци на дно странице",
"Message not sent due to unknown devices being present": "Порука се неће послати због присутности непознатих уређаја",
@@ -903,7 +897,6 @@
"Error: Problem communicating with the given homeserver.": "Грешка: проблем у комуницирању са датим кућним сервером.",
"Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or enable unsafe scripts.": "Не могу да се повежем на кућни сервер преко HTTP-а када се користи HTTPS адреса у траци вашег прегледача. Или користите HTTPS или омогућите небезбедне скрипте.",
"Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "Не могу да се повежем на кућни сервер. Проверите вашу интернет везу, постарајте се да верујете SSL сертификату кућног сервера и да проширење прегледача не блокира захтеве.",
- "Login as guest": "Пријави се као гост",
"Sign in to get started": "Пријави се да почнеш",
"Failed to fetch avatar URL": "Нисам успео да добавим адресу аватара",
"Set a display name:": "Постави приказно име:",
@@ -1101,7 +1094,6 @@
"Set Password": "Постави лозинку",
"An error occurred whilst saving your email notification preferences.": "Догодила се грешка при чувању ваших поставки мејл обавештења.",
"Enable audible notifications in web client": "Омогући звучна обавештења у веб клијенту",
- "Permalink": "Трајна веза",
"Resend": "Поново пошаљи",
"Riot does not know how to join a room on this network": "Riot не зна како да приступи соби на овој мрежи",
"Mentions only": "Само спомињања",
@@ -1161,5 +1153,29 @@
"Clear Storage and Sign Out": "Очисти складиште и одјави ме",
"Refresh": "Освежи",
"We encountered an error trying to restore your previous session.": "Наишли смо на грешку приликом повраћаја ваше претходне сесије.",
- "Clearing your browser's storage may fix the problem, but will sign you out and cause any encrypted chat history to become unreadable.": "Чишћење складишта вашег прегледача може решити проблем али ће вас то одјавити и учинити шифровани историјат ћаскања нечитљивим."
+ "Clearing your browser's storage may fix the problem, but will sign you out and cause any encrypted chat history to become unreadable.": "Чишћење складишта вашег прегледача може решити проблем али ће вас то одјавити и учинити шифровани историјат ћаскања нечитљивим.",
+ "e.g. %(exampleValue)s": "нпр.: %(exampleValue)s",
+ "Reload widget": "Поново учитај виџет",
+ "Send analytics data": "Пошаљи аналитичке податке",
+ "Enable widget screenshots on supported widgets": "Омогући снимке екрана виџета у подржаним виџетима",
+ "At this time it is not possible to reply with a file so this will be sent without being a reply.": "У овом тренутку није могуће одговорити са датотеком тако да ово неће бити послато у облику одговора.",
+ "Unable to reply": "Не могу да одговорим",
+ "At this time it is not possible to reply with an emote.": "У овом тренутку није могуће одговорити са емотиконом.",
+ "To notify everyone in the room, you must be a": "Да бисте обавестили све у соби, морате бити",
+ "Muted Users": "Утишани корисници",
+ "Please help improve Riot.im by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "Помозите побољшавање Riot.im програма тако што ћете послати анонимне податке о коришћењу. Ово ће захтевати коришћење колачића (погледајте нашу политику о колачићима).",
+ "Please help improve Riot.im by sending anonymous usage data. This will use a cookie.": "Помозите побољшавање Riot.im програма тако што ћете послати анонимне податке о коришћењу. Ово ће захтевати коришћење колачића.",
+ "Yes, I want to help!": "Да, желим помоћи!",
+ "Warning: This widget might use cookies.": "Упозорење: овај виџет ће можда користити колачиће.",
+ "Unable to load event that was replied to, it either does not exist or you do not have permission to view it.": "Не могу да учитам догађај на који је послат одговор, или не постоји или немате овлашћење да га погледате.",
+ "Failed to indicate account erasure": "Неуспех при наговештавању да је налог обрисан",
+ "To continue, please enter your password:": "Да бисте наставили, унесите вашу лозинку:",
+ "password": "лозинка",
+ "Collapse Reply Thread": "Скупи нит са одговорима",
+ "Can't leave Server Notices room": "Не могу да напустим собу са напоменама сервера",
+ "This room is used for important messages from the Homeserver, so you cannot leave it.": "Ова соба се користи за важне поруке са Кућног сервера, не можете изаћи из ове собе.",
+ "Terms and Conditions": "Услови коришћења",
+ "To continue using the %(homeserverDomain)s homeserver you must review and agree to our terms and conditions.": "Да бисте наставили са коришћењем Кућног сервера %(homeserverDomain)s морате погледати и пристати на наше услове коришћења.",
+ "Review terms and conditions": "Погледај услове коришћења",
+ "Try the app first": "Пробајте прво апликацију"
}
diff --git a/src/i18n/strings/sv.json b/src/i18n/strings/sv.json
index 8e5d8e2f21..0e26125c30 100644
--- a/src/i18n/strings/sv.json
+++ b/src/i18n/strings/sv.json
@@ -128,7 +128,6 @@
"Failed to kick": "Det gick inte att kicka",
"Failed to leave room": "Det gick inte att lämna rummet",
"Failed to load timeline position": "Det gick inte att hämta positionen på tidslinjen",
- "Failed to lookup current room": "Det gick inte att hämta det nuvarande rummet",
"Failed to mute user": "Det gick inte att dämpa användaren",
"Failed to reject invite": "Det gick inte att avböja inbjudan",
"Failed to reject invitation": "Det gick inte att avböja inbjudan",
@@ -149,7 +148,7 @@
"Add": "Lägg till",
"Admin Tools": "Admin-verktyg",
"Alias (optional)": "Alias (valfri)",
- "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "Det gick inte att ansluta till servern - kontrollera anslutningen, försäkra att din hemservers TLS-certifikat är betrott, och att inget webbläsartillägg blockerar förfrågningar.",
+ "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "Det gick inte att ansluta till hemservern - kontrollera anslutningen, se till att hemserverns SSL-certifikat är betrott, och att inget webbläsartillägg blockerar förfrågningar.",
"%(senderName)s changed the power level of %(powerLevelDiffText)s.": "%(senderName)s ändrade behörighetsnivå för %(powerLevelDiffText)s.",
"Click here to join the discussion!": "Klicka här för att gå med i diskussionen!",
"Close": "Stäng",
@@ -224,7 +223,6 @@
"Level:": "Nivå:",
"Local addresses for this room:": "Lokala adresser för rummet:",
"Logged in as:": "Inloggad som:",
- "Login as guest": "Logga in som gäst",
"Logout": "Logga ut",
"Low priority": "Låg prioritet",
"%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s gjorde framtida rumshistorik synligt för alla rumsmedlemmar från att de bjöds in.",
@@ -241,7 +239,6 @@
"Mobile phone number": "Telefonnummer",
"Mobile phone number (optional)": "Telefonnummer (valfri)",
"Moderator": "Moderator",
- "Must be viewing a room": "Du måste ha ett öppet rum",
"Mute": "Dämpa",
"%(serverName)s Matrix ID": "%(serverName)s Matrix-ID",
"Name": "Namn",
@@ -290,7 +287,7 @@
"Register": "Registrera",
"%(targetName)s rejected the invitation.": "%(targetName)s avvisade inbjudan.",
"Reject invitation": "Avböj inbjudan",
- "Rejoin": "Gå med tillbaka",
+ "Rejoin": "Gå med igen",
"Remote addresses for this room:": "Fjärradresser för det här rummet:",
"Remove Contact Information?": "Ta bort kontaktuppgifter?",
"%(senderName)s removed their display name (%(oldDisplayName)s).": "%(senderName)s tog bort sitt visningsnamn (%(oldDisplayName)s).",
@@ -326,7 +323,7 @@
"%(senderName)s sent an invitation to %(targetDisplayName)s to join the room.": "%(senderName)s bjöd in %(targetDisplayName)s med i rummet.",
"Server error": "Serverfel",
"Server may be unavailable or overloaded": "Servern kan vara otillgänglig eller överbelastad",
- "Server may be unavailable, overloaded, or search timed out :(": "Servern kan vara otillgänglig, överbelastad, eller så timade sökningen ut :(",
+ "Server may be unavailable, overloaded, or search timed out :(": "Servern kan vara otillgänglig, överbelastad, eller så tog sökningen för lång tid :(",
"Server may be unavailable, overloaded, or the file too big": "Servern kan vara otillgänglig, överbelastad, eller så är filen för stor",
"Server may be unavailable, overloaded, or you hit a bug.": "Servern kan vara otillgänglig, överbelastad, eller så stötte du på en bugg.",
"Server unavailable, overloaded, or something else went wrong.": "Servern är otillgänglig, överbelastad, eller så gick något annat fel.",
@@ -347,7 +344,7 @@
"Start Chat": "Starta en chatt",
"Cancel": "Avbryt",
"Create new room": "Skapa nytt rum",
- "Custom Server Options": "Egna serverinställningar",
+ "Custom Server Options": "Anpassade serverinställningar",
"Dismiss": "Avvisa",
"powered by Matrix": "drivs av Matrix",
"Room directory": "Rumskatalog",
@@ -380,7 +377,7 @@
"The email address linked to your account must be entered.": "Epostadressen som är kopplad till ditt konto måste anges.",
"The file '%(fileName)s' exceeds this home server's size limit for uploads": "Filen '%(fileName)s' överskrider serverns största tillåtna filstorlek",
"The file '%(fileName)s' failed to upload": "Filen '%(fileName)s' kunde inte laddas upp",
- "Online": "Aktiv",
+ "Online": "Online",
"Unnamed room": "Namnlöst rum",
"World readable": "Alla kan läsa",
"Guests can join": "Gäster kan bli medlem i rummet",
@@ -467,7 +464,7 @@
"Room not found": "Rummet hittades inte",
"Messages containing my display name": "Meddelanden som innehåller mitt namn",
"Messages in one-to-one chats": "Meddelanden i privata chattar",
- "Unavailable": "Inte tillgänglig",
+ "Unavailable": "Otillgänglig",
"View Decrypted Source": "Visa dekrypterad källa",
"Failed to update keywords": "Det gick inte att uppdatera nyckelorden",
"remove %(name)s from the directory.": "ta bort %(name)s från katalogen.",
@@ -503,7 +500,7 @@
"Saturday": "lördag",
"I understand the risks and wish to continue": "Jag förstår riskerna och vill fortsätta",
"Direct Chat": "Direkt-chatt",
- "The server may be unavailable or overloaded": "Servern kan vara överbelastad eller inte tillgänglig",
+ "The server may be unavailable or overloaded": "Servern kan vara otillgänglig eller överbelastad",
"Reject": "Avböj",
"Failed to set Direct Message status of room": "Det gick inte att ställa in direktmeddelandestatus för rummet",
"Monday": "måndag",
@@ -547,7 +544,6 @@
"Unable to fetch notification target list": "Det gick inte att hämta aviseringsmållistan",
"Set Password": "Välj lösenord",
"Enable audible notifications in web client": "Sätt på högljudda aviseringar i webbklienten",
- "Permalink": "Permanent länk",
"Off": "Av",
"Riot does not know how to join a room on this network": "Riot kan inte gå med i ett rum på det här nätverket",
"Mentions only": "Endast omnämnande",
@@ -561,7 +557,7 @@
"View Source": "Visa källa",
"Thank you!": "Tack!",
"Quote": "Citera",
- "Collapse panel": "Kollapsa panel",
+ "Collapse panel": "Dölj panel",
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Med din nuvarande webbläsare kan appens utseende vara helt fel, och vissa eller alla egenskaper kommer nödvändigtvis inte att fungera. Om du ändå vill försöka så kan du fortsätta, men gör det på egen risk!",
"Checking for an update...": "Letar efter uppdateringar...",
"There are advanced notifications which are not shown here": "Det finns avancerade aviseringar som inte visas här",
@@ -638,7 +634,7 @@
"%(duration)sm": "%(duration)sm",
"%(duration)sh": "%(duration)sh",
"%(duration)sd": "%(duration)sd",
- "Online for %(duration)s": "Aktiv i %(duration)s",
+ "Online for %(duration)s": "Online i %(duration)s",
"Idle for %(duration)s": "Inaktiv i %(duration)s",
"Offline for %(duration)s": "Offline i %(duration)s",
"Idle": "Inaktiv",
@@ -854,7 +850,7 @@
"Drop here to demote": "Släpp här för att göra till låg prioritet",
"You're not in any rooms yet! Press to make a room or to browse the directory": "Du är inte i något rum ännu! Tryck för att skapa ett rum eller för att bläddra i katalogen",
"Would you like to accept or decline this invitation?": "Vill du acceptera eller avböja denna inbjudan?",
- "You have been invited to join this room by %(inviterName)s": "Du har blivit inbjuden att gå med i rummet av %(inviterName)s",
+ "You have been invited to join this room by %(inviterName)s": "Du har blivit inbjuden till rummet av %(inviterName)s",
"Kick this user?": "Kicka användaren?",
"To send messages, you must be a": "För att skicka meddelanden, måste du vara",
"To invite users into the room, you must be a": "För att bjuda in användare i rummet, måste du vara",
@@ -901,8 +897,6 @@
"This setting cannot be changed later!": "Den här inställningen kan inte ändras senare!",
"Unknown error": "Okänt fel",
"Incorrect password": "Felaktigt lösenord",
- "This will make your account permanently unusable. You will not be able to re-register the same user ID.": "Detta kommer att göra ditt konto permanent oanvändbart. Du kommer inte att kunna registrera samma användar-ID igen.",
- "This action is irreversible.": "Denna åtgärd går inte att ångra.",
"To verify that this device can be trusted, please contact its owner using some other means (e.g. in person or a phone call) and ask them whether the key they see in their User Settings for this device matches the key below:": "För att verifiera att denna enhet kan litas på, vänligen kontakta ägaren på annat sätt (t ex personligen eller med ett telefonsamtal) och fråga om nyckeln ägaren har i sina användarinställningar för enheten matchar nyckeln nedan:",
"Device name": "Enhetsnamn",
"Device key": "Enhetsnyckel",
@@ -1025,7 +1019,6 @@
"Add rooms to the community": "Lägg till rum i communityn",
"Add to community": "Lägg till i community",
"Failed to invite users to community": "Det gick inte att bjuda in användare till communityn",
- "Message Replies": "Meddelandesvar",
"Mirror local video feed": "Spegelvänd lokal video",
"Disable Community Filter Panel": "Inaktivera community-filterpanel",
"Community Invites": "Community-inbjudningar",
@@ -1056,7 +1049,7 @@
"Leave Community": "Lämna community",
"Unable to leave community": "Det gick inte att lämna community",
"Community Settings": "Community-inställningar",
- "Changes made to your community name and avatar might not be seen by other users for up to 30 minutes.": "Ändringar på namn och avatar som gjorts i din community kommer eventuellt inte synas för andra användare i upp till 30 minuter.",
+ "Changes made to your community name and avatar might not be seen by other users for up to 30 minutes.": "Det kan dröja upp till 30 minuter innan ändringar på communityns namn och avatar blir synliga för andra användare.",
"These rooms are displayed to community members on the community page. Community members can join the rooms by clicking on them.": "Dessa rum visas för community-medlemmar på community-sidan. Community-medlemmar kan gå med i rummen genom att klicka på dem.",
"Add rooms to this community": "Lägg till rum i denna community",
"%(inviter)s has invited you to join this community": "%(inviter)s har bjudit in dig till denna community",
@@ -1070,8 +1063,6 @@
"To set up a filter, drag a community avatar over to the filter panel on the far left hand side of the screen. You can click on an avatar in the filter panel at any time to see only the rooms and people associated with that community.": "För att skapa ett filter, dra en community-avatar till filterpanelen längst till vänster på skärmen. Du kan när som helst klicka på en avatar i filterpanelen för att bara se rum och personer som är associerade med den communityn.",
"Create a new community": "Skapa en ny community",
"Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "Skapa en community för att gruppera användare och rum! Bygg en anpassad hemsida för att markera er plats i Matrix-universumet.",
- "Join an existing community": "Gå med i en befintlig community",
- "To join an existing community you'll have to know its community identifier; this will look something like +example:matrix.org.": "För att gå med i en befintlig gemenskap behöver du ha community-ID; det ser ut som något i stil med +exempel:matrix.org.",
"Invite to this community": "Bjud in till denna community",
"Something went wrong when trying to get your communities.": "Något gick fel vid hämtning av dina communityn.",
"You're not currently a member of any communities.": "Du är för närvarande inte medlem i någon community.",
@@ -1184,7 +1175,6 @@
"The exported file will allow anyone who can read it to decrypt any encrypted messages that you can see, so you should be careful to keep it secure. To help with this, you should enter a passphrase below, which will be used to encrypt the exported data. It will only be possible to import the data by using the same passphrase.": "Den exporterade filen kommer att låta någon som kan läsa den att dekryptera alla krypterade meddelanden som du kan se, så du bör vara noga med att hålla den säker. För att hjälpa till med detta, bör du ange en lösenfras nedan, som kommer att användas för att kryptera exporterad data. Det kommer bara vara möjligt att importera data genom att använda samma lösenfras.",
"This process allows you to import encryption keys that you had previously exported from another Matrix client. You will then be able to decrypt any messages that the other client could decrypt.": "Denna process möjliggör import av krypteringsnycklar som tidigare exporterats från en annan Matrix-klient. Du kommer då kunna dekryptera alla meddelanden som den andra klienten kunde dekryptera.",
"The export file will be protected with a passphrase. You should enter the passphrase here, to decrypt the file.": "Den exporterade filen kommer vara skyddad med en lösenfras. Du måste ange lösenfrasen här, för att dekryptera filen.",
- "Tag Panel": "Tagg-panel",
"Flair": "Emblem",
"Showing flair for these communities:": "Visar emblem för dessa communityn:",
"This room is not showing flair for any communities": "Detta rum visar inte emblem för några communityn",
diff --git a/src/i18n/strings/ta.json b/src/i18n/strings/ta.json
index 6aecb54bfd..b8fe318b46 100644
--- a/src/i18n/strings/ta.json
+++ b/src/i18n/strings/ta.json
@@ -78,7 +78,6 @@
"Off": "அமை",
"On": "மீது",
"Operation failed": "செயல்பாடு தோல்வியுற்றது",
- "Permalink": "நிரந்தரத் தொடுப்பு",
"powered by Matrix": "Matrix-ஆல் ஆனது",
"Quote": "மேற்கோள்",
"Reject": "நிராகரி",
diff --git a/src/i18n/strings/th.json b/src/i18n/strings/th.json
index 6fa7febabd..3fe7bf8f98 100644
--- a/src/i18n/strings/th.json
+++ b/src/i18n/strings/th.json
@@ -132,7 +132,6 @@
"Failed to join room": "การเข้าร่วมห้องล้มเหลว",
"Failed to kick": "การเตะล้มเหลว",
"Failed to leave room": "การออกจากห้องล้มเหลว",
- "Failed to lookup current room": "การหาห้องปัจจุบันล้มเหลว",
"Failed to reject invite": "การปฏิเสธคำเชิญล้มเหลว",
"Failed to reject invitation": "การปฏิเสธคำเชิญล้มเหลว",
"Failed to save settings": "การบันทึกการตั้งค่าล้มเหลว",
@@ -178,7 +177,6 @@
"Leave room": "ออกจากห้อง",
"%(targetName)s left the room.": "%(targetName)s ออกจากห้องแล้ว",
"Logged in as:": "เข้าสู่ระบบในชื่อ:",
- "Login as guest": "เข้าสู่ระบบในฐานะแขก",
"Logout": "ออกจากระบบ",
"Markdown is disabled": "ปิดใช้งาน Markdown แล้ว",
"Markdown is enabled": "เปิดใช้งาน Markdown แล้ว",
@@ -544,7 +542,6 @@
"Riot does not know how to join a room on this network": "Riot ไม่รู้วิธีเข้าร่วมห้องในเครือข่ายนี้",
"Set Password": "ตั้งรหัสผ่าน",
"Enable audible notifications in web client": "เปิดใช้งานเสียงแจ้งเตือนบนเว็บไคลเอนต์",
- "Permalink": "ลิงก์ถาวร",
"Off": "ปิด",
"#example": "#example",
"Mentions only": "เมื่อถูกกล่าวถึงเท่านั้น",
diff --git a/src/i18n/strings/tr.json b/src/i18n/strings/tr.json
index 797fed79ce..04f78dc1ee 100644
--- a/src/i18n/strings/tr.json
+++ b/src/i18n/strings/tr.json
@@ -153,7 +153,6 @@
"Failed to kick": "Atma(Kick) işlemi başarısız oldu",
"Failed to leave room": "Odadan ayrılma başarısız oldu",
"Failed to load timeline position": "Zaman çizelgesi konumu yüklenemedi",
- "Failed to lookup current room": "Geçerli odayı aramak başarısız oldu",
"Failed to mute user": "Kullanıcıyı sessize almak başarısız oldu",
"Failed to reject invite": "Daveti reddetme başarısız oldu",
"Failed to reject invitation": "Davetiyeyi reddetme başarısız oldu",
@@ -224,7 +223,6 @@
"Level:": "Seviye :",
"Local addresses for this room:": "Bu oda için yerel adresler :",
"Logged in as:": "Olarak giriş yaptı :",
- "Login as guest": "Misafir olarak giriş yaptı",
"Logout": "Çıkış Yap",
"Low priority": "Düşük öncelikli",
"%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s gelecekte oda geçmişini görünür yaptı Tüm oda üyeleri , davet edildiği noktadan.",
@@ -242,7 +240,6 @@
"Mobile phone number": "Cep telefonu numarası",
"Mobile phone number (optional)": "Cep telefonu numarası (isteğe bağlı)",
"Moderator": "Moderatör",
- "Must be viewing a room": "Bir oda görüntülemeli olmalı",
"Mute": "Sessiz",
"Name": "İsim",
"Never send encrypted messages to unverified devices from this device": "Bu cihazdan doğrulanmamış cihazlara asla şifrelenmiş mesajlar göndermeyin",
@@ -741,7 +738,6 @@
"Unable to fetch notification target list": "Bildirim hedef listesi çekilemedi",
"An error occurred whilst saving your email notification preferences.": "E-posta bildirim tercihlerinizi kaydetme işlemi sırasında bir hata oluştu.",
"Enable audible notifications in web client": "Web istemcisinde sesli bildirimleri etkinleştir",
- "Permalink": "Kalıcı Bağlantı(permalink)",
"Off": "Kapalı",
"Riot does not know how to join a room on this network": "Riot bu ağdaki bir odaya nasıl gireceğini bilmiyor",
"Mentions only": "Sadece Mention'lar",
diff --git a/src/i18n/strings/uk.json b/src/i18n/strings/uk.json
index 74bf855d22..5e7cc75f8a 100644
--- a/src/i18n/strings/uk.json
+++ b/src/i18n/strings/uk.json
@@ -94,7 +94,7 @@
"Register": "Зарегіструватись",
"Rooms": "Кімнати",
"Add rooms to this community": "Добавити кімнати в це суспільство",
- "This email address is already in use": "Ця адреса елект. почти вже використовується",
+ "This email address is already in use": "Ця е-пошта вже використовується",
"This phone number is already in use": "Цей телефонний номер вже використовується",
"Fetching third party location failed": "Не вдалось отримати стороннє місцеперебування",
"Messages in one-to-one chats": "Повідомлення у чатах \"сам на сам\"",
@@ -232,7 +232,6 @@
"Unable to fetch notification target list": "Неможливо отримати перелік цілей сповіщення",
"Set Password": "Задати пароль",
"Enable audible notifications in web client": "Увімкнути звукові сповіщення у мережевому застосунку",
- "Permalink": "Постійне посилання",
"Off": "Вимкнено",
"Riot does not know how to join a room on this network": "Riot не знає як приєднатись до кімнати у цій мережі",
"Mentions only": "Тільки згадки",
@@ -270,5 +269,15 @@
"Your language of choice": "Обрана мова",
"Which officially provided instance you are using, if any": "Яким офіційно наданим примірником ви користуєтесь (якщо користуєтесь)",
"Whether or not you're using the Richtext mode of the Rich Text Editor": "Чи використовуєте ви режим Richtext у редакторі Rich Text Editor",
- "Your homeserver's URL": "URL адреса вашого домашнього серверу"
+ "Your homeserver's URL": "URL адреса вашого домашнього серверу",
+ "Failed to verify email address: make sure you clicked the link in the email": "Не вдалось перевірити адресу е-пошти: переконайтесь, що ви перейшли за посиланням у листі",
+ "The platform you're on": "Використовувана платформа",
+ "Your identity server's URL": "URL адреса серверу ідентифікації",
+ "e.g. %(exampleValue)s": "напр. %(exampleValue)s",
+ "Every page you use in the app": "Кожна використовувана у застосунку сторінка",
+ "e.g. ": "напр. ",
+ "Your User Agent": "Ваш користувацький агент",
+ "Your device resolution": "Роздільність вашого пристрою",
+ "Analytics": "Аналітика",
+ "The information being sent to us to help make Riot.im better includes:": "Надсилана інформація, що допомагає нам покращити Riot.im, вміщує:"
}
diff --git a/src/i18n/strings/zh_Hans.json b/src/i18n/strings/zh_Hans.json
index 8e2dc6e0f8..56d5c1e4dc 100644
--- a/src/i18n/strings/zh_Hans.json
+++ b/src/i18n/strings/zh_Hans.json
@@ -42,7 +42,6 @@
"Failed to kick": "移除失败",
"Failed to leave room": "无法退出聊天室",
"Failed to load timeline position": "无法加载时间轴位置",
- "Failed to lookup current room": "找不到当前聊天室",
"Failed to mute user": "禁言用户失败",
"Failed to reject invite": "拒绝邀请失败",
"Failed to reject invitation": "拒绝邀请失败",
@@ -153,7 +152,6 @@
"Jump to first unread message.": "跳到第一条未读消息。",
"%(senderName)s kicked %(targetName)s.": "%(senderName)s 把 %(targetName)s 踢出了聊天室。.",
"Leave room": "退出聊天室",
- "Login as guest": "以游客的身份登录",
"New password": "新密码",
"Add a topic": "添加一个主题",
"Admin": "管理员",
@@ -743,7 +741,6 @@
"Add rooms to the community": "添加聊天室到社区",
"Add to community": "添加到社区",
"Failed to invite users to community": "邀请用户到社区失败",
- "Message Replies": "消息回复",
"Disable Peer-to-Peer for 1:1 calls": "在一对一通话中禁用 P2P 对等网络",
"Enable inline URL previews by default": "默认启用网址预览",
"Disinvite this user?": "取消邀请此用户?",
@@ -935,7 +932,6 @@
"Create a new community": "创建新社区",
"Error whilst fetching joined communities": "获取已加入社区列表时出现错误",
"Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "创建社区,将用户与聊天室整合在一起!搭建自定义社区主页以在 Matrix 宇宙之中标记出您的私人空间。",
- "Join an existing community": "加入已有的社区",
"Show devices, send anyway or cancel.": "显示未信任的设备 、 不经信任直接发送 或 取消发送。",
"%(count)s of your messages have not been sent.|one": "您的消息尚未发送。",
"Uploading %(filename)s and %(count)s others|other": "正在上传 %(filename)s 与其他 %(count)s 个文件",
@@ -962,7 +958,6 @@
"Tried to load a specific point in this room's timeline, but was unable to find it.": "尝试加载此房间的时间线的特定时间点,但是无法找到。",
"%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|one": "现在 重新发送消息 或 取消发送 。",
"%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|other": "現在 重新发送消息 或 取消发送 。你也可以单独选择消息以重新发送或取消。",
- "To join an existing community you'll have to know its community identifier; this will look something like +example:matrix.org.": "要加入已有的社区,你需要知道它的社区链接,比如 +example:matrix.org。",
"Visibility in Room List": "是否在聊天室目录中可见",
"Something went wrong when trying to get your communities.": "获取你加入的社区时发生错误。",
"Deleting a widget removes it for all users in this room. Are you sure you want to delete this widget?": "删除小部件后,此聊天室中的所有用户的这个小部件都会被删除。你确定要删除这个小部件吗?",
@@ -1099,7 +1094,6 @@
"Unable to fetch notification target list": "无法获取通知目标列表",
"Set Password": "设置密码",
"Enable audible notifications in web client": "在网页客户端启用音频通知",
- "Permalink": "永久链接",
"Off": "关闭",
"Riot does not know how to join a room on this network": "Riot 不知道如何在此网络中加入聊天室",
"Mentions only": "只限提及",
@@ -1122,14 +1116,12 @@
"There's no one else here! Would you like to invite others or stop warning about the empty room?": "这里没有其他人了!你是想 邀请用户 还是 不再提示?",
"You need to be able to invite users to do that.": "你需要有邀请用户的权限才能进行此操作。",
"Missing roomId.": "找不到此聊天室 ID 所对应的聊天室。",
- "Tag Panel": "标签面板",
"You have been banned from %(roomName)s by %(userName)s.": "您已被 %(userName)s 从聊天室 %(roomName)s 中封禁。",
"You have been banned from this room by %(userName)s.": "您已被 %(userName)s 从此聊天室中封禁。",
"Every page you use in the app": "您在 Riot 中使用的每一个页面",
"e.g. ": "例如:",
"Your User Agent": "您的 User Agent",
"Your device resolution": "您设备的分辨率",
- "Must be viewing a room": "必须是在查看一个聊天室时",
"Always show encryption icons": "总是显示加密标志",
"At this time it is not possible to reply with a file so this will be sent without being a reply.": "目前无法以文件作为回复的内容,所以此文件将不作为回复,独立发送。",
"Unable to reply": "无法回复",
diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json
index 80dce1cc2d..ebf329b45b 100644
--- a/src/i18n/strings/zh_Hant.json
+++ b/src/i18n/strings/zh_Hant.json
@@ -78,7 +78,6 @@
"Failed to kick": "踢人失敗",
"Failed to leave room": "無法離開聊天室",
"Failed to load timeline position": "無法加載時間軸位置",
- "Failed to lookup current room": "找不到當前聊天室",
"Failed to mute user": "禁言用戶失敗",
"Failed to reject invite": "拒絕邀請失敗",
"Failed to reject invitation": "拒絕邀請失敗",
@@ -123,7 +122,6 @@
"Jump to first unread message.": "跳到第一則未讀訊息。",
"%(senderName)s kicked %(targetName)s.": "%(senderName)s 把 %(targetName)s 踢出了聊天室。.",
"Leave room": "離開聊天室",
- "Login as guest": "以游客的身份登錄",
"New password": "新密碼",
"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.": "重設密碼目前會把所有裝置上的端到端加密金鑰重設,讓已加密的聊天歷史不可讀,除非您先匯出您的聊天室金鑰並在稍後重新匯入。這會在未來改進。",
"Return to login screen": "返回到登入畫面",
@@ -152,7 +150,7 @@
"Server unavailable, overloaded, or something else went wrong.": "伺服器可能不可用、超載,或者其他東西出錯了.",
"Session ID": "會話 ID",
"%(senderName)s set a profile picture.": "%(senderName)s 設置了頭像。.",
- "%(senderName)s set their display name to %(displayName)s.": "%(senderName)s 將暱稱改為了 %(displayName)s。.",
+ "%(senderName)s set their display name to %(displayName)s.": "%(senderName)s 將他的暱稱改成 %(displayName)s。.",
"Settings": "設定",
"Show panel": "顯示側邊欄",
"Show timestamps in 12 hour format (e.g. 2:30pm)": "用12小時制顯示時間戳 (如:下午 2:30)",
@@ -193,11 +191,11 @@
"%(senderDisplayName)s changed the avatar for %(roomName)s": "%(senderDisplayName)s 更改了聊天室 %(roomName)s 圖像",
"Cancel": "取消",
"Custom Server Options": "自訂伺服器選項",
- "Dismiss": "無視",
+ "Dismiss": "關閉",
"Mute": "靜音",
"Notifications": "通知",
"Operation failed": "操作失敗",
- "powered by Matrix": "由 Matrix 架設",
+ "powered by Matrix": "由 Matrix 提供",
"Remove": "移除",
"unknown error code": "未知的錯誤代碼",
"OK": "確定",
@@ -250,7 +248,7 @@
"Are you sure you want to leave the room '%(roomName)s'?": "您確定您要想要離開房間 '%(roomName)s' 嗎?",
"Bans user with given id": "禁止有指定 ID 的使用者",
"Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "無法連線到家伺服器 - 請檢查您的連線,確保您的家伺服器的 SSL 憑證可被信任,而瀏覽器擴充套件也沒有阻擋請求。",
- "%(senderName)s changed their profile picture.": "%(senderName)s 已經變更了他們的基本資料圖片。",
+ "%(senderName)s changed their profile picture.": "%(senderName)s 已經變更了他的基本資料圖片。",
"%(senderName)s changed the power level of %(powerLevelDiffText)s.": "%(senderName)s 變更了 %(powerLevelDiffText)s 權限等級。",
"%(senderDisplayName)s changed the room name to %(roomName)s.": "%(senderDisplayName)s 將房間名稱變更為 %(roomName)s。",
"%(senderDisplayName)s removed the room name.": "%(senderDisplayName)s 已經移除了房間名稱。",
@@ -337,7 +335,6 @@
"Mobile phone number": "行動電話號碼",
"Mobile phone number (optional)": "行動電話號碼(選擇性)",
"Moderator": "仲裁者",
- "Must be viewing a room": "必須檢視房間",
"Name": "名稱",
"Never send encrypted messages to unverified devices from this device": "從不自此裝置傳送加密的訊息到未驗證的裝置",
"Never send encrypted messages to unverified devices in this room from this device": "從不在此房間中從此裝置上傳送未加密的訊息到未驗證的裝置",
@@ -381,8 +378,8 @@
"Rejoin": "重新加入",
"Remote addresses for this room:": "此房間的遠端地址:",
"Remove Contact Information?": "移除聯絡人資訊?",
- "%(senderName)s removed their display name (%(oldDisplayName)s).": "%(senderName)s 移除了他們的顯示名稱 (%(oldDisplayName)s)。",
- "%(senderName)s removed their profile picture.": "%(senderName)s 移除了他們的基本資寮圖片。",
+ "%(senderName)s removed their display name (%(oldDisplayName)s).": "%(senderName)s 移除了他的顯示名稱 (%(oldDisplayName)s)。",
+ "%(senderName)s removed their profile picture.": "%(senderName)s 移除了他的基本資料圖片。",
"Remove %(threePid)s?": "移除 %(threePid)s?",
"%(senderName)s requested a VoIP conference.": "%(senderName)s 請求了一次 VoIP 會議。",
"Results from DuckDuckGo": "DuckDuckGo 的結果",
@@ -703,9 +700,7 @@
"%(names)s and %(count)s others are typing|other": "%(names)s 與其他 %(count)s 個人正在輸入",
"%(names)s and %(count)s others are typing|one": "%(names)s 與另一個人正在輸入",
"Send": "傳送",
- "Message Replies": "訊息回覆",
"Message Pinning": "訊息釘選",
- "Tag Panel": "標籤面板",
"Disable Emoji suggestions while typing": "在輸入時停用繪文字建議",
"Hide avatar changes": "隱藏大頭貼變更",
"Hide display name changes": "隱藏顯示名稱變更",
@@ -926,8 +921,6 @@
"Error whilst fetching joined communities": "擷取已加入的社群時發生錯誤",
"Create a new community": "建立新社群",
"Create a community to group together users and rooms! Build a custom homepage to mark out your space in the Matrix universe.": "建立社群以將使用者與聊天室湊成一組!建立自訂的首頁以在 Matrix 宇宙中標出您的空間。",
- "Join an existing community": "加入既有的社群",
- "To join an existing community you'll have to know its community identifier; this will look something like +example:matrix.org.": "要加入既有的社群,您必須知道它的社群標記符號;其看起來像是 +example:matrix.org.",
"%(count)s of your messages have not been sent.|one": "您的訊息尚未傳送。",
"%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|other": "現在重新傳送全部或取消全部。您也可以選取單一訊息以重新傳送或取消。",
"%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|one": "現在重新傳送訊息或取消訊息。",
@@ -962,7 +955,7 @@
"Community IDs cannot not be empty.": "社群 ID 不能為空。",
"Show devices, send anyway or cancel.": "顯示裝置、無論如何都要傳送或取消。",
"In reply to ": "回覆給 ",
- "%(oldDisplayName)s changed their display name to %(displayName)s.": "%(oldDisplayName)s 變更了他們的顯示名稱為 %(displayName)s 。",
+ "%(oldDisplayName)s changed their display name to %(displayName)s.": "%(oldDisplayName)s 變更了他的顯示名稱為 %(displayName)s 。",
"Failed to set direct chat tag": "設定直接聊天標籤失敗",
"Failed to remove tag %(tagName)s from room": "從聊天室移除標籤 %(tagName)s 失敗",
"Failed to add tag %(tagName)s to room": "新增標籤 %(tagName)s 到聊天室失敗",
@@ -1126,7 +1119,6 @@
"Riot does not know how to join a room on this network": "Riot 不知道如何在此網路中加入聊天室",
"Set Password": "設定密碼",
"Enable audible notifications in web client": "在網頁客戶端啟用音訊通知",
- "Permalink": "永久連結",
"Off": "關閉",
"#example": "#範例",
"Mentions only": "僅提及",
@@ -1170,9 +1162,6 @@
"Enable widget screenshots on supported widgets": "在支援的小工具上啟用小工具螢幕快照",
"Send analytics data": "傳送分析資料",
"Muted Users": "已靜音的使用者",
- "Help improve Riot by sending usage data? This will use a cookie. (See our cookie and privacy policies).": "透過傳送使用情形資料來協助改善 Riot?這會使用 cookie。(參見我們的 cookie 與隱私政策)。",
- "Help improve Riot by sending usage data? This will use a cookie.": "透過傳送使用情形資料來協助改善 Riot?這會使用 cookie。",
- "Yes please": "好的,請",
"e.g. %(exampleValue)s": "範例:%(exampleValue)s",
"Reload widget": "重新載入小工具",
"Please help improve Riot.im by sending anonymous usage data. This will use a cookie (please see our Cookie Policy).": "請透過傳送匿名使用資料來協助改善 Riot.im。這將會使用 cookie(請參見我們的 Cookie 政策)。",
@@ -1191,5 +1180,20 @@
"Terms and Conditions": "條款與細則",
"To continue using the %(homeserverDomain)s homeserver you must review and agree to our terms and conditions.": "要繼續使用 %(homeserverDomain)s 家伺服器,您必須審閱並同意我們的條款與細則。",
"Review terms and conditions": "審閱條款與細則",
- "To notify everyone in the room, you must be a": "為了通知每個在聊天室裡的人,您必須為"
+ "To notify everyone in the room, you must be a": "為了通知每個在聊天室裡的人,您必須為",
+ "Encrypting": "正在加密",
+ "Encrypted, not sent": "已加密,未傳送",
+ "No Audio Outputs detected": "未偵測到音訊輸出",
+ "Audio Output": "音訊輸出",
+ "Try the app first": "先試試看應用程式",
+ "Share Link to User": "分享連結給使用者",
+ "Share room": "分享聊天室",
+ "Share Room": "分享聊天室",
+ "Link to most recent message": "連結到最近的訊息",
+ "Share User": "分享使用者",
+ "Share Community": "分享社群",
+ "Share Room Message": "分享聊天室訊息",
+ "Link to selected message": "連結到選定的訊息",
+ "COPY": "複製",
+ "Share Message": "分享訊息"
}
diff --git a/src/linkify-matrix.js b/src/linkify-matrix.js
index 6bbea77733..50d50f219a 100644
--- a/src/linkify-matrix.js
+++ b/src/linkify-matrix.js
@@ -35,12 +35,14 @@ function matrixLinkify(linkify) {
};
ROOMALIAS.prototype = new MultiToken();
- const S_HASH = new linkify.parser.State();
+ const S_HASH = S_START.jump(TT.POUND);
const S_HASH_NAME = new linkify.parser.State();
const S_HASH_NAME_COLON = new linkify.parser.State();
const S_HASH_NAME_COLON_DOMAIN = new linkify.parser.State();
const S_HASH_NAME_COLON_DOMAIN_DOT = new linkify.parser.State();
const S_ROOMALIAS = new linkify.parser.State(ROOMALIAS);
+ const S_ROOMALIAS_COLON = new linkify.parser.State();
+ const S_ROOMALIAS_COLON_NUM = new linkify.parser.State(ROOMALIAS);
const roomname_tokens = [
TT.DOT,
@@ -56,8 +58,6 @@ function matrixLinkify(linkify) {
TT.LOCALHOST,
];
- S_START.on(TT.POUND, S_HASH);
-
S_HASH.on(roomname_tokens, S_HASH_NAME);
S_HASH_NAME.on(roomname_tokens, S_HASH_NAME);
S_HASH_NAME.on(TT.DOMAIN, S_HASH_NAME);
@@ -66,10 +66,15 @@ function matrixLinkify(linkify) {
S_HASH_NAME_COLON.on(TT.DOMAIN, S_HASH_NAME_COLON_DOMAIN);
S_HASH_NAME_COLON.on(TT.LOCALHOST, S_ROOMALIAS); // accept #foo:localhost
+ S_HASH_NAME_COLON.on(TT.TLD, S_ROOMALIAS); // accept #foo:com (mostly for (TLD|DOMAIN)+ mixing)
S_HASH_NAME_COLON_DOMAIN.on(TT.DOT, S_HASH_NAME_COLON_DOMAIN_DOT);
S_HASH_NAME_COLON_DOMAIN_DOT.on(TT.DOMAIN, S_HASH_NAME_COLON_DOMAIN);
S_HASH_NAME_COLON_DOMAIN_DOT.on(TT.TLD, S_ROOMALIAS);
+ S_ROOMALIAS.on(TT.DOT, S_HASH_NAME_COLON_DOMAIN_DOT); // accept repeated TLDs (e.g .org.uk)
+ S_ROOMALIAS.on(TT.COLON, S_ROOMALIAS_COLON); // do not accept trailing `:`
+ S_ROOMALIAS_COLON.on(TT.NUM, S_ROOMALIAS_COLON_NUM); // but do accept :NUM (port specifier)
+
const USERID = function(value) {
MultiToken.call(this, value);
@@ -78,12 +83,14 @@ function matrixLinkify(linkify) {
};
USERID.prototype = new MultiToken();
- const S_AT = new linkify.parser.State();
+ const S_AT = S_START.jump(TT.AT);
const S_AT_NAME = new linkify.parser.State();
const S_AT_NAME_COLON = new linkify.parser.State();
const S_AT_NAME_COLON_DOMAIN = new linkify.parser.State();
const S_AT_NAME_COLON_DOMAIN_DOT = new linkify.parser.State();
const S_USERID = new linkify.parser.State(USERID);
+ const S_USERID_COLON = new linkify.parser.State();
+ const S_USERID_COLON_NUM = new linkify.parser.State(USERID);
const username_tokens = [
TT.DOT,
@@ -97,8 +104,6 @@ function matrixLinkify(linkify) {
TT.LOCALHOST,
];
- S_START.on(TT.AT, S_AT);
-
S_AT.on(username_tokens, S_AT_NAME);
S_AT_NAME.on(username_tokens, S_AT_NAME);
S_AT_NAME.on(TT.DOMAIN, S_AT_NAME);
@@ -107,10 +112,15 @@ function matrixLinkify(linkify) {
S_AT_NAME_COLON.on(TT.DOMAIN, S_AT_NAME_COLON_DOMAIN);
S_AT_NAME_COLON.on(TT.LOCALHOST, S_USERID); // accept @foo:localhost
+ S_AT_NAME_COLON.on(TT.TLD, S_USERID); // accept @foo:com (mostly for (TLD|DOMAIN)+ mixing)
S_AT_NAME_COLON_DOMAIN.on(TT.DOT, S_AT_NAME_COLON_DOMAIN_DOT);
S_AT_NAME_COLON_DOMAIN_DOT.on(TT.DOMAIN, S_AT_NAME_COLON_DOMAIN);
S_AT_NAME_COLON_DOMAIN_DOT.on(TT.TLD, S_USERID);
+ S_USERID.on(TT.DOT, S_AT_NAME_COLON_DOMAIN_DOT); // accept repeated TLDs (e.g .org.uk)
+ S_USERID.on(TT.COLON, S_USERID_COLON); // do not accept trailing `:`
+ S_USERID_COLON.on(TT.NUM, S_USERID_COLON_NUM); // but do accept :NUM (port specifier)
+
const GROUPID = function(value) {
MultiToken.call(this, value);
@@ -119,12 +129,14 @@ function matrixLinkify(linkify) {
};
GROUPID.prototype = new MultiToken();
- const S_PLUS = new linkify.parser.State();
+ const S_PLUS = S_START.jump(TT.PLUS);
const S_PLUS_NAME = new linkify.parser.State();
const S_PLUS_NAME_COLON = new linkify.parser.State();
const S_PLUS_NAME_COLON_DOMAIN = new linkify.parser.State();
const S_PLUS_NAME_COLON_DOMAIN_DOT = new linkify.parser.State();
const S_GROUPID = new linkify.parser.State(GROUPID);
+ const S_GROUPID_COLON = new linkify.parser.State();
+ const S_GROUPID_COLON_NUM = new linkify.parser.State(GROUPID);
const groupid_tokens = [
TT.DOT,
@@ -138,8 +150,6 @@ function matrixLinkify(linkify) {
TT.LOCALHOST,
];
- S_START.on(TT.PLUS, S_PLUS);
-
S_PLUS.on(groupid_tokens, S_PLUS_NAME);
S_PLUS_NAME.on(groupid_tokens, S_PLUS_NAME);
S_PLUS_NAME.on(TT.DOMAIN, S_PLUS_NAME);
@@ -148,9 +158,14 @@ function matrixLinkify(linkify) {
S_PLUS_NAME_COLON.on(TT.DOMAIN, S_PLUS_NAME_COLON_DOMAIN);
S_PLUS_NAME_COLON.on(TT.LOCALHOST, S_GROUPID); // accept +foo:localhost
+ S_PLUS_NAME_COLON.on(TT.TLD, S_GROUPID); // accept +foo:com (mostly for (TLD|DOMAIN)+ mixing)
S_PLUS_NAME_COLON_DOMAIN.on(TT.DOT, S_PLUS_NAME_COLON_DOMAIN_DOT);
S_PLUS_NAME_COLON_DOMAIN_DOT.on(TT.DOMAIN, S_PLUS_NAME_COLON_DOMAIN);
S_PLUS_NAME_COLON_DOMAIN_DOT.on(TT.TLD, S_GROUPID);
+
+ S_GROUPID.on(TT.DOT, S_PLUS_NAME_COLON_DOMAIN_DOT); // accept repeated TLDs (e.g .org.uk)
+ S_GROUPID.on(TT.COLON, S_GROUPID_COLON); // do not accept trailing `:`
+ S_GROUPID_COLON.on(TT.NUM, S_GROUPID_COLON_NUM); // but do accept :NUM (port specifier)
}
// stubs, overwritten in MatrixChat's componentDidMount
@@ -169,11 +184,18 @@ matrixLinkify.VECTOR_URL_PATTERN = "^(?:https?:\/\/)?(?:"
+ "(?:www\\.)?(?:riot|vector)\\.im/(?:app|beta|staging|develop)/"
+ ")(#.*)";
-matrixLinkify.MATRIXTO_URL_PATTERN = "^(?:https?:\/\/)?(?:www\\.)?matrix\\.to/#/((#|@|!).*)";
+matrixLinkify.MATRIXTO_URL_PATTERN = "^(?:https?:\/\/)?(?:www\\.)?matrix\\.to/#/(([#@!+]).*)";
matrixLinkify.MATRIXTO_MD_LINK_PATTERN =
- '\\[([^\\]]*)\\]\\((?:https?:\/\/)?(?:www\\.)?matrix\\.to/#/((#|@|!)[^\\)]*)\\)';
+ '\\[([^\\]]*)\\]\\((?:https?:\/\/)?(?:www\\.)?matrix\\.to/#/([#@!+][^\\)]*)\\)';
matrixLinkify.MATRIXTO_BASE_URL= baseUrl;
+const matrixToEntityMap = {
+ '@': '#/user/',
+ '#': '#/room/',
+ '!': '#/room/',
+ '+': '#/group/',
+};
+
matrixLinkify.options = {
events: function(href, type) {
switch (type) {
@@ -204,24 +226,20 @@ matrixLinkify.options = {
case 'userid':
case 'groupid':
return matrixLinkify.MATRIXTO_BASE_URL + '/#/' + href;
- default:
- var m;
+ default: {
// FIXME: horrible duplication with HtmlUtils' transform tags
- m = href.match(matrixLinkify.VECTOR_URL_PATTERN);
+ let m = href.match(matrixLinkify.VECTOR_URL_PATTERN);
if (m) {
return m[1];
}
m = href.match(matrixLinkify.MATRIXTO_URL_PATTERN);
if (m) {
const entity = m[1];
- if (entity[0] === '@') {
- return '#/user/' + entity;
- } else if (entity[0] === '#' || entity[0] === '!') {
- return '#/room/' + entity;
- }
+ if (matrixToEntityMap[entity[0]]) return matrixToEntityMap[entity[0]] + entity;
}
return href;
+ }
}
},
diff --git a/src/matrix-to.js b/src/matrix-to.js
index 72fb3c38fc..90b0a66090 100644
--- a/src/matrix-to.js
+++ b/src/matrix-to.js
@@ -14,7 +14,8 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
-export const baseUrl = "https://matrix.to";
+export const host = "matrix.to";
+export const baseUrl = `https://${host}`;
export function makeEventPermalink(roomId, eventId) {
return `${baseUrl}/#/${roomId}/${eventId}`;
diff --git a/src/settings/Settings.js b/src/settings/Settings.js
index b1bc4161fd..84178e2673 100644
--- a/src/settings/Settings.js
+++ b/src/settings/Settings.js
@@ -1,5 +1,6 @@
/*
Copyright 2017 Travis Ralston
+Copyright 2018 New Vector Ltd
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -76,21 +77,15 @@ export const SETTINGS = {
// // level is always appended to the end.
// supportedLevelsAreOrdered: false,
// },
- "feature_rich_quoting": {
- isFeature: true,
- displayName: _td("Message Replies"),
- supportedLevels: LEVELS_FEATURE,
- default: false,
- },
"feature_pinning": {
isFeature: true,
displayName: _td("Message Pinning"),
supportedLevels: LEVELS_FEATURE,
default: false,
},
- "feature_tag_panel": {
+ "feature_jitsi": {
isFeature: true,
- displayName: _td("Tag Panel"),
+ displayName: _td("Jitsi Conference Calling"),
supportedLevels: LEVELS_FEATURE,
default: false,
},
@@ -201,6 +196,10 @@ export const SETTINGS = {
displayName: _td('Disable Peer-to-Peer for 1:1 calls'),
default: false,
},
+ "webrtc_audiooutput": {
+ supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS,
+ default: null,
+ },
"webrtc_audioinput": {
supportedLevels: LEVELS_DEVICE_ONLY_SETTINGS,
default: null,
@@ -246,6 +245,13 @@ export const SETTINGS = {
},
default: true,
},
+ "urlPreviewsEnabled_e2ee": {
+ supportedLevels: ['room-device', 'room-account'],
+ displayName: {
+ "room-account": _td("Enable URL previews for this room (only affects you)"),
+ },
+ default: false,
+ },
"roomColor": {
supportedLevels: LEVELS_ROOM_SETTINGS_WITH_ROOM,
displayName: _td("Room Colour"),
@@ -274,4 +280,8 @@ export const SETTINGS = {
displayName: _td('Enable widget screenshots on supported widgets'),
default: false,
},
+ "PinnedEvents.isOpen": {
+ supportedLevels: ['room-device'],
+ default: false,
+ },
};
diff --git a/src/settings/handlers/RoomAccountSettingsHandler.js b/src/settings/handlers/RoomAccountSettingsHandler.js
index 74dbf9eed0..d0dadc2de7 100644
--- a/src/settings/handlers/RoomAccountSettingsHandler.js
+++ b/src/settings/handlers/RoomAccountSettingsHandler.js
@@ -74,7 +74,7 @@ export default class RoomAccountSettingsHandler extends SettingsHandler {
return cli !== undefined && cli !== null;
}
- _getSettings(roomId, eventType = "im.vector.settings") {
+ _getSettings(roomId, eventType = "im.vector.web.settings") {
const room = MatrixClientPeg.get().getRoom(roomId);
if (!room) return null;
diff --git a/src/stores/RoomViewStore.js b/src/stores/RoomViewStore.js
index 923c073065..35cfe69086 100644
--- a/src/stores/RoomViewStore.js
+++ b/src/stores/RoomViewStore.js
@@ -147,6 +147,8 @@ class RoomViewStore extends Store {
joining: payload.joining || false,
// Reset replyingToEvent because we don't want cross-room because bad UX
replyingToEvent: null,
+ // pull the user out of Room Settings
+ isEditingSettings: false,
};
if (this._state.forwardingEvent) {
diff --git a/src/utils/WidgetUtils.js b/src/utils/WidgetUtils.js
new file mode 100644
index 0000000000..ab5b5b0130
--- /dev/null
+++ b/src/utils/WidgetUtils.js
@@ -0,0 +1,327 @@
+/*
+Copyright 2017 Vector Creations Ltd
+Copyright 2018 New Vector Ltd
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+import MatrixClientPeg from '../MatrixClientPeg';
+import SdkConfig from "../SdkConfig";
+import dis from '../dispatcher';
+import * as url from "url";
+
+export default class WidgetUtils {
+ /* Returns true if user is able to send state events to modify widgets in this room
+ * (Does not apply to non-room-based / user widgets)
+ * @param roomId -- The ID of the room to check
+ * @return Boolean -- true if the user can modify widgets in this room
+ * @throws Error -- specifies the error reason
+ */
+ static canUserModifyWidgets(roomId) {
+ if (!roomId) {
+ console.warn('No room ID specified');
+ return false;
+ }
+
+ const client = MatrixClientPeg.get();
+ if (!client) {
+ console.warn('User must be be logged in');
+ return false;
+ }
+
+ const room = client.getRoom(roomId);
+ if (!room) {
+ console.warn(`Room ID ${roomId} is not recognised`);
+ return false;
+ }
+
+ const me = client.credentials.userId;
+ if (!me) {
+ console.warn('Failed to get user ID');
+ return false;
+ }
+
+ const member = room.getMember(me);
+ if (!member || member.membership !== "join") {
+ console.warn(`User ${me} is not in room ${roomId}`);
+ return false;
+ }
+
+ return room.currentState.maySendStateEvent('im.vector.modular.widgets', me);
+ }
+
+ /**
+ * Returns true if specified url is a scalar URL, typically https://scalar.vector.im/api
+ * @param {[type]} testUrlString URL to check
+ * @return {Boolean} True if specified URL is a scalar URL
+ */
+ static isScalarUrl(testUrlString) {
+ if (!testUrlString) {
+ console.error('Scalar URL check failed. No URL specified');
+ return false;
+ }
+
+ const testUrl = url.parse(testUrlString);
+
+ let scalarUrls = SdkConfig.get().integrations_widgets_urls;
+ if (!scalarUrls || scalarUrls.length === 0) {
+ scalarUrls = [SdkConfig.get().integrations_rest_url];
+ }
+
+ for (let i = 0; i < scalarUrls.length; i++) {
+ const scalarUrl = url.parse(scalarUrls[i]);
+ if (testUrl && scalarUrl) {
+ if (
+ testUrl.protocol === scalarUrl.protocol &&
+ testUrl.host === scalarUrl.host &&
+ testUrl.pathname.startsWith(scalarUrl.pathname)
+ ) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Returns a promise that resolves when a widget with the given
+ * ID has been added as a user widget (ie. the accountData event
+ * arrives) or rejects after a timeout
+ *
+ * @param {string} widgetId The ID of the widget to wait for
+ * @param {boolean} add True to wait for the widget to be added,
+ * false to wait for it to be deleted.
+ * @returns {Promise} that resolves when the widget is in the
+ * requested state according to the `add` param
+ */
+ static waitForUserWidget(widgetId, add) {
+ return new Promise((resolve, reject) => {
+ // Tests an account data event, returning true if it's in the state
+ // we're waiting for it to be in
+ function eventInIntendedState(ev) {
+ if (!ev || !ev.getContent()) return false;
+ if (add) {
+ return ev.getContent()[widgetId] !== undefined;
+ } else {
+ return ev.getContent()[widgetId] === undefined;
+ }
+ }
+
+ const startingAccountDataEvent = MatrixClientPeg.get().getAccountData('m.widgets');
+ if (eventInIntendedState(startingAccountDataEvent)) {
+ resolve();
+ return;
+ }
+
+ function onAccountData(ev) {
+ const currentAccountDataEvent = MatrixClientPeg.get().getAccountData('m.widgets');
+ if (eventInIntendedState(currentAccountDataEvent)) {
+ MatrixClientPeg.get().removeListener('accountData', onAccountData);
+ clearTimeout(timerId);
+ resolve();
+ }
+ }
+ const timerId = setTimeout(() => {
+ MatrixClientPeg.get().removeListener('accountData', onAccountData);
+ reject(new Error("Timed out waiting for widget ID " + widgetId + " to appear"));
+ }, 10000);
+ MatrixClientPeg.get().on('accountData', onAccountData);
+ });
+ }
+
+ /**
+ * Returns a promise that resolves when a widget with the given
+ * ID has been added as a room widget in the given room (ie. the
+ * room state event arrives) or rejects after a timeout
+ *
+ * @param {string} widgetId The ID of the widget to wait for
+ * @param {string} roomId The ID of the room to wait for the widget in
+ * @param {boolean} add True to wait for the widget to be added,
+ * false to wait for it to be deleted.
+ * @returns {Promise} that resolves when the widget is in the
+ * requested state according to the `add` param
+ */
+ static waitForRoomWidget(widgetId, roomId, add) {
+ return new Promise((resolve, reject) => {
+ // Tests a list of state events, returning true if it's in the state
+ // we're waiting for it to be in
+ function eventsInIntendedState(evList) {
+ const widgetPresent = evList.some((ev) => {
+ return ev.getContent() && ev.getContent()['id'] === widgetId;
+ });
+ if (add) {
+ return widgetPresent;
+ } else {
+ return !widgetPresent;
+ }
+ }
+
+ const room = MatrixClientPeg.get().getRoom(roomId);
+ const startingWidgetEvents = room.currentState.getStateEvents('im.vector.modular.widgets');
+ if (eventsInIntendedState(startingWidgetEvents)) {
+ resolve();
+ return;
+ }
+
+ function onRoomStateEvents(ev) {
+ if (ev.getRoomId() !== roomId) return;
+
+ const currentWidgetEvents = room.currentState.getStateEvents('im.vector.modular.widgets');
+
+ if (eventsInIntendedState(currentWidgetEvents)) {
+ MatrixClientPeg.get().removeListener('RoomState.events', onRoomStateEvents);
+ clearTimeout(timerId);
+ resolve();
+ }
+ }
+ const timerId = setTimeout(() => {
+ MatrixClientPeg.get().removeListener('RoomState.events', onRoomStateEvents);
+ reject(new Error("Timed out waiting for widget ID " + widgetId + " to appear"));
+ }, 10000);
+ MatrixClientPeg.get().on('RoomState.events', onRoomStateEvents);
+ });
+ }
+
+ static setUserWidget(widgetId, widgetType, widgetUrl, widgetName, widgetData) {
+ const content = {
+ type: widgetType,
+ url: widgetUrl,
+ name: widgetName,
+ data: widgetData,
+ };
+
+ const client = MatrixClientPeg.get();
+ const userWidgets = WidgetUtils.getUserWidgets();
+
+ // Delete existing widget with ID
+ try {
+ delete userWidgets[widgetId];
+ } catch (e) {
+ console.error(`$widgetId is non-configurable`);
+ }
+
+ const addingWidget = Boolean(widgetUrl);
+
+ // Add new widget / update
+ if (addingWidget) {
+ userWidgets[widgetId] = {
+ content: content,
+ sender: client.getUserId(),
+ state_key: widgetId,
+ type: 'm.widget',
+ id: widgetId,
+ };
+ }
+
+ // This starts listening for when the echo comes back from the server
+ // since the widget won't appear added until this happens. If we don't
+ // wait for this, the action will complete but if the user is fast enough,
+ // the widget still won't actually be there.
+ return client.setAccountData('m.widgets', userWidgets).then(() => {
+ return WidgetUtils.waitForUserWidget(widgetId, addingWidget);
+ }).then(() => {
+ dis.dispatch({ action: "user_widget_updated" });
+ });
+ }
+
+ static setRoomWidget(roomId, widgetId, widgetType, widgetUrl, widgetName, widgetData) {
+ let content;
+
+ const addingWidget = Boolean(widgetUrl);
+
+ if (addingWidget) {
+ content = {
+ type: widgetType,
+ url: widgetUrl,
+ name: widgetName,
+ data: widgetData,
+ };
+ } else {
+ content = {};
+ }
+
+ const client = MatrixClientPeg.get();
+ // TODO - Room widgets need to be moved to 'm.widget' state events
+ // https://docs.google.com/document/d/1uPF7XWY_dXTKVKV7jZQ2KmsI19wn9-kFRgQ1tFQP7wQ/edit?usp=sharing
+ return client.sendStateEvent(roomId, "im.vector.modular.widgets", content, widgetId).then(() => {
+ return WidgetUtils.waitForRoomWidget(widgetId, roomId, addingWidget);
+ });
+ }
+
+ /**
+ * Get room specific widgets
+ * @param {object} room The room to get widgets force
+ * @return {[object]} Array containing current / active room widgets
+ */
+ static getRoomWidgets(room) {
+ const appsStateEvents = room.currentState.getStateEvents('im.vector.modular.widgets');
+ if (!appsStateEvents) {
+ return [];
+ }
+
+ return appsStateEvents.filter((ev) => {
+ return ev.getContent().type && ev.getContent().url;
+ });
+ }
+
+ /**
+ * Get user specific widgets (not linked to a specific room)
+ * @return {object} Event content object containing current / active user widgets
+ */
+ static getUserWidgets() {
+ const client = MatrixClientPeg.get();
+ if (!client) {
+ throw new Error('User not logged in');
+ }
+ const userWidgets = client.getAccountData('m.widgets');
+ if (userWidgets && userWidgets.getContent()) {
+ return userWidgets.getContent();
+ }
+ return {};
+ }
+
+ /**
+ * Get user specific widgets (not linked to a specific room) as an array
+ * @return {[object]} Array containing current / active user widgets
+ */
+ static getUserWidgetsArray() {
+ return Object.values(WidgetUtils.getUserWidgets());
+ }
+
+ /**
+ * Get active stickerpicker widgets (stickerpickers are user widgets by nature)
+ * @return {[object]} Array containing current / active stickerpicker widgets
+ */
+ static getStickerpickerWidgets() {
+ const widgets = WidgetUtils.getUserWidgetsArray();
+ return widgets.filter((widget) => widget.content && widget.content.type === "m.stickerpicker");
+ }
+
+ /**
+ * Remove all stickerpicker widgets (stickerpickers are user widgets by nature)
+ * @return {Promise} Resolves on account data updated
+ */
+ static removeStickerpickerWidgets() {
+ const client = MatrixClientPeg.get();
+ if (!client) {
+ throw new Error('User not logged in');
+ }
+ const userWidgets = client.getAccountData('m.widgets').getContent() || {};
+ Object.entries(userWidgets).forEach(([key, widget]) => {
+ if (widget.content && widget.content.type === 'm.stickerpicker') {
+ delete userWidgets[key];
+ }
+ });
+ return client.setAccountData('m.widgets', userWidgets);
+ }
+}
diff --git a/src/utils/widgets.js b/src/utils/widgets.js
deleted file mode 100644
index 338df184e2..0000000000
--- a/src/utils/widgets.js
+++ /dev/null
@@ -1,90 +0,0 @@
-import MatrixClientPeg from '../MatrixClientPeg';
-
-/**
- * Get all widgets (user and room) for the current user
- * @param {object} room The room to get widgets for
- * @return {[object]} Array containing current / active room and user widget state events
- */
-function getWidgets(room) {
- const widgets = getRoomWidgets(room);
- widgets.concat(getUserWidgetsArray());
- return widgets;
-}
-
-/**
- * Get room specific widgets
- * @param {object} room The room to get widgets force
- * @return {[object]} Array containing current / active room widgets
- */
-function getRoomWidgets(room) {
- const appsStateEvents = room.currentState.getStateEvents('im.vector.modular.widgets');
- if (!appsStateEvents) {
- return [];
- }
-
- return appsStateEvents.filter((ev) => {
- return ev.getContent().type && ev.getContent().url;
- });
-}
-
-/**
- * Get user specific widgets (not linked to a specific room)
- * @return {object} Event content object containing current / active user widgets
- */
-function getUserWidgets() {
- const client = MatrixClientPeg.get();
- if (!client) {
- throw new Error('User not logged in');
- }
- const userWidgets = client.getAccountData('m.widgets');
- let userWidgetContent = {};
- if (userWidgets && userWidgets.getContent()) {
- userWidgetContent = userWidgets.getContent();
- }
- return userWidgetContent;
-}
-
-/**
- * Get user specific widgets (not linked to a specific room) as an array
- * @return {[object]} Array containing current / active user widgets
- */
-function getUserWidgetsArray() {
- return Object.values(getUserWidgets());
-}
-
-/**
- * Get active stickerpicker widgets (stickerpickers are user widgets by nature)
- * @return {[object]} Array containing current / active stickerpicker widgets
- */
-function getStickerpickerWidgets() {
- const widgets = getUserWidgetsArray();
- return widgets.filter((widget) => widget.content && widget.content.type === "m.stickerpicker");
-}
-
-/**
- * Remove all stickerpicker widgets (stickerpickers are user widgets by nature)
- * @return {Promise} Resolves on account data updated
- */
-function removeStickerpickerWidgets() {
- const client = MatrixClientPeg.get();
- if (!client) {
- throw new Error('User not logged in');
- }
- const userWidgets = client.getAccountData('m.widgets').getContent() || {};
- Object.entries(userWidgets).forEach(([key, widget]) => {
- if (widget.content && widget.content.type === 'm.stickerpicker') {
- delete userWidgets[key];
- }
- });
- return client.setAccountData('m.widgets', userWidgets);
-}
-
-
-export default {
- getWidgets,
- getRoomWidgets,
- getUserWidgets,
- getUserWidgetsArray,
- getStickerpickerWidgets,
- removeStickerpickerWidgets,
-};
diff --git a/test/DecryptionFailureTracker-test.js b/test/DecryptionFailureTracker-test.js
new file mode 100644
index 0000000000..4979fb9bb4
--- /dev/null
+++ b/test/DecryptionFailureTracker-test.js
@@ -0,0 +1,159 @@
+/*
+Copyright 2018 New Vector Ltd
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+import expect from 'expect';
+
+import DecryptionFailureTracker from '../src/DecryptionFailureTracker';
+
+import { MatrixEvent } from 'matrix-js-sdk';
+
+function createFailedDecryptionEvent() {
+ const event = new MatrixEvent({
+ event_id: "event-id-" + Math.random().toString(16).slice(2),
+ });
+ event._setClearData(
+ event._badEncryptedMessage(":("),
+ );
+ return event;
+}
+
+describe('DecryptionFailureTracker', function() {
+ it('tracks a failed decryption', function(done) {
+ const failedDecryptionEvent = createFailedDecryptionEvent();
+
+ let count = 0;
+ const tracker = new DecryptionFailureTracker((total) => count += total);
+
+ tracker.eventDecrypted(failedDecryptionEvent);
+
+ // Pretend "now" is Infinity
+ tracker.checkFailures(Infinity);
+
+ // Immediately track the newest failure, if there is one
+ tracker.trackFailure();
+
+ expect(count).toNotBe(0, 'should track a failure for an event that failed decryption');
+
+ done();
+ });
+
+ it('does not track a failed decryption where the event is subsequently successfully decrypted', (done) => {
+ const decryptedEvent = createFailedDecryptionEvent();
+ const tracker = new DecryptionFailureTracker((total) => {
+ expect(true).toBe(false, 'should not track an event that has since been decrypted correctly');
+ });
+
+ tracker.eventDecrypted(decryptedEvent);
+
+ // Indicate successful decryption: clear data can be anything where the msgtype is not m.bad.encrypted
+ decryptedEvent._setClearData({});
+ tracker.eventDecrypted(decryptedEvent);
+
+ // Pretend "now" is Infinity
+ tracker.checkFailures(Infinity);
+
+ // Immediately track the newest failure, if there is one
+ tracker.trackFailure();
+ done();
+ });
+
+ it('only tracks a single failure per event, despite multiple failed decryptions for multiple events', (done) => {
+ const decryptedEvent = createFailedDecryptionEvent();
+ const decryptedEvent2 = createFailedDecryptionEvent();
+
+ let count = 0;
+ const tracker = new DecryptionFailureTracker((total) => count += total);
+
+ // Arbitrary number of failed decryptions for both events
+ tracker.eventDecrypted(decryptedEvent);
+ tracker.eventDecrypted(decryptedEvent);
+ tracker.eventDecrypted(decryptedEvent);
+ tracker.eventDecrypted(decryptedEvent);
+ tracker.eventDecrypted(decryptedEvent);
+ tracker.eventDecrypted(decryptedEvent2);
+ tracker.eventDecrypted(decryptedEvent2);
+ tracker.eventDecrypted(decryptedEvent2);
+
+ // Pretend "now" is Infinity
+ tracker.checkFailures(Infinity);
+
+ // Simulated polling of `trackFailure`, an arbitrary number ( > 2 ) times
+ tracker.trackFailure();
+ tracker.trackFailure();
+ tracker.trackFailure();
+ tracker.trackFailure();
+
+ expect(count).toBe(2, count + ' failures tracked, should only track a single failure per event');
+
+ done();
+ });
+
+ it('should not track a failure for an event that was tracked previously', (done) => {
+ const decryptedEvent = createFailedDecryptionEvent();
+
+ let count = 0;
+ const tracker = new DecryptionFailureTracker((total) => count += total);
+
+ // Indicate decryption
+ tracker.eventDecrypted(decryptedEvent);
+
+ // Pretend "now" is Infinity
+ tracker.checkFailures(Infinity);
+
+ tracker.trackFailure();
+
+ // Indicate a second decryption, after having tracked the failure
+ tracker.eventDecrypted(decryptedEvent);
+
+ tracker.trackFailure();
+
+ expect(count).toBe(1, 'should only track a single failure per event');
+
+ done();
+ });
+
+ xit('should not track a failure for an event that was tracked in a previous session', (done) => {
+ // This test uses localStorage, clear it beforehand
+ localStorage.clear();
+
+ const decryptedEvent = createFailedDecryptionEvent();
+
+ let count = 0;
+ const tracker = new DecryptionFailureTracker((total) => count += total);
+
+ // Indicate decryption
+ tracker.eventDecrypted(decryptedEvent);
+
+ // Pretend "now" is Infinity
+ // NB: This saves to localStorage specific to DFT
+ tracker.checkFailures(Infinity);
+
+ tracker.trackFailure();
+
+ // Simulate the browser refreshing by destroying tracker and creating a new tracker
+ const secondTracker = new DecryptionFailureTracker((total) => count += total);
+
+ //secondTracker.loadTrackedEventHashMap();
+
+ secondTracker.eventDecrypted(decryptedEvent);
+ secondTracker.checkFailures(Infinity);
+ secondTracker.trackFailure();
+
+ expect(count).toBe(1, count + ' failures tracked, should only track a single failure per event');
+
+ done();
+ });
+});
diff --git a/test/components/structures/TimelinePanel-test.js b/test/components/structures/TimelinePanel-test.js
index 74037d2926..ea62d427bc 100644
--- a/test/components/structures/TimelinePanel-test.js
+++ b/test/components/structures/TimelinePanel-test.js
@@ -235,7 +235,7 @@ describe('TimelinePanel', function() {
// now, if we update the events, there shouldn't be any
// more requests.
- client.paginateEventTimeline.reset();
+ client.paginateEventTimeline.resetHistory();
panel.forceUpdate();
expect(messagePanel.props.backPaginating).toBe(false);
setTimeout(() => {