diff --git a/README.md b/README.md index 144e89c938..c3106ccec7 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,7 @@ Please follow the standard Matrix contributor's guide: https://github.com/matrix-org/synapse/tree/master/CONTRIBUTING.rst Please follow the Matrix JS/React code style as per: -https://github.com/matrix-org/matrix-react-sdk/tree/master/code_style.rst +https://github.com/matrix-org/matrix-react-sdk/blob/master/code_style.md Whilst the layering separation between matrix-react-sdk and Riot is broken (as of July 2016), code should be committed as follows: diff --git a/src/HtmlUtils.js b/src/HtmlUtils.js index 671f9b4955..ee2bcd2b0f 100644 --- a/src/HtmlUtils.js +++ b/src/HtmlUtils.js @@ -32,7 +32,15 @@ emojione.imagePathPNG = 'emojione/png/'; // Use SVGs for emojis emojione.imageType = 'svg'; -const SIMPLE_EMOJI_PATTERN = /([\ud800-\udbff])([\udc00-\udfff])/; +// Anything outside the basic multilingual plane will be a surrogate pair +const SURROGATE_PAIR_PATTERN = /([\ud800-\udbff])([\udc00-\udfff])/; +// And there a bunch more symbol characters that emojione has within the +// BMP, so this includes the ranges from 'letterlike symbols' to +// 'miscellaneous symbols and arrows' which should catch all of them +// (with plenty of false positives, but that's OK) +const SYMBOL_PATTERN = /([\u2100-\u2bff])/; + +// And this is emojione's complete regex const EMOJI_REGEX = new RegExp(emojione.unicodeRegexp+"+", "gi"); const COLOR_REGEX = /^#[0-9a-fA-F]{6}$/; @@ -44,16 +52,13 @@ const COLOR_REGEX = /^#[0-9a-fA-F]{6}$/; * unicodeToImage uses this function. */ export function containsEmoji(str) { - return SIMPLE_EMOJI_PATTERN.test(str); + return SURROGATE_PAIR_PATTERN.test(str) || SYMBOL_PATTERN.test(str); } /* modified from https://github.com/Ranks/emojione/blob/master/lib/js/emojione.js * because we want to include emoji shortnames in title text */ -export function unicodeToImage(str) { - // fast path - if (!containsEmoji(str)) return str; - +function unicodeToImage(str) { let replaceWith, unicode, alt, short, fname; const mappedUnicode = emojione.mapUnicodeToShort(); @@ -391,6 +396,8 @@ export function bodyToHtml(content, highlights, opts) { var isHtml = (content.format === "org.matrix.custom.html"); let body = isHtml ? content.formatted_body : escape(content.body); + let bodyHasEmoji = false; + var safeBody; // XXX: We sanitize the HTML whilst also highlighting its text nodes, to avoid accidentally trying // to highlight HTML tags themselves. However, this does mean that we don't highlight textnodes which @@ -408,16 +415,20 @@ export function bodyToHtml(content, highlights, opts) { }; } safeBody = sanitizeHtml(body, sanitizeHtmlParams); - safeBody = unicodeToImage(safeBody); + bodyHasEmoji = containsEmoji(body); + if (bodyHasEmoji) safeBody = unicodeToImage(safeBody); } finally { delete sanitizeHtmlParams.textFilter; } - EMOJI_REGEX.lastIndex = 0; - let contentBodyTrimmed = content.body !== undefined ? content.body.trim() : ''; - let match = EMOJI_REGEX.exec(contentBodyTrimmed); - let emojiBody = match && match[0] && match[0].length === contentBodyTrimmed.length; + let emojiBody = false; + if (bodyHasEmoji) { + EMOJI_REGEX.lastIndex = 0; + let contentBodyTrimmed = content.body !== undefined ? content.body.trim() : ''; + let match = EMOJI_REGEX.exec(contentBodyTrimmed); + emojiBody = match && match[0] && match[0].length === contentBodyTrimmed.length; + } const className = classNames({ 'mx_EventTile_body': true, diff --git a/src/RoomInvite.js b/src/RoomInvite.js index b8e33d318a..9be3da53e4 100644 --- a/src/RoomInvite.js +++ b/src/RoomInvite.js @@ -127,7 +127,7 @@ function _onRoomInviteFinished(roomId, shouldInvite, addrs) { } function _isDmChat(addrTexts) { - if (addrTexts.length === 1 && getAddressType(addrTexts[0])) { + if (addrTexts.length === 1 && getAddressType(addrTexts[0]) === 'mx') { return true; } else { return false; diff --git a/src/SlashCommands.js b/src/SlashCommands.js index e5378d4347..1302aaa423 100644 --- a/src/SlashCommands.js +++ b/src/SlashCommands.js @@ -240,6 +240,59 @@ const commands = { return reject(this.getUsage()); }), + ignore: new Command("ignore", "", function(roomId, args) { + if (args) { + const matches = args.match(/^(\S+)$/); + if (matches) { + const userId = matches[1]; + const ignoredUsers = MatrixClientPeg.get().getIgnoredUsers(); + ignoredUsers.push(userId); // de-duped internally in the js-sdk + return success( + MatrixClientPeg.get().setIgnoredUsers(ignoredUsers).then(() => { + const QuestionDialog = sdk.getComponent("dialogs.QuestionDialog"); + Modal.createTrackedDialog('Slash Commands', 'User ignored', QuestionDialog, { + title: _t("Ignored user"), + description: ( +
+

{_t("You are now ignoring %(userId)s", {userId: userId})}

+
+ ), + hasCancelButton: false, + }); + }), + ); + } + } + return reject(this.getUsage()); + }), + + unignore: new Command("unignore", "", function(roomId, args) { + if (args) { + const matches = args.match(/^(\S+)$/); + if (matches) { + const userId = matches[1]; + const ignoredUsers = MatrixClientPeg.get().getIgnoredUsers(); + const index = ignoredUsers.indexOf(userId); + if (index !== -1) ignoredUsers.splice(index, 1); + return success( + MatrixClientPeg.get().setIgnoredUsers(ignoredUsers).then(() => { + const QuestionDialog = sdk.getComponent("dialogs.QuestionDialog"); + Modal.createTrackedDialog('Slash Commands', 'User unignored', QuestionDialog, { + title: _t("Unignored user"), + description: ( +
+

{_t("You are no longer ignoring %(userId)s", {userId: userId})}

+
+ ), + hasCancelButton: false, + }); + }), + ); + } + } + return reject(this.getUsage()); + }), + // Define the power level of a user op: new Command("op", " []", function(roomId, args) { if (args) { @@ -292,6 +345,13 @@ const commands = { return reject(this.getUsage()); }), + // Open developer tools + devtools: new Command("devtools", "", function(roomId) { + const DevtoolsDialog = sdk.getComponent("dialogs.DevtoolsDialog"); + Modal.createDialog(DevtoolsDialog, { roomId }); + return success(); + }), + // Verify a user, device, and pubkey tuple verify: new Command("verify", " ", function(roomId, args) { if (args) { diff --git a/src/TextForEvent.js b/src/TextForEvent.js index 36b8b538a7..902c10307e 100644 --- a/src/TextForEvent.js +++ b/src/TextForEvent.js @@ -176,26 +176,24 @@ function textForThreePidInviteEvent(event) { } function textForHistoryVisibilityEvent(event) { - var senderName = event.sender ? event.sender.name : event.getSender(); - var vis = event.getContent().history_visibility; - // XXX: This i18n just isn't going to work for languages with different sentence structure. - var text = _t('%(senderName)s made future room history visible to', {senderName: senderName}) + ' '; - if (vis === "invited") { - text += _t('all room members, from the point they are invited') + '.'; + const senderName = event.sender ? event.sender.name : event.getSender(); + switch (event.getContent().history_visibility) { + case 'invited': + return _t('%(senderName)s made future room history visible to all room members, ' + + 'from the point they are invited.', {senderName}); + case 'joined': + return _t('%(senderName)s made future room history visible to all room members, ' + + 'from the point they joined.', {senderName}); + case 'shared': + return _t('%(senderName)s made future room history visible to all room members.', {senderName}); + case 'world_readable': + return _t('%(senderName)s made future room history visible to anyone.', {senderName}); + default: + return _t('%(senderName)s made future room history visible to unknown (%(visibility)s).', { + senderName, + visibility: event.getContent().history_visibility, + }); } - else if (vis === "joined") { - text += _t('all room members, from the point they joined') + '.'; - } - else if (vis === "shared") { - text += _t('all room members') + '.'; - } - else if (vis === "world_readable") { - text += _t('anyone') + '.'; - } - else { - text += ' ' + _t('unknown') + ' (' + vis + ').'; - } - return text; } function textForEncryptionEvent(event) { diff --git a/src/WhoIsTyping.js b/src/WhoIsTyping.js index f3d89f0ff2..2a12703a27 100644 --- a/src/WhoIsTyping.js +++ b/src/WhoIsTyping.js @@ -18,6 +18,12 @@ var MatrixClientPeg = require("./MatrixClientPeg"); import { _t } from './languageHandler'; module.exports = { + usersTypingApartFromMeAndIgnored: function(room) { + return this.usersTyping( + room, [MatrixClientPeg.get().credentials.userId].concat(MatrixClientPeg.get().getIgnoredUsers()) + ); + }, + usersTypingApartFromMe: function(room) { return this.usersTyping( room, [MatrixClientPeg.get().credentials.userId] diff --git a/src/autocomplete/CommandProvider.js b/src/autocomplete/CommandProvider.js index 6f2f68b121..011ad0a7dc 100644 --- a/src/autocomplete/CommandProvider.js +++ b/src/autocomplete/CommandProvider.js @@ -94,6 +94,16 @@ const COMMANDS = [ args: ' ', description: 'Verifies a user, device, and pubkey tuple', }, + { + command: '/ignore', + args: '', + description: 'Ignores a user, hiding their messages from you', + }, + { + command: '/unignore', + args: '', + description: 'Stops ignoring a user, showing their messages going forward', + }, // Omitting `/markdown` as it only seems to apply to OldComposer ]; diff --git a/src/autocomplete/EmojiProvider.js b/src/autocomplete/EmojiProvider.js index 16e0347a5b..35a2ee6b53 100644 --- a/src/autocomplete/EmojiProvider.js +++ b/src/autocomplete/EmojiProvider.js @@ -25,6 +25,7 @@ import {PillCompletion} from './Components'; import type {SelectionRange, Completion} from './Autocompleter'; import _uniq from 'lodash/uniq'; import _sortBy from 'lodash/sortBy'; +import UserSettingsStore from '../UserSettingsStore'; import EmojiData from '../stripped-emoji.json'; @@ -96,6 +97,10 @@ export default class EmojiProvider extends AutocompleteProvider { } async getCompletions(query: string, selection: SelectionRange) { + if (UserSettingsStore.getSyncedSetting("MessageComposerInput.dontSuggestEmoji")) { + return []; // don't give any suggestions if the user doesn't want them + } + const EmojiText = sdk.getComponent('views.elements.EmojiText'); let completions = []; diff --git a/src/components/structures/LoggedInView.js b/src/components/structures/LoggedInView.js index 95a9329fdc..c6ac8e58cd 100644 --- a/src/components/structures/LoggedInView.js +++ b/src/components/structures/LoggedInView.js @@ -131,6 +131,9 @@ export default React.createClass({ useCompactLayout: event.getContent().useCompactLayout, }); } + if (event.getType() === "m.ignored_user_list") { + dis.dispatch({action: "ignore_state_changed"}); + } }, _onKeyDown: function(ev) { diff --git a/src/components/structures/MatrixChat.js b/src/components/structures/MatrixChat.js index 6f18901c4c..4787d76be1 100644 --- a/src/components/structures/MatrixChat.js +++ b/src/components/structures/MatrixChat.js @@ -672,7 +672,6 @@ module.exports = React.createClass({ page_type: PageTypes.RoomView, thirdPartyInvite: roomInfo.third_party_invite, roomOobData: roomInfo.oob_data, - autoJoin: roomInfo.auto_join, }; if (roomInfo.room_alias) { diff --git a/src/components/structures/MessagePanel.js b/src/components/structures/MessagePanel.js index e5884973c6..49894dcaa7 100644 --- a/src/components/structures/MessagePanel.js +++ b/src/components/structures/MessagePanel.js @@ -241,6 +241,10 @@ module.exports = React.createClass({ // TODO: Implement granular (per-room) hide options _shouldShowEvent: function(mxEv) { + if (mxEv.sender && MatrixClientPeg.get().isUserIgnored(mxEv.sender.userId)) { + return false; // ignored = no show (only happens if the ignore happens after an event was received) + } + const EventTile = sdk.getComponent('rooms.EventTile'); if (!EventTile.haveTileForEvent(mxEv)) { return false; // no tile = no show @@ -361,8 +365,13 @@ module.exports = React.createClass({ summarisedEvents.push(collapsedMxEv); } + let highlightInMels = false; + // At this point, i = the index of the last event in the summary sequence let eventTiles = summarisedEvents.map((e) => { + if (e.getId() === this.props.highlightedEventId) { + highlightInMels = true; + } // In order to prevent DateSeparators from appearing in the expanded form // of MemberEventListSummary, render each member event as if the previous // one was itself. This way, the timestamp of the previous event === the @@ -376,15 +385,13 @@ module.exports = React.createClass({ eventTiles = null; } - ret.push( - - {eventTiles} - - ); + ret.push( + {eventTiles} + ); if (readMarkerInMels) { ret.push(this._getReadMarkerTile(visible)); @@ -549,6 +556,9 @@ module.exports = React.createClass({ if (!r.userId || r.type !== "m.read" || r.userId === myUserId) { return; // ignore non-read receipts and receipts from self. } + if (MatrixClientPeg.get().isUserIgnored(r.userId)) { + return; // ignore ignored users + } let member = room.getMember(r.userId); if (!member) { return; // ignore unknown user IDs diff --git a/src/components/structures/RoomStatusBar.js b/src/components/structures/RoomStatusBar.js index 2a81605a78..68b7249d3b 100644 --- a/src/components/structures/RoomStatusBar.js +++ b/src/components/structures/RoomStatusBar.js @@ -121,7 +121,7 @@ module.exports = React.createClass({ onRoomMemberTyping: function(ev, member) { this.setState({ - usersTyping: WhoIsTyping.usersTypingApartFromMe(this.props.room), + usersTyping: WhoIsTyping.usersTypingApartFromMeAndIgnored(this.props.room), }); }, diff --git a/src/components/structures/RoomView.js b/src/components/structures/RoomView.js index 2a6cf0aee4..e0332b1b19 100644 --- a/src/components/structures/RoomView.js +++ b/src/components/structures/RoomView.js @@ -123,6 +123,9 @@ module.exports = React.createClass({ // store the error here. roomLoadError: null, + // Have we sent a request to join the room that we're waiting to complete? + joining: false, + // this is true if we are fully scrolled-down, and are looking at // the end of the live timeline. It has the effect of hiding the // 'scroll to bottom' knob, among a couple of other things. @@ -185,10 +188,6 @@ module.exports = React.createClass({ shouldPeek: RoomViewStore.shouldPeek(), }; - // finished joining, start waiting for a room and show a spinner. See onRoom. - newState.waitingForRoom = this.state.joining && !newState.joining && - !RoomViewStore.getJoinError(); - // Temporary logging to diagnose https://github.com/vector-im/riot-web/issues/4307 console.log( 'RVS update:', @@ -197,7 +196,6 @@ module.exports = React.createClass({ 'loading?', newState.roomLoading, 'joining?', newState.joining, 'initial?', initial, - 'waiting?', newState.waitingForRoom, 'shouldPeek?', newState.shouldPeek, ); @@ -650,7 +648,6 @@ module.exports = React.createClass({ } this.setState({ room: room, - waitingForRoom: false, }, () => { this._onRoomLoaded(room); }); @@ -706,14 +703,7 @@ module.exports = React.createClass({ onRoomMemberMembership: function(ev, member, oldMembership) { if (member.userId == MatrixClientPeg.get().credentials.userId) { - - if (member.membership === 'join') { - this.setState({ - waitingForRoom: false, - }); - } else { - this.forceUpdate(); - } + this.forceUpdate(); } }, @@ -1463,10 +1453,6 @@ module.exports = React.createClass({ const Loader = sdk.getComponent("elements.Spinner"); const TimelinePanel = sdk.getComponent("structures.TimelinePanel"); - // Whether the preview bar spinner should be shown. We do this when joining or - // when waiting for a room to be returned by js-sdk when joining - const previewBarSpinner = this.state.joining || this.state.waitingForRoom; - if (!this.state.room) { if (this.state.roomLoading || this.state.peekLoading) { return ( @@ -1500,7 +1486,7 @@ module.exports = React.createClass({ onRejectClick={ this.onRejectThreepidInviteButtonClicked } canPreview={ false } error={ this.state.roomLoadError } roomAlias={roomAlias} - spinner={previewBarSpinner} + spinner={this.state.joining} inviterName={inviterName} invitedEmail={invitedEmail} room={this.state.room} @@ -1543,7 +1529,7 @@ module.exports = React.createClass({ onRejectClick={ this.onRejectButtonClicked } inviterName={ inviterName } canPreview={ false } - spinner={previewBarSpinner} + spinner={this.state.joining} room={this.state.room} /> @@ -1618,7 +1604,7 @@ module.exports = React.createClass({ this.props.onUnignored(this.props.userId)); + } else this.props.onUnignored(this.props.userId); + }, + + render: function() { + return ( +
  • + + { _t("Unignore") } + + { this.props.userId } +
  • + ); + }, +}); + module.exports = React.createClass({ displayName: 'UserSettings', @@ -207,6 +239,7 @@ module.exports = React.createClass({ vectorVersion: undefined, rejectingInvites: false, mediaDevices: null, + ignoredUsers: [], }; }, @@ -228,6 +261,7 @@ module.exports = React.createClass({ } this._refreshMediaDevices(); + this._refreshIgnoredUsers(); // Bulk rejecting invites: // /sync won't have had time to return when UserSettings re-renders from state changes, so getRooms() @@ -346,9 +380,22 @@ module.exports = React.createClass({ }); }, + _refreshIgnoredUsers: function(userIdUnignored=null) { + const users = MatrixClientPeg.get().getIgnoredUsers(); + if (userIdUnignored) { + const index = users.indexOf(userIdUnignored); + if (index !== -1) users.splice(index, 1); + } + this.setState({ + ignoredUsers: users, + }); + }, + onAction: function(payload) { if (payload.action === "notifier_enabled") { this.forceUpdate(); + } else if (payload.action === "ignore_state_changed") { + this._refreshIgnoredUsers(); } }, @@ -796,6 +843,26 @@ module.exports = React.createClass({ ); }, + _renderIgnoredUsers: function() { + if (this.state.ignoredUsers.length > 0) { + const updateHandler = this._refreshIgnoredUsers; + return ( +
    +

    { _t("Ignored Users") }

    +
    +
      + {this.state.ignoredUsers.map(function(userId) { + return (); + })} +
    +
    +
    + ); + } else return (
    ); + }, + _renderLocalSetting: function(setting) { // TODO: this ought to be a separate component so that we don't need // to rebind the onChange each time we render @@ -1302,6 +1369,7 @@ module.exports = React.createClass({ {this._renderWebRtcSettings()} {this._renderDevicesPanel()} {this._renderCryptoInfo()} + {this._renderIgnoredUsers()} {this._renderBulkOptions()} {this._renderBugReport()} diff --git a/src/components/views/elements/ManageIntegsButton.js b/src/components/views/elements/ManageIntegsButton.js index ac562a7c20..4434d1368d 100644 --- a/src/components/views/elements/ManageIntegsButton.js +++ b/src/components/views/elements/ManageIntegsButton.js @@ -48,7 +48,7 @@ export default class ManageIntegsButton extends React.Component { this.forceUpdate(); }, (err) => { this.setState({ scalarError: err}); - console.error(err); + console.error('Error whilst initialising scalarClient for ManageIntegsButton', err); }); } } diff --git a/src/components/views/elements/MemberEventListSummary.js b/src/components/views/elements/MemberEventListSummary.js index 842b44b793..689599da0b 100644 --- a/src/components/views/elements/MemberEventListSummary.js +++ b/src/components/views/elements/MemberEventListSummary.js @@ -34,11 +34,13 @@ module.exports = React.createClass({ threshold: React.PropTypes.number, // Called when the MELS expansion is toggled onToggle: React.PropTypes.func, + // Whether or not to begin with state.expanded=true + startExpanded: React.PropTypes.bool, }, getInitialState: function() { return { - expanded: false, + expanded: Boolean(this.props.startExpanded), }; }, @@ -376,7 +378,7 @@ module.exports = React.createClass({ return items[0]; } else if (remaining) { items = items.slice(0, itemLimit); - return (remaining > 1) + return (remaining > 1) ? _t("%(items)s and %(remaining)s others", { items: items.join(', '), remaining: remaining } ) : _t("%(items)s and one other", { items: items.join(', ') }); } else { diff --git a/src/components/views/messages/UnknownBody.js b/src/components/views/messages/UnknownBody.js index 1b6f6426e5..346d157e24 100644 --- a/src/components/views/messages/UnknownBody.js +++ b/src/components/views/messages/UnknownBody.js @@ -23,9 +23,14 @@ module.exports = React.createClass({ displayName: 'UnknownBody', render: function() { + let tooltip = _t("Removed or unknown message type"); + if (this.props.mxEvent.isRedacted()) { + tooltip = _t("Message removed by %(userId)s", {userId: this.props.mxEvent.getSender()}); + } + const text = this.props.mxEvent.getContent().body; return ( - + {text} ); diff --git a/src/components/views/rooms/MemberInfo.js b/src/components/views/rooms/MemberInfo.js index 0446acb4a0..f705cf97d2 100644 --- a/src/components/views/rooms/MemberInfo.js +++ b/src/components/views/rooms/MemberInfo.js @@ -62,6 +62,7 @@ module.exports = withMatrixClient(React.createClass({ updating: 0, devicesLoading: true, devices: null, + isIgnoring: false, }; }, @@ -81,6 +82,8 @@ module.exports = withMatrixClient(React.createClass({ cli.on("RoomState.events", this.onRoomStateEvents); cli.on("RoomMember.name", this.onRoomMemberName); cli.on("accountData", this.onAccountData); + + this._checkIgnoreState(); }, componentDidMount: function() { @@ -111,6 +114,11 @@ module.exports = withMatrixClient(React.createClass({ } }, + _checkIgnoreState: function() { + const isIgnoring = this.props.matrixClient.isUserIgnored(this.props.member.userId); + this.setState({isIgnoring: isIgnoring}); + }, + _disambiguateDevices: function(devices) { var names = Object.create(null); for (var i = 0; i < devices.length; i++) { @@ -225,6 +233,18 @@ module.exports = withMatrixClient(React.createClass({ }); }, + onIgnoreToggle: function() { + const ignoredUsers = this.props.matrixClient.getIgnoredUsers(); + if (this.state.isIgnoring) { + const index = ignoredUsers.indexOf(this.props.member.userId); + if (index !== -1) ignoredUsers.splice(index, 1); + } else { + ignoredUsers.push(this.props.member.userId); + } + + this.props.matrixClient.setIgnoredUsers(ignoredUsers).then(() => this.setState({isIgnoring: !this.state.isIgnoring})); + }, + onKick: function() { const membership = this.props.member.membership; const kickLabel = membership === "invite" ? _t("Disinvite") : _t("Kick"); @@ -607,6 +627,29 @@ module.exports = withMatrixClient(React.createClass({ ); }, + _renderUserOptions: function() { + // Only allow the user to ignore the user if its not ourselves + let ignoreButton = null; + if (this.props.member.userId !== this.props.matrixClient.getUserId()) { + ignoreButton = ( + + {this.state.isIgnoring ? _t("Unignore") : _t("Ignore")} + + ); + } + + if (!ignoreButton) return null; + + return ( +
    +

    { _t("User Options") }

    +
    + {ignoreButton} +
    +
    + ); + }, + render: function() { var startChat, kickButton, banButton, muteButton, giveModButton, spinner; if (this.props.member.userId !== this.props.matrixClient.credentials.userId) { @@ -756,6 +799,8 @@ module.exports = withMatrixClient(React.createClass({
    + { this._renderUserOptions() } + { adminTools } { startChat } diff --git a/src/components/views/rooms/MemberList.js b/src/components/views/rooms/MemberList.js index 706231dcf4..33d05235bf 100644 --- a/src/components/views/rooms/MemberList.js +++ b/src/components/views/rooms/MemberList.js @@ -332,7 +332,7 @@ module.exports = React.createClass({ return; } memberList.push( - + ); }); } diff --git a/src/components/views/rooms/RoomHeader.js b/src/components/views/rooms/RoomHeader.js index 499fdf21cc..afba4eba1e 100644 --- a/src/components/views/rooms/RoomHeader.js +++ b/src/components/views/rooms/RoomHeader.js @@ -56,7 +56,7 @@ module.exports = React.createClass({ editing: false, inRoom: false, onSaveClick: function() {}, - onCancelClick: function() {}, + onCancelClick: null, }; }, @@ -324,7 +324,7 @@ module.exports = React.createClass({ let rightRow; let manageIntegsButton; - if(this.props.room && this.props.room.roomId) { + if(this.props.room && this.props.room.roomId && this.props.inRoom) { manageIntegsButton = ; diff --git a/src/createRoom.js b/src/createRoom.js index 944c6a70a1..ffe3a85c4e 100644 --- a/src/createRoom.js +++ b/src/createRoom.js @@ -79,12 +79,6 @@ function createRoom(opts) { const modal = Modal.createDialog(Loader, null, 'mx_Dialog_spinner'); let roomId; - if (opts.andView) { - // We will possibly have a successful join, indicate as such - dis.dispatch({ - action: 'will_join', - }); - } return client.createRoom(createOpts).finally(function() { modal.close(); }).then(function(res) { @@ -104,8 +98,10 @@ function createRoom(opts) { action: 'view_room', room_id: roomId, should_peek: false, - // Creating a room will have joined us to the room - joined: true, + // Creating a room will have joined us to the room, + // so we are expecting the room to come down the sync + // stream, if it hasn't already. + joining: true, }); } return roomId; diff --git a/src/i18n/strings/cs.json b/src/i18n/strings/cs.json index 7951779e75..02153b4ecd 100644 --- a/src/i18n/strings/cs.json +++ b/src/i18n/strings/cs.json @@ -98,10 +98,8 @@ "Hide removed messages": "Skrýt odstraněné zprávy", "Always show message timestamps": "Vždy zobrazovat časové značky zpráv", "Authentication": "Ověření", - "all room members": "všichni členové místnosti", "and": "a", "A new password must be entered.": "Musíte zadat nové heslo.", - "anyone": "kdokoliv", "An error has occurred.": "Nastala chyba.", "Anyone": "Kdokoliv", "Are you sure?": "Určitě?", diff --git a/src/i18n/strings/da.json b/src/i18n/strings/da.json index 11d7bffdd3..b627fe74c5 100644 --- a/src/i18n/strings/da.json +++ b/src/i18n/strings/da.json @@ -56,14 +56,10 @@ "Add phone number": "Tilføj telefonnummer", "Admin": "Administrator", "Advanced": "Avanceret", - "all room members": "Alle rum medlemmer", - "all room members, from the point they are invited": "Alle rum medlemmer, siden invitations-tidspunkt", - "all room members, from the point they joined": "Alle rum medlemmer, siden de deltog", "an address": "en adresse", "and": "og", "An email has been sent to": "En e-mail blev sendt til", "answered the call.": "svarede på kaldet", - "anyone": "alle", "Anyone who knows the room's link, apart from guests": "Alle der kender link til rummet, bortset fra gæster", "Anyone who knows the room's link, including guests": "Alle der kender link til rummet, inklusiv gæster", "Are you sure you want to leave the room?": "Er du sikker på du vil forlade rummet?", diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index 43feb28a56..b459e2e289 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -56,10 +56,8 @@ "accepted the invitation for": "Akzeptierte die Einladung für", "Add email address": "E-Mail-Adresse hinzufügen", "Advanced": "Erweitert", - "all room members, from the point they joined": "alle Raum-Mitglieder (ab dem Zeitpunkt, an dem sie beigetreten sind)", "and": "und", "An email has been sent to": "Eine E-Mail wurde gesendet an", - "anyone": "Jeder", "Anyone who knows the room's link, apart from guests": "Alle, denen der Raum-Link bekannt ist (ausgenommen Gäste)", "Anyone who knows the room's link, including guests": "Alle, denen der Raum-Link bekannt ist (auch Gäste)", "Are you sure you want to leave the room?": "Bist du sicher, dass du den Raum verlassen willst?", @@ -99,8 +97,6 @@ "Add phone number": "Telefonnummer hinzufügen", "an address": "an Adresse", "Your password was successfully changed. You will not receive push notifications on other devices until you log back in to them": "Dein Passwort wurde erfolgreich geändert. Du wirst erst Benachrichtigungen auf anderen Geräten empfangen können, wenn du dich dort erneut anmeldest", - "all room members": "Alle Raum-Mitglieder", - "all room members, from the point they are invited": "alle Raum-Mitglieder (ab dem Zeitpunkt, an dem sie eingeladen wurden)", "answered the call.": "beantwortete den Anruf.", "Can't load user settings": "Benutzereinstellungen können nicht geladen werden", "changed name": "änderte Namen", @@ -149,7 +145,6 @@ "left the room": "verließ den Raum", "Logged in as": "Angemeldet als", "Logout": "Abmelden", - "made future room history visible to": "mache kommende Raum-Historie sichtbar für", "Manage Integrations": "Integrationen verwalten", "Members only": "Nur Mitglieder", "Mobile phone number": "Mobiltelefonnummer", @@ -245,7 +240,6 @@ "Unban": "Verbannung aufheben", "Unencrypted room": "Unverschlüsselter Raum", "unknown error code": "Unbekannter Fehlercode", - "unknown": "unbekannt", "Upload avatar": "Profilbild hochladen", "uploaded a file": "hat eine Datei hochgeladen", "Upload Files": "Dateien hochladen", @@ -366,7 +360,11 @@ "%(targetName)s joined the room.": "%(targetName)s hat den Raum betreten.", "%(senderName)s kicked %(targetName)s.": "%(senderName)s hat %(targetName)s aus dem Raum gekickt.", "%(targetName)s left the room.": "%(targetName)s hat den Raum verlassen.", - "%(senderName)s made future room history visible to": "%(senderName)s hat den zukünftigen Chatverlauf sichtbar gemacht für", + "%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s hat den zukünftigen Chatverlauf sichtbar gemacht für alle Raum-Mitglieder (ab dem Zeitpunkt, an dem sie eingeladen wurden).", + "%(senderName)s made future room history visible to all room members, from the point they joined.": "%(senderName)s hat den zukünftigen Chatverlauf sichtbar gemacht für alle Raum-Mitglieder (ab dem Zeitpunkt, an dem sie beigetreten sind).", + "%(senderName)s made future room history visible to all room members.": "%(senderName)s hat den zukünftigen Chatverlauf sichtbar gemacht für Alle Raum-Mitglieder.", + "%(senderName)s made future room history visible to anyone.": "%(senderName)s hat den zukünftigen Chatverlauf sichtbar gemacht für Jeder.", + "%(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", @@ -927,5 +925,7 @@ "Robot check is currently unavailable on desktop - please use a web browser": "In der Desktop-Version kann derzeit nicht geprüft werden, ob ein Benutzer ein Roboter ist. Bitte einen Webbrowser verwenden", "%(widgetName)s widget modified by %(senderName)s": "Das Widget '%(widgetName)s' wurde von %(senderName)s bearbeitet", "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(weekDayName)s, %(day)s %(monthName)s %(fullYear)s", - "%(weekDayName)s, %(monthName)s %(day)s": "%(weekDayName)s, %(day)s %(monthName)s" + "%(weekDayName)s, %(monthName)s %(day)s": "%(weekDayName)s, %(day)s %(monthName)s", + "Copied!": "Kopiert!", + "Failed to copy": "Kopieren fehlgeschlagen" } diff --git a/src/i18n/strings/el.json b/src/i18n/strings/el.json index 2daef8a94f..c0b0e76ec8 100644 --- a/src/i18n/strings/el.json +++ b/src/i18n/strings/el.json @@ -43,15 +43,11 @@ "%(senderName)s banned %(targetName)s.": "Ο χρήστης %(senderName)s έδιωξε τον χρήστη %(targetName)s.", "Autoplay GIFs and videos": "Αυτόματη αναπαραγωγή GIFs και βίντεο", "Bug Report": "Αναφορά σφάλματος", - "anyone": "οποιοσδήποτε", "Anyone who knows the room's link, apart from guests": "Oποιοσδήποτε", - "all room members, from the point they joined": "όλα τα μέλη, από τη στιγμή που συνδέθηκαν", "%(items)s and %(lastItem)s": "%(items)s %(lastItem)s", "A text message has been sent to +%(msisdn)s. Please enter the verification code it contains": "Ένα μήνυμα στάλθηκε στο +%(msisdn)s. Παρακαλώ γράψε τον κωδικό επαλήθευσης που περιέχει", "Access Token:": "Κωδικός πρόσβασης:", "Always show message timestamps": "Εμφάνιση πάντα της ένδειξης ώρας στα μηνύματα", - "all room members": "όλα τα μέλη", - "all room members, from the point they are invited": "όλα τα μέλη, από τη στιγμή που προσκλήθηκαν", "an address": "μία διεύθηνση", "%(items)s and %(remaining)s others": "%(items)s και %(remaining)s ακόμα", "%(items)s and one other": "%(items)s και ένας ακόμα", @@ -380,7 +376,6 @@ "unknown caller": "άγνωστος καλών", "unknown device": "άγνωστη συσκευή", "Unknown room %(roomId)s": "Άγνωστο δωμάτιο %(roomId)s", - "unknown": "άγνωστο", "Unmute": "Άρση σίγασης", "Unnamed Room": "Ανώνυμο δωμάτιο", "Unrecognised command:": "Μη αναγνωρίσιμη εντολή:", @@ -551,7 +546,11 @@ "Invites user with given id to current room": "Προσκαλεί τον χρήστη με το δοσμένο αναγνωριστικό στο τρέχον δωμάτιο", "'%(alias)s' is not a valid format for an address": "Το '%(alias)s' δεν είναι μια έγκυρη μορφή διεύθυνσης", "'%(alias)s' is not a valid format for an alias": "Το '%(alias)s' δεν είναι μια έγκυρη μορφή ψευδώνυμου", - "%(senderName)s made future room history visible to": "Ο %(senderName)s έκανε το μελλοντικό ιστορικό του δωματίου δημόσιο", + "%(senderName)s made future room history visible to all room members, from the point they are invited.": "Ο %(senderName)s έκανε το μελλοντικό ιστορικό του δωματίου δημόσιο όλα τα μέλη, από τη στιγμή που προσκλήθηκαν.", + "%(senderName)s made future room history visible to all room members, from the point they joined.": "Ο %(senderName)s έκανε το μελλοντικό ιστορικό του δωματίου δημόσιο όλα τα μέλη, από τη στιγμή που συνδέθηκαν.", + "%(senderName)s made future room history visible to all room members.": "Ο %(senderName)s έκανε το μελλοντικό ιστορικό του δωματίου δημόσιο όλα τα μέλη.", + "%(senderName)s made future room history visible to anyone.": "Ο %(senderName)s έκανε το μελλοντικό ιστορικό του δωματίου δημόσιο οποιοσδήποτε.", + "%(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": "Πρέπει να βλέπετε ένα δωμάτιο", diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 4ad7b3f1df..747f8100ad 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -31,9 +31,6 @@ "Always show message timestamps": "Always show message timestamps", "Authentication": "Authentication", "Alias (optional)": "Alias (optional)", - "all room members": "all room members", - "all room members, from the point they are invited": "all room members, from the point they are invited", - "all room members, from the point they joined": "all room members, from the point they joined", "and": "and", "%(items)s and %(remaining)s others": "%(items)s and %(remaining)s others", "%(items)s and one other": "%(items)s and one other", @@ -46,7 +43,6 @@ "An email has been sent to": "An email has been sent to", "A new password must be entered.": "A new password must be entered.", "%(senderName)s answered the call.": "%(senderName)s answered the call.", - "anyone": "anyone", "An error has occurred.": "An error has occurred.", "Anyone": "Anyone", "Anyone who knows the room's link, apart from guests": "Anyone who knows the room's link, apart from guests", @@ -264,6 +260,16 @@ "Kick": "Kick", "Kicks user with given id": "Kicks user with given id", "Labs": "Labs", + "Ignored Users": "Ignored Users", + "Ignore": "Ignore", + "Unignore": "Unignore", + "User Options": "User Options", + "You are now ignoring %(userId)s": "You are now ignoring %(userId)s", + "You are no longer ignoring %(userId)s": "You are no longer ignoring %(userId)s", + "Unignored user": "Unignored user", + "Ignored user": "Ignored user", + "Stops ignoring a user, showing their messages going forward": "Stops ignoring a user, showing their messages going forward", + "Ignores a user, hiding their messages from you": "Ignores a user, hiding their messages from you", "Last seen": "Last seen", "Leave room": "Leave room", "left and rejoined": "left and rejoined", @@ -276,13 +282,18 @@ "Login as guest": "Login as guest", "Logout": "Logout", "Low priority": "Low priority", - "%(senderName)s made future room history visible to": "%(senderName)s made future room history visible to", + "%(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.", + "%(senderName)s made future room history visible to all room members, from the point they joined.": "%(senderName)s made future room history visible to all room members, from the point they joined.", + "%(senderName)s made future room history visible to all room members.": "%(senderName)s made future room history visible to all room members.", + "%(senderName)s made future room history visible to anyone.": "%(senderName)s made future room history visible to anyone.", + "%(senderName)s made future room history visible to unknown (%(visibility)s).": "%(senderName)s made future room history visible to unknown (%(visibility)s).", "Manage Integrations": "Manage Integrations", "Markdown is disabled": "Markdown is disabled", "Markdown is enabled": "Markdown is enabled", "matrix-react-sdk version:": "matrix-react-sdk version:", "Matrix Apps": "Matrix Apps", "Members only": "Members only", + "Disable Emoji suggestions while typing": "Disable Emoji suggestions while typing", "Message not sent due to unknown devices being present": "Message not sent due to unknown devices being present", "Missing room_id in request": "Missing room_id in request", "Missing user_id in request": "Missing user_id in request", @@ -496,7 +507,6 @@ "unknown error code": "unknown error code", "Unknown room %(roomId)s": "Unknown room %(roomId)s", "Unknown (user, device) pair:": "Unknown (user, device) pair:", - "unknown": "unknown", "Unmute": "Unmute", "Unnamed Room": "Unnamed Room", "Unrecognised command:": "Unrecognised command:", @@ -827,6 +837,7 @@ "Autocomplete Delay (ms):": "Autocomplete Delay (ms):", "This Home server does not support groups": "This Home server does not support groups", "Loading device info...": "Loading device info...", + "Message removed by %(userId)s": "Message removed by %(userId)s", "Groups": "Groups", "Create a new group": "Create a new group", "Create Group": "Create Group", diff --git a/src/i18n/strings/en_US.json b/src/i18n/strings/en_US.json index 28ea56943e..4377251beb 100644 --- a/src/i18n/strings/en_US.json +++ b/src/i18n/strings/en_US.json @@ -26,9 +26,6 @@ "Hide removed messages": "Hide removed messages", "Always show message timestamps": "Always show message timestamps", "Authentication": "Authentication", - "all room members": "all room members", - "all room members, from the point they are invited": "all room members, from the point they are invited", - "all room members, from the point they joined": "all room members, from the point they joined", "an address": "an address", "and": "and", "%(items)s and %(remaining)s others": "%(items)s and %(remaining)s others", @@ -42,7 +39,6 @@ "An email has been sent to": "An email has been sent to", "A new password must be entered.": "A new password must be entered.", "%(senderName)s answered the call.": "%(senderName)s answered the call.", - "anyone": "anyone", "An error has occurred.": "An error has occurred.", "Anyone": "Anyone", "Anyone who knows the room's link, apart from guests": "Anyone who knows the room's link, apart from guests", @@ -231,6 +227,16 @@ "Kick": "Kick", "Kicks user with given id": "Kicks user with given id", "Labs": "Labs", + "Ignored Users": "Ignored Users", + "Ignore": "Ignore", + "Unignore": "Unignore", + "User Options": "User Options", + "You are now ignoring %(userId)s": "You are now ignoring %(userId)s", + "You are no longer ignoring %(userId)s": "You are no longer ignoring %(userId)s", + "Unignored user": "Unignored user", + "Ignored user": "Ignored user", + "Stops ignoring a user, showing their messages going forward": "Stops ignoring a user, showing their messages going forward", + "Ignores a user, hiding their messages from you": "Ignores a user, hiding their messages from you", "Leave room": "Leave room", "left and rejoined": "left and rejoined", "left": "left", @@ -242,13 +248,18 @@ "Login as guest": "Login as guest", "Logout": "Logout", "Low priority": "Low priority", - "%(senderName)s made future room history visible to": "%(senderName)s made future room history visible to", + "%(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.", + "%(senderName)s made future room history visible to all room members, from the point they joined.": "%(senderName)s made future room history visible to all room members, from the point they joined.", + "%(senderName)s made future room history visible to all room members.": "%(senderName)s made future room history visible to all room members.", + "%(senderName)s made future room history visible to anyone.": "%(senderName)s made future room history visible to anyone.", + "%(senderName)s made future room history visible to unknown (%(visibility)s).": "%(senderName)s made future room history visible to unknown (%(visibility)s).", "Manage Integrations": "Manage Integrations", "Markdown is disabled": "Markdown is disabled", "Markdown is enabled": "Markdown is enabled", "matrix-react-sdk version:": "matrix-react-sdk version:", "Matrix Apps": "Matrix Apps", "Members only": "Members only", + "Disable Emoji suggestions while typing": "Disable Emoji suggestions while typing", "Message not sent due to unknown devices being present": "Message not sent due to unknown devices being present", "Missing room_id in request": "Missing room_id in request", "Missing user_id in request": "Missing user_id in request", @@ -433,7 +444,6 @@ "unknown error code": "unknown error code", "Unknown room %(roomId)s": "Unknown room %(roomId)s", "Unknown (user, device) pair:": "Unknown (user, device) pair:", - "unknown": "unknown", "Unmute": "Unmute", "Unrecognised command:": "Unrecognized command:", "Unrecognised room alias:": "Unrecognized room alias:", @@ -838,6 +848,7 @@ "Autocomplete Delay (ms):": "Autocomplete Delay (ms):", "This Home server does not support groups": "This Home server does not support groups", "Loading device info...": "Loading device info...", + "Message removed by %(userId)s": "Message removed by %(userId)s", "Groups": "Groups", "Create a new group": "Create a new group", "Create Group": "Create Group", diff --git a/src/i18n/strings/es.json b/src/i18n/strings/es.json index 20eb1af38b..179bd047b7 100644 --- a/src/i18n/strings/es.json +++ b/src/i18n/strings/es.json @@ -12,9 +12,6 @@ "Algorithm": "Algoritmo", "Always show message timestamps": "Siempre mostrar la hora del mensaje", "Authentication": "Autenticación", - "all room members": "Todos los miembros de la sala", - "all room members, from the point they are invited": "Todos los miembros de la sala, desde el momento en que son invitados", - "all room members, from the point they joined": "Todos los miembros de la sala, desde el momento en que se han unido", "an address": "una dirección", "and": "y", "%(items)s and %(remaining)s others": "%(items)s y %(remaining)s otros", @@ -28,7 +25,6 @@ "An email has been sent to": "Un correo ha sido enviado a", "A new password must be entered.": "Una nueva clave debe ser ingresada.", "%(senderName)s answered the call.": "%(senderName)s atendió la llamada.", - "anyone": "nadie", "An error has occurred.": "Un error ha ocurrido.", "Anyone who knows the room's link, apart from guests": "Cualquiera que sepa el enlace de la sala, salvo invitados", "Anyone who knows the room's link, including guests": "Cualquiera que sepa del enlace de la sala, incluyendo los invitados", @@ -254,7 +250,11 @@ "Jump to first unread message.": "Ir al primer mensaje sin leer.", "Last seen": "Visto por última vez", "Level:": "Nivel:", - "%(senderName)s made future room history visible to": "%(senderName)s ha configurado el historial de la sala visible para", + "%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s ha configurado el historial de la sala visible para Todos los miembros de la sala, desde el momento en que son invitados.", + "%(senderName)s made future room history visible to all room members, from the point they joined.": "%(senderName)s ha configurado el historial de la sala visible para Todos los miembros de la sala, desde el momento en que se han unido.", + "%(senderName)s made future room history visible to all room members.": "%(senderName)s ha configurado el historial de la sala visible para Todos los miembros de la sala.", + "%(senderName)s made future room history visible to anyone.": "%(senderName)s ha configurado el historial de la sala visible para nadie.", + "%(senderName)s made future room history visible to unknown (%(visibility)s).": "%(senderName)s ha configurado el historial de la sala visible para desconocido (%(visibility)s).", "a room": "una sala", "Something went wrong!": "¡Algo ha fallado!", "were banned": "fueron expulsados", @@ -564,7 +564,6 @@ "unknown device": "dispositivo desconocido", "Unknown room %(roomId)s": "Sala desconocida %(roomId)s", "Unknown (user, device) pair:": "Pareja desconocida (usuario, dispositivo):", - "unknown": "desconocido", "Unnamed Room": "Sala sin nombre", "Unverified": "Sin verificar", "Uploading %(filename)s and %(count)s others|zero": "Subiendo %(filename)s", diff --git a/src/i18n/strings/eu.json b/src/i18n/strings/eu.json index 5b00606dda..98f7547b6a 100644 --- a/src/i18n/strings/eu.json +++ b/src/i18n/strings/eu.json @@ -180,15 +180,11 @@ "Camera": "Kamera", "Hide removed messages": "Ezkutatu kendutako mezuak", "Alias (optional)": "Ezizena (aukerazkoa)", - "all room members": "gelako kide guztiak", - "all room members, from the point they are invited": "gelako kide guztiak, gonbidapena egiten zaienetik", - "all room members, from the point they joined": "gelako kide guztiak, elkartzen direnetik", "and one other...": "eta beste bat...", "%(names)s and %(lastPerson)s are typing": "%(names)s eta %(lastPerson)s idazten ari dira", "%(names)s and one other are typing": "%(names)s eta beste inor idazten ari dira", "%(names)s and %(count)s others are typing": "%(names)s eta beste %(count)s idazten ari dira", "An email has been sent to": "E-mail bat bidali da hona:", - "anyone": "edonor", "An error has occurred.": "Errore bat gertatu da.", "Are you sure?": "Ziur zaude?", "Are you sure you want to leave the room '%(roomName)s'?": "Ziur '%(roomName)s' gela utzi nahi duzula?", @@ -345,7 +341,11 @@ "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": "%(senderName)s erabiltzaileak etorkizuneko gelaren historiala ikusgai jarri du hauentzat:", + "%(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 hauentzat gelako kide guztiak, 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 hauentzat gelako kide guztiak, elkartzen direnetik.", + "%(senderName)s made future room history visible to all room members.": "%(senderName)s erabiltzaileak etorkizuneko gelaren historiala ikusgai jarri du hauentzat gelako kide guztiak.", + "%(senderName)s made future room history visible to anyone.": "%(senderName)s erabiltzaileak etorkizuneko gelaren historiala ikusgai jarri du hauentzat edonor.", + "%(senderName)s made future room history visible to unknown (%(visibility)s).": "%(senderName)s erabiltzaileak etorkizuneko gelaren historiala ikusgai jarri du hauentzat ezezaguna (%(visibility)s).", "Manage Integrations": "Kudeatu interakzioak", "Markdown is disabled": "Markdown desgaituta dago", "Markdown is enabled": "Markdown gaituta dago", @@ -519,7 +519,6 @@ "Unknown command": "Agindu ezezaguna", "Unknown room %(roomId)s": "%(roomId)s gela ezezaguna da", "Unknown (user, device) pair:": "Erabiltzaile eta gailu bikote ezezaguna:", - "unknown": "ezezaguna", "Unmute": "Audioa aktibatu", "Unnamed Room": "Izen gabeko gela", "Unrecognised command:": "Agindu ezezaguna:", @@ -851,5 +850,10 @@ "Verifies a user, device, and pubkey tuple": "Erabiltzaile, gailu eta gako publiko multzoa egiaztatzen du", "To join an existing group you'll have to know its group identifier; this will look something like +example:matrix.org.": "Dagoen talde batetara elkartzeko taldearen identifikatzailea ezagutu behar duzu, honen antza du: +adibidea:matrix.org.", "Robot check is currently unavailable on desktop - please use a web browser": "Robot egiaztaketa orain ez dago eskuragarri mahaigainean - erabili web nabigatzailea", - "%(widgetName)s widget modified by %(senderName)s": "%(widgetName)s trepeta aldatu du %(senderName)s erabiltzaileak" + "%(widgetName)s widget modified by %(senderName)s": "%(widgetName)s trepeta aldatu du %(senderName)s erabiltzaileak", + "%(weekDayName)s, %(monthName)s %(day)s": "%(weekDayName)s, %(monthName)sk %(day)s", + "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(weekDayName)s, %(fullYear)sko %(monthName)sk %(day)s", + "Copied!": "Kopiatuta!", + "Failed to copy": "Kopiak huts egin du", + "Cancel": "Utzi" } diff --git a/src/i18n/strings/fi.json b/src/i18n/strings/fi.json index 4d0c0ecbd4..bd2f14442a 100644 --- a/src/i18n/strings/fi.json +++ b/src/i18n/strings/fi.json @@ -58,9 +58,6 @@ "Always show message timestamps": "Näytä aina viestien aikaleimat", "Authentication": "Autentikointi", "Alias (optional)": "Alias (valinnainen)", - "all room members": "kaikki huoneen jäsenet", - "all room members, from the point they are invited": "kaikki huoneen jäsenet, alkaen kutsusta", - "all room members, from the point they joined": "kaikki huoneen jäsenet, liittymisestä lähtien", "and": "ja", "%(items)s and %(remaining)s others": "%(items)s ja %(remaining)s lisää", "%(items)s and one other": "%(items)s ja yksi lisää", @@ -73,7 +70,6 @@ "An email has been sent to": "Sähköposti on lähetetty osoitteeseen", "A new password must be entered.": "Sinun täytyy syöttää uusi salasana.", "%(senderName)s answered the call.": "%(senderName)s vastasi puheluun.", - "anyone": "kuka tahansa", "An error has occurred.": "Virhe.", "Anyone": "Kaikki", "Anyone who knows the room's link, apart from guests": "Kaikki jotka tietävät huoneen osoitteen, paitsi vieraat", @@ -93,5 +89,260 @@ "%(senderName)s changed their profile picture.": "%(senderName)s muutti profiilikuvansa.", "%(targetName)s accepted an invitation.": "%(targetName)s hyväksyi kutsun.", "%(targetName)s accepted the invitation for %(displayName)s.": "%(targetName)s hyväksyi kutsun käyttäjän %(displayName)s puolesta.", - "Account": "Tili" + "Account": "Tili", + "and %(count)s others...|other": "ja %(count)s lisää...", + "and %(count)s others...|one": "ja yksi lisää...", + "Ban": "Anna porttikielto", + "Banned users": "Porttikiellon saanneet käyttäjät", + "Bans user with given id": "Antaa porttikiellon käyttäjälle jolla on annettu tunniste", + "Bug Report": "Virheraportti", + "Bulk Options": "Bulkkiasetukset", + "Changes your display nickname": "Muuttaa näyttönimesi", + "Changes colour scheme of current room": "Muuttaa tamänhetkisen huoneen väritystä", + "Clear Cache and Reload": "Puhdista välimuisti ja lataa uudelleen", + "Clear Cache": "Puhdista välimuisti", + "Click here to fix": "Paina tästä korjataksesi", + "Click to mute audio": "Paina mykistääksesi äänet", + "Click to mute video": "Paina mykistääksesi video", + "click to reveal": "paina näyttääksesi", + "Click to unmute video": "Paina poistaaksesi videomykistyksen", + "Click to unmute audio": "Paina poistaaksesi äänimykistyksen", + "Command error": "Komentovirhe", + "Commands": "Komennot", + "Conference call failed.": "Konferenssipuhelu epäonnistui", + "Conference calling is in development and may not be reliable.": "Konferenssipuhelut ovat vielä kehityksen alla ja saattavat toimia epäluotettavasti", + "Conference calls are not supported in encrypted rooms": "Konferenssipuhelut eivät ole mahdollisia salatuissa huoneissa", + "Conference calls are not supported in this client": "Tämä asiakasohjelma ei tue konferenssipuheluja", + "Confirm password": "Varmista salasana", + "Confirm your new password": "Varmista uusi salasanasi", + "Could not connect to the integration server": "Yhteys integraatiopalvelimeen epäonnistui", + "Create a new chat or reuse an existing one": "Luo uusi keskustelu tai uudelleenkäytä vanha", + "Create an account": "Luo tili", + "Create Room": "Luo huone", + "Cryptography": "Salaus", + "Current password": "Nykyinen salasana", + "Custom": "Mukautettu", + "Custom level": "Mukautettu taso", + "/ddg is not a command": "/ddg ei ole komento", + "Deactivate Account": "Deaktivoi tili", + "Deactivate my account": "Deaktivoi tilini", + "Decline": "Hylkää", + "Decryption error": "Virhe salauksen purkamisessa", + "Delete": "Poista", + "demote": "alenna", + "Default": "Oletusarvo", + "Device already verified!": "Laite on jo varmennettu!", + "Device ID": "Laitetunniste", + "Device ID:": "Laitetunniste:", + "device id: ": "laitetunniste:", + "Device key:": "Laiteavain:", + "Devices": "Laitteet", + "Direct chats": "Suorat viestittelyt", + "Disable Notifications": "Ota ilmoitukset pois käytöstä", + "disabled": "pois käytöstä", + "Disable markdown formatting": "Ota Markdown muotoilu pois päältä", + "Disinvite": "Peru kutsu", + "Display name": "Näyttönimi", + "Download %(text)s": "Lataa %(text)s", + "Drop File Here": "Pudota tiedosto tähän", + "Ed25519 fingerprint": "Ed25519 sormenjälki", + "Edit": "Muokkaa", + "Email": "Sähköposti", + "Email address": "Sähköpostiosoite", + "Email address (optional)": "Sähköpostiosoite (valinnainen)", + "Email, name or matrix ID": "Sähköpostiosoite, nimi, tai Matrix tunniste", + "Emoji": "Emoji", + "Enable encryption": "Ota salaus käyttöön", + "Enable Notifications": "Ota ilmoitukset käyttöön", + "enabled": "käytössä", + "Encrypted by a verified device": "Varmennetun laitteen salaama", + "Encrypted by an unverified device": "Varmentamattoman laiteen salaama", + "Encrypted room": "Salattu huone", + "Encryption is enabled in this room": "Salaus on kytketty päälle tässä huoneessa", + "Encryption is not enabled in this room": "Salaus ei ole kytketty päälle tässä huoneessa", + "End-to-end encryption information": "Päästä päähän-salauksen tiedot", + "Enter Code": "Syötä koodi", + "Enter passphrase": "Syötä salasana", + "Error decrypting attachment": "Liitteen salauksen purku epäonnistui", + "Event information": "Tapahtumatiedot", + "Export": "Vie", + "Export E2E room keys": "Vie huoneen päästä päähän-salauksen (E2E) avaimet ", + "Failed to ban user": "Porttikiellon antaminen epäonnistui", + "Failed to delete device": "Laitten poistamine epäonnistui", + "Failed to fetch avatar URL": "Avatar URL:n haku epäonnistui", + "Failed to join room": "Huoneeseen liittyminen epäonnistui", + "Failed to kick": "Huoneesta poistaminen epäonnistui", + "Failed to leave room": "Huoneesta poistuminen epäonnistui", + "Failed to load timeline position": "Aikajanapaikan lataaminen epäonnistui", + "Failed to mute user": "Käyttäjän mykistäminen epäonnistui", + "Failed to register as guest:": "Vieraana rekisteröityminen epäonnistui", + "Failed to reject invite": "Kutsun hylkääminen epäonnistui", + "Failed to reject invitation": "Kutsun hylkääminen epäonnistui", + "Failed to save settings": "Asetusten tallentaminen epäonnistui", + "Failed to send email": "Sähköpostin lähettäminen epäonnistui", + "Failed to send request.": "Pyynnön lähettäminen epäonnistui", + "Failed to set display name": "Näyttönimen asettaminen epäonnistui", + "Failed to set up conference call": "Konferenssipuhelun alustus epäonnistui", + "Failed to toggle moderator status": "Moderaattoriasetuksen muuttaminen epäonnistui", + "Failed to unban": "Porttikiellon poistaminen epäonnistui", + "Failed to upload file": "Tiedoston lataaminen epäonnistui", + "Failed to upload profile picture!": "Profiilikuvan lataaminen epäonnistui", + "Failed to verify email address: make sure you clicked the link in the email": "Varmenna sähköpostiosoitteesi: varmista että klikkasit sähköpostissa olevaa linkkiä", + "Failure to create room": "Huoneen luominen epäonnistui", + "favourite": "suosikki", + "Favourites": "Suosikit", + "Fill screen": "Täytä näyttö", + "Filter room members": "Suodata huoneen jäsenet", + "Forget room": "Unohda huone", + "Forgot your password?": "Unohditko salasanasi?", + "For security, this session has been signed out. Please sign in again.": "Turvallisuussyistä tämä istunto on vanhentunut. Ole hyvä ja kirjaudu uudestaan.", + "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.": "Turvallusuussyistä uloskirjautuminen poistaa kaikki päästä päähän-salausavaimet tästä selaimesta. Jos haluat purkaa keskustelujen salaukset tulevaisuudessa pitää sinun viedä purkuavaimet ja pitää ne turvallisesti tallessa.", + "Found a bug?": "Löysitkö virheen?", + "had": "oli", + "Hide Apps": "Piilota sovellukset", + "Hide read receipts": "Piilota lukukuittaukset", + "Hide Text Formatting Toolbar": "Piilota tekstinmuotoilutyökalupalkki", + "Homeserver is": "Kotipalvelin on", + "Identity Server is": "Identiteettipalvelin on", + "I have verified my email address": "Olen varmistanut sähköpostiosoitteeni", + "Import": "Tuo", + "Import E2E room keys": "Tuo päästä päähän-salaus (E2E) huoneavaimet", + "Incoming call from %(name)s": "Saapuva puhelu käyttäjältä %(name)s", + "Incoming video call from %(name)s": "Saapuva videopuhelu käyttäjältä %(name)s", + "Incoming voice call from %(name)s": "Saapuva äänipuhelu käyttäjältä %(name)s", + "Incorrect username and/or password.": "Virheellinen käyttäjänimi ja/tai salasana", + "Incorrect verification code": "Virheellinen varmennuskoodi", + "Integrations Error": "Integraatiovirhe", + "Interface Language": "Käyttöliittymän kieli", + "Invalid alias format": "Aliaksen muoto on virheellinen", + "Invalid address format": "Osoitteen muoto on virheellinen", + "Invalid Email Address": "Virheellinen sähköpostiosoite", + "Invite new room members": "Kutsu lisää jäseniä huoneeseen", + "Invited": "Kutsuttu", + "Invites": "Kutsuu", + "Invites user with given id to current room": "Kutsuu annetun käyttäjätunnisteen mukaisen käyttäjän huoneeseen", + "Sign in with": "Kirjaudu käyttäen", + "Join Room": "Liity huoneeseen", + "joined and left": "liittyi ja poistui", + "joined": "liittyi", + "Joins room with given alias": "Liittyy huoneeseen jolla on annettu alias", + "Jump to first unread message.": "Hyppää ensimmäiseen lukemattomaan viestiin", + "Kick": "Poista huoneesta", + "Kicks user with given id": "Poistaa käyttäjätunnisteen mukaisen käyttäjän huoneesta", + "Labs": "Laboratorio", + "Last seen": "Viimeksi nähty", + "Leave room": "Poistu huoneesta", + "left and rejoined": "poistui ja liittyi jälleen", + "left": "poistui", + "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", + "Markdown is disabled": "Markdown on pois päältä", + "Markdown is enabled": "Mardown on päällä", + "matrix-react-sdk version:": "Matrix-react-sdk versio:", + "Matrix Apps": "Matrix ohjelmat", + "Members only": "Vain jäsenet", + "Message not sent due to unknown devices being present": "Viestiä ei lähetetty koska paikalla on tuntemattomia laitteita", + "Mobile phone number": "Matkapuhelinnumero", + "Mobile phone number (optional)": "Matkapuhelinnumero (valinnainen)", + "Moderator": "Moderaattori", + "my Matrix ID": "minun Matrix tunniste", + "Name": "Nimi", + "New password": "Uusi salasana", + "New passwords don't match": "Uudet salasanat eivät täsmää", + "New passwords must match each other.": "Uusien salasanojen on vastattava toisiaan", + "not set": "ei asetettu", + "not specified": "ei määritetty", + "(not supported by this browser)": "(ei tuettu tässä selaimessa)", + "": "", + "AM": "AM", + "PM": "PM", + "NOT verified": "EI varmennettu", + "NOTE: Apps are not end-to-end encrypted": "Huom: Ohjelmat eivät ole päästä päähän-salattuja", + "No display name": "Ei näyttönimeä", + "No more results": "Ei enempää tuloksia", + "No results": "Ei tuloksia", + "OK": "OK", + "olm version:": "olm versio:", + "Once encryption is enabled for a room it cannot be turned off again (for now)": "Kun salaus on kytketty päälle sitä ei enää voi kytkeä pois (toistaiseksi)", + "Only people who have been invited": "Vain kutsun saanneet käyttäjät", + "Password": "Salasana", + "Password:": "Salasana:", + "Passwords can't be empty": "Salasanat eivät voi olla tyhjiä", + "People": "Henkilöt", + "Permissions": "Oikeudet", + "Phone": "Puhelin", + "Privacy warning": "Yksityisyysvaroitus", + "Private Chat": "Yksityinen keskustelu", + "Profile": "Profiili", + "Public Chat": "Julkinen keskustelu", + "Reason": "Syy", + "Reason: %(reasonText)s": "Syy: %(reasonText)s", + "Register": "Rekisteröi", + "rejected": "hylätty", + "Reject invitation": "Hylkää kutsu", + "Rejoin": "Liity uudestaan", + "Remove Contact Information?": "Poista yhteystiedot?", + "Results from DuckDuckGo": "DuckDuckGo:n tulokset", + "Return to login screen": "Palaa kirjautumissivulle", + "riot-web version:": "Riot-web versio:", + "Room Colour": "Huoneen väri", + "Room contains unknown devices": "Huone sisältää tuntemattomia laitteita", + "Room name (optional)": "Huoneen nimi (valinnainen)", + "Rooms": "Huoneet", + "Save": "Tallenna", + "Scroll to bottom of page": "Vieritä sivun loppuun", + "Scroll to unread messages": "Vieritä lukemattomiin viesteihin", + "Search failed": "Haku epäonnistui", + "Searches DuckDuckGo for results": "Hakee DuckDuckGo:n avulla", + "Searching known users": "Etsii tunnettuja käyttäjiä", + "Send a message (unencrypted)": "Lähetä viesti (salaamaton)", + "Send an encrypted message": "Lähetä salattu viesti", + "Send anyway": "Lähetä kuitenkin", + "Sender device information": "Lähettäjän laitteen tiedot", + "Send Invites": "Lähetä kutsu", + "sent an image": "lähetti kuvan", + "sent a video": "lähetti videon", + "Server error": "Palvelinvirhe", + "Session ID": "Istuntotunniste", + "Set": "Aseta", + "Sets the room topic": "Asettaa huoneen aiheen", + "Show panel": "Näytä paneeli", + "Sign in": "Kirjaudu sisään", + "Sign out": "Kirjaudu ulos", + "since they joined": "liittymisestä lähtien", + "since they were invited": "kutsusta lähtien", + "Some of your messages have not been sent.": "Jotkut viesteistäsi ei ole lähetetty", + "Someone": "Joku", + "Start a chat": "Aloita keskustelu", + "Start Chat": "Aloita keskustelu", + "Submit": "Lähetä", + "This email address is already in use": "Tämä sähköpostiosoite on jo käytössä", + "This email address was not found": "Sähköpostiosoitetta ei löytynyt", + "The remote side failed to pick up": "Toinen osapuoli ei vastannut", + "There was a problem logging in.": "Ongelma sisäänkirjautumisessa.", + "This room has no local addresses": "Tällä huoneella ei ole paikallista osoitetta", + "This room": "Tämä huone", + "This room is not accessible by remote Matrix servers": "Tähän huoneeseen ei voi päästä ulkopuolisilta Matrix-palvelimilta", + "This room's internal ID is": "Huoneen sisäinen tunniste on", + "Unban": "Poista porttikielto", + "Undecryptable": "Salauksen purku ei ole mahdollista", + "Unencrypted room": "Salaamaton huone", + "unencrypted": "salaamaton", + "Unencrypted message": "Salaamaton viesti", + "unknown caller": "tuntematon soittaja", + "unknown device": "tuntematon laite", + "Unknown room %(roomId)s": "Tuntematon huone %(roomId)s", + "Unknown (user, device) pair:": "Tuntematon (käyttäjä,laite) -pari.", + "Unmute": "Poista mykistys", + "Unnamed Room": "Nimeämätön huone", + "Unrecognised command:": "Tuntematon komento:", + "Unrecognised room alias:": "Tuntematon huonealias:", + "Unverified": "Varmentamaton", + "Uploading %(filename)s and %(count)s others|zero": "Ladataan %(filename)s", + "Uploading %(filename)s and %(count)s others|one": "Ladataan %(filename)s ja %(count)s muuta" } diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json index 80e76a17ac..f183128e1a 100644 --- a/src/i18n/strings/fr.json +++ b/src/i18n/strings/fr.json @@ -1,5 +1,4 @@ { - "anyone": "n'importe qui", "Direct Chat": "Discussion directe", "Direct chats": "Conversations directes", "Disable inline URL previews by default": "Désactiver l’aperçu des URLs", @@ -60,9 +59,6 @@ "Admin": "Admin", "Advanced": "Avancé", "Algorithm": "Algorithme", - "all room members": "tous les membres du salon", - "all room members, from the point they are invited": "tous les membres du salon, depuis le moment où ils ont été invités", - "all room members, from the point they joined": "tous les membres du salon, depuis le moment où ils ont rejoint", "an address": "une adresse", "and": "et", "%(items)s and %(remaining)s others": "%(items)s et %(remaining)s autres", @@ -217,7 +213,11 @@ "Login as guest": "S'identifier en tant que visiteur", "Logout": "Se déconnecter", "Low priority": "Priorité basse", - "%(senderName)s made future room history visible to": "%(senderName)s a rendu l'historique visible à", + "%(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.", + "%(senderName)s made future room history visible to all room members, from the point they joined.": "%(senderName)s a rendu l'historique visible à tous les membres du salon, depuis le moment où ils ont rejoint.", + "%(senderName)s made future room history visible to all room members.": "%(senderName)s a rendu l'historique visible à tous les membres du salon.", + "%(senderName)s made future room history visible to anyone.": "%(senderName)s a rendu l'historique visible à n'importe qui.", + "%(senderName)s made future room history visible to unknown (%(visibility)s).": "%(senderName)s a rendu l'historique visible à inconnu (%(visibility)s).", "Manage Integrations": "Gestion des intégrations", "Markdown is disabled": "Le formatage \"Markdown\" est désactivé", "Markdown is enabled": "Le formatage “Markdown” est activé", @@ -402,7 +402,6 @@ "unencrypted": "non chiffré", "unknown device": "appareil inconnu", "Unknown room %(roomId)s": "Salon inconnu %(roomId)s", - "unknown": "inconnu", "Unmute": "Activer le son", "uploaded a file": "téléchargé un fichier", "Upload avatar": "Télécharger une photo de profil", diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json index 8a5ca1d1c5..00c42a6ef5 100644 --- a/src/i18n/strings/hu.json +++ b/src/i18n/strings/hu.json @@ -56,7 +56,6 @@ "Always show message timestamps": "Üzenet időbélyeg folyamatos megjelenítése", "Authentication": "Azonosítás", "Alias (optional)": "Becenév (opcionális)", - "all room members": "minden szoba tagság", "Failed to change password. Is your password correct?": "Nem sikerült megváltoztatni a jelszót. Helyesen írtad be a jelszavadat?", "Continue": "Folytatás", "Create new room": "Új szoba létrehozása", @@ -67,8 +66,6 @@ "Room directory": "Szobák listája", "Start chat": "Csevegés indítása", "Welcome page": "Üdvözlő oldal", - "all room members, from the point they are invited": "minden résztvevő a szobában, amióta meg van hívva", - "all room members, from the point they joined": "minden résztvevő a szobában, amióta csatlakozott", "and": "és", "%(items)s and %(remaining)s others": "%(items)s és még: %(remaining)s", "%(items)s and one other": "%(items)s és még egy", @@ -81,7 +78,6 @@ "An email has been sent to": "Az e-mail ide lett küldve:", "A new password must be entered.": "Új jelszót kell megadni.", "%(senderName)s answered the call.": "%(senderName)s felvette a telefont.", - "anyone": "bárki", "An error has occurred.": "Hiba történt.", "Anyone": "Bárki", "Anyone who knows the room's link, apart from guests": "A vendégeken kívül bárki aki ismeri a szoba link-jét", @@ -289,7 +285,11 @@ "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": "%(senderName)s elérhetővé tette a szoba új üzeneteit nekik:", + "%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s elérhetővé tette a szoba új üzeneteit nekik minden résztvevő a szobában, amióta meg van hívva.", + "%(senderName)s made future room history visible to all room members, from the point they joined.": "%(senderName)s elérhetővé tette a szoba új üzeneteit nekik minden résztvevő a szobában, amióta csatlakozott.", + "%(senderName)s made future room history visible to all room members.": "%(senderName)s elérhetővé tette a szoba új üzeneteit nekik minden szoba tagság.", + "%(senderName)s made future room history visible to anyone.": "%(senderName)s elérhetővé tette a szoba új üzeneteit nekik bárki.", + "%(senderName)s made future room history visible to unknown (%(visibility)s).": "%(senderName)s elérhetővé tette a szoba új üzeneteit nekik ismeretlen (%(visibility)s).", "Manage Integrations": "Integrációk kezelése", "Markdown is disabled": "Markdown kikapcsolva", "Markdown is enabled": "Markdown engedélyezett", @@ -486,7 +486,6 @@ "unknown device": "ismeretlen eszköz", "Unknown room %(roomId)s": "Ismeretlen szoba %(roomId)s", "Unknown (user, device) pair:": "Ismeretlen (felhasználó, eszköz) pár:", - "unknown": "ismeretlen", "Unmute": "Némítás kikapcsolása", "Unnamed Room": "Névtelen szoba", "Unrecognised command:": "Ismeretlen parancs:", diff --git a/src/i18n/strings/id.json b/src/i18n/strings/id.json index a36ca6f08e..c8b82c22f7 100644 --- a/src/i18n/strings/id.json +++ b/src/i18n/strings/id.json @@ -11,7 +11,6 @@ "Camera": "Kamera", "Alias (optional)": "Alias (pilihan)", "and": "dan", - "all room members": "Seluruh peserta ruang", "Are you sure?": "Anda yakin?", "An error has occurred.": "Telah terjadi kesalahan.", "Are you sure you want to reject the invitation?": "Anda yakin menolak undangannya?", @@ -134,7 +133,6 @@ "unencrypted": "tidak terenkripsi", "Unknown command": "Perintah tidak diketahui", "unknown error code": "kode kesalahan tidak diketahui", - "unknown": "tidak diketahui", "unknown device": "perangkat tidak diketahui", "User ID": "ID Pengguna", "User name": "Nama pengguna", diff --git a/src/i18n/strings/it.json b/src/i18n/strings/it.json index 65ea42d119..454cef9771 100644 --- a/src/i18n/strings/it.json +++ b/src/i18n/strings/it.json @@ -56,8 +56,5 @@ "Always show message timestamps": "Mostra sempre il timestamps dei messaggi", "Authentication": "Autenticazione", "Alias (optional)": "Alias (opzionale)", - "all room members": "Tutti i membri della stanza", - "all room members, from the point they are invited": "Tutti i membri della stanza, dal punto in cui sono stati/e invitati/e", - "all room members, from the point they joined": "tutti i membri della stanza, dal punto in cui si sono uniti", "and": "e" } diff --git a/src/i18n/strings/ko.json b/src/i18n/strings/ko.json index acb56acdab..dc748676c5 100644 --- a/src/i18n/strings/ko.json +++ b/src/i18n/strings/ko.json @@ -51,7 +51,6 @@ "A new password must be entered.": "새 비밀번호를 입력해주세요.", "An error has occurred.": "오류가 일어났어요.", "Anyone": "누구나", - "anyone": "누구나", "Are you sure?": "정말이세요?", "Are you sure you want to leave the room '%(roomName)s'?": "정말로 '%(roomName)s'를 떠나시겠어요?", "Attachment": "붙이기", @@ -101,9 +100,6 @@ "And %(count)s more...": "그리고 %(count)s 더 보기...", "Missing Media Permissions, click here to request.": "저장소 권한을 잃었어요, 여기를 눌러 다시 요청해주세요.", "You may need to manually permit Riot to access your microphone/webcam": "수동으로 라이엇에 마이크와 카메라를 허용해야 할 수도 있어요", - "all room members": "방 구성원 모두", - "all room members, from the point they are invited": "방 구성원 모두, 초대받은 시점부터", - "all room members, from the point they joined": "방 구성원 모두, 방에 들어온 시점부터", "%(items)s and %(remaining)s others": "%(items)s과 %(remaining)s", "%(items)s and one other": "%(items)s과 다른 하나", "%(items)s and %(lastItem)s": "%(items)s과 %(lastItem)s", @@ -289,7 +285,11 @@ "Login as guest": "손님으로 로그인", "Logout": "로그아웃", "Low priority": "낮은 우선순위", - "%(senderName)s made future room history visible to": "%(senderName)s님이 이후 방의 기록을 볼 수 있게 하셨어요", + "%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s님이 이후 방의 기록을 볼 수 있게 하셨어요 방 구성원 모두, 초대받은 시점부터.", + "%(senderName)s made future room history visible to all room members, from the point they joined.": "%(senderName)s님이 이후 방의 기록을 볼 수 있게 하셨어요 방 구성원 모두, 방에 들어온 시점부터.", + "%(senderName)s made future room history visible to all room members.": "%(senderName)s님이 이후 방의 기록을 볼 수 있게 하셨어요 방 구성원 모두.", + "%(senderName)s made future room history visible to anyone.": "%(senderName)s님이 이후 방의 기록을 볼 수 있게 하셨어요 누구나.", + "%(senderName)s made future room history visible to unknown (%(visibility)s).": "%(senderName)s님이 이후 방의 기록을 볼 수 있게 하셨어요 알 수 없음 (%(visibility)s).", "Manage Integrations": "통합 관리", "Markdown is disabled": "마크다운이 꺼져있어요", "Markdown is enabled": "마크다운이 켜져있어요", @@ -490,7 +490,6 @@ "unknown device": "알 수 없는 장치", "Unknown room %(roomId)s": "알 수 없는 방 %(roomId)s", "Unknown (user, device) pair:": "알 수 없는 (사용자, 장치) 연결:", - "unknown": "알 수 없음", "Unmute": "소리 켜기", "Unnamed Room": "이름 없는 방", "Unrecognised command:": "인식 할 수 없는 명령:", diff --git a/src/i18n/strings/lv.json b/src/i18n/strings/lv.json index 78e7c39a73..ea70ed1eb7 100644 --- a/src/i18n/strings/lv.json +++ b/src/i18n/strings/lv.json @@ -29,9 +29,6 @@ "Always show message timestamps": "Vienmēr rādīt ziņojumu laika zīmogu", "Authentication": "Autentifikācija", "Alias (optional)": "Aizstājējvārds (neobligāts)", - "all room members": "visi istabas biedri", - "all room members, from the point they are invited": "visi istabas biedri secībā, kādā tika uzaicināti", - "all room members, from the point they joined": "visi istabas biedri secībā, kādā ir pievienojušies", "and": "un", "%(items)s and %(remaining)s others": "%(items)s un %(remaining)s citi", "%(items)s and one other": "%(items)s un viens cits", @@ -44,7 +41,6 @@ "An email has been sent to": "Epasts tika nosūtīts", "A new password must be entered.": "Nepieciešams ievadīt jauno paroli.", "%(senderName)s answered the call.": "%(senderName)s atbildēja zvanam.", - "anyone": "ikviens", "An error has occurred.": "Notikusi kļūda.", "Anyone": "Ikviens", "Anyone who knows the room's link, apart from guests": "Ikviens, kurš zina adreses saiti uz istabu, izņemot viesus", @@ -264,7 +260,11 @@ "Login as guest": "Pierakstīties kā viesis", "Logout": "Izrakstīties", "Low priority": "Zema prioritāte", - "%(senderName)s made future room history visible to": "%(senderName)s uzstādīja nākotnes istabas ziņu vēsturi redzamu", + "%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s uzstādīja nākotnes istabas ziņu vēsturi redzamu visi istabas biedri secībā, kādā tika uzaicināti.", + "%(senderName)s made future room history visible to all room members, from the point they joined.": "%(senderName)s uzstādīja nākotnes istabas ziņu vēsturi redzamu visi istabas biedri secībā, kādā ir pievienojušies.", + "%(senderName)s made future room history visible to all room members.": "%(senderName)s uzstādīja nākotnes istabas ziņu vēsturi redzamu visi istabas biedri.", + "%(senderName)s made future room history visible to anyone.": "%(senderName)s uzstādīja nākotnes istabas ziņu vēsturi redzamu ikviens.", + "%(senderName)s made future room history visible to unknown (%(visibility)s).": "%(senderName)s uzstādīja nākotnes istabas ziņu vēsturi redzamu nezināms (%(visibility)s).", "Manage Integrations": "Pārvaldīt integrācijas", "Markdown is disabled": "Formatēšanas iespēja ir atslēgta", "Markdown is enabled": "Formatēšanas iespēja ir iespējota", @@ -553,7 +553,6 @@ "unknown device": "nezināma ierīce", "unknown error code": "nezināms kļūdas kods", "Unknown (user, device) pair:": "Nezināms (lietotājs, ierīce) pāris:", - "unknown": "nezināms", "Unmute": "Ieslēgt skaņu", "Unnamed Room": "Istaba bez nosaukuma", "Cancel": "Atcelt", diff --git a/src/i18n/strings/nl.json b/src/i18n/strings/nl.json index 245ab7b0db..5fb69338bd 100644 --- a/src/i18n/strings/nl.json +++ b/src/i18n/strings/nl.json @@ -13,9 +13,6 @@ "Algorithm": "Algoritme", "Always show message timestamps": "Laat altijd tijdstempels van berichten zien", "Authentication": "Authenticatie", - "all room members": "alle kamerleden", - "all room members, from the point they are invited": "alle kamerleden, vanaf het moment dat ze uitgenodigt zijn", - "all room members, from the point they joined": "alle kamerleden, vanaf het moment dat ze toegetreden zijn", "an address": "een adres", "and": "en", "%(items)s and %(remaining)s others": "%(items)s en %(remaining)s andere", @@ -29,7 +26,6 @@ "An email has been sent to": "Er is een e-mail verzonden naar", "A new password must be entered.": "Er moet een nieuw wachtwoord worden ingevoerd.", "%(senderName)s answered the call.": "%(senderName)s heeft deelgenomen aan het audiogesprek.", - "anyone": "iedereen", "An error has occurred.": "Er is een fout opgetreden.", "Anyone who knows the room's link, apart from guests": "Iedereen die de kamerlink weet, behalve gasten", "Anyone who knows the room's link, including guests": "Iedereen die de kamerlink weet, inclusief gasten", @@ -362,7 +358,11 @@ "Login as guest": "Als gast inloggen", "Logout": "Uitloggen", "Low priority": "Lage prioriteit", - "%(senderName)s made future room history visible to": "%(senderName)s heeft de toekomstige ruimtegeschiedenis zichtbaar gemaakt voor", + "%(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 kamerleden, vanaf het moment dat ze uitgenodigt zijn.", + "%(senderName)s made future room history visible to all room members, from the point they joined.": "%(senderName)s heeft de toekomstige ruimte geschiedenis zichtbaar gemaakt voor alle kamerleden, vanaf het moment dat ze toegetreden zijn.", + "%(senderName)s made future room history visible to all room members.": "%(senderName)s heeft de toekomstige ruimte geschiedenis zichtbaar gemaakt voor alle kamerleden.", + "%(senderName)s made future room history visible to anyone.": "%(senderName)s heeft de toekomstige ruimte geschiedenis zichtbaar gemaakt voor iedereen.", + "%(senderName)s made future room history visible to unknown (%(visibility)s).": "%(senderName)s heeft de toekomstige ruimte geschiedenis zichtbaar gemaakt voor onbekend (%(visibility)s).", "Manage Integrations": "Integraties beheren", "Markdown is disabled": "Markdown is uitgeschakeld", "Markdown is enabled": "Markdown ingeschakeld", @@ -517,7 +517,6 @@ "unknown device": "Onbekend apparaat", "Unknown room %(roomId)s": "Onbekende ruimte %(roomId)s", "Unknown (user, device) pair:": "Onbekend (gebruiker, apparaat) paar:", - "unknown": "onbekend", "Unmute": "Niet dempen", "Unnamed Room": "Naamloze Ruimte", "Unrecognised command:": "Onbekende commando:", diff --git a/src/i18n/strings/pl.json b/src/i18n/strings/pl.json index ee14b39677..8389afa160 100644 --- a/src/i18n/strings/pl.json +++ b/src/i18n/strings/pl.json @@ -125,19 +125,16 @@ "Admin": "Administrator", "Admin Tools": "Narzędzia administracyjne", "And %(count)s more...": "Oraz %(count)s więcej...", - "VoIP": "VoIP", + "VoIP": "VoIP (połączenie głosowe)", "No Microphones detected": "Nie wykryto żadnego mikrofonu", "No Webcams detected": "Nie wykryto żadnej kamerki internetowej", "No media permissions": "Brak uprawnień do mediów", - "You may need to manually permit Riot to access your microphone/webcam": "Możliwe, że będziesz musiał ręcznie pozwolić Riotowi na dostęp do twojego mikrofonu/kamerki", + "You may need to manually permit Riot to access your microphone/webcam": "Możliwe, że będziesz musiał ręcznie pozwolić Riotowi na dostęp do twojego mikrofonu/kamerki internetowej", "Default Device": "Urządzenie domyślne", "Advanced": "Zaawansowane", "Always show message timestamps": "Zawsze pokazuj znaczniki czasu wiadomości", "Authentication": "Uwierzytelnienie", "Alias (optional)": "Alias (opcjonalnie)", - "all room members": "wszyscy członkowie pokoju", - "all room members, from the point they are invited": "wszyscy członkowie pokoju, od momentu ich zaproszenia", - "all room members, from the point they joined": "wszyscy członkowie pokoju, od momentu ich dołączenia", "%(items)s and %(remaining)s others": "%(items)s i %(remaining)s innych", "%(items)s and one other": "%(items)s i jeszcze jeden", "%(items)s and %(lastItem)s": "%(items)s i %(lastItem)s", @@ -149,7 +146,6 @@ "An email has been sent to": "Wysłano wiadomość e-mail do", "A new password must be entered.": "Musisz wprowadzić nowe hasło.", "%(senderName)s answered the call.": "%(senderName)s odebrał połączenie.", - "anyone": "każdy", "An error has occurred.": "Wystąpił błąd.", "Anyone": "Każdy", "Anyone who knows the room's link, apart from guests": "Każdy kto posiada łącze do pokoju, poza gośćmi", @@ -160,13 +156,13 @@ "Autoplay GIFs and videos": "Automatycznie odtwarzaj GIFy i filmiki", "%(senderName)s banned %(targetName)s.": "%(senderName)s zbanował %(targetName)s.", "Ban": "Zbanuj", - "Bans user with given id": "Zbanuj użytkownika o podanym id", + "Bans user with given id": "Blokuje użytkownika o podanym ID", "Blacklisted": "Umieszczono na czarnej liście", "Add a widget": "Dodaj widżet", "Allow": "Pozwól", "Missing Media Permissions, click here to request.": "Brakuje uprawnień mediów. Kliknij tutaj, aby ich zażądać.", "and %(count)s others...|other": "i %(count)s innych...", - "and %(count)s others...|one": "i jeszcze jedno...", + "and %(count)s others...|one": "i jeden inny...", "Bug Report": "Raport błędu", "Bulk Options": "Masowe opcje", "Call Timeout": "Upłynął limit czasu połączenia", @@ -187,7 +183,7 @@ "Changes your display nickname": "Zmień swój pseudonim", "Changes colour scheme of current room": "Zmień schemat kolorystyczny bieżącego pokoju", "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.": "Zmiana hasła zresetuje klucze szyfrowania końcówka-do-końcówki na wszystkich urządzeniach, co spowoduje, że nie będzie się dało odczytać zaszyfrowanej historii czatu, chyba że najpierw wyeksportujesz swoje klucze i ponownie je zaimportujesz. W przyszłości będzie to poprawione.", - "Claimed Ed25519 fingerprint key": "Przedstawiony odcisk klucza Ed25519", + "Claimed Ed25519 fingerprint key": "Zażądano odcisk klucza Ed25519", "Clear Cache and Reload": "Wyczyść pamięć podręczną i przeładuj", "Clear Cache": "Wyczyść pamięć podręczną", "Click here to join the discussion!": "Kliknij tutaj, aby dołączyć do dyskusji!", @@ -303,7 +299,7 @@ "Guest access is disabled on this Home Server.": "Dostęp dla gości jest wyłączony na tym serwerze.", "Guests can't set avatars. Please register.": "Goście nie mogą ustawić awatara. Proszę się zarejestrować.", "Guest users can't create new rooms. Please register to create room and start a chat.": "Goście nie mogą tworzyć nowych pokoi. Proszę się zarejestrować, by móc stworzyć nowy pokój.", - "Deops user with given id": "Usuwa prawa administratora użytkownikowi z danym ID", + "Deops user with given id": "Usuwa prawa administratora użytkownikowi o danym ID", "Guest users can't upload files. Please register to upload.": "Goście nie mogą wysyłać plików na serwer. Proszę się zarejestrować, by móc wysyłać pliki.", "Guests can't use labs features. Please register.": "Goście nie mogą używać funkcji eksperymentalnych. Proszę się zarejestrować.", "Guests cannot join this room even if explicitly invited.": "Goście nie mogą dołączać do tego pokoju, nawet jeśli zostali specjalnie zaproszeni.", @@ -312,7 +308,7 @@ "Hide Text Formatting Toolbar": "Ukryj pasek formatowania tekstu", "Home": "Strona startowa", "Homeserver is": "Serwer domowy to", - "Identity Server is": "Serwer tożsamości to", + "Identity Server is": "Serwer Identity to", "I have verified my email address": "Zweryfikowałem swój adres e-mail", "Import": "Importuj", "Import E2E room keys": "Importuj klucze pokoju E2E", @@ -331,7 +327,7 @@ "Invite new room members": "Zaproś nowych członków do pokoju", "Invited": "Zaproszony", "Invites": "Zaproszenia", - "Invites user with given id to current room": "Zaprasza użytkownika z danym ID do obecnego pokoju", + "Invites user with given id to current room": "Zaprasza użytkownika o danym ID do obecnego pokoju", "'%(alias)s' is not a valid format for an address": "'%(alias)s' nie jest poprawnym formatem adresu", "'%(alias)s' is not a valid format for an alias": "'%(alias)s' nie jest poprawnym formatem aliasu", "%(displayName)s is typing": "%(displayName)s pisze", @@ -341,7 +337,7 @@ "joined and left": "dołączył i wyszedł", "joined": "dołączył", "%(targetName)s joined the room.": "%(targetName)s dołączył do pokoju.", - "Joins room with given alias": "Dołącz do pokoju z podanym aliasem", + "Joins room with given alias": "Dołącz do pokoju o podanym aliasie", "Jump to first unread message.": "Przeskocz do pierwszej nieprzeczytanej wiadomości.", "%(senderName)s kicked %(targetName)s.": "%(senderName)s wyrzucił %(targetName)s.", "Kick": "Wyrzuć", @@ -353,13 +349,17 @@ "left": "wyszedł", "%(targetName)s left the room.": "%(targetName)s opuścił pokój.", "Level:": "Poziom:", - "Publish this room to the public in %(domain)s's room directory?": "Czy opublikować ten pokój dla ogółu w spisie pokoi domeny %(domain)s?", + "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": "%(senderName)s uczynił przyszłą historię pokoju widoczną dla", + "%(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.", + "%(senderName)s made future room history visible to all room members, from the point they joined.": "%(senderName)s uczynił przyszłą historię pokoju widoczną dla wszyscy członkowie pokoju, od momentu ich dołączenia.", + "%(senderName)s made future room history visible to all room members.": "%(senderName)s uczynił przyszłą historię pokoju widoczną dla wszyscy członkowie pokoju.", + "%(senderName)s made future room history visible to anyone.": "%(senderName)s uczynił przyszłą historię pokoju widoczną dla kazdego.", + "%(senderName)s made future room history visible to unknown (%(visibility)s).": "%(senderName)s uczynił przyszłą historię pokoju widoczną dla nieznany (%(visibility)s).", "Manage Integrations": "Zarządzaj integracjami", "Markdown is disabled": "Markdown jest wyłączony", "Markdown is enabled": "Markdown jest włączony", @@ -401,7 +401,7 @@ "Once you've followed the link it contains, click below": "Po kliknięciu łącza, które jest tam zawarte kliknij poniżej", "Only people who have been invited": "Tylko ludzie, którzy zostali zaproszeni", "Otherwise, click here to send a bug report.": "W przeciwnym razie, kliknij tutaj by wysłać raport o błędzie.", - "had": "było", + "had": "był", "Password": "Hasło", "Password:": "Hasło:", "Passwords can't be empty": "Hasła nie mogą być puste", @@ -434,7 +434,7 @@ "%(senderName)s removed their profile picture.": "%(senderName)s usunął swoje zdjęcie profilowe.", "Remove %(threePid)s?": "Usunąć %(threePid)s?", "Hide Apps": "Ukryj aplikacje", - "%(senderName)s requested a VoIP conference.": "%(senderName)s zażądał konferencji VoIP.", + "%(senderName)s requested a VoIP conference.": "%(senderName)s zażądał grupowego połączenia głosowego VoIP.", "Report it": "Zgłoś", "restore": "przywróć", "Results from DuckDuckGo": "Wyniki z DuckDuckGo", @@ -513,8 +513,8 @@ "This email address was not found": "Podany adres e-mail nie został znaleziony", "%(actionVerb)s this person?": "%(actionVerb)s tą osobę?", "changing room on a RoomView is not supported": "Zmiana pokoju na RoomView nie jest obsługiwana", - "Must be viewing a room": "Musi wyświetlać pokój", - "The email address linked to your account must be entered.": "Adres e-mail połączony z twoim kontem musi zostać wpisany.", + "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 folderu '%(fileName)s' przekracza możliwy limit do przesłania na serwer domowy", "The file '%(fileName)s' failed to upload": "Przesyłanie folderu '%(fileName)s' nie powiodło się", "The remote side failed to pick up": "Strona zdalna nie odebrała", @@ -528,18 +528,18 @@ "This phone number is already in use": "Ten numer telefonu jest już zajęty", "This room": "Ten pokój", "This room is not accessible by remote Matrix servers": "Ten pokój nie jest dostępny na zdalnych serwerach Matrix", - "This room's internal ID is": "Identyfikatorem tego pokoju jest", + "This room's internal ID is": "Wewnętrzne ID tego pokoju to", "times": "razy", "To ban users": "Żeby zablokować użytkowników", - "to browse the directory": "żeby przeglądnąć katalog", + "to browse the directory": "żeby przeglądać katalog", "To configure the room": "Żeby skonfigurować pokój", - "to demote": "Żeby zmniejszyć priorytet", + "to demote": "żeby zmniejszyć priorytet", "To get started, please pick a username!": "Aby rozpocząć, wybierz nazwę użytkownika!", "To invite users into the room": "Żeby zaprosić użytkowników do pokoju", - "To kick users": "Żeby wykluczyć użytkowników", + "To kick users": "Żeby usuwać użytkowników", "to make a room or": "żeby utworzyć pokój lub", - "To remove other users' messages": "Żeby usunąć wiadomości innych użytkowników", - "To reset your password, enter the email address linked to your account": "Aby zresetować swoje hasło, wpisz adres e-mail połączony z twoim kontem", + "To remove other users' messages": "Żeby usuwać wiadomości innych użytkowników", + "To reset your password, enter the email address linked to your account": "Aby zresetować swoje hasło, wpisz adres e-mail powiązany z twoim kontem", "to restore": "żeby przywrócić", "To send messages": "Żeby wysyłać wiadomości", "to start a chat with someone": "żeby zacząć rozmowę z kimś", @@ -558,27 +558,26 @@ "Unable to capture screen": "Nie można zrobić zrzutu ekranu", "Unable to enable Notifications": "Nie można włączyć powiadomień", "Unable to load device list": "Nie można załadować listy urządzeń", - "Undecryptable": "Nie do odszyfrowania", + "Undecryptable": "Odszyfrowanie niemożliwe", "Unencrypted room": "Pokój nieszyfrowany", - "This Home Server does not support login using email address.": "Ten domowy serwer nie obsługuje logowania się poprzez adres e-mail.", + "This Home Server does not support login using email address.": "Ten serwer domowy nie obsługuje logowania się poprzez adres e-mail.", "This invitation was sent to an email address which is not associated with this account:": "To zaproszenie zostało wysłane na adres e-mail, który nie jest połączony z tym kontem:", - "to favourite": "Żeby dodać do ulubionych", - "To use it, just wait for autocomplete results to load and tab through them.": "Żeby z niego skorzystać, należy poczekać na załadowanie się autouzupełnienia wyników i przewinąć je.", + "to favourite": "żeby dodać do ulubionych", + "To use it, just wait for autocomplete results to load and tab through them.": "Żeby z niego skorzystać, należy poczekać na załadowanie się wyników autouzupełnienia i naciskać przycisk \"Tab\", by je przewijać.", "Unencrypted message": "Niezaszyfrowana wiadomość", "unknown caller": "nieznany dzwoniący", "unknown device": "nieznane urządzenie", "Unknown room %(roomId)s": "Nieznany pokój %(roomId)s", - "unknown": "nieznany", "Unmute": "Wyłącz wyciszenie", "Unnamed Room": "Pokój bez nazwy", "Unrecognised command:": "Nierozpoznane polecenie:", "Unrecognised room alias:": "Nierozpoznany alias pokoju:", "Unverified": "Niezweryfikowany", "Uploading %(filename)s and %(count)s others|zero": "Przesyłanie %(filename)s", - "Uploading %(filename)s and %(count)s others|one": "Przesyłanie %(filename)s i %(count)s inny", - "Uploading %(filename)s and %(count)s others|other": "Przesyłanie %(filename)s i %(count)s innych", + "Uploading %(filename)s and %(count)s others|one": "Przesyłanie %(filename)s oraz %(count)s innych", + "Uploading %(filename)s and %(count)s others|other": "Przesyłanie %(filename)s oraz %(count)s innych", "uploaded a file": "przesłał plik", - "Upload avatar": "Prześlij zdjęcie profilowe", + "Upload avatar": "Prześlij awatar", "Upload Failed": "Błąd przesyłania", "Upload Files": "Prześlij pliki", "Upload new:": "Prześlij nowy:", @@ -588,21 +587,21 @@ "Username invalid: %(errMessage)s": "Niepoprawna nazwa użytkownika: %(errMessage)s", "Verification Pending": "Oczekuje weryfikacji", "Verification": "Weryfikacja", - "verified": "Zweryfikowany", + "verified": "zweryfikowany", "Verified": "Zweryfikowany", "Verified key": "Zweryfikowany klucz", "Video call": "Rozmowa wideo", "Voice call": "Rozmowa głosowa", - "VoIP conference finished.": "Zakończono konferencję głosową.", - "VoIP conference started.": "Rozpoczęto konferencję głosową.", - "VoIP is unsupported": "Rozmowy głosowe nie są obsługiwane", + "VoIP conference finished.": "Zakończono grupowe połączenie głosowe VoIP.", + "VoIP conference started.": "Rozpoczęto grupowe połączenie głosowe VoIP.", + "VoIP is unsupported": "Rozmowy głosowe VoIP nie są obsługiwane", "(could not connect media)": "(brak możliwości połączenia się z mediami)", "(no answer)": "(brak odpowiedzi)", "(unknown failure: %(reason)s)": "(nieznany błąd: %(reason)s)", "(warning: cannot be disabled again!)": "(ostrzeżenie: brak możliwości ponownego dezaktywowania!)", "WARNING: Device already verified, but keys do NOT MATCH!": "OSTRZEŻENIE: Urządzenie już zweryfikowane, ale klucze NIE PASUJĄ DO SIEBIE!", "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!": "OSTRZEŻENIE: BŁĄD WERYFIKACJI KLUCZA! Klucz podpisujący dla %(userId)s i urządzenia %(deviceId)s to \"%(fprint)s\", który nie pasuje do dostarczonego klucza \"%(fingerprint)s\". To może oznaczać, że twoje komunikaty są przejmowane!", - "Who can access this room?": "Kto może mieć dostęp do tego pokoju?", + "Who can access this room?": "Kto może uzyskać dostęp do tego pokoju?", "Who would you like to add to this room?": "Kogo chciał(a)byś dodać do tego pokoju?", "Who would you like to communicate with?": "Z kim chciał(a)byś się komunikować?", "%(senderName)s withdrew %(targetName)s's invitation.": "%(senderName)s wycofał(a) zaproszenie %(targetName)s.", @@ -614,22 +613,22 @@ "You're not in any rooms yet! Press to make a room or to browse the directory": "Nie jesteś jeszcze w żadnym pokoju! Naciśnij , aby stworzyć pokój lub , żeby przeszukać katalog", "You are trying to access %(roomName)s.": "Próbujesz uzyskać dostęp do %(roomName)s.", "You cannot place a call with yourself.": "Nie możesz wykonać połączenia do siebie.", - "You cannot place VoIP calls in this browser.": "Nie możesz przeprowadzić rozmowy audio w tej przeglądarce.", + "You cannot place VoIP calls in this browser.": "Nie możesz przeprowadzić rozmowy głosowej VoIP w tej przeglądarce.", "You do not have permission to post to this room": "Nie jesteś uprawniony do pisania w tym pokoju", "You have been banned from %(roomName)s by %(userName)s.": "Zostałeś permanentnie usunięty z pokoju %(roomName)s przez %(userName)s.", "You have been invited to join this room by %(inviterName)s": "Zostałeś zaproszony do dołączenia do tego pokoju przez %(inviterName)s", "You have been kicked from %(roomName)s by %(userName)s.": "Zostałeś usunięty z %(roomName)s przez %(userName)s.", "You have been logged out of all devices and will no longer receive push notifications. To re-enable notifications, sign in again on each device": "Wylogowałeś się ze wszystkich urządzeń i nie będziesz już otrzymywał powiadomień push. Aby ponownie aktywować powiadomienia zaloguj się ponownie na każdym urządzeniu", "You have disabled URL previews by default.": "Masz domyślnie wyłączone podglądy linków.", - "You have entered an invalid contact. Try using their Matrix ID or email address.": "Wpisałeś niewłaściwy kontakt. Spróbuj używając identyfikacji Matrix lub adresu e-mail.", + "You have entered an invalid contact. Try using their Matrix ID or email address.": "Wpisałeś niewłaściwy kontakt. Spróbuj używając Matrix ID lub adresu e-mail.", "You have no visible notifications": "Nie masz widocznych powiadomień", "You may wish to login with a different account, or add this email to this account.": "Możesz chcieć zalogować się z innego konta lub dodać e-mail do tego konta.", "you must be a": "musisz być", - "You must register to use this functionality": "Musisz się zarejestrować aby używać tej funkcji", + "You must register to use this functionality": "Musisz się zarejestrować aby móc używać tej funkcji", "You need to be able to invite users to do that.": "Aby to zrobić musisz mieć możliwość zapraszania użytkowników.", "You need to be logged in.": "Musisz być zalogowany.", "You need to enter a user name.": "Musisz wpisać nazwę użytkownika.", - "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "Twój adres e-mail zdaje się nie być powiązany z identyfikacją Matrix na tym serwerze domowym.", + "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "Twój adres e-mail zdaje się nie być powiązany z żadnym Matrix ID na tym serwerze domowym.", "Your password has been reset": "Twoje hasło zostało zresetowane", "Your password was successfully changed. You will not receive push notifications on other devices until you log back in to them": "Zmiana Twojego hasła powiodła się. Nie będziesz otrzymywał powiadomień push na inne urządzenia aż do momentu ponownego zalogowania się na nich", "You seem to be in a call, are you sure you want to quit?": "Wygląda na to, że prowadzisz z kimś rozmowę; jesteś pewien że chcesz wyjść?", @@ -668,12 +667,12 @@ "You will not be able to undo this change as you are promoting the user to have the same power level as yourself.": "Nie będziesz mógł cofnąć tej zmiany, ponieważ nadajesz użytkownikowi uprawnienia administratorskie równe Twoim.", "Your home server does not support device management.": "Twój serwer domowy nie obsługuje zarządzania urządzeniami.", "Unbans user with given id": "Odblokowuje użytkownika o danym ID", - "Unable to ascertain that the address this invite was sent to matches one associated with your account.": "Brak możliwości stwierdzenia, że adres tego zaproszenia został wysłany na adres połączony z twoim kontem.", + "Unable to ascertain that the address this invite was sent to matches one associated with your account.": "Nie udało się upewnić, że adres na który to zaproszenie zostało wysłane zgadza się z tym adresem, który jest powiązany z twoim kontem.", "%(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", "%(weekDayName)s %(time)s": "%(weekDayName)s %(time)s", "Set a Display Name": "Ustaw nazwę ekranową", - "Upload an avatar:": "Prześlij zdjęcie profilowe:", + "Upload an avatar:": "Prześlij awatar:", "Missing password.": "Brakujące hasło.", "Passwords don't match.": "Hasła nie zgadzają się.", "Password too short (min %(MIN_PASSWORD_LENGTH)s).": "Za krótkie hasło (min. %(MIN_PASSWORD_LENGTH)s).", @@ -683,28 +682,28 @@ "Sent messages will be stored until your connection has returned.": "Wysłane wiadomości będą przechowywane aż do momentu odzyskania połączenia.", "Resend all or cancel all now. You can also select individual messages to resend or cancel.": "Wyślij ponownie wszystkie lub anuluj wszystkie teraz. Możesz też wybrać poszczególne wiadomości aby wysłać je ponownie lub anulować.", "(~%(count)s results)|one": "(~%(count)s wynik)", - "(~%(count)s results)|other": "(~%(count)s wyniki)", + "(~%(count)s results)|other": "(~%(count)s wyników)", "Active call": "Aktywna rozmowa", "strike": "przekreślenie", "bullet": "lista", "numbullet": "lista numerowana", - "%(severalUsers)sjoined %(repeats)s times": "%(severalUsers)sdołączyli do pokoju %(repeats)s razy", - "%(oneUser)sjoined %(repeats)s times": "%(oneUser)sdołączył do pokoju %(repeats)s razy", - "%(severalUsers)sjoined": "%(severalUsers)sdołączyli", - "%(oneUser)sjoined": "%(oneUser)sdołączył", - "%(severalUsers)sleft %(repeats)s times": "%(severalUsers)sopuścili pokój %(repeats)s razy", - "%(oneUser)sleft %(repeats)s times": "%(oneUser)sopuścił pokój %(repeats)s razy", - "%(severalUsers)sleft": "%(severalUsers)sopuścili pokój", - "%(oneUser)sleft": "%(oneUser)sopuścił pokój", - "%(severalUsers)sjoined and left %(repeats)s times": "%(severalUsers)sdołączyli i opuścili pokój %(repeats)s razy", - "%(oneUser)sjoined and left %(repeats)s times": "%(oneUser)sdołączył i opuścił pokój %(repeats)s razy", - "%(severalUsers)sjoined and left": "%(severalUsers)sdołączyli i opuścili pokój", - "%(oneUser)sjoined and left": "%(oneUser)sdołączył i opuścił pokój", - "%(severalUsers)sleft and rejoined %(repeats)s times": "%(severalUsers)sopuścili i ponownie dołączyli do pokoju %(repeats)s razy", - "%(oneUser)sleft and rejoined %(repeats)s times": "%(oneUser)sopuścił i ponownie dołączył do pokoju %(repeats)s razy", - "%(severalUsers)sleft and rejoined": "%(severalUsers)sopuścili i ponownie dołączyli do pokoju", - "%(oneUser)sleft and rejoined": "%(oneUser)sopuścił i dołączył ponownie do pokoju", - "%(severalUsers)srejected their invitations %(repeats)s times": "%(severalUsers)sodrzucili ich zaproszenia %(repeats)s razy", + "%(severalUsers)sjoined %(repeats)s times": "%(severalUsers)s dołączyli do pokoju %(repeats)s razy", + "%(oneUser)sjoined %(repeats)s times": "%(oneUser)s dołączył(a) do pokoju %(repeats)s razy", + "%(severalUsers)sjoined": "%(severalUsers)s dołączyli", + "%(oneUser)sjoined": "%(oneUser)s dołączył(a)", + "%(severalUsers)sleft %(repeats)s times": "%(severalUsers)s opuścili pokój %(repeats)s razy", + "%(oneUser)sleft %(repeats)s times": "%(oneUser)s opuścił(a) pokój %(repeats)s razy", + "%(severalUsers)sleft": "%(severalUsers)s opuścili pokój", + "%(oneUser)sleft": "%(oneUser)s opuścił(a) pokój", + "%(severalUsers)sjoined and left %(repeats)s times": "%(severalUsers)s dołączyli i opuścili pokój %(repeats)s razy", + "%(oneUser)sjoined and left %(repeats)s times": "%(oneUser)s dołączył(a) i opuścił(a) pokój %(repeats)s razy", + "%(severalUsers)sjoined and left": "%(severalUsers)s dołączyli i opuścili pokój", + "%(oneUser)sjoined and left": "%(oneUser)s dołączył(a) i opuścił(a) pokój", + "%(severalUsers)sleft and rejoined %(repeats)s times": "%(severalUsers)s opuścili i ponownie dołączyli do pokoju %(repeats)s razy", + "%(oneUser)sleft and rejoined %(repeats)s times": "%(oneUser)s opuścił(a) i ponownie dołączył(a) do pokoju %(repeats)s razy", + "%(severalUsers)sleft and rejoined": "%(severalUsers)s opuścili i ponownie dołączyli do pokoju", + "%(oneUser)sleft and rejoined": "%(oneUser)s opuścił(a) i dołączył(a) ponownie do pokoju", + "%(severalUsers)srejected their invitations %(repeats)s times": "%(severalUsers)s odrzucili swoje zaproszenia %(repeats)s razy", "%(oneUser)srejected their invitation %(repeats)s times": "%(oneUser)sodrzucił swoje zaproszenie %(repeats)s razy", "%(severalUsers)srejected their invitations": "%(severalUsers)sodrzucili swoje zaproszenia", "%(oneUser)srejected their invitation": "%(oneUser)sodrzucił swoje zaproszenie", @@ -713,42 +712,42 @@ "%(severalUsers)shad their invitations withdrawn": "%(severalUsers)swycofali swoje zaproszenia", "%(oneUser)shad their invitation withdrawn": "%(oneUser)swycofał swoje zaproszenie", "were invited %(repeats)s times": "zostali zaproszeni %(repeats)s razy", - "was invited %(repeats)s times": "został zaproszony %(repeats)s razy", + "was invited %(repeats)s times": "został(a) zaproszony/a %(repeats)s razy", "were invited": "zostali zaproszeni", - "was invited": "został zaproszony", + "was invited": "został(a) zaproszony/a", "were banned %(repeats)s times": "zostali zablokowani %(repeats)s times", - "was banned %(repeats)s times": "został zablokowany %(repeats)s razy", + "was banned %(repeats)s times": "został(a) zablokowany/a %(repeats)s razy", "were banned": "zostali zablokowani", - "was banned": "został zablokowany", + "was banned": "został(a) zablokowany/a", "were unbanned %(repeats)s times": "zostali odblokowani %(repeats)s razy", - "was unbanned %(repeats)s times": "został odblokowany %(repeats)s razy", + "was unbanned %(repeats)s times": "został(a) odblokowany/a %(repeats)s razy", "were unbanned": "zostali odblokowani", "was unbanned": "został odblokowany", "were kicked %(repeats)s times": "zostali usunięci %(repeats)s razy", "was kicked %(repeats)s times": "został usunięty %(repeats)s razy", "were kicked": "zostali usunięci", "was kicked": "został usunięty", - "%(severalUsers)schanged their name %(repeats)s times": "%(severalUsers)szmienili swoją nazwę %(repeats)s razy", - "%(oneUser)schanged their name %(repeats)s times": "%(oneUser)szmienił swoją nazwę %(repeats)s razy", + "%(severalUsers)schanged their name %(repeats)s times": "%(severalUsers)s zmienili swoją nazwę %(repeats)s razy", + "%(oneUser)schanged their name %(repeats)s times": "%(oneUser)s zmienił(a) swoją nazwę %(repeats)s razy", "%(severalUsers)schanged their name": "%(severalUsers)szmienili swoje nazwy", - "%(oneUser)schanged their name": "%(oneUser)szmienił swoją nazwę", - "%(severalUsers)schanged their avatar %(repeats)s times": "%(severalUsers)szmienili swoje zdjęcia profilowe %(repeats)s razy", - "%(oneUser)schanged their avatar %(repeats)s times": "%(oneUser)szmienił swoje zdjęcie profilowe %(repeats)s razy", - "%(severalUsers)schanged their avatar": "%(severalUsers)szmienili swoje zdjęcia profilowe", - "%(oneUser)schanged their avatar": "%(oneUser)szmienił swoje zdjęcie profilowe", + "%(oneUser)schanged their name": "%(oneUser)s zmienił(a) swoją nazwę", + "%(severalUsers)schanged their avatar %(repeats)s times": "%(severalUsers)s zmienili swoje zdjęcia profilowe %(repeats)s razy", + "%(oneUser)schanged their avatar %(repeats)s times": "%(oneUser)s zmienił(a) swoje zdjęcie profilowe %(repeats)s razy", + "%(severalUsers)schanged their avatar": "%(severalUsers)s zmienili swoje zdjęcia profilowe", + "%(oneUser)schanged their avatar": "%(oneUser)s zmienił(a) swoje zdjęcie profilowe", "Please select the destination room for this message": "Wybierz pokój docelowy dla tej wiadomości", "Start automatically after system login": "Uruchom automatycznie po zalogowaniu się do systemu", "Desktop specific": "Specyficzne dla desktopowej aplikacji klienckiej", "Analytics": "Analityka", "Passphrases must match": "Hasła szyfrujące muszą być identyczne", "Passphrase must not be empty": "Hasło szyfrujące nie może być puste", - "Export room keys": "Eksportuj klucze do pokoju", - "Confirm passphrase": "Potwierdź tekst szyfrujący", - "Import room keys": "Importuj klucze do pokoju", + "Export room keys": "Eksportuj klucze pokoju", + "Confirm passphrase": "Potwierdź hasło szyfrujące", + "Import room keys": "Importuj klucze pokoju", "File to import": "Plik do importu", - "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.": "Ten proces pozwala na eksport kluczy do wiadomości otrzymanych w zaszyfrowanych pokojach do pliku lokalnego. Wtedy będzie można importować plik do innego klienta Matrix w przyszłości, tak aby klient także mógł rozszyfrować te wiadomości.", - "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.": "Ten proces pozwala na import zaszyfrowanych kluczy, które wcześniej zostały eksportowane z innego klienta Matrix. Będzie można odszyfrować każdą wiadomość, którą inny klient może odszyfrować.", - "The export file will be protected with a passphrase. You should enter the passphrase here, to decrypt the file.": "Eksportowany plik będzie chroniony tekstem szyfrowanym. Aby odszyfrować plik, wpisz tekst szyfrowany tutaj.", + "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.": "Ten proces pozwala na eksport kluczy do wiadomości otrzymanych w zaszyfrowanych pokojach do pliku lokalnego. Wtedy będzie można importować plik do innego klienta Matrix w przyszłości, tak aby ów klient także mógł rozszyfrować te wiadomości.", + "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.": "Ten proces pozwala na import zaszyfrowanych kluczy, które wcześniej zostały eksportowane z innego klienta Matrix. Będzie można odszyfrować każdą wiadomość, którą ów inny klient mógł odszyfrować.", + "The export file will be protected with a passphrase. You should enter the passphrase here, to decrypt the file.": "Eksportowany plik będzie chroniony hasłem szyfrującym. Aby odszyfrować plik, wpisz hasło szyfrujące tutaj.", "You must join the room to see its files": "Należy dołączyć do pokoju by zobaczyć jego pliki", "Reject all %(invitedRooms)s invites": "Odrzuć wszystkie zaproszenia do %(invitedRooms)s", "Guest users can't invite users. Please register.": "Goście nie mogą zapraszać użytkowników. Zarejestruj się.", @@ -758,13 +757,13 @@ "Confirm Removal": "Potwierdź usunięcie", "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.": "Jesteś pewien że chcesz usunąć to wydarzenie? Pamiętaj, że jeśli usuniesz nazwę pokoju lub aktualizację tematu pokoju, zmiana może zostać cofnięta.", "This will make your account permanently unusable. You will not be able to re-register the same user ID.": "To sprawi, że Twoje konto będzie permamentnie nieużywalne. Nie będzie można zarejestrować się ponownie z tą samą identyfikacją użytkownika.", - "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:": "Aby sprawdzić czy to urządzenie jest zaufane, skontaktuj się z jego właścicielem używając innych środków (np. osobiście lub telefonicznie) i zapytaj ich czy klucz, który widzą w ustawieniach użytkownika dla tego urządzenia pasują do klucza poniżej:", - "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.": "Jeśli pasują, naciśnij na przycisk \"Sprawdź\" poniżej. Jeśli nie, to ktoś inny przejmuje to urządzenie i powinieneś nacisnąć na przycisk czarnej listy.", + "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:": "Aby sprawdzić czy to urządzenie jest zaufane, skontaktuj się z jego właścicielem używając innych środków (np. osobiście lub telefonicznie) i zapytaj ich czy klucz, który widzą w ustawieniach użytkownika dla tego urządzenia pasuje do klucza poniżej:", + "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.": "Jeśli klucz pasuje, naciśnij na przycisk \"Zweryfikuj\" poniżej. Jeśli nie, to ktoś inny najprawdopodobniej przejmuje lub podszywa się pod to urządzenie i powinieneś nacisnąć przycisk dodania do czarnej listy.", "In future this verification process will be more sophisticated.": "W przyszłości proces weryfikacji będzie bardziej skomplikowany.", "I verify that the keys match": "Upewnię się, że klucze się zgadzają", - "We encountered an error trying to restore your previous session. If you continue, you will need to log in again, and encrypted chat history will be unreadable.": "Napotkaliśmy błąd próbując przywrócić twoją poprzednią sesję. Jeśli chcesz kontynuować, będziesz musiał zalogować się ponownie, a historia zaszyfrowanego czatu nie będzie do odczytania.", + "We encountered an error trying to restore your previous session. If you continue, you will need to log in again, and encrypted chat history will be unreadable.": "Napotkaliśmy błąd podczas próby przywrócenia Twojej poprzedniej sesji. Aby kontynuować, musisz zalogować się ponownie, a zaszyfrowana historia czatu nie będzie do odczytania.", "Unable to restore session": "Przywrócenie sesji jest niemożliwe", - "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.": "Jeśli wcześniej używałeś nowszej wersji Riot, twoja sesja może być niekompatybilna z tą wersją. Zamknij to okno i powróć do nowszej wersji.", + "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.": "Jeśli wcześniej używałeś/aś nowszej wersji Riot, Twoja sesja może być niekompatybilna z tą wersją. Zamknij to okno i powróć do nowszej wersji.", "Continue anyway": "Kontynuuj mimo to", "You are currently blacklisting unverified devices; to send messages to these devices you must verify them.": "Aktualnie wpisujesz niezweryfikowane urządzenia na czarną listę; aby wysłać wiadomość do tych urządzeń musisz je zweryfikować.", "Riot collects anonymous analytics to allow us to improve the application.": "Riot zbiera anonimowe dane analityczne, aby umożliwić nam rozwijanie aplikacji.", @@ -792,7 +791,7 @@ "Removed or unknown message type": "Usunięto lub nieznany typ wiadomości", "Disable URL previews by default for participants in this room": "Ustaw podglądy linków na domyślnie wyłączone dla uczestników w tym pokoju", "Tried to load a specific point in this room's timeline, but was unable to find it.": "Próbowano załadować konkretny punkt na osi czasu w tym pokoju, ale nie nie można go znaleźć.", - "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.": "", + "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.": "Wyeksportowany plik pozwoli każdej osobie będącej w stanie go odczytać na deszyfrację jakichkolwiek zaszyfrowanych wiadomości, które możesz zobaczyć, tak więc zalecane jest zachowanie ostrożności. Aby w tym pomóc, powinieneś/aś wpisać hasło poniżej; hasło to będzie użyte do zaszyfrowania wyeksportowanych danych. Późniejsze zaimportowanie tych danych będzie możliwe tylko po uprzednim podaniu owego hasła.", " (unsupported)": " (niewspierany)", "for %(amount)ss": "za %(amount)s sek", "for %(amount)sm": "%(amount)s min", @@ -829,8 +828,33 @@ "Automatically replace plain text Emoji": "Automatycznie zastępuj tekstowe emotikony", "Failed to upload image": "Przesyłanie obrazka nie powiodło się", "Failed to update group": "Uaktualnienie grupy nie powiodło się", - "and %(count)s others...|other": "i %(count)s innych...", - "and %(count)s others...|one": "i jeden inny...", "%(count)s new messages|one": "%(count)s nowa wiadomość", - "%(count)s new messages|other": "%(count)s nowe wiadomości" + "%(count)s new messages|other": "%(count)s nowe wiadomości", + "%(weekDayName)s, %(monthName)s %(day)s": "%(weekDayName)s, %(day)s %(monthName)s", + "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(weekDayName)s, %(day)s %(monthName)s %(fullYear)s", + "Your display name is how you'll appear to others when you speak in rooms. What would you like it to be?": "Twoja nazwa ekranowa będzie się wyświetlać innym użytkownikom podczas twojego udzielania się w pokojach. Jaką nazwę chcesz ustawić?", + "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.": "Zalecamy Ci przejście przez proces weryfikacyjny dla każdego urządzenia aby potwierdzić, że należy ono do ich prawdziwego właściciela. Możesz jednak wysłać tę wiadomość bez potwierdzania.", + "Unblacklist": "Usuń z czarnej listy", + "Blacklist": "Dodaj do czarnej listy", + "Unverify": "Usuń weryfikację", + "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.": "Możesz zalogować się do innych serwerów usługi Matrix poprzez podanie innego URL serwera domowego w ustawieniach niestandardowych serwera.", + "You can also set a custom identity server but this will typically prevent interaction with users based on email address.": "Możesz również ustawić niestandardowy serwer Identity, ale to z reguły nie pozwala na interakcję z użytkowniki w oparciu o ich adres e-mail.", + "Identity server URL": "URL serwera Identity", + "You are about to be taken to a third-party site so you can authenticate your account for use with %(integrationsUrl)s. Do you wish to continue?": "Za chwilę zostaniesz przekierowany/a na zewnętrzną stronę w celu powiązania Twojego konta z %(integrationsUrl)s. Czy chcesz kontynuować?", + "Disable URL previews for this room (affects only you)": "Wyłącz podglądy linków w tym pokoju (dotyczy tylko Ciebie)", + "URL previews are %(globalDisableUrlPreview)s by default for participants in this room.": "Podglądy linków są domyślnie %(globalDisableUrlPreview)s dla uczestników tego pokoju.", + "URL Previews": "Podglądy linków", + "Enable URL previews for this room (affects only you)": "Włącz podglądy linków w tym pokoju (dotyczy tylko Ciebie)", + "Ongoing conference call%(supportedText)s.": "Połączenie grupowe %(supportedText)s w toku.", + "Group IDs must be of the form +localpart:%(domain)s": "ID grupy muszą mieć format +częśćlokalna:%(domain)s", + "It is currently only possible to create groups on your own home server: use a group ID ending with %(domain)s": "W chwili obecnej tworzenie grup jest możliwe wyłącznie na Twoim własnym serwerze domowym: użyj ID grupy kończącego się na %(domain)s", + "Create a group to represent your community! Define a set of rooms and your own custom homepage to mark out your space in the Matrix universe.": "Stwórz grupę, aby reprezentować Twoją społeczność! Zdefiniuj zestaw kanałów i Twoją własną stronę WWW by oznaczyć swoje miejsce w wszechświecie Matrixa.", + "To join an existing group you'll have to know its group identifier; this will look something like +example:matrix.org.": "Aby dołączyć do istniejącej grupy musisz znać jej identyfikator; wygląda on mniej więcej tak: +example:matrix.org.", + "Featured Rooms:": "Wyróżnione pokoje:", + "Featured Users:": "Wyróżnieni użytkownicy:", + "Hide avatars in user and room mentions": "Ukryj awatary we wzmiankach użytkowników i pokoi", + "%(widgetName)s widget added by %(senderName)s": "Widżet %(widgetName)s został dodany przez %(senderName)s", + "%(widgetName)s widget removed by %(senderName)s": "Widżet %(widgetName)s został usunięty przez %(senderName)s", + "%(widgetName)s widget modified by %(senderName)s": "Widżet %(widgetName)s został zmodyfikowany przez %(senderName)s", + "Robot check is currently unavailable on desktop - please use a web browser": "Sprawdzanie człowieczeństwa jest obecnie niedostępne na aplikacji klienckiej desktop - proszę użyć przeglądarki internetowej" } diff --git a/src/i18n/strings/pt.json b/src/i18n/strings/pt.json index 35ae2cc332..be183106ab 100644 --- a/src/i18n/strings/pt.json +++ b/src/i18n/strings/pt.json @@ -8,9 +8,6 @@ "Admin": "Administrador/a", "Advanced": "Avançado", "Algorithm": "Algoritmo", - "all room members, from the point they are invited.": "todos os membros da sala, a partir de quando foram convidados", - "all room members, from the point they joined.": "todos os membros da sala, a partir de quando entraram", - "all room members": "todas as pessoas da sala", "an address": "um endereço", "and": "e", "An email has been sent to": "Um email foi enviado para", @@ -130,7 +127,6 @@ "Login as guest": "Entrar como visitante", "Logout": "Sair", "Low priority": "Baixa prioridade", - "made future room history visible to": "deixou o histórico futuro da sala visível para", "Manage Integrations": "Gerenciar integrações", "Members only": "Apenas integrantes da sala", "Mobile phone number": "Telefone celular", @@ -243,7 +239,6 @@ "unencrypted": "não criptografado", "unknown device": "dispositivo desconhecido", "unknown error code": "código de erro desconhecido", - "unknown": "desconhecido", "Upload avatar": "Enviar icone de perfil de usuário", "uploaded a file": "enviou um arquivo", "Upload Files": "Enviar arquivos", @@ -311,7 +306,6 @@ "%(names)s and one other are typing": "%(names)s e uma outra pessoa estão escrevendo", "%(names)s and %(count)s others are typing": "%(names)s e %(count)s outras pessoas estão escrevendo", "%(senderName)s answered the call.": "%(senderName)s atendeu à chamada.", - "anyone": "qualquer pessoa", "%(senderName)s banned %(targetName)s.": "%(senderName)s removeu %(targetName)s da sala.", "Call Timeout": "Tempo esgotado. Chamada encerrada", "%(senderName)s changed their display name from %(oldDisplayName)s to %(displayName)s.": "%(senderName)s mudou seu nome público de %(oldDisplayName)s para %(displayName)s.", @@ -341,7 +335,11 @@ "%(targetName)s joined the room.": "%(targetName)s entrou na sala.", "%(senderName)s kicked %(targetName)s.": "%(senderName)s removeu %(targetName)s da sala.", "%(targetName)s left the room.": "%(targetName)s saiu da sala.", - "%(senderName)s made future room history visible to": "%(senderName)s deixou o histórico futuro da sala visível para", + "%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s deixou o histórico futuro da sala visível para todos os membros da sala, a partir de quando foram convidados.", + "%(senderName)s made future room history visible to all room members, from the point they joined.": "%(senderName)s deixou o histórico futuro da sala visível para todos os membros da sala, a partir de quando entraram.", + "%(senderName)s made future room history visible to all room members.": "%(senderName)s deixou o histórico futuro da sala visível para todas as pessoas da sala.", + "%(senderName)s made future room history visible to anyone.": "%(senderName)s deixou o histórico futuro da sala visível para qualquer pessoa.", + "%(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", diff --git a/src/i18n/strings/pt_BR.json b/src/i18n/strings/pt_BR.json index 3195bd6083..3b45f73858 100644 --- a/src/i18n/strings/pt_BR.json +++ b/src/i18n/strings/pt_BR.json @@ -8,9 +8,6 @@ "Admin": "Administrador/a", "Advanced": "Avançado", "Algorithm": "Algoritmo", - "all room members, from the point they are invited.": "todos os membros da sala, a partir de quando foram convidados", - "all room members, from the point they joined.": "todos os membros da sala, a partir de quando entraram", - "all room members": "todas as pessoas da sala", "an address": "um endereço", "and": "e", "An email has been sent to": "Um email foi enviado para", @@ -130,7 +127,6 @@ "Login as guest": "Entrar como visitante", "Logout": "Sair", "Low priority": "Baixa prioridade", - "made future room history visible to": "deixou o histórico futuro da sala visível para", "Manage Integrations": "Gerenciar integrações", "Members only": "Apenas integrantes da sala", "Mobile phone number": "Telefone celular", @@ -243,7 +239,6 @@ "unencrypted": "não criptografado", "unknown device": "dispositivo desconhecido", "unknown error code": "código de erro desconhecido", - "unknown": "desconhecido", "Upload avatar": "Enviar icone de perfil de usuário", "uploaded a file": "enviou um arquivo", "Upload Files": "Enviar arquivos", @@ -305,13 +300,10 @@ "%(weekDayName)s %(time)s": "%(weekDayName)s às %(time)s", "%(targetName)s accepted an invitation.": "%(targetName)s aceitou um convite.", "%(targetName)s accepted the invitation for %(displayName)s.": "%(targetName)s aceitou o convite para %(displayName)s.", - "all room members, from the point they are invited": "todas/os as/os integrantes da sala, a partir do momento em que foram convidadas/os", - "all room members, from the point they joined": "todas/os as/os integrantes da sala, a partir do momento em que entraram na sala", "%(names)s and %(lastPerson)s are typing": "%(names)s e %(lastPerson)s estão escrevendo", "%(names)s and one other are typing": "%(names)s e uma outra pessoa estão escrevendo", "%(names)s and %(count)s others are typing": "%(names)s e %(count)s outras pessoas estão escrevendo", "%(senderName)s answered the call.": "%(senderName)s atendeu à chamada.", - "anyone": "qualquer pessoa", "%(senderName)s banned %(targetName)s.": "%(senderName)s removeu %(targetName)s da sala.", "Call Timeout": "Tempo esgotado. Chamada encerrada", "%(senderName)s changed their display name from %(oldDisplayName)s to %(displayName)s.": "%(senderName)s mudou seu nome público de %(oldDisplayName)s para %(displayName)s.", @@ -341,7 +333,11 @@ "%(targetName)s joined the room.": "%(targetName)s entrou na sala.", "%(senderName)s kicked %(targetName)s.": "%(senderName)s removeu %(targetName)s da sala.", "%(targetName)s left the room.": "%(targetName)s saiu da sala.", - "%(senderName)s made future room history visible to": "%(senderName)s deixou o histórico futuro da sala visível para", + "%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s deixou o histórico futuro da sala visível para todos os membros da sala, a partir de quando foram convidados.", + "%(senderName)s made future room history visible to all room members, from the point they joined.": "%(senderName)s deixou o histórico futuro da sala visível para todos os membros da sala, a partir de quando entraram.", + "%(senderName)s made future room history visible to all room members.": "%(senderName)s deixou o histórico futuro da sala visível para todas as pessoas da sala.", + "%(senderName)s made future room history visible to anyone.": "%(senderName)s deixou o histórico futuro da sala visível para qualquer pessoa.", + "%(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", diff --git a/src/i18n/strings/ru.json b/src/i18n/strings/ru.json index 374fd38ffc..5d964f8b17 100644 --- a/src/i18n/strings/ru.json +++ b/src/i18n/strings/ru.json @@ -8,15 +8,11 @@ "Admin": "Администратор", "Advanced": "Дополнительно", "Algorithm": "Алгоритм", - "all room members": "все участники комнаты", - "all room members, from the point they are invited": "все участники комнаты, с момента приглашения", - "all room members, from the point they joined": "все участники комнаты, с момента входа", "an address": "адрес", "and": "и", "An email has been sent to": "Email был отправлен", "A new password must be entered.": "Введите новый пароль.", "answered the call.": "принятый звонок.", - "anyone": "любой", "Anyone who knows the room's link, apart from guests": "Любой, кто знает ссылку на комнату, кроме гостей", "Anyone who knows the room's link, including guests": "Любой, кто знает ссылку комнаты, включая гостей", "Are you sure you want to reject the invitation?": "Вы уверены что вы хотите отклонить приглашение?", @@ -118,7 +114,6 @@ "Login as guest": "Войти как гость", "Logout": "Выйти", "Low priority": "Низкий приоритет", - "made future room history visible to": "made future room history visible to", "Manage Integrations": "Управление интеграциями", "Members only": "Только участники", "Mobile phone number": "Номер мобильного телефона", @@ -173,7 +168,6 @@ "unencrypted": "без шифрования", "unknown device": "неизвестное устройство", "unknown error code": "неизвестный код ошибки", - "unknown": "неизвестный", "Upload avatar": "Загрузить аватар", "uploaded a file": "отправил(а) файл", "Upload Files": "Отправка файлов", @@ -249,7 +243,11 @@ "%(targetName)s joined the room.": "%(targetName)s вошел(ла) в комнату.", "%(senderName)s kicked %(targetName)s.": "%(senderName)s выкинул %(targetName)s.", "%(targetName)s left the room.": "%(targetName)s покинул комнату.", - "%(senderName)s made future room history visible to": "%(senderName)s сделал будущую историю комнаты видимой", + "%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s сделал будущую историю комнаты видимой все участники комнаты, с момента приглашения.", + "%(senderName)s made future room history visible to all room members, from the point they joined.": "%(senderName)s сделал будущую историю комнаты видимой все участники комнаты, с момента входа.", + "%(senderName)s made future room history visible to all room members.": "%(senderName)s сделал будущую историю комнаты видимой все участники комнаты.", + "%(senderName)s made future room history visible to anyone.": "%(senderName)s сделал будущую историю комнаты видимой любой.", + "%(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": "Необходимо посмотреть комнату", @@ -904,5 +902,9 @@ "%(widgetName)s widget removed by %(senderName)s": "%(widgetName)s виджет, удаленный %(senderName)s", "Robot check is currently unavailable on desktop - please use a web browser": "Проверка робота в настоящее время недоступна на компьютере - пожалуйста, используйте браузер", "Publish this room to the public in %(domain)s's room directory?": "Опубликовать эту комнату для пользователей в %(domain)s каталоге комнат?", - "%(widgetName)s widget modified by %(senderName)s": "%(widgetName)s виджет, измененный %(senderName)s" + "%(widgetName)s widget modified by %(senderName)s": "%(widgetName)s виджет, измененный %(senderName)s", + "%(weekDayName)s, %(monthName)s %(day)s": "%(weekDayName)s, %(monthName)s %(day)s", + "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s", + "Copied!": "Скопировано!", + "Failed to copy": "Не удалось скопировать" } diff --git a/src/i18n/strings/sv.json b/src/i18n/strings/sv.json index 5a6623caa3..68a3b240fc 100644 --- a/src/i18n/strings/sv.json +++ b/src/i18n/strings/sv.json @@ -22,9 +22,6 @@ "Always show message timestamps": "Visa alltid tidsstämpel för meddelanden", "Hide removed messages": "Göm raderade meddelanden", "Authentication": "Autentisering", - "all room members": "alla rumsmedlemmar", - "all room members, from the point they are invited": "alla rumsmedlemmar fr.o.m att de bjöds in", - "all room members, from the point they joined": "alla rumsmedlemmar fr.o.m. att de gick med som medlem", "an address": "en address", "and": "och", "%(items)s and %(remaining)s others": "%(items)s och %(remaining)s andra", @@ -39,7 +36,6 @@ "A new password must be entered.": "Ett nytt lösenord måste anges.", "%(senderName)s answered the call.": "%(senderName)s svarade på samtalet.", "Anyone who knows the room's link, including guests": "Alla som har rummets adress, inklusive gäster", - "anyone": "vem som helst", "Anyone": "Vem som helst", "Anyone who knows the room's link, apart from guests": "Alla som har rummets adress, förutom gäster", "An error has occurred.": "Ett fel har inträffat.", @@ -267,7 +263,10 @@ "Login as guest": "Logga in som gäst", "Logout": "Logga ut", "Low priority": "Lågprioritet", - "%(senderName)s made future room history visible to": "%(senderName)s gjorde framtida rumshistorik synligt åt", + "%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s gjorde framtida rumshistorik synligt åt alla rumsmedlemmar fr.o.m att de bjöds in.", + "%(senderName)s made future room history visible to all room members, from the point they joined.": "%(senderName)s gjorde framtida rumshistorik synligt åt alla rumsmedlemmar fr.o.m. att de gick med som medlem.", + "%(senderName)s made future room history visible to all room members.": "%(senderName)s gjorde framtida rumshistorik synligt åt alla rumsmedlemmar.", + "%(senderName)s made future room history visible to anyone.": "%(senderName)s gjorde framtida rumshistorik synligt åt vem som helst.", "Manage Integrations": "Hantera integrationer", "Markdown is disabled": "Markdown är inaktiverat", "Markdown is enabled": "Markdown är aktiverat", diff --git a/src/i18n/strings/te.json b/src/i18n/strings/te.json index 6adacb0dde..db9a6e29c2 100644 --- a/src/i18n/strings/te.json +++ b/src/i18n/strings/te.json @@ -27,13 +27,10 @@ "Always show message timestamps": "ఎల్లప్పుడూ సందేశాల సమయ ముద్రలు చూపించు", "Authentication": "ప్రామాణీకరణ", "Alias (optional)": "అలియాస్ (ఇవచు ఇవకపపోవచు)", - "all room members": "అన్ని గదుల సభ్యులు", "You do not have permission to post to this room": "మీకు ఈ గదికి పోస్ట్ చేయడానికి అనుమతి లేదు", "You have been invited to join this room by %(inviterName)s": "%(inviterName)s ఈ గదిలో చేరడానికి మీరు ఆహ్వానించబడ్డారు", "Active call (%(roomName)s)": "క్రియాశీల కాల్ల్ (%(roomName)s)", "And %(count)s more...": "మరియు %(count)s ఇంకా ...", - "all room members, from the point they are invited": "అన్ని గది సభ్యులు, పాయింట్ నుండి వారు ఆహ్వానించబడ్డారు", - "all room members, from the point they joined": "అన్ని గది సభ్యులు, పాయింట్ నుండి వారు చేరారు", "and": "మరియు", "and one other...": "మరియు మరొకటి ...", "%(names)s and one other are typing": "%(names)s మరియు మరొకటి టైప్ చేస్తున్నారు", @@ -41,7 +38,6 @@ "An email has been sent to": "ఒక ఇమెయిల్ పంపబడింది", "A new password must be entered.": "కొత్త పాస్ వర్డ్ ను తప్పక నమోదు చేయాలి.", "%(senderName)s answered the call.": "%(senderName)s కు సమాధానం ఇచ్చారు.", - "anyone": "ఎవరైనా", "An error has occurred.": "ఒక లోపము సంభవించినది.", "Anyone": "ఎవరైనా", "Anyone who knows the room's link, apart from guests": "అతిథులు కాకుండా గది యొక్క లింక్ తెలిసిన వారు ఎవరైనా", diff --git a/src/i18n/strings/th.json b/src/i18n/strings/th.json index b7d2140f60..583b123d1f 100644 --- a/src/i18n/strings/th.json +++ b/src/i18n/strings/th.json @@ -82,9 +82,6 @@ "Algorithm": "อัลกอริทึม", "Hide removed messages": "ซ่อนข้อความที่ถูกลบแล้ว", "Authentication": "การยืนยันตัวตน", - "all room members": "สมาชิกทั้งหมด", - "all room members, from the point they are invited": "สมาชิกทั้งหมด นับตั้งแต่เมื่อได้รับคำเชิญ", - "all room members, from the point they joined": "สมาชิกทั้งหมด นับตั้งแต่เมื่อเข้าร่วมห้อง", "an address": "ที่อยู่", "%(items)s and %(remaining)s others": "%(items)s และอีก %(remaining)s ผู้ใช้", "%(items)s and one other": "%(items)s และอีกหนึ่งผู้ใช้", @@ -95,7 +92,6 @@ "%(names)s and one other are typing": "%(names)s และอีกหนึ่งคนกำลังพิมพ์", "%(names)s and %(count)s others are typing": "%(names)s และอีก %(count)s คนกำลังพิมพ์", "%(senderName)s answered the call.": "%(senderName)s รับสายแล้ว", - "anyone": "ทุกคน", "An error has occurred.": "เกิดข้อผิดพลาด", "Anyone": "ทุกคน", "Anyone who knows the room's link, apart from guests": "ทุกคนที่มีลิงก์ ยกเว้นแขก", @@ -353,7 +349,6 @@ "unknown device": "อุปกรณ์ที่ไม่รู้จัก", "Unknown room %(roomId)s": "ห้องที่ไม่รู้จัก %(roomId)s", "Unknown (user, device) pair:": "คู่ (ผู้ใช้, อุปกรณ์) ที่ไม่รู้จัก:", - "unknown": "ไม่รู้จัก", "Unrecognised command:": "คำสั่งที่ไม่รู้จัก:", "Unrecognised room alias:": "นามแฝงห้องที่ไม่รู้จัก:", "Uploading %(filename)s and %(count)s others|zero": "กำลังอัปโหลด %(filename)s", diff --git a/src/i18n/strings/tr.json b/src/i18n/strings/tr.json index 3af7694d85..4b3bdbd6a2 100644 --- a/src/i18n/strings/tr.json +++ b/src/i18n/strings/tr.json @@ -29,9 +29,6 @@ "Always show message timestamps": "Her zaman mesaj zaman dalgalarını (timestamps) gösterin", "Authentication": "Doğrulama", "Alias (optional)": "Diğer ad (isteğe bağlı)", - "all room members": "Tüm oda üyeleri", - "all room members, from the point they are invited": "Tüm oda üyeleri , davet edildiği noktadan", - "all room members, from the point they joined": "Tüm oda üyeleri , katıldıkları noktalardan", "and": "ve", "%(items)s and %(remaining)s others": "%(items)s ve %(remaining)s diğerleri", "%(items)s and one other": "%(items)s ve bir başkası", @@ -44,7 +41,6 @@ "An email has been sent to": "Bir e-posta gönderildi", "A new password must be entered.": "Yeni bir şifre girilmelidir.", "%(senderName)s answered the call.": "%(senderName)s aramayı cevapladı.", - "anyone": "herhangi biri", "An error has occurred.": "Bir hata oluştu.", "Anyone": "Kimse", "Anyone who knows the room's link, apart from guests": "Misafirler dışında odanın bağlantısını bilen herkes", @@ -262,7 +258,11 @@ "Login as guest": "Misafir olarak giriş yaptı", "Logout": "Çıkış Yap", "Low priority": "Düşük öncelikli", - "%(senderName)s made future room history visible to": "%(senderName)s gelecekte oda geçmişini görünür yaptı", + "%(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.", + "%(senderName)s made future room history visible to all room members, from the point they joined.": "%(senderName)s gelecekte oda geçmişini görünür yaptı Tüm oda üyeleri , katıldıkları noktalardan.", + "%(senderName)s made future room history visible to all room members.": "%(senderName)s gelecekte oda geçmişini görünür yaptı Tüm oda üyeleri.", + "%(senderName)s made future room history visible to anyone.": "%(senderName)s gelecekte oda geçmişini görünür yaptı herhangi biri.", + "%(senderName)s made future room history visible to unknown (%(visibility)s).": "%(senderName)s gelecekte oda geçmişini görünür yaptı bilinmeyen (%(visibility)s).", "Manage Integrations": "Entegrasyonları Yönet", "Markdown is disabled": "Markdown devre dışı", "Markdown is enabled": "Markdown aktif", @@ -471,7 +471,6 @@ "unknown error code": "bilinmeyen hata kodu", "Unknown room %(roomId)s": "Bilinmeyen oda %(roomId)s", "Unknown (user, device) pair:": "Bilinmeyen (kullanıcı , cihaz) çifti :", - "unknown": "bilinmeyen", "Unmute": "Sesi aç", "Unnamed Room": "İsimsiz Oda", "Unrecognised command:": "Tanınmayan komut :", diff --git a/src/i18n/strings/uk.json b/src/i18n/strings/uk.json index fada12aa2b..5ddb41830d 100644 --- a/src/i18n/strings/uk.json +++ b/src/i18n/strings/uk.json @@ -65,9 +65,6 @@ "Always show message timestamps": "Завжди показувати часові позначки повідомлень", "Authentication": "Впізнавання", "Alias (optional)": "Псевдонім (необов'язково)", - "all room members": "усі члени кімнати", - "all room members, from the point they are invited": "усі члени кімнати з моменту запрошення", - "all room members, from the point they joined": "усі члени кімнати з моменту приєднання", "and": "та", "%(items)s and %(remaining)s others": "%(items)s та інші %(remaining)s", "%(items)s and one other": "%(items)s і ще один інший", diff --git a/src/i18n/strings/zh_Hans.json b/src/i18n/strings/zh_Hans.json index cd05a30aee..1d3c685ed5 100644 --- a/src/i18n/strings/zh_Hans.json +++ b/src/i18n/strings/zh_Hans.json @@ -160,9 +160,6 @@ "Advanced": "高级", "Algorithm": "算法", "Always show message timestamps": "总是显示消息时间戳", - "all room members": "所有聊天室成员", - "all room members, from the point they are invited": "所有聊天室成员,从他们被邀请开始", - "all room members, from the point they joined": "所有聊天室成员,从他们加入开始", "an address": "一个地址", "and": "和", "%(names)s and %(lastPerson)s are typing": "%(names)s 和 %(lastPerson)s 正在打字", @@ -212,7 +209,6 @@ "and %(count)s others...|other": "和其它 %(count)s 个...", "and %(count)s others...|one": "和其它一个...", "%(names)s and one other are typing": "%(names)s 和另一个人正在打字", - "anyone": "任何人", "Anyone": "任何人", "Anyone who knows the room's link, apart from guests": "任何知道聊天室链接的人,游客除外", "Anyone who knows the room's link, including guests": "任何知道聊天室链接的人,包括游客", @@ -516,7 +512,6 @@ "Unencrypted message": "未加密的消息", "unknown caller": "未知的呼叫者", "unknown device": "未知设备", - "unknown": "未知的", "Unnamed Room": "未命名的聊天室", "Unverified": "未验证", "uploaded a file": "上传一个文件", @@ -543,7 +538,7 @@ "No users have specific privileges in this room": "没有用户在这个聊天室有特殊权限", "%(senderName)s placed a %(callType)s call.": "%(senderName)s 发起了一个 %(callType)s 通话。", "Please check your email and click on the link it contains. Once this is done, click continue.": "请检查你的电子邮箱并点击里面包含的链接。完成时请点击继续。", - "Press to start a chat with someone": "按下 来开始和某个人聊天。", + "Press to start a chat with someone": "按下 来开始和某个人聊天", "%(senderName)s removed their profile picture.": "%(senderName)s 移除了他们的头像。", "%(senderName)s requested a VoIP conference.": "%(senderName)s 请求一个 VoIP 会议。", "Seen by %(userName)s at %(dateTime)s": "在 %(dateTime)s 被 %(userName)s 看到", @@ -559,7 +554,11 @@ "demote": "降级", "Deops user with given id": "Deops user", "Join as voice or video.": "通过 语言 或者 视频加入.", - "%(senderName)s made future room history visible to": "%(senderName)s 设定历史浏览功能为", + "%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s 设定历史浏览功能为 所有聊天室成员,从他们被邀请开始.", + "%(senderName)s made future room history visible to all room members, from the point they joined.": "%(senderName)s 设定历史浏览功能为 所有聊天室成员,从他们加入开始.", + "%(senderName)s made future room history visible to all room members.": "%(senderName)s 设定历史浏览功能为 所有聊天室成员.", + "%(senderName)s made future room history visible to anyone.": "%(senderName)s 设定历史浏览功能为 任何人.", + "%(senderName)s made future room history visible to unknown (%(visibility)s).": "%(senderName)s 设定历史浏览功能为 未知的 (%(visibility)s).", "AM": "上午", "PM": "下午", "NOTE: Apps are not end-to-end encrypted": "提示:APP不支持端对端加密", @@ -630,5 +629,67 @@ "Something went wrong!": "出了点问题!", "If you already have a Matrix account you can log in instead.": "如果你已经有一个 Matrix 帐号,你可以登录。", "Do you want to set an email address?": "你要设置一个电子邮箱地址吗?", - "Room creation failed": "创建聊天室失败" + "Room creation failed": "创建聊天室失败", + "New address (e.g. #foo:%(localDomain)s)": "新的地址(例如 #foo:%(localDomain)s)", + "tag as %(tagName)s": "标记为 %(tagName)s", + "Upload new:": "上传新的:", + "User ID": "用户 ID", + "Username invalid: %(errMessage)s": "用户名无效: %(errMessage)s", + "Verification Pending": "验证等待中", + "(unknown failure: %(reason)s)": "(未知错误:%(reason)s)", + "WARNING: KEY VERIFICATION FAILED! The signing key for %(userId)s and device %(deviceId)s is \"%(fprint)s\" which does not match the provided key \"%(fingerprint)s\". This could mean your communications are being intercepted!": "警告:密钥验证失败!%(userId)s 和 device %(deviceId)s 的签名密钥是 \"%(fprint)s\",和提供的咪呀 \"%(fingerprint)s\" 不匹配。这可能意味着你的通信正在被窃听!", + "%(senderName)s withdrew %(targetName)s's invitation.": "%(senderName)s 收回了 %(targetName)s 的邀请。", + "Would you like to accept or decline this invitation?": "你想要 接受 还是 拒绝 这个邀请?", + "You already have existing direct chats with this user:": "你已经有和这个用户的直接聊天:", + "You're not in any rooms yet! Press to make a room or to browse the directory": "你现在还不再任何聊天室!按下 来创建一个聊天室或者 来浏览目录", + "You cannot place a call with yourself.": "你不能和你自己发起一个通话。", + "You have been kicked from %(roomName)s by %(userName)s.": "你已经被 %(userName)s 踢出了 %(roomName)s.", + "You have been logged out of all devices and will no longer receive push notifications. To re-enable notifications, sign in again on each device": "你已经登出了所有的设备并不再接收推送通知。要重新启用通知,请再在每个设备上登录", + "You have disabled URL previews by default.": "你已经默认 禁用 URL 预览。", + "You have enabled URL previews by default.": "你已经默认 启用 URL 预览。", + "You have entered an invalid contact. Try using their Matrix ID or email address.": "你输入了一个非法的联系人。尝试使用他们的 Matrix ID 或者电子邮件地址。", + "Your home server does not support device management.": "你的 home server 不支持设备管理。", + "Set a display name:": "设置一个昵称:", + "Set a Display Name": "设置一个昵称", + "This server does not support authentication with a phone number.": "这个服务器不支持用电话号码认证。", + "Password too short (min %(MIN_PASSWORD_LENGTH)s).": "密码过短(最短为 %(MIN_PASSWORD_LENGTH)s)。", + "Make this room private": "使这个聊天室私密", + "Share message history with new users": "和新用户共享消息历史", + "Copied!": "已复制!", + "Failed to copy": "复制失败", + "Sent messages will be stored until your connection has returned.": "已发送的消息会被保存直到你的连接回来。", + "(~%(count)s results)|one": "(~%(count)s 个结果)", + "(~%(count)s results)|other": "(~%(count)s 个结果)", + "or": "或者", + "%(severalUsers)sjoined %(repeats)s times": "%(severalUsers)s 加入了 %(repeats)s 次", + "%(oneUser)sjoined %(repeats)s times": "%(oneUser)s 加入了 %(repeats)s 次", + "%(severalUsers)sjoined": "%(severalUsers)s 加入了", + "%(oneUser)sjoined": "%(oneUser)s 加入了", + "%(severalUsers)sleft %(repeats)s times": "%(severalUsers)s 离开了 %(repeats)s 次", + "%(oneUser)sleft %(repeats)s times": "%(oneUser)s 离开了 %(repeats)s 次", + "%(severalUsers)sleft": "%(severalUsers)s 离开了", + "%(oneUser)sleft": "%(oneUser)s 离开了", + "%(oneUser)sjoined and left %(repeats)s times": "%(oneUser)s 加入并离开了 %(repeats)s 次", + "%(severalUsers)sjoined and left": "%(severalUsers)s 加入并离开了", + "%(oneUser)sjoined and left": "%(oneUser)s 加入并离开了", + "%(severalUsers)sleft and rejoined %(repeats)s times": "%(severalUsers)s 离开并重新加入了 %(repeats)s 次", + "%(oneUser)sleft and rejoined %(repeats)s times": "%(oneUser)s 离开并重新加入了 %(repeats)s 次", + "%(severalUsers)sleft and rejoined": "%(severalUsers)s 离开并重新加入了", + "%(oneUser)sleft and rejoined": "%(oneUser)s 离开并重新加入了", + "%(severalUsers)srejected their invitations %(repeats)s times": "%(severalUsers)s 拒绝了他们的邀请 %(repeats)s 次", + "%(oneUser)srejected their invitation %(repeats)s times": "%(oneUser)s 拒绝了他们的邀请 %(repeats)s 次", + "%(severalUsers)srejected their invitations": "%(severalUsers)s 拒绝了他们的邀请", + "%(oneUser)srejected their invitation": "%(oneUser)s 拒绝了他们的邀请", + "%(severalUsers)schanged their name %(repeats)s times": "%(severalUsers)s 改了他们的名字 %(repeats)s 次", + "%(oneUser)schanged their name %(repeats)s times": "%(oneUser)s 改了他们的名字 %(repeats)s 次", + "%(severalUsers)schanged their name": "%(severalUsers)s 改了他们的名字", + "%(oneUser)schanged their name": "%(oneUser)s 改了他们的名字", + "%(severalUsers)schanged their avatar %(repeats)s times": "%(severalUsers)s 更换了他们的的头像 %(repeats)s 次", + "%(oneUser)schanged their avatar %(repeats)s times": "%(oneUser)s 更换了他们的头像 %(repeats)s 次", + "%(severalUsers)schanged their avatar": "%(severalUsers)s 更换了他们的头像", + "%(oneUser)schanged their avatar": "%(oneUser)s 更换了他们的头像", + "Please select the destination room for this message": "请选择这条消息的目标聊天室", + "Start automatically after system login": "在系统登录后自动启动", + "Analytics": "分析", + "Reject all %(invitedRooms)s invites": "拒绝所有 %(invitedRooms)s 邀请" } diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json index 1c00901c8c..6e3b089e8f 100644 --- a/src/i18n/strings/zh_Hant.json +++ b/src/i18n/strings/zh_Hant.json @@ -1,7 +1,6 @@ { "An email has been sent to": "一封郵件已經被發送到", "A new password must be entered.": "一個新的密碼必須被輸入。.", - "anyone": "任何人", "An error has occurred.": "一個錯誤出現了。", "Anyone who knows the room's link, apart from guests": "任何知道房間連結的人,但訪客除外", "Anyone who knows the room's link, including guests": "任何知道房間連結的人,包括訪客", @@ -31,9 +30,6 @@ "Algorithm": "算法", "Always show message timestamps": "總是顯示訊息時間戳", "Authentication": "授權", - "all room members": "所有聊天室成員", - "all room members, from the point they are invited": "所有聊天室成員,從他們被邀請開始", - "all room members, from the point they joined": "所有聊天室成員,從他們加入開始", "an address": "一個地址", "and": "和", "%(items)s and %(remaining)s others": "%(items)s 和 %(remaining)s 其它", @@ -400,7 +396,11 @@ "Logged in as:": "登入為:", "Logout": "登出", "Low priority": "低優先度", - "%(senderName)s made future room history visible to": "%(senderName)s 讓未來的房間歷史紀錄可見於", + "%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s 讓未來的房間歷史紀錄可見於 所有聊天室成員,從他們被邀請開始.", + "%(senderName)s made future room history visible to all room members, from the point they joined.": "%(senderName)s 讓未來的房間歷史紀錄可見於 所有聊天室成員,從他們加入開始.", + "%(senderName)s made future room history visible to all room members.": "%(senderName)s 讓未來的房間歷史紀錄可見於 所有聊天室成員.", + "%(senderName)s made future room history visible to anyone.": "%(senderName)s 讓未來的房間歷史紀錄可見於 任何人.", + "%(senderName)s made future room history visible to unknown (%(visibility)s).": "%(senderName)s 讓未來的房間歷史紀錄可見於 未知 (%(visibility)s).", "Manage Integrations": "管裡整合", "Markdown is disabled": "Markdown 已停用", "Markdown is enabled": "Markdown 已啟用", @@ -534,7 +534,6 @@ "unknown device": "未知的裝置", "Unknown room %(roomId)s": "未知的房間 %(roomId)s", "Unknown (user, device) pair:": "未知的(使用者,裝置)配對:", - "unknown": "未知", "Unmute": "解除靜音", "Unnamed Room": "未命名的房間", "Unrecognised command:": "無法識別的命令:", @@ -859,5 +858,7 @@ "%(widgetName)s widget added by %(senderName)s": "%(widgetName)s 由 %(senderName)s 所新增", "%(widgetName)s widget removed by %(senderName)s": "%(widgetName)s 由 %(senderName)s 所移除", "Robot check is currently unavailable on desktop - please use a web browser": "機器人檢查目前在桌面端不可用 ── 請使用網路瀏覽器", - "%(widgetName)s widget modified by %(senderName)s": "%(widgetName)s 小工具已被 %(senderName)s 修改" + "%(widgetName)s widget modified by %(senderName)s": "%(widgetName)s 小工具已被 %(senderName)s 修改", + "%(weekDayName)s, %(monthName)s %(day)s": "%(monthName)s%(day)s %(weekDayName)s", + "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(fullYear)s %(monthName)s %(day)s %(weekDayName)s" } diff --git a/src/stores/RoomViewStore.js b/src/stores/RoomViewStore.js index 17fcc97160..795345242e 100644 --- a/src/stores/RoomViewStore.js +++ b/src/stores/RoomViewStore.js @@ -21,7 +21,7 @@ import Modal from '../Modal'; import { _t } from '../languageHandler'; const INITIAL_STATE = { - // Whether we're joining the currently viewed room + // Whether we're joining the currently viewed room (see isJoining()) joining: false, // Any error that has occurred during joining joinError: null, @@ -90,9 +90,6 @@ class RoomViewStore extends Store { case 'join_room': this._joinRoom(payload); break; - case 'joined_room': - this._joinedRoom(payload); - break; case 'join_room_error': this._joinRoomError(payload); break; @@ -119,12 +116,10 @@ class RoomViewStore extends Store { roomLoadError: null, // should peek by default shouldPeek: payload.should_peek === undefined ? true : payload.should_peek, + // have we sent a join request for this room and are waiting for a response? + joining: payload.joining || false, }; - if (payload.joined) { - newState.joining = false; - } - if (this._state.forwardingEvent) { dis.dispatch({ action: 'send_event', @@ -134,6 +129,10 @@ class RoomViewStore extends Store { } this._setState(newState); + + if (payload.auto_join) { + this._joinRoom(payload); + } } else if (payload.room_alias) { // Resolve the alias and then do a second dispatch with the room ID acquired this._setState({ @@ -153,6 +152,8 @@ class RoomViewStore extends Store { event_id: payload.event_id, highlighted: payload.highlighted, room_alias: payload.room_alias, + auto_join: payload.auto_join, + oob_data: payload.oob_data, }); }, (err) => { dis.dispatch({ @@ -181,9 +182,11 @@ class RoomViewStore extends Store { MatrixClientPeg.get().joinRoom( this._state.roomAlias || this._state.roomId, payload.opts, ).done(() => { - dis.dispatch({ - action: 'joined_room', - }); + // We don't actually need to do anything here: we do *not* + // clear the 'joining' flag because the Room object and/or + // our 'joined' member event may not have come down the sync + // stream yet, and that's the point at which we'd consider + // the user joined to the room. }, (err) => { dis.dispatch({ action: 'join_room_error', @@ -198,12 +201,6 @@ class RoomViewStore extends Store { }); } - _joinedRoom(payload) { - this._setState({ - joining: false, - }); - } - _joinRoomError(payload) { this._setState({ joining: false, @@ -245,7 +242,29 @@ class RoomViewStore extends Store { return this._state.roomLoadError; } - // Whether we're joining the currently viewed room + // True if we're expecting the user to be joined to the room currently being + // viewed. Note that this is left true after the join request has finished, + // since we should still consider a join to be in progress until the room + // & member events come down the sync. + // + // This flag remains true after the room has been sucessfully joined, + // (this store doesn't listen for the appropriate member events) + // so you should always observe the joined state from the member event + // if a room object is present. + // ie. The correct logic is: + // if (room) { + // if (myMember.membership == 'joined') { + // // user is joined to the room + // } else { + // // Not joined + // } + // } else { + // if (RoomViewStore.isJoining()) { + // // show spinner + // } else { + // // show join prompt + // } + // } isJoining() { return this._state.joining; } diff --git a/test/components/structures/MessagePanel-test.js b/test/components/structures/MessagePanel-test.js index ad7d9c15c7..8254dd4126 100644 --- a/test/components/structures/MessagePanel-test.js +++ b/test/components/structures/MessagePanel-test.js @@ -24,6 +24,7 @@ var sdk = require('matrix-react-sdk'); var MessagePanel = sdk.getComponent('structures.MessagePanel'); import UserSettingsStore from '../../../src/UserSettingsStore'; +import MatrixClientPeg from '../../../src/MatrixClientPeg'; var test_utils = require('test-utils'); var mockclock = require('mock-clock'); @@ -51,16 +52,19 @@ describe('MessagePanel', function () { var clock = mockclock.clock(); var realSetTimeout = window.setTimeout; var events = mkEvents(); + var sandbox = null; beforeEach(function() { test_utils.beforeEach(this); - client = test_utils.createTestClient(); + sandbox = test_utils.stubClient(); + client = MatrixClientPeg.get(); client.credentials = {userId: '@me:here'}; UserSettingsStore.getSyncedSettings = sinon.stub().returns({}); }); afterEach(function() { clock.uninstall(); + sandbox.restore(); }); function mkEvents() {