Merge branch 'develop' into rob/electron-screensharing

This commit is contained in:
Robert Swain 2017-09-25 17:02:30 +02:00
commit b047f1caaa
84 changed files with 3931 additions and 1060 deletions

View File

@ -54,7 +54,6 @@ src/components/views/elements/RoomDirectoryButton.js
src/components/views/elements/SettingsButton.js
src/components/views/elements/StartChatButton.js
src/components/views/elements/TintableSvg.js
src/components/views/elements/TruncatedList.js
src/components/views/elements/UserSelector.js
src/components/views/login/CaptchaForm.js
src/components/views/login/CasLogin.js

View File

@ -1,3 +1,106 @@
Changes in [0.10.6](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v0.10.6) (2017-09-21)
=====================================================================================================
[Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v0.10.5...v0.10.6)
* New version of js-sdk with fixed build
Changes in [0.10.5](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v0.10.5) (2017-09-21)
=====================================================================================================
[Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v0.10.4...v0.10.5)
* Fix build error (https://github.com/vector-im/riot-web/issues/5091)
Changes in [0.10.4](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v0.10.4) (2017-09-20)
=====================================================================================================
[Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v0.10.4-rc.1...v0.10.4)
* No changes
Changes in [0.10.4-rc.1](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v0.10.4-rc.1) (2017-09-19)
===============================================================================================================
[Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v0.10.3...v0.10.4-rc.1)
* Fix RoomView stuck in 'accept invite' state
[\#1396](https://github.com/matrix-org/matrix-react-sdk/pull/1396)
* Only show the integ management button if user is joined
[\#1398](https://github.com/matrix-org/matrix-react-sdk/pull/1398)
* suppressOnHover for member entity tiles which have no onClick
[\#1273](https://github.com/matrix-org/matrix-react-sdk/pull/1273)
* add /devtools command
[\#1268](https://github.com/matrix-org/matrix-react-sdk/pull/1268)
* Fix broken Link
[\#1359](https://github.com/matrix-org/matrix-react-sdk/pull/1359)
* Show who redacted an event on hover
[\#1387](https://github.com/matrix-org/matrix-react-sdk/pull/1387)
* start MELS expanded if it contains a highlighted/permalinked event.
[\#1388](https://github.com/matrix-org/matrix-react-sdk/pull/1388)
* Add ignore user API support
[\#1389](https://github.com/matrix-org/matrix-react-sdk/pull/1389)
* Add option to disable Emoji suggestions
[\#1392](https://github.com/matrix-org/matrix-react-sdk/pull/1392)
* sanitize the i18n for fn:textForHistoryVisibilityEvent
[\#1397](https://github.com/matrix-org/matrix-react-sdk/pull/1397)
* Don't check for only-emoji if there were none
[\#1394](https://github.com/matrix-org/matrix-react-sdk/pull/1394)
* Fix emojification of symbol characters
[\#1393](https://github.com/matrix-org/matrix-react-sdk/pull/1393)
* Update from Weblate.
[\#1395](https://github.com/matrix-org/matrix-react-sdk/pull/1395)
* Make /join join again
[\#1391](https://github.com/matrix-org/matrix-react-sdk/pull/1391)
* Display spinner not room preview after room create
[\#1390](https://github.com/matrix-org/matrix-react-sdk/pull/1390)
* Fix the avatar / room name in room preview
[\#1384](https://github.com/matrix-org/matrix-react-sdk/pull/1384)
* Remove spurious cancel button
[\#1381](https://github.com/matrix-org/matrix-react-sdk/pull/1381)
* Fix starting a chat by email address
[\#1386](https://github.com/matrix-org/matrix-react-sdk/pull/1386)
* respond on copy code block
[\#1363](https://github.com/matrix-org/matrix-react-sdk/pull/1363)
* fix DateUtils inconsistency with 12/24h
[\#1383](https://github.com/matrix-org/matrix-react-sdk/pull/1383)
* allow sending sub,sup and whitelist them on receive
[\#1382](https://github.com/matrix-org/matrix-react-sdk/pull/1382)
* Update roomlist when an event is decrypted
[\#1380](https://github.com/matrix-org/matrix-react-sdk/pull/1380)
* Update from Weblate.
[\#1379](https://github.com/matrix-org/matrix-react-sdk/pull/1379)
* fix radio for theme selection
[\#1368](https://github.com/matrix-org/matrix-react-sdk/pull/1368)
* fix some more zh_Hans - remove entirely broken lines
[\#1378](https://github.com/matrix-org/matrix-react-sdk/pull/1378)
* fix placeholder causing app to break when using zh
[\#1377](https://github.com/matrix-org/matrix-react-sdk/pull/1377)
* Avoid re-rendering RoomList on room switch
[\#1375](https://github.com/matrix-org/matrix-react-sdk/pull/1375)
* Fix 'Failed to load timeline position' regression
[\#1376](https://github.com/matrix-org/matrix-react-sdk/pull/1376)
* Fast path for emojifying strings
[\#1372](https://github.com/matrix-org/matrix-react-sdk/pull/1372)
* Consolidate the code copy button
[\#1374](https://github.com/matrix-org/matrix-react-sdk/pull/1374)
* Only add the code copy button for HTML messages
[\#1373](https://github.com/matrix-org/matrix-react-sdk/pull/1373)
* Don't re-render matrixchat unnecessarily
[\#1371](https://github.com/matrix-org/matrix-react-sdk/pull/1371)
* Don't wait for setState to run onHaveRoom
[\#1370](https://github.com/matrix-org/matrix-react-sdk/pull/1370)
* Introduce a RoomScrollStateStore
[\#1367](https://github.com/matrix-org/matrix-react-sdk/pull/1367)
* Don't always paginate when mounting a ScrollPanel
[\#1369](https://github.com/matrix-org/matrix-react-sdk/pull/1369)
* Remove unused scrollStateMap from LoggedinView
[\#1366](https://github.com/matrix-org/matrix-react-sdk/pull/1366)
* Revert "Implement sticky date separators"
[\#1365](https://github.com/matrix-org/matrix-react-sdk/pull/1365)
* Remove unused string "changing room on a RoomView is not supported"
[\#1361](https://github.com/matrix-org/matrix-react-sdk/pull/1361)
* Remove unused translation code translations
[\#1360](https://github.com/matrix-org/matrix-react-sdk/pull/1360)
* Implement sticky date separators
[\#1353](https://github.com/matrix-org/matrix-react-sdk/pull/1353)
Changes in [0.10.3](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v0.10.3) (2017-09-06)
=====================================================================================================
[Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v0.10.3-rc.2...v0.10.3)

View File

@ -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:

View File

@ -1,6 +1,6 @@
{
"name": "matrix-react-sdk",
"version": "0.10.3",
"version": "0.10.6",
"description": "SDK for matrix.org using React",
"author": "matrix.org",
"repository": {
@ -40,7 +40,7 @@
"lint": "eslint src/",
"lintall": "eslint src/ test/",
"clean": "rimraf lib",
"prepublish": "npm run build && git rev-parse HEAD > git-revision.txt",
"prepublish": "npm run clean && npm run build && git rev-parse HEAD > git-revision.txt",
"test": "karma start --single-run=true --browsers ChromeHeadless",
"test-multi": "karma start"
},
@ -66,7 +66,7 @@
"isomorphic-fetch": "^2.2.1",
"linkifyjs": "^2.1.3",
"lodash": "^4.13.1",
"matrix-js-sdk": "0.8.2",
"matrix-js-sdk": "0.8.4",
"optimist": "^0.6.1",
"prop-types": "^15.5.8",
"react": "^15.4.0",

View File

@ -65,7 +65,7 @@ module.exports = {
const days = getDaysArray();
const months = getMonthsArray();
if (date.toDateString() === now.toDateString()) {
return this.formatTime(date);
return this.formatTime(date, showTwelveHour);
} else if (now.getTime() - date.getTime() < 6 * 24 * 60 * 60 * 1000) {
// TODO: use standard date localize function provided in counterpart
return _t('%(weekDayName)s %(time)s', {
@ -78,7 +78,7 @@ module.exports = {
weekDayName: days[date.getDay()],
monthName: months[date.getMonth()],
day: date.getDate(),
time: this.formatTime(date),
time: this.formatTime(date, showTwelveHour),
});
}
return this.formatFullDate(date, showTwelveHour);
@ -92,13 +92,13 @@ module.exports = {
monthName: months[date.getMonth()],
day: date.getDate(),
fullYear: date.getFullYear(),
time: showTwelveHour ? twelveHourTime(date) : this.formatTime(date),
time: this.formatTime(date, showTwelveHour),
});
},
formatTime: function(date, showTwelveHour=false) {
if (showTwelveHour) {
return twelveHourTime(date);
return twelveHourTime(date);
}
return pad(date.getHours()) + ':' + pad(date.getMinutes());
},

67
src/GroupInvite.js Normal file
View File

@ -0,0 +1,67 @@
/*
Copyright 2017 New Vector Ltd
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import Modal from './Modal';
import sdk from './';
import MultiInviter from './utils/MultiInviter';
import { _t } from './languageHandler';
export function showGroupInviteDialog(groupId) {
const AddressPickerDialog = sdk.getComponent("dialogs.AddressPickerDialog");
Modal.createTrackedDialog('Group Invite', '', AddressPickerDialog, {
title: _t('Invite new group members'),
description: _t("Who would you like to add to this group?"),
placeholder: _t("Name or matrix ID"),
button: _t("Invite to Group"),
validAddressTypes: ['mx'],
onFinished: (success, addrs) => {
if (!success) return;
_onGroupInviteFinished(groupId, addrs);
},
});
}
function _onGroupInviteFinished(groupId, addrs) {
const multiInviter = new MultiInviter(groupId);
const addrTexts = addrs.map((addr) => addr.address);
multiInviter.invite(addrTexts).then((completionStates) => {
// Show user any errors
const errorList = [];
for (const addr of Object.keys(completionStates)) {
if (addrs[addr] === "error") {
errorList.push(addr);
}
}
if (errorList.length > 0) {
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
Modal.createTrackedDialog('Failed to invite the following users to the group', '', ErrorDialog, {
title: _t("Failed to invite the following users to %(groupId)s:", {groupId: groupId}),
description: errorList.join(", "),
});
}
}).catch((err) => {
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
Modal.createTrackedDialog('Failed to invite users to group', '', ErrorDialog, {
title: _t("Failed to invite users group"),
description: _t("Failed to invite users to %(groupId)s", {groupId: groupId}),
});
});
}

View File

@ -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();
@ -143,7 +148,7 @@ export function processHtmlForSending(html: string): string {
* of that HTML.
*/
export function sanitizedHtmlNode(insaneHtml) {
const saneHtml = sanitizeHtml(insaneHtml, sanitizeHtmlParams);
const saneHtml = sanitizeHtml(insaneHtml, sanitizeHtmlParams);
return <div dangerouslySetInnerHTML={{ __html: saneHtml }} dir="auto" />;
}
@ -152,7 +157,7 @@ const sanitizeHtmlParams = {
allowedTags: [
'font', // custom to matrix for IRC-style font coloring
'del', // for markdown
'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'blockquote', 'p', 'a', 'ul', 'ol',
'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'blockquote', 'p', 'a', 'ul', 'ol', 'sup', 'sub',
'nl', 'li', 'b', 'i', 'u', 'strong', 'em', 'strike', 'code', 'hr', 'br', 'div',
'table', 'thead', 'caption', 'tbody', 'tr', 'th', 'td', 'pre', 'span', 'img',
],
@ -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,

View File

@ -17,7 +17,7 @@ limitations under the License.
import commonmark from 'commonmark';
import escape from 'lodash/escape';
const ALLOWED_HTML_TAGS = ['del', 'u'];
const ALLOWED_HTML_TAGS = ['sub', 'sup', 'del', 'u'];
// These types of node are definitely text
const TEXT_NODES = ['text', 'softbreak', 'linebreak', 'paragraph', 'document'];

View File

@ -50,8 +50,8 @@ export function inviteMultipleToRoom(roomId, addrs) {
}
export function showStartChatInviteDialog() {
const UserPickerDialog = sdk.getComponent("dialogs.UserPickerDialog");
Modal.createTrackedDialog('Start a chat', '', UserPickerDialog, {
const AddressPickerDialog = sdk.getComponent("dialogs.AddressPickerDialog");
Modal.createTrackedDialog('Start a chat', '', AddressPickerDialog, {
title: _t('Start a chat'),
description: _t("Who would you like to communicate with?"),
placeholder: _t("Email, name or matrix ID"),
@ -61,8 +61,8 @@ export function showStartChatInviteDialog() {
}
export function showRoomInviteDialog(roomId) {
const UserPickerDialog = sdk.getComponent("dialogs.UserPickerDialog");
Modal.createTrackedDialog('Chat Invite', '', UserPickerDialog, {
const AddressPickerDialog = sdk.getComponent("dialogs.AddressPickerDialog");
Modal.createTrackedDialog('Chat Invite', '', AddressPickerDialog, {
title: _t('Invite new room members'),
description: _t('Who would you like to add to this room?'),
button: _t('Send Invites'),
@ -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;

View File

@ -240,6 +240,59 @@ const commands = {
return reject(this.getUsage());
}),
ignore: new Command("ignore", "<userId>", 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: (
<div>
<p>{_t("You are now ignoring %(userId)s", {userId: userId})}</p>
</div>
),
hasCancelButton: false,
});
}),
);
}
}
return reject(this.getUsage());
}),
unignore: new Command("unignore", "<userId>", 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: (
<div>
<p>{_t("You are no longer ignoring %(userId)s", {userId: userId})}</p>
</div>
),
hasCancelButton: false,
});
}),
);
}
}
return reject(this.getUsage());
}),
// Define the power level of a user
op: new Command("op", "<userId> [<power level>]", 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", "<userId> <deviceId> <deviceSigningKey>", function(roomId, args) {
if (args) {

View File

@ -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) {

View File

@ -33,11 +33,17 @@ export default {
// XXX: Always use default, ignore localStorage and remove from labs
override: true,
},
{
name: "-",
id: 'feature_flair',
default: false,
},
],
// horrible but it works. The locality makes this somewhat more palatable.
doTranslations: function() {
this.LABS_FEATURES[0].name = _t("Matrix Apps");
this.LABS_FEATURES[1].name = _t("Flair");
},
loadProfileInfo: function() {

View File

@ -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]

View File

@ -94,6 +94,16 @@ const COMMANDS = [
args: '<user-id> <device-id> <device-signing-key>',
description: 'Verifies a user, device, and pubkey tuple',
},
{
command: '/ignore',
args: '<user-id>',
description: 'Ignores a user, hiding their messages from you',
},
{
command: '/unignore',
args: '<user-id>',
description: 'Stops ignoring a user, showing their messages going forward',
},
// Omitting `/markdown` as it only seems to apply to OldComposer
];

View File

@ -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 = [];

View File

@ -33,7 +33,8 @@ const USER_REGEX = /@\S*/g;
let instance = null;
export default class UserProvider extends AutocompleteProvider {
users: Array<RoomMember> = [];
users: Array<RoomMember> = null;
room: Room = null;
constructor() {
super(USER_REGEX, {
@ -54,6 +55,9 @@ export default class UserProvider extends AutocompleteProvider {
return [];
}
// lazy-load user list into matcher
if (this.users === null) this._makeUsers();
let completions = [];
let {command, range} = this.getCurrentCommand(query, selection, force);
if (command) {
@ -83,7 +87,12 @@ export default class UserProvider extends AutocompleteProvider {
}
setUserListFromRoom(room: Room) {
const events = room.getLiveTimeline().getEvents();
this.room = room;
this.users = null;
}
_makeUsers() {
const events = this.room.getLiveTimeline().getEvents();
const lastSpoken = {};
for(const event of events) {
@ -91,7 +100,7 @@ export default class UserProvider extends AutocompleteProvider {
}
const currentUserId = MatrixClientPeg.get().credentials.userId;
this.users = room.getJoinedMembers().filter((member) => {
this.users = this.room.getJoinedMembers().filter((member) => {
if (member.userId !== currentUserId) return true;
});
@ -103,7 +112,8 @@ export default class UserProvider extends AutocompleteProvider {
}
onUserSpoke(user: RoomMember) {
if(user.userId === MatrixClientPeg.get().credentials.userId) return;
if (this.users === null) return;
if (user.userId === MatrixClientPeg.get().credentials.userId) return;
// Move the user that spoke to the front of the array
this.users.splice(

View File

@ -1,5 +1,6 @@
/*
Copyright 2017 Vector Creations Ltd.
Copyright 2017 New Vector Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@ -16,6 +17,7 @@ limitations under the License.
import React from 'react';
import PropTypes from 'prop-types';
import Promise from 'bluebird';
import MatrixClientPeg from '../../MatrixClientPeg';
import sdk from '../../index';
import dis from '../../dispatcher';
@ -25,6 +27,8 @@ import AccessibleButton from '../views/elements/AccessibleButton';
import Modal from '../../Modal';
import classnames from 'classnames';
import GroupSummaryStore from '../../stores/GroupSummaryStore';
const RoomSummaryType = PropTypes.shape({
room_id: PropTypes.string.isRequired,
profile: PropTypes.shape({
@ -37,6 +41,9 @@ const RoomSummaryType = PropTypes.shape({
const UserSummaryType = PropTypes.shape({
summaryInfo: PropTypes.shape({
user_id: PropTypes.string.isRequired,
role_id: PropTypes.string,
avatar_url: PropTypes.string,
displayname: PropTypes.string,
}).isRequired,
});
@ -50,19 +57,77 @@ const CategoryRoomList = React.createClass({
name: PropTypes.string,
}).isRequired,
}),
groupId: PropTypes.string.isRequired,
// Whether the list should be editable
editing: PropTypes.bool.isRequired,
},
onAddRoomsClicked: function(ev) {
ev.preventDefault();
const AddressPickerDialog = sdk.getComponent("dialogs.AddressPickerDialog");
Modal.createTrackedDialog('Add Rooms to Group Summary', '', AddressPickerDialog, {
title: _t('Add rooms to the group summary'),
description: _t("Which rooms would you like to add to this summary?"),
placeholder: _t("Room name or alias"),
button: _t("Add to summary"),
pickerType: 'room',
validAddressTypes: ['mx'],
groupId: this.props.groupId,
onFinished: (success, addrs) => {
if (!success) return;
const errorList = [];
Promise.all(addrs.map((addr) => {
return this.context.groupSummaryStore
.addRoomToGroupSummary(addr.address)
.catch(() => { errorList.push(addr.address); })
.reflect();
})).then(() => {
if (errorList.length === 0) {
return;
}
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
Modal.createTrackedDialog(
'Failed to add the following room to the group summary',
'', ErrorDialog,
{
title: _t(
"Failed to add the following rooms to the summary of %(groupId)s:",
{groupId: this.props.groupId},
),
description: errorList.join(", "),
});
});
},
});
},
render: function() {
const TintableSvg = sdk.getComponent("elements.TintableSvg");
const addButton = this.props.editing ?
(<AccessibleButton className="mx_GroupView_featuredThings_addButton" onClick={this.onAddRoomsClicked}>
<TintableSvg src="img/icons-create-room.svg" width="64" height="64"/>
<div className="mx_GroupView_featuredThings_addButton_label">
{_t('Add a Room')}
</div>
</AccessibleButton>) : <div />;
const roomNodes = this.props.rooms.map((r) => {
return <FeaturedRoom key={r.room_id} summaryInfo={r} />;
return <FeaturedRoom
key={r.room_id}
groupId={this.props.groupId}
editing={this.props.editing}
summaryInfo={r}/>;
});
let catHeader = null;
let catHeader = <div />;
if (this.props.category && this.props.category.profile) {
catHeader = <div className="mx_GroupView_featuredThings_category">{this.props.category.profile.name}</div>;
}
return <div>
return <div className="mx_GroupView_featuredThings_container">
{catHeader}
{roomNodes}
{addButton}
</div>;
},
});
@ -72,6 +137,8 @@ const FeaturedRoom = React.createClass({
props: {
summaryInfo: RoomSummaryType.isRequired,
editing: PropTypes.bool.isRequired,
groupId: PropTypes.string.isRequired,
},
onClick: function(e) {
@ -85,6 +152,30 @@ const FeaturedRoom = React.createClass({
});
},
onDeleteClicked: function(e) {
e.preventDefault();
e.stopPropagation();
this.context.groupSummaryStore.removeRoomFromGroupSummary(
this.props.summaryInfo.room_id,
).catch((err) => {
console.error('Error whilst removing room from group summary', err);
const roomName = this.props.summaryInfo.name ||
this.props.summaryInfo.canonical_alias ||
this.props.summaryInfo.room_id;
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
Modal.createTrackedDialog(
'Failed to remove room from group summary',
'', ErrorDialog,
{
title: _t(
"Failed to remove the room from the summary of %(groupId)s",
{groupId: this.props.groupId},
),
description: _t("The room '%(roomName)s' could not be removed from the summary.", {roomName}),
});
});
},
render: function() {
const RoomAvatar = sdk.getComponent("avatars.RoomAvatar");
@ -104,9 +195,20 @@ const FeaturedRoom = React.createClass({
roomNameNode = <span>{this.props.summaryInfo.profile.name}</span>;
}
const deleteButton = this.props.editing ?
<img
className="mx_GroupView_featuredThing_deleteButton"
src="img/cancel-small.svg"
width="14"
height="14"
alt="Delete"
onClick={this.onDeleteClicked}/>
: <div />;
return <AccessibleButton className="mx_GroupView_featuredThing" onClick={this.onClick}>
<RoomAvatar oobData={oobData} width={64} height={64} />
<div className="mx_GroupView_featuredThing_name">{roomNameNode}</div>
{deleteButton}
</AccessibleButton>;
},
});
@ -121,19 +223,74 @@ const RoleUserList = React.createClass({
name: PropTypes.string,
}).isRequired,
}),
groupId: PropTypes.string.isRequired,
// Whether the list should be editable
editing: PropTypes.bool.isRequired,
},
onAddUsersClicked: function(ev) {
ev.preventDefault();
const AddressPickerDialog = sdk.getComponent("dialogs.AddressPickerDialog");
Modal.createTrackedDialog('Add Users to Group Summary', '', AddressPickerDialog, {
title: _t('Add users to the group summary'),
description: _t("Who would you like to add to this summary?"),
placeholder: _t("Name or matrix ID"),
button: _t("Add to summary"),
validAddressTypes: ['mx'],
groupId: this.props.groupId,
onFinished: (success, addrs) => {
if (!success) return;
const errorList = [];
Promise.all(addrs.map((addr) => {
return this.context.groupSummaryStore
.addUserToGroupSummary(addr.address)
.catch(() => { errorList.push(addr.address); })
.reflect();
})).then(() => {
if (errorList.length === 0) {
return;
}
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
Modal.createTrackedDialog(
'Failed to add the following users to the group summary',
'', ErrorDialog,
{
title: _t(
"Failed to add the following users to the summary of %(groupId)s:",
{groupId: this.props.groupId},
),
description: errorList.join(", "),
});
});
},
});
},
render: function() {
const TintableSvg = sdk.getComponent("elements.TintableSvg");
const addButton = this.props.editing ?
(<AccessibleButton className="mx_GroupView_featuredThings_addButton" onClick={this.onAddUsersClicked}>
<TintableSvg src="img/icons-create-room.svg" width="64" height="64"/>
<div className="mx_GroupView_featuredThings_addButton_label">
{_t('Add a User')}
</div>
</AccessibleButton>) : <div />;
const userNodes = this.props.users.map((u) => {
return <FeaturedUser key={u.user_id} summaryInfo={u} />;
return <FeaturedUser
key={u.user_id}
summaryInfo={u}
editing={this.props.editing}
groupId={this.props.groupId}/>;
});
let roleHeader = null;
let roleHeader = <div />;
if (this.props.role && this.props.role.profile) {
roleHeader = <div className="mx_GroupView_featuredThings_category">{this.props.role.profile.name}</div>;
}
return <div>
return <div className="mx_GroupView_featuredThings_container">
{roleHeader}
{userNodes}
{addButton}
</div>;
},
});
@ -143,6 +300,8 @@ const FeaturedUser = React.createClass({
props: {
summaryInfo: UserSummaryType.isRequired,
editing: PropTypes.bool.isRequired,
groupId: PropTypes.string.isRequired,
},
onClick: function(e) {
@ -156,19 +315,64 @@ const FeaturedUser = React.createClass({
});
},
onDeleteClicked: function(e) {
e.preventDefault();
e.stopPropagation();
this.context.groupSummaryStore.removeUserFromGroupSummary(
this.props.summaryInfo.user_id,
).catch((err) => {
console.error('Error whilst removing user from group summary', err);
const displayName = this.props.summaryInfo.displayname || this.props.summaryInfo.user_id;
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
Modal.createTrackedDialog(
'Failed to remove user from group summary',
'', ErrorDialog,
{
title: _t(
"Failed to remove a user from the summary of %(groupId)s",
{groupId: this.props.groupId},
),
description: _t("The user '%(displayName)s' could not be removed from the summary.", {displayName}),
});
});
},
render: function() {
// Add avatar once we get profile info inline in the summary response
//const BaseAvatar = sdk.getComponent("avatars.BaseAvatar");
const BaseAvatar = sdk.getComponent("avatars.BaseAvatar");
const name = this.props.summaryInfo.displayname || this.props.summaryInfo.user_id;
const permalink = 'https://matrix.to/#/' + this.props.summaryInfo.user_id;
const userNameNode = <a href={permalink} onClick={this.onClick} >{this.props.summaryInfo.user_id}</a>;
const userNameNode = <a href={permalink} onClick={this.onClick}>{name}</a>;
const httpUrl = MatrixClientPeg.get()
.mxcUrlToHttp(this.props.summaryInfo.avatar_url, 64, 64);
const deleteButton = this.props.editing ?
<img
className="mx_GroupView_featuredThing_deleteButton"
src="img/cancel-small.svg"
width="14"
height="14"
alt="Delete"
onClick={this.onDeleteClicked}/>
: <div />;
return <AccessibleButton className="mx_GroupView_featuredThing" onClick={this.onClick}>
<BaseAvatar name={name} url={httpUrl} width={64} height={64} />
<div className="mx_GroupView_featuredThing_name">{userNameNode}</div>
{deleteButton}
</AccessibleButton>;
},
});
const GroupSummaryContext = {
groupSummaryStore: React.PropTypes.instanceOf(GroupSummaryStore).isRequired,
};
CategoryRoomList.contextTypes = GroupSummaryContext;
FeaturedRoom.contextTypes = GroupSummaryContext;
RoleUserList.contextTypes = GroupSummaryContext;
FeaturedUser.contextTypes = GroupSummaryContext;
export default React.createClass({
displayName: 'GroupView',
@ -176,6 +380,16 @@ export default React.createClass({
groupId: PropTypes.string.isRequired,
},
childContextTypes: {
groupSummaryStore: React.PropTypes.instanceOf(GroupSummaryStore),
},
getChildContext: function() {
return {
groupSummaryStore: this._groupSummaryStore,
};
},
getInitialState: function() {
return {
summary: null,
@ -183,12 +397,21 @@ export default React.createClass({
editing: false,
saving: false,
uploadingAvatar: false,
membershipBusy: false,
publicityBusy: false,
};
},
componentWillMount: function() {
this._changeAvatarComponent = null;
this._loadGroupFromServer(this.props.groupId);
this._initGroupSummaryStore(this.props.groupId);
MatrixClientPeg.get().on("Group.myMembership", this._onGroupMyMembership);
},
componentWillUnmount: function() {
MatrixClientPeg.get().removeListener("Group.myMembership", this._onGroupMyMembership);
this._groupSummaryStore.removeAllListeners();
},
componentWillReceiveProps: function(newProps) {
@ -197,18 +420,28 @@ export default React.createClass({
summary: null,
error: null,
}, () => {
this._loadGroupFromServer(newProps.groupId);
this._initGroupSummaryStore(newProps.groupId);
});
}
},
_loadGroupFromServer: function(groupId) {
MatrixClientPeg.get().getGroupSummary(groupId).done((res) => {
_onGroupMyMembership: function(group) {
if (group.groupId !== this.props.groupId) return;
this.setState({membershipBusy: false});
},
_initGroupSummaryStore: function(groupId) {
this._groupSummaryStore = new GroupSummaryStore(
MatrixClientPeg.get(), this.props.groupId,
);
this._groupSummaryStore.on('update', () => {
this.setState({
summary: res,
summary: this._groupSummaryStore.getSummary(),
error: null,
});
}, (err) => {
});
this._groupSummaryStore.on('error', (err) => {
this.setState({
summary: null,
error: err,
@ -216,6 +449,10 @@ export default React.createClass({
});
},
_onShowRhsClick: function(ev) {
dis.dispatch({ action: 'show_right_panel' });
},
_onEditClick: function() {
this.setState({
editing: true,
@ -281,7 +518,7 @@ export default React.createClass({
editing: false,
summary: null,
});
this._loadGroupFromServer(this.props.groupId);
this._initGroupSummaryStore(this.props.groupId);
}).catch((e) => {
this.setState({
saving: false,
@ -295,10 +532,82 @@ export default React.createClass({
}).done();
},
_getFeaturedRoomsNode() {
const summary = this.state.summary;
_onAcceptInviteClick: function() {
this.setState({membershipBusy: true});
MatrixClientPeg.get().acceptGroupInvite(this.props.groupId).then(() => {
// don't reset membershipBusy here: wait for the membership change to come down the sync
}).catch((e) => {
this.setState({membershipBusy: false});
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
Modal.createTrackedDialog('Error accepting invite', '', ErrorDialog, {
title: _t("Error"),
description: _t("Unable to accept invite"),
});
});
},
if (summary.rooms_section.rooms.length == 0) return null;
_onRejectInviteClick: function() {
this.setState({membershipBusy: true});
MatrixClientPeg.get().leaveGroup(this.props.groupId).then(() => {
// don't reset membershipBusy here: wait for the membership change to come down the sync
}).catch((e) => {
this.setState({membershipBusy: false});
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
Modal.createTrackedDialog('Error rejecting invite', '', ErrorDialog, {
title: _t("Error"),
description: _t("Unable to reject invite"),
});
});
},
_onLeaveClick: function() {
const QuestionDialog = sdk.getComponent("dialogs.QuestionDialog");
Modal.createTrackedDialog('Leave Group', '', QuestionDialog, {
title: _t("Leave Group"),
description: _t("Leave %(groupName)s?", {groupName: this.props.groupId}),
button: _t("Leave"),
danger: true,
onFinished: (confirmed) => {
if (!confirmed) return;
this.setState({membershipBusy: true});
MatrixClientPeg.get().leaveGroup(this.props.groupId).then(() => {
// don't reset membershipBusy here: wait for the membership change to come down the sync
}).catch((e) => {
this.setState({membershipBusy: false});
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
Modal.createTrackedDialog('Error leaving room', '', ErrorDialog, {
title: _t("Error"),
description: _t("Unable to leave room"),
});
});
},
});
},
_onPubliciseOffClick: function() {
this._setPublicity(false);
},
_onPubliciseOnClick: function() {
this._setPublicity(true);
},
_setPublicity: function(publicity) {
this.setState({
publicityBusy: true,
});
MatrixClientPeg.get().setGroupPublicity(this.props.groupId, publicity).then(() => {
this._loadGroupFromServer(this.props.groupId);
}).then(() => {
this.setState({
publicityBusy: false,
});
});
},
_getFeaturedRoomsNode: function() {
const summary = this.state.summary;
const defaultCategoryRooms = [];
const categoryRooms = {};
@ -315,13 +624,18 @@ export default React.createClass({
}
});
let defaultCategoryNode = null;
if (defaultCategoryRooms.length > 0) {
defaultCategoryNode = <CategoryRoomList rooms={defaultCategoryRooms} />;
}
const defaultCategoryNode = <CategoryRoomList
rooms={defaultCategoryRooms}
groupId={this.props.groupId}
editing={this.state.editing}/>;
const categoryRoomNodes = Object.keys(categoryRooms).map((catId) => {
const cat = summary.rooms_section.categories[catId];
return <CategoryRoomList key={catId} rooms={categoryRooms[catId]} category={cat} />;
return <CategoryRoomList
key={catId}
rooms={categoryRooms[catId]}
category={cat}
groupId={this.props.groupId}
editing={this.state.editing}/>;
});
return <div className="mx_GroupView_featuredThings">
@ -333,11 +647,9 @@ export default React.createClass({
</div>;
},
_getFeaturedUsersNode() {
_getFeaturedUsersNode: function() {
const summary = this.state.summary;
if (summary.users_section.users.length == 0) return null;
const noRoleUsers = [];
const roleUsers = {};
summary.users_section.users.forEach((u) => {
@ -353,13 +665,18 @@ export default React.createClass({
}
});
let noRoleNode = null;
if (noRoleUsers.length > 0) {
noRoleNode = <RoleUserList users={noRoleUsers} />;
}
const noRoleNode = <RoleUserList
users={noRoleUsers}
groupId={this.props.groupId}
editing={this.state.editing}/>;
const roleUserNodes = Object.keys(roleUsers).map((roleId) => {
const role = summary.users_section.roles[roleId];
return <RoleUserList key={roleId} users={roleUsers[roleId]} role={role} />;
return <RoleUserList
key={roleId}
users={roleUsers[roleId]}
role={role}
groupId={this.props.groupId}
editing={this.state.editing}/>;
});
return <div className="mx_GroupView_featuredThings">
@ -371,6 +688,98 @@ export default React.createClass({
</div>;
},
_getMembershipSection: function() {
const Spinner = sdk.getComponent("elements.Spinner");
const group = MatrixClientPeg.get().getGroup(this.props.groupId);
if (!group) return null;
if (group.myMembership === 'invite') {
if (this.state.membershipBusy) {
return <div className="mx_GroupView_membershipSection">
<Spinner />
</div>;
}
return <div className="mx_GroupView_membershipSection mx_GroupView_membershipSection_invited">
<div className="mx_GroupView_membershipSection_description">
{_t("%(inviter)s has invited you to join this group", {inviter: group.inviter.userId})}
</div>
<div className="mx_GroupView_membership_buttonContainer">
<AccessibleButton className="mx_GroupView_textButton mx_RoomHeader_textButton"
onClick={this._onAcceptInviteClick}
>
{_t("Accept")}
</AccessibleButton>
<AccessibleButton className="mx_GroupView_textButton mx_RoomHeader_textButton"
onClick={this._onRejectInviteClick}
>
{_t("Decline")}
</AccessibleButton>
</div>
</div>;
} else if (group.myMembership === 'join') {
let youAreAMemberText = _t("You are a member of this group");
if (this.state.summary.user && this.state.summary.user.is_privileged) {
youAreAMemberText = _t("You are an administrator of this group");
}
let publicisedButton;
if (this.state.publicityBusy) {
publicisedButton = <Spinner />;
}
let publicisedSection;
if (this.state.summary.user && this.state.summary.user.is_public) {
if (!this.state.publicityBusy) {
publicisedButton = <AccessibleButton className="mx_GroupView_textButton mx_RoomHeader_textButton"
onClick={this._onPubliciseOffClick}
>
{_t("Make private")}
</AccessibleButton>;
}
publicisedSection = <div className="mx_GroupView_membershipSubSection">
{_t("Your membership of this group is public")}
<div className="mx_GroupView_membership_buttonContainer">
{publicisedButton}
</div>
</div>;
} else {
if (!this.state.publicityBusy) {
publicisedButton = <AccessibleButton className="mx_GroupView_textButton mx_RoomHeader_textButton"
onClick={this._onPubliciseOnClick}
>
{_t("Make public")}
</AccessibleButton>;
}
publicisedSection = <div className="mx_GroupView_membershipSubSection">
{_t("Your membership of this group is private")}
<div className="mx_GroupView_membership_buttonContainer">
{publicisedButton}
</div>
</div>;
}
return <div className="mx_GroupView_membershipSection mx_GroupView_membershipSection_joined">
<div className="mx_GroupView_membershipSubSection">
<div className="mx_GroupView_membershipSection_description">
{youAreAMemberText}
</div>
<div className="mx_GroupView_membership_buttonContainer">
<AccessibleButton className="mx_GroupView_textButton mx_RoomHeader_textButton"
onClick={this._onLeaveClick}
>
{_t("Leave")}
</AccessibleButton>
</div>
</div>
{publicisedSection}
</div>;
}
return null;
},
render: function() {
const GroupAvatar = sdk.getComponent("avatars.GroupAvatar");
const Loader = sdk.getComponent("elements.Spinner");
@ -384,8 +793,8 @@ export default React.createClass({
let avatarNode;
let nameNode;
let shortDescNode;
let rightButtons;
let roomBody;
const rightButtons = [];
const headerClasses = {
mx_GroupView_header: true,
};
@ -428,20 +837,26 @@ export default React.createClass({
placeholder={_t('Description')}
tabIndex="2"
/>;
rightButtons = <span>
<AccessibleButton className="mx_GroupView_saveButton mx_RoomHeader_textButton" onClick={this._onSaveClick}>
rightButtons.push(
<AccessibleButton className="mx_GroupView_textButton mx_RoomHeader_textButton"
onClick={this._onSaveClick} key="_saveButton"
>
{_t('Save')}
</AccessibleButton>
<AccessibleButton className='mx_GroupView_cancelButton' onClick={this._onCancelClick}>
</AccessibleButton>,
);
rightButtons.push(
<AccessibleButton className='mx_GroupView_textButton' onClick={this._onCancelClick} key="_cancelButton">
<img src="img/cancel.svg" className='mx_filterFlipColor'
width="18" height="18" alt={_t("Cancel")}/>
</AccessibleButton>
</span>;
</AccessibleButton>,
);
roomBody = <div>
<textarea className="mx_GroupView_editLongDesc" value={this.state.profileForm.long_description}
onChange={this._onLongDescChange}
tabIndex="3"
/>
{this._getFeaturedRoomsNode()}
{this._getFeaturedUsersNode()}
</div>;
} else {
const groupAvatarUrl = summary.profile ? summary.profile.avatar_url : null;
@ -467,16 +882,29 @@ export default React.createClass({
description = sanitizedHtmlNode(summary.profile.long_description);
}
roomBody = <div>
{this._getMembershipSection()}
<div className="mx_GroupView_groupDesc">{description}</div>
{this._getFeaturedRoomsNode()}
{this._getFeaturedUsersNode()}
</div>;
// disabled until editing works
rightButtons = <AccessibleButton className="mx_GroupHeader_button"
onClick={this._onEditClick} title={_t("Edit Group")}
>
<TintableSvg src="img/icons-settings-room.svg" width="16" height="16"/>
</AccessibleButton>;
if (summary.user && summary.user.is_privileged) {
rightButtons.push(
<AccessibleButton className="mx_GroupHeader_button"
onClick={this._onEditClick} title={_t("Edit Group")} key="_editButton"
>
<TintableSvg src="img/icons-settings-room.svg" width="16" height="16"/>
</AccessibleButton>,
);
}
if (this.props.collapsedRhs) {
rightButtons.push(
<AccessibleButton className="mx_GroupHeader_button"
onClick={this._onShowRhsClick} title={ _t('Show panel') } key="_maximiseButton"
>
<TintableSvg src="img/maximise.svg" width="10" height="16"/>
</AccessibleButton>,
);
}
headerClasses.mx_GroupView_header_view = true;
}

View File

@ -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) {
@ -238,10 +241,10 @@ export default React.createClass({
eventPixelOffset={this.props.initialEventPixelOffset}
key={this.props.currentRoomId || 'roomview'}
opacity={this.props.middleOpacity}
collapsedRhs={this.props.collapse_rhs}
collapsedRhs={this.props.collapseRhs}
ConferenceHandler={this.props.ConferenceHandler}
/>;
if (!this.props.collapse_rhs) right_panel = <RightPanel roomId={this.props.currentRoomId} opacity={this.props.rightOpacity} />;
if (!this.props.collapseRhs) right_panel = <RightPanel roomId={this.props.currentRoomId} opacity={this.props.rightOpacity} />;
break;
case PageTypes.UserSettings:
@ -252,7 +255,7 @@ export default React.createClass({
referralBaseUrl={this.props.config.referralBaseUrl}
teamToken={this.props.teamToken}
/>;
if (!this.props.collapse_rhs) right_panel = <RightPanel opacity={this.props.rightOpacity}/>;
if (!this.props.collapseRhs) right_panel = <RightPanel opacity={this.props.rightOpacity}/>;
break;
case PageTypes.MyGroups:
@ -262,9 +265,9 @@ export default React.createClass({
case PageTypes.CreateRoom:
page_element = <CreateRoom
onRoomCreated={this.props.onRoomCreated}
collapsedRhs={this.props.collapse_rhs}
collapsedRhs={this.props.collapseRhs}
/>;
if (!this.props.collapse_rhs) right_panel = <RightPanel opacity={this.props.rightOpacity}/>;
if (!this.props.collapseRhs) right_panel = <RightPanel opacity={this.props.rightOpacity}/>;
break;
case PageTypes.RoomDirectory:
@ -297,8 +300,9 @@ export default React.createClass({
case PageTypes.GroupView:
page_element = <GroupView
groupId={this.props.currentGroupId}
collapsedRhs={this.props.collapseRhs}
/>;
//right_panel = <RightPanel opacity={this.props.rightOpacity} />;
if (!this.props.collapseRhs) right_panel = <RightPanel groupId={this.props.currentGroupId} opacity={this.props.rightOpacity} />;
break;
}
@ -330,7 +334,7 @@ export default React.createClass({
<div className={bodyClasses}>
<LeftPanel
selectedRoom={this.props.currentRoomId}
collapsed={this.props.collapse_lhs || false}
collapsed={this.props.collapseLhs || false}
opacity={this.props.leftOpacity}
/>
<main className='mx_MatrixChat_middlePanel'>

View File

@ -32,7 +32,7 @@ import dis from "../../dispatcher";
import Modal from "../../Modal";
import Tinter from "../../Tinter";
import sdk from '../../index';
import { showStartChatInviteDialog, showRoomInviteDialog } from '../../Invite';
import { showStartChatInviteDialog, showRoomInviteDialog } from '../../RoomInvite';
import * as Rooms from '../../Rooms';
import linkifyMatrix from "../../linkify-matrix";
import * as Lifecycle from '../../Lifecycle';
@ -143,8 +143,8 @@ module.exports = React.createClass({
// If we're trying to just view a user ID (i.e. /user URL), this is it
viewUserId: null,
collapse_lhs: false,
collapse_rhs: false,
collapseLhs: false,
collapseRhs: false,
leftOpacity: 1.0,
middleOpacity: 1.0,
rightOpacity: 1.0,
@ -434,7 +434,7 @@ module.exports = React.createClass({
break;
case 'view_user':
// FIXME: ugly hack to expand the RightPanel and then re-dispatch.
if (this.state.collapse_rhs) {
if (this.state.collapseRhs) {
setTimeout(()=>{
dis.dispatch({
action: 'show_right_panel',
@ -516,22 +516,22 @@ module.exports = React.createClass({
break;
case 'hide_left_panel':
this.setState({
collapse_lhs: true,
collapseLhs: true,
});
break;
case 'show_left_panel':
this.setState({
collapse_lhs: false,
collapseLhs: false,
});
break;
case 'hide_right_panel':
this.setState({
collapse_rhs: true,
collapseRhs: true,
});
break;
case 'show_right_panel':
this.setState({
collapse_rhs: false,
collapseRhs: false,
});
break;
case 'ui_opacity': {
@ -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) {
@ -994,8 +993,8 @@ module.exports = React.createClass({
this.setStateForNewView({
view: VIEWS.LOGIN,
ready: false,
collapse_lhs: false,
collapse_rhs: false,
collapseLhs: false,
collapseRhs: false,
currentRoomId: null,
page_type: PageTypes.RoomDirectory,
});

View File

@ -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(
<MemberEventListSummary
key={key}
events={summarisedEvents}
onToggle={this._onWidgetLoad} // Update scroll state
>
{eventTiles}
</MemberEventListSummary>
);
ret.push(<MemberEventListSummary key={key}
events={summarisedEvents}
onToggle={this._onWidgetLoad} // Update scroll state
startExpanded={highlightInMels}
>
{eventTiles}
</MemberEventListSummary>);
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

View File

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

View File

@ -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}
/>
</div>
@ -1618,7 +1604,7 @@ module.exports = React.createClass({
<RoomPreviewBar onJoinClick={this.onJoinButtonClicked}
onForgetClick={ this.onForgetClick }
onRejectClick={this.onRejectThreepidInviteButtonClicked}
spinner={previewBarSpinner}
spinner={this.state.joining}
inviterName={inviterName}
invitedEmail={invitedEmail}
canPreview={this.state.canPeek}

View File

@ -384,6 +384,9 @@ var TimelinePanel = React.createClass({
this.sendReadReceipt();
this.updateReadMarker();
break;
case 'ignore_state_changed':
this.forceUpdate();
break;
}
},

View File

@ -105,6 +105,10 @@ const SETTINGS_LABELS = [
id: 'MessageComposerInput.autoReplaceEmoji',
label: 'Automatically replace plain text Emoji',
},
{
id: 'MessageComposerInput.dontSuggestEmoji',
label: 'Disable Emoji suggestions while typing',
},
{
id: 'Pill.shouldHidePillAvatar',
label: 'Hide avatars in user and room mentions',
@ -172,6 +176,34 @@ const THEMES = [
},
];
const IgnoredUser = React.createClass({
propTypes: {
userId: React.PropTypes.string.isRequired,
onUnignored: React.PropTypes.func.isRequired,
},
_onUnignoreClick: function() {
const ignoredUsers = MatrixClientPeg.get().getIgnoredUsers();
const index = ignoredUsers.indexOf(this.props.userId);
if (index !== -1) {
ignoredUsers.splice(index, 1);
MatrixClientPeg.get().setIgnoredUsers(ignoredUsers)
.then(() => this.props.onUnignored(this.props.userId));
} else this.props.onUnignored(this.props.userId);
},
render: function() {
return (
<li>
<AccessibleButton onClick={this._onUnignoreClick} className="mx_UserSettings_button mx_UserSettings_buttonSmall">
{ _t("Unignore") }
</AccessibleButton>
{ this.props.userId }
</li>
);
},
});
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();
}
},
@ -729,6 +776,7 @@ module.exports = React.createClass({
// to rebind the onChange each time we render
const onChange = (e) => {
if (e.target.checked) {
this._syncedSettings[setting.id] = setting.value;
UserSettingsStore.setSyncedSetting(setting.id, setting.value);
}
dis.dispatch({
@ -741,7 +789,7 @@ module.exports = React.createClass({
type="radio"
name={ setting.id }
value={ setting.value }
defaultChecked={ this._syncedSettings[setting.id] === setting.value }
checked={ this._syncedSettings[setting.id] === setting.value }
onChange={ onChange }
/>
<label htmlFor={ setting.id + "_" + setting.value }>
@ -795,6 +843,26 @@ module.exports = React.createClass({
);
},
_renderIgnoredUsers: function() {
if (this.state.ignoredUsers.length > 0) {
const updateHandler = this._refreshIgnoredUsers;
return (
<div>
<h3>{ _t("Ignored Users") }</h3>
<div className="mx_UserSettings_section mx_UserSettings_ignoredUsersSection">
<ul>
{this.state.ignoredUsers.map(function(userId) {
return (<IgnoredUser key={userId}
userId={userId}
onUnignored={updateHandler}></IgnoredUser>);
})}
</ul>
</div>
</div>
);
} else return (<div />);
},
_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
@ -1301,6 +1369,7 @@ module.exports = React.createClass({
{this._renderWebRtcSettings()}
{this._renderDevicesPanel()}
{this._renderCryptoInfo()}
{this._renderIgnoredUsers()}
{this._renderBulkOptions()}
{this._renderBugReport()}

View File

@ -14,10 +14,8 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
'use strict';
var React = require('react');
var AvatarLogic = require("../../../Avatar");
import React from 'react';
import AvatarLogic from '../../../Avatar';
import sdk from '../../../index';
import AccessibleButton from '../elements/AccessibleButton';

View File

@ -28,7 +28,7 @@ const TRUNCATE_QUERY_LIST = 40;
const QUERY_USER_DIRECTORY_DEBOUNCE_MS = 200;
module.exports = React.createClass({
displayName: "UserPickerDialog",
displayName: "AddressPickerDialog",
propTypes: {
title: PropTypes.string.isRequired,
@ -40,6 +40,8 @@ module.exports = React.createClass({
focus: PropTypes.bool,
validAddressTypes: PropTypes.arrayOf(PropTypes.oneOf(addressTypes)),
onFinished: PropTypes.func.isRequired,
groupId: PropTypes.string,
pickerType: PropTypes.oneOf(['user', 'room']),
},
getDefaultProps: function() {
@ -47,6 +49,7 @@ module.exports = React.createClass({
value: "",
focus: true,
validAddressTypes: addressTypes,
pickerType: 'user',
};
},
@ -140,10 +143,22 @@ module.exports = React.createClass({
// Only do search if there is something to search
if (query.length > 0 && query != '@' && query.length >= 2) {
this.queryChangedDebouncer = setTimeout(() => {
if (this.state.serverSupportsUserDirectory) {
this._doUserDirectorySearch(query);
if (this.props.pickerType === 'user') {
if (this.props.groupId) {
this._doNaiveGroupSearch(query);
} else if (this.state.serverSupportsUserDirectory) {
this._doUserDirectorySearch(query);
} else {
this._doLocalSearch(query);
}
} else if (this.props.pickerType === 'room') {
if (this.props.groupId) {
this._doNaiveGroupRoomSearch(query);
} else {
console.error('Room searching only implemented for groups');
}
} else {
this._doLocalSearch(query);
console.error('Unknown pickerType', this.props.pickerType);
}
}, QUERY_USER_DIRECTORY_DEBOUNCE_MS);
} else {
@ -185,6 +200,70 @@ module.exports = React.createClass({
if (this._cancelThreepidLookup) this._cancelThreepidLookup();
},
_doNaiveGroupSearch: function(query) {
const lowerCaseQuery = query.toLowerCase();
this.setState({
busy: true,
query,
searchError: null,
});
MatrixClientPeg.get().getGroupUsers(this.props.groupId).then((resp) => {
const results = [];
resp.chunk.forEach((u) => {
const userIdMatch = u.user_id.toLowerCase().includes(lowerCaseQuery);
const displayNameMatch = (u.displayname || '').toLowerCase().includes(lowerCaseQuery);
if (!(userIdMatch || displayNameMatch)) {
return;
}
results.push({
user_id: u.user_id,
avatar_url: u.avatar_url,
display_name: u.displayname,
});
});
this._processResults(results, query);
}).catch((err) => {
console.error('Error whilst searching group rooms: ', err);
this.setState({
searchError: err.errcode ? err.message : _t('Something went wrong!'),
});
}).done(() => {
this.setState({
busy: false,
});
});
},
_doNaiveGroupRoomSearch: function(query) {
const lowerCaseQuery = query.toLowerCase();
MatrixClientPeg.get().getGroupRooms(this.props.groupId).then((resp) => {
const results = [];
resp.chunk.forEach((r) => {
const nameMatch = (r.name || '').toLowerCase().includes(lowerCaseQuery);
const topicMatch = (r.topic || '').toLowerCase().includes(lowerCaseQuery);
const aliasMatch = (r.canonical_alias || '').toLowerCase().includes(lowerCaseQuery);
if (!(nameMatch || topicMatch || aliasMatch)) {
return;
}
results.push({
room_id: r.room_id,
avatar_url: r.avatar_url,
name: r.name,
});
});
this._processResults(results, query);
}).catch((err) => {
console.error('Error whilst searching group users: ', err);
this.setState({
searchError: err.errcode ? err.message : _t('Something went wrong!'),
});
}).done(() => {
this.setState({
busy: false,
});
});
},
_doUserDirectorySearch: function(query) {
this.setState({
busy: true,
@ -245,17 +324,28 @@ module.exports = React.createClass({
_processResults: function(results, query) {
const queryList = [];
results.forEach((user) => {
if (user.user_id === MatrixClientPeg.get().credentials.userId) {
results.forEach((result) => {
if (result.room_id) {
queryList.push({
addressType: 'mx',
address: result.room_id,
displayName: result.name,
avatarMxc: result.avatar_url,
isKnown: true,
});
return;
}
if (result.user_id === MatrixClientPeg.get().credentials.userId) {
return;
}
// Return objects, structure of which is defined
// by UserAddressType
queryList.push({
addressType: 'mx',
address: user.user_id,
displayName: user.display_name,
avatarMxc: user.avatar_url,
address: result.user_id,
displayName: result.display_name,
avatarMxc: result.avatar_url,
isKnown: true,
});
});

View File

@ -18,6 +18,7 @@ import React from 'react';
import sdk from '../../../index';
import { _t } from '../../../languageHandler';
import classnames from 'classnames';
import { GroupMemberType } from '../../../groups';
/*
* A dialog for confirming an operation on another user.
@ -30,7 +31,10 @@ import classnames from 'classnames';
export default React.createClass({
displayName: 'ConfirmUserActionDialog',
propTypes: {
member: React.PropTypes.object.isRequired, // matrix-js-sdk member object
// matrix-js-sdk (room) member object. Supply either this or 'groupMember'
member: React.PropTypes.object,
// group member object. Supply either this or 'member'
groupMember: GroupMemberType,
action: React.PropTypes.string.isRequired, // eg. 'Ban'
// Whether to display a text field for a reason
@ -69,6 +73,7 @@ export default React.createClass({
render: function() {
const BaseDialog = sdk.getComponent('views.dialogs.BaseDialog');
const MemberAvatar = sdk.getComponent("views.avatars.MemberAvatar");
const BaseAvatar = sdk.getComponent("views.avatars.BaseAvatar");
const title = _t("%(actionVerb)s this person?", { actionVerb: this.props.action});
const confirmButtonClass = classnames({
@ -91,6 +96,20 @@ export default React.createClass({
);
}
let avatar;
let name;
let userId;
if (this.props.member) {
avatar = <MemberAvatar member={this.props.member} width={48} height={48} />;
name = this.props.member.name;
userId = this.props.member.userId;
} else {
// we don't get this info from the API yet
avatar = <BaseAvatar name={this.props.groupMember.userId} width={48} height={48} />;
name = this.props.groupMember.userId;
userId = this.props.groupMember.userId;
}
return (
<BaseDialog className="mx_ConfirmUserActionDialog" onFinished={this.props.onFinished}
onEnterPressed={ this.onOk }
@ -98,10 +117,10 @@ export default React.createClass({
>
<div className="mx_Dialog_content">
<div className="mx_ConfirmUserActionDialog_avatar">
<MemberAvatar member={this.props.member} width={48} height={48} />
{avatar}
</div>
<div className="mx_ConfirmUserActionDialog_name">{this.props.member.name}</div>
<div className="mx_ConfirmUserActionDialog_userId">{this.props.member.userId}</div>
<div className="mx_ConfirmUserActionDialog_name">{name}</div>
<div className="mx_ConfirmUserActionDialog_userId">{userId}</div>
</div>
{reasonBox}
<div className="mx_Dialog_buttons">

View File

@ -1,5 +1,6 @@
/*
Copyright 2015, 2016 OpenMarket Ltd
Copyright 2017 New Vector Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@ -17,6 +18,7 @@ limitations under the License.
import React from 'react';
import sdk from '../../../index';
import { _t } from '../../../languageHandler';
import classnames from 'classnames';
export default React.createClass({
displayName: 'QuestionDialog',
@ -25,6 +27,7 @@ export default React.createClass({
description: React.PropTypes.node,
extraButtons: React.PropTypes.node,
button: React.PropTypes.string,
danger: React.PropTypes.bool,
focus: React.PropTypes.bool,
onFinished: React.PropTypes.func.isRequired,
},
@ -36,6 +39,7 @@ export default React.createClass({
extraButtons: null,
focus: true,
hasCancelButton: true,
danger: false,
};
},
@ -54,6 +58,10 @@ export default React.createClass({
{_t("Cancel")}
</button>
) : null;
const buttonClasses = classnames({
mx_Dialog_primary: true,
danger: this.props.danger,
});
return (
<BaseDialog className="mx_QuestionDialog" onFinished={this.props.onFinished}
onEnterPressed={ this.onOk }
@ -63,7 +71,7 @@ export default React.createClass({
{this.props.description}
</div>
<div className="mx_Dialog_buttons">
<button className="mx_Dialog_primary" onClick={this.onOk} autoFocus={this.props.focus}>
<button className={buttonClasses} onClick={this.onOk} autoFocus={this.props.focus}>
{this.props.button || _t('OK')}
</button>
{this.props.extraButtons}

View File

@ -19,6 +19,7 @@ import PropTypes from 'prop-types';
import AccessibleButton from './AccessibleButton';
import dis from '../../../dispatcher';
import sdk from '../../../index';
import Analytics from '../../../Analytics';
export default React.createClass({
displayName: 'RoleButton',
@ -47,6 +48,7 @@ export default React.createClass({
_onClick: function(ev) {
ev.stopPropagation();
Analytics.trackEvent('Action Button', 'click', this.props.action);
dis.dispatch({action: this.props.action});
},

View File

@ -0,0 +1,255 @@
/*
Copyright 2017 New Vector Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
'use strict';
import React from 'react';
import PropTypes from 'prop-types';
import {MatrixClient} from 'matrix-js-sdk';
import UserSettingsStore from '../../../UserSettingsStore';
import dis from '../../../dispatcher';
import Promise from 'bluebird';
const BULK_REQUEST_DEBOUNCE_MS = 200;
// Does the server support groups? Assume yes until we receive M_UNRECOGNIZED.
// If true, flair can function and we should keep sending requests for groups and avatars.
let groupSupport = true;
const USER_GROUPS_CACHE_BUST_MS = 1800000; // 30 mins
const GROUP_PROFILES_CACHE_BUST_MS = 1800000; // 30 mins
// TODO: Cache-busting based on time. (The server won't inform us of membership changes.)
// This applies to userGroups and groupProfiles. We can provide a slightly better UX by
// cache-busting when the current user joins/leaves a group.
const userGroups = {
// $userId: ['+group1:domain', '+group2:domain', ...]
};
const groupProfiles = {
// $groupId: {
// avatar_url: 'mxc://...'
// }
};
// Represents all unsettled promises to retrieve the groups for each userId. When a promise
// is settled, it is deleted from this object.
const usersPending = {
// $userId: {
// prom: Promise
// resolve: () => {}
// reject: () => {}
// }
};
let debounceTimeoutID;
function getPublicisedGroupsCached(matrixClient, userId) {
if (userGroups[userId]) {
return Promise.resolve(userGroups[userId]);
}
// Bulk lookup ongoing, return promise to resolve/reject
if (usersPending[userId]) {
return usersPending[userId].prom;
}
usersPending[userId] = {};
usersPending[userId].prom = new Promise((resolve, reject) => {
usersPending[userId].resolve = resolve;
usersPending[userId].reject = reject;
}).then((groups) => {
userGroups[userId] = groups;
setTimeout(() => {
delete userGroups[userId];
}, USER_GROUPS_CACHE_BUST_MS);
return userGroups[userId];
}).catch((err) => {
throw err;
}).finally(() => {
delete usersPending[userId];
});
// This debounce will allow consecutive requests for the public groups of users that
// are sent in intervals of < BULK_REQUEST_DEBOUNCE_MS to be batched and only requested
// when no more requests are received within the next BULK_REQUEST_DEBOUNCE_MS. The naive
// implementation would do a request that only requested the groups for `userId`, leading
// to a worst and best case of 1 user per request. This implementation's worst is still
// 1 user per request but only if the requests are > BULK_REQUEST_DEBOUNCE_MS apart and the
// best case is N users per request.
//
// This is to reduce the number of requests made whilst trading off latency when viewing
// a Flair component.
if (debounceTimeoutID) clearTimeout(debounceTimeoutID);
debounceTimeoutID = setTimeout(() => {
batchedGetPublicGroups(matrixClient);
}, BULK_REQUEST_DEBOUNCE_MS);
return usersPending[userId].prom;
}
async function batchedGetPublicGroups(matrixClient) {
// Take the userIds from the keys of usersPending
const usersInFlight = Object.keys(usersPending);
let resp = {
users: [],
};
try {
resp = await matrixClient.getPublicisedGroups(usersInFlight);
} catch (err) {
// Propagate the same error to all usersInFlight
usersInFlight.forEach((userId) => {
usersPending[userId].reject(err);
});
return;
}
const updatedUserGroups = resp.users;
usersInFlight.forEach((userId) => {
usersPending[userId].resolve(updatedUserGroups[userId] || []);
});
}
async function getGroupProfileCached(matrixClient, groupId) {
if (groupProfiles[groupId]) {
return groupProfiles[groupId];
}
const profile = await matrixClient.getGroupProfile(groupId);
groupProfiles[groupId] = {
groupId,
avatarUrl: profile.avatar_url,
};
setTimeout(() => {
delete groupProfiles[groupId];
}, GROUP_PROFILES_CACHE_BUST_MS);
return groupProfiles[groupId];
}
class FlairAvatar extends React.Component {
constructor() {
super();
this.onClick = this.onClick.bind(this);
}
onClick(ev) {
ev.preventDefault();
// Don't trigger onClick of parent element
ev.stopPropagation();
dis.dispatch({
action: 'view_group',
group_id: this.props.groupProfile.groupId,
});
}
render() {
const httpUrl = this.context.matrixClient.mxcUrlToHttp(
this.props.groupProfile.avatarUrl, 14, 14, 'scale', false);
return <img src={httpUrl} width="14px" height="14px" onClick={this.onClick}/>;
}
}
FlairAvatar.propTypes = {
groupProfile: PropTypes.shape({
groupId: PropTypes.string.isRequired,
avatarUrl: PropTypes.string.isRequired,
}),
};
FlairAvatar.contextTypes = {
matrixClient: React.PropTypes.instanceOf(MatrixClient).isRequired,
};
export default class Flair extends React.Component {
constructor() {
super();
this.state = {
profiles: [],
};
}
componentWillUnmount() {
this._unmounted = true;
}
componentWillMount() {
this._unmounted = false;
if (UserSettingsStore.isFeatureEnabled('feature_flair') && groupSupport) {
this._generateAvatars();
}
}
async _getGroupProfiles(groups) {
const profiles = [];
for (const groupId of groups) {
let groupProfile = null;
try {
groupProfile = await getGroupProfileCached(this.context.matrixClient, groupId);
} catch (err) {
console.error('Could not get profile for group', groupId, err);
}
profiles.push(groupProfile);
}
return profiles.filter((p) => p !== null);
}
async _generateAvatars() {
let groups;
try {
groups = await getPublicisedGroupsCached(this.context.matrixClient, this.props.userId);
} catch (err) {
// Indicate whether the homeserver supports groups
if (err.errcode === 'M_UNRECOGNIZED') {
console.warn('Cannot display flair, server does not support groups');
groupSupport = false;
// Return silently to avoid spamming for non-supporting servers
return;
}
console.error('Could not get groups for user', this.props.userId, err);
}
if (!groups || groups.length === 0) {
return;
}
const profiles = await this._getGroupProfiles(groups);
if (!this.unmounted) {
this.setState({profiles});
}
}
render() {
if (this.state.profiles.length === 0) {
return <div />;
}
const avatars = this.state.profiles.map((profile, index) => {
return <FlairAvatar key={index} groupProfile={profile}/>;
});
return (
<span className="mx_Flair" style={{"marginLeft": "5px", "verticalAlign": "-3px"}}>
{avatars}
</span>
);
}
}
Flair.propTypes = {
userId: PropTypes.string,
};
// TODO: We've decided that all components should follow this pattern, which means removing withMatrixClient and using
// this.context.matrixClient everywhere instead of this.props.matrixClient.
// See https://github.com/vector-im/riot-web/issues/4951.
Flair.contextTypes = {
matrixClient: React.PropTypes.instanceOf(MatrixClient).isRequired,
};

View File

@ -17,6 +17,7 @@ limitations under the License.
import React from 'react';
import PropTypes from 'prop-types';
import sdk from '../../../index';
import classNames from 'classnames';
import SdkConfig from '../../../SdkConfig';
import ScalarAuthClient from '../../../ScalarAuthClient';
import ScalarMessaging from '../../../ScalarMessaging';
@ -31,11 +32,9 @@ export default class ManageIntegsButton extends React.Component {
this.state = {
scalarError: null,
showIntegrationsError: false,
};
this.onManageIntegrations = this.onManageIntegrations.bind(this);
this.onShowIntegrationsError = this.onShowIntegrationsError.bind(this);
}
componentWillMount() {
@ -48,7 +47,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);
});
}
}
@ -59,6 +58,9 @@ export default class ManageIntegsButton extends React.Component {
onManageIntegrations(ev) {
ev.preventDefault();
if (this.state.scalarError && !this.scalarClient.hasCredentials()) {
return;
}
const IntegrationsManager = sdk.getComponent("views.settings.IntegrationsManager");
Modal.createDialog(IntegrationsManager, {
src: (this.scalarClient !== null && this.scalarClient.hasCredentials()) ?
@ -67,45 +69,33 @@ export default class ManageIntegsButton extends React.Component {
}, "mx_IntegrationsManager");
}
onShowIntegrationsError(ev) {
ev.preventDefault();
this.setState({
showIntegrationsError: !this.state.showIntegrationsError,
});
}
render() {
let integrationsButton = <div />;
let integrationsError;
let integrationsWarningTriangle = <div />;
let integrationsErrorPopup = <div />;
if (this.scalarClient !== null) {
if (this.state.showIntegrationsError && this.state.scalarError) {
integrationsError = (
const integrationsButtonClasses = classNames({
mx_RoomHeader_button: true,
mx_RoomSettings_integrationsButton_error: !!this.state.scalarError,
});
if (this.state.scalarError && !this.scalarClient.hasCredentials()) {
integrationsWarningTriangle = <img src="img/warning.svg" title={_t('Integrations Error')} width="17"/>;
// Popup shown when hovering over integrationsButton_error (via CSS)
integrationsErrorPopup = (
<span className="mx_RoomSettings_integrationsButton_errorPopup">
{ _t('Could not connect to the integration server') }
</span>
);
}
if (this.scalarClient.hasCredentials()) {
integrationsButton = (
<AccessibleButton className="mx_RoomHeader_button" onClick={this.onManageIntegrations} title={ _t('Manage Integrations') }>
<TintableSvg src="img/icons-apps.svg" width="35" height="35"/>
</AccessibleButton>
);
} else if (this.state.scalarError) {
integrationsButton = (
<div className="mx_RoomSettings_integrationsButton_error" onClick={ this.onShowIntegrationsError }>
<img src="img/warning.svg" title={_t('Integrations Error')} width="17"/>
{ integrationsError }
</div>
);
} else {
integrationsButton = (
<AccessibleButton className="mx_RoomHeader_button" onClick={this.onManageIntegrations} title={ _t('Manage Integrations') }>
<TintableSvg src="img/icons-apps.svg" width="35" height="35"/>
</AccessibleButton>
);
}
integrationsButton = (
<AccessibleButton className={integrationsButtonClasses} onClick={this.onManageIntegrations} title={ _t('Manage Integrations') }>
<TintableSvg src="img/icons-apps.svg" width="35" height="35"/>
{ integrationsWarningTriangle }
{ integrationsErrorPopup }
</AccessibleButton>
);
}
return integrationsButton;

View File

@ -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 {

View File

@ -1,5 +1,6 @@
/*
Copyright 2016 OpenMarket Ltd
Copyright 2017 New Vector Ltd
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@ -13,7 +14,9 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
var React = require('react');
import React from 'react';
import PropTypes from 'prop-types';
import { _t } from '../../../languageHandler';
module.exports = React.createClass({
@ -21,12 +24,21 @@ module.exports = React.createClass({
propTypes: {
// The number of elements to show before truncating. If negative, no truncation is done.
truncateAt: React.PropTypes.number,
truncateAt: PropTypes.number,
// The className to apply to the wrapping div
className: React.PropTypes.string,
className: PropTypes.string,
// A function that returns the children to be rendered into the element.
// function getChildren(start: number, end: number): Array<React.Node>
// The start element is included, the end is not (as in `slice`).
// If omitted, the React child elements will be used. This parameter can be used
// to avoid creating unnecessary React elements.
getChildren: PropTypes.func,
// A function that should return the total number of child element available.
// Required if getChildren is supplied.
getChildCount: PropTypes.func,
// A function which will be invoked when an overflow element is required.
// This will be inserted after the children.
createOverflowElement: React.PropTypes.func
createOverflowElement: PropTypes.func,
},
getDefaultProps: function() {
@ -36,38 +48,54 @@ module.exports = React.createClass({
return (
<div>{_t("And %(count)s more...", {count: overflowCount})}</div>
);
}
},
};
},
_getChildren: function(start, end) {
if (this.props.getChildren && this.props.getChildCount) {
return this.props.getChildren(start, end);
} else {
// XXX: I'm not sure why anything would pass null into this, it seems
// like a bizzare case to handle, but I'm preserving the behaviour.
// (see commit 38d5c7d5c5d5a34dc16ef5d46278315f5c57f542)
return React.Children.toArray(this.props.children).filter((c) => {
return c != null;
}).slice(start, end);
}
},
_getChildCount: function() {
if (this.props.getChildren && this.props.getChildCount) {
return this.props.getChildCount();
} else {
return React.Children.toArray(this.props.children).filter((c) => {
return c != null;
}).length;
}
},
render: function() {
var childsJsx = this.props.children;
var overflowJsx;
var childArray = React.Children.toArray(this.props.children).filter((c) => {
return c != null;
});
var childCount = childArray.length;
let overflowNode = null;
const totalChildren = this._getChildCount();
let upperBound = totalChildren;
if (this.props.truncateAt >= 0) {
var overflowCount = childCount - this.props.truncateAt;
const overflowCount = totalChildren - this.props.truncateAt;
if (overflowCount > 1) {
overflowJsx = this.props.createOverflowElement(
overflowCount, childCount
overflowNode = this.props.createOverflowElement(
overflowCount, totalChildren,
);
// cut out the overflow elements
childArray.splice(childCount - overflowCount, overflowCount);
childsJsx = childArray; // use what is left
upperBound = this.props.truncateAt;
}
}
const childNodes = this._getChildren(0, upperBound);
return (
<div className={this.props.className}>
{childsJsx}
{overflowJsx}
{childNodes}
{overflowNode}
</div>
);
}
},
});

View File

@ -0,0 +1,70 @@
/*
Copyright 2017 New Vector Ltd
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import React from 'react';
import PropTypes from 'prop-types';
import sdk from '../../../index';
import dis from '../../../dispatcher';
import AccessibleButton from '../elements/AccessibleButton';
export default React.createClass({
displayName: 'GroupInviteTile',
propTypes: {
group: PropTypes.object.isRequired,
},
onClick: function(e) {
dis.dispatch({
action: 'view_group',
group_id: this.props.group.groupId,
});
},
render: function() {
const BaseAvatar = sdk.getComponent('avatars.BaseAvatar');
const EmojiText = sdk.getComponent('elements.EmojiText');
const av = (
<BaseAvatar name={this.props.group.name} width={24} height={24}
url={this.props.group.avatarUrl}
/>
);
const label = <EmojiText
element="div"
title={this.props.group.name}
className="mx_GroupInviteTile_name"
dir="auto"
>
{this.props.group.name}
</EmojiText>;
const badge = <div className="mx_GroupInviteTile_badge">!</div>;
return (
<AccessibleButton className="mx_GroupInviteTile" onClick={this.onClick}>
<div className="mx_GroupInviteTile_avatarContainer">
{av}
</div>
<div className="mx_GroupInviteTile_nameContainer">
{label}
{badge}
</div>
</AccessibleButton>
);
},
});

View File

@ -0,0 +1,195 @@
/*
Copyright 2017 Vector Creations Ltd
Copyright 2017 New Vector Ltd
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import PropTypes from 'prop-types';
import React from 'react';
import dis from '../../../dispatcher';
import Modal from '../../../Modal';
import sdk from '../../../index';
import { _t } from '../../../languageHandler';
import { GroupMemberType } from '../../../groups';
import { groupMemberFromApiObject } from '../../../groups';
import withMatrixClient from '../../../wrappers/withMatrixClient';
import AccessibleButton from '../elements/AccessibleButton';
import GeminiScrollbar from 'react-gemini-scrollbar';
module.exports = withMatrixClient(React.createClass({
displayName: 'GroupMemberInfo',
propTypes: {
matrixClient: PropTypes.object.isRequired,
groupId: PropTypes.string,
groupMember: GroupMemberType,
},
getInitialState: function() {
return {
fetching: false,
removingUser: false,
groupMembers: null,
};
},
componentWillMount: function() {
this._fetchMembers();
},
_fetchMembers: function() {
this.setState({fetching: true});
this.props.matrixClient.getGroupUsers(this.props.groupId).then((result) => {
this.setState({
groupMembers: result.chunk.map((apiMember) => {
return groupMemberFromApiObject(apiMember);
}),
fetching: false,
});
}).catch((e) => {
this.setState({fetching: false});
console.error("Failed to get group groupMember list: ", e);
});
},
_onKick: function() {
const ConfirmUserActionDialog = sdk.getComponent("dialogs.ConfirmUserActionDialog");
Modal.createDialog(ConfirmUserActionDialog, {
groupMember: this.props.groupMember,
action: _t('Remove from group'),
danger: true,
onFinished: (proceed) => {
if (!proceed) return;
this.setState({removingUser: true});
this.props.matrixClient.removeUserFromGroup(
this.props.groupId, this.props.groupMember.userId,
).then(() => {
// return to the user list
dis.dispatch({
action: "view_user",
member: null,
});
}).catch((e) => {
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
Modal.createTrackedDialog('Failed to remove user from group', '', ErrorDialog, {
title: _t('Error'),
description: _t('Failed to remove user from group'),
});
}).finally(() => {
this.setState({removingUser: false});
});
},
});
},
_onCancel: function(e) {
// Go back to the user list
dis.dispatch({
action: "view_user",
member: null,
});
},
onRoomTileClick(roomId) {
dis.dispatch({
action: 'view_room',
room_id: roomId,
});
},
render: function() {
if (this.state.fetching || this.state.removingUser) {
const Spinner = sdk.getComponent("elements.Spinner");
return <Spinner />;
}
if (!this.state.groupMembers) return null;
const targetIsInGroup = this.state.groupMembers.some((m) => {
return m.userId === this.props.groupMember.userId;
});
let kickButton;
let adminButton;
if (targetIsInGroup) {
kickButton = (
<AccessibleButton className="mx_MemberInfo_field"
onClick={this._onKick}>
{_t('Remove from group')}
</AccessibleButton>
);
// No make/revoke admin API yet
/*const opLabel = this.state.isTargetMod ? _t("Revoke Moderator") : _t("Make Moderator");
giveModButton = <AccessibleButton className="mx_MemberInfo_field" onClick={this.onModToggle}>
{giveOpLabel}
</AccessibleButton>;*/
}
let adminTools;
if (kickButton || adminButton) {
adminTools =
<div className="mx_MemberInfo_adminTools">
<h3>{_t("Admin Tools")}</h3>
<div className="mx_MemberInfo_buttons">
{kickButton}
{adminButton}
</div>
</div>;
}
const avatarUrl = this.props.matrixClient.mxcUrlToHttp(
this.props.groupMember.avatarUrl,
36, 36, 'crop',
);
const BaseAvatar = sdk.getComponent('avatars.BaseAvatar');
const avatar = (
<BaseAvatar name={this.props.groupMember.userId} width={36} height={36}
url={avatarUrl}
/>
);
const groupMemberName = (
this.props.groupMember.displayname || this.props.groupMember.userId
);
const EmojiText = sdk.getComponent('elements.EmojiText');
return (
<div className="mx_MemberInfo">
<GeminiScrollbar autoshow={true}>
<AccessibleButton className="mx_MemberInfo_cancel"onClick={this._onCancel}>
<img src="img/cancel.svg" width="18" height="18"/>
</AccessibleButton>
<div className="mx_MemberInfo_avatar">
{avatar}
</div>
<EmojiText element="h2">{groupMemberName}</EmojiText>
<div className="mx_MemberInfo_profile">
<div className="mx_MemberInfo_profileField">
{ this.props.groupMember.userId }
</div>
</div>
{ adminTools }
</GeminiScrollbar>
</div>
);
},
}));

View File

@ -0,0 +1,153 @@
/*
Copyright 2017 Vector Creations Ltd.
Copyright 2017 New Vector Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import React from 'react';
import { _t } from '../../../languageHandler';
import sdk from '../../../index';
import { groupMemberFromApiObject } from '../../../groups';
import GeminiScrollbar from 'react-gemini-scrollbar';
import PropTypes from 'prop-types';
import withMatrixClient from '../../../wrappers/withMatrixClient';
const INITIAL_LOAD_NUM_MEMBERS = 30;
export default withMatrixClient(React.createClass({
displayName: 'GroupMemberList',
propTypes: {
matrixClient: PropTypes.object.isRequired,
groupId: PropTypes.string.isRequired,
},
getInitialState: function() {
return {
fetching: false,
members: null,
truncateAt: INITIAL_LOAD_NUM_MEMBERS,
};
},
componentWillMount: function() {
this._unmounted = false;
this._fetchMembers();
},
_fetchMembers: function() {
this.setState({fetching: true});
this.props.matrixClient.getGroupUsers(this.props.groupId).then((result) => {
this.setState({
members: result.chunk.map((apiMember) => {
return groupMemberFromApiObject(apiMember);
}),
fetching: false,
});
}).catch((e) => {
this.setState({fetching: false});
console.error("Failed to get group member list: " + e);
});
},
_createOverflowTile: function(overflowCount, totalCount) {
// For now we'll pretend this is any entity. It should probably be a separate tile.
const EntityTile = sdk.getComponent("rooms.EntityTile");
const BaseAvatar = sdk.getComponent("avatars.BaseAvatar");
const text = _t("and %(count)s others...", { count: overflowCount });
return (
<EntityTile className="mx_EntityTile_ellipsis" avatarJsx={
<BaseAvatar url="img/ellipsis.svg" name="..." width={36} height={36} />
} name={text} presenceState="online" suppressOnHover={true}
onClick={this._showFullMemberList} />
);
},
_showFullMemberList: function() {
this.setState({
truncateAt: -1,
});
},
onSearchQueryChanged: function(ev) {
this.setState({ searchQuery: ev.target.value });
},
makeGroupMemberTiles: function(query) {
const GroupMemberTile = sdk.getComponent("groups.GroupMemberTile");
query = (query || "").toLowerCase();
let memberList = this.state.members;
if (query) {
memberList = memberList.filter((m) => {
const matchesName = m.displayname.toLowerCase().indexOf(query) !== -1;
const matchesId = m.userId.toLowerCase().includes(query);
if (!matchesName && !matchesId) {
return false;
}
return true;
});
}
memberList = memberList.map((m) => {
return (
<GroupMemberTile key={m.userId} groupId={this.props.groupId} member={m} />
);
});
memberList.sort((a, b) => {
// TODO: should put admins at the top: we don't yet have that info
if (a < b) {
return -1;
} else if (a > b) {
return 1;
} else {
return 0;
}
});
return memberList;
},
render: function() {
if (this.state.fetching) {
const Spinner = sdk.getComponent("elements.Spinner");
return <Spinner />;
} else if (this.state.members === null) {
return null;
}
const inputBox = (
<form autoComplete="off">
<input className="mx_MemberList_query" id="mx_MemberList_query" type="text"
onChange={this.onSearchQueryChanged} value={this.state.searchQuery}
placeholder={ _t('Filter group members') } />
</form>
);
const TruncatedList = sdk.getComponent("elements.TruncatedList");
return (
<div className="mx_MemberList">
{ inputBox }
<GeminiScrollbar autoshow={true} className="mx_MemberList_joined mx_MemberList_outerWrapper">
<TruncatedList className="mx_MemberList_wrapper" truncateAt={this.state.truncateAt}
createOverflowElement={this._createOverflowTile}>
{this.makeGroupMemberTiles(this.state.searchQuery)}
</TruncatedList>
</GeminiScrollbar>
</div>
);
},
}));

View File

@ -0,0 +1,70 @@
/*
Copyright 2017 Vector Creations Ltd
Copyright 2017 New Vector Ltd
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import React from 'react';
import PropTypes from 'prop-types';
import sdk from '../../../index';
import dis from '../../../dispatcher';
import { GroupMemberType } from '../../../groups';
import withMatrixClient from '../../../wrappers/withMatrixClient';
export default withMatrixClient(React.createClass({
displayName: 'GroupMemberTile',
propTypes: {
matrixClient: PropTypes.object,
groupId: PropTypes.string.isRequired,
member: GroupMemberType.isRequired,
},
getInitialState: function() {
return {};
},
onClick: function(e) {
dis.dispatch({
action: 'view_group_user',
member: this.props.member,
groupId: this.props.groupId,
});
},
render: function() {
const BaseAvatar = sdk.getComponent('avatars.BaseAvatar');
const EntityTile = sdk.getComponent('rooms.EntityTile');
const name = this.props.member.displayname || this.props.member.userId;
const avatarUrl = this.props.matrixClient.mxcUrlToHttp(
this.props.member.avatarUrl,
36, 36, 'crop',
);
const av = (
<BaseAvatar name={this.props.member.userId}
width={36} height={36}
url={avatarUrl}
/>
);
return (
<EntityTile presenceState="online"
avatarJsx={av} onClick={this.onClick}
name={name} powerLevel={0} suppressOnHover={true}
/>
);
},
}));

View File

@ -18,6 +18,7 @@
import React from 'react';
import sdk from '../../../index';
import Flair from '../elements/Flair.js';
export default function SenderProfile(props) {
const EmojiText = sdk.getComponent('elements.EmojiText');
@ -30,8 +31,11 @@ export default function SenderProfile(props) {
}
return (
<EmojiText className="mx_SenderProfile" dir="auto"
onClick={props.onClick}>{`${name || ''} ${props.aux || ''}`}</EmojiText>
<div className="mx_SenderProfile" dir="auto" onClick={props.onClick}>
<EmojiText className="mx_SenderProfile_name">{name || ''}</EmojiText>
{props.enableFlair ? <Flair userId={mxEvent.getSender()} /> : null}
{props.aux ? <EmojiText className="mx_SenderProfile_aux"> {props.aux}</EmojiText> : null}
</div>
);
}

View File

@ -31,6 +31,7 @@ import dis from '../../../dispatcher';
import { _t } from '../../../languageHandler';
import UserSettingsStore from "../../../UserSettingsStore";
import MatrixClientPeg from '../../../MatrixClientPeg';
import ContextualMenu from '../../structures/ContextualMenu';
import {RoomMember} from 'matrix-js-sdk';
import classNames from 'classnames';
@ -72,12 +73,16 @@ module.exports = React.createClass({
textArea.value = text;
document.body.appendChild(textArea);
textArea.select();
let successful = false;
try {
const successful = document.execCommand('copy');
successful = document.execCommand('copy');
} catch (err) {
console.log('Unable to copy');
}
document.body.removeChild(textArea);
return successful;
},
componentDidMount: function() {
@ -113,7 +118,6 @@ module.exports = React.createClass({
}
}, 10);
}
this._addCodeCopyButton();
}
},
@ -258,7 +262,21 @@ module.exports = React.createClass({
button.className = "mx_EventTile_copyButton";
button.onclick = (e) => {
const copyCode = button.parentNode.getElementsByTagName("code")[0];
this.copyToClipboard(copyCode.textContent);
const successful = this.copyToClipboard(copyCode.textContent);
const GenericTextContextMenu = sdk.getComponent('context_menus.GenericTextContextMenu');
const buttonRect = e.target.getBoundingClientRect();
// The window X and Y offsets are to adjust position when zoomed in to page
const x = buttonRect.right + window.pageXOffset;
const y = (buttonRect.top + (buttonRect.height / 2) + window.pageYOffset) - 19;
const {close} = ContextualMenu.createMenu(GenericTextContextMenu, {
chevronOffset: 10,
left: x,
top: y,
message: successful ? _t('Copied!') : _t('Failed to copy'),
});
e.target.onmouseout = close;
};
p.appendChild(button);
});

View File

@ -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 (
<span className="mx_UnknownBody" title={_t("Removed or unknown message type")}>
<span className="mx_UnknownBody" title={tooltip}>
{text}
</span>
);

View File

@ -508,10 +508,10 @@ module.exports = withMatrixClient(React.createClass({
if (msgtype === 'm.image') aux = _t('sent an image');
else if (msgtype === 'm.video') aux = _t('sent a video');
else if (msgtype === 'm.file') aux = _t('uploaded a file');
sender = <SenderProfile onClick={ this.onSenderProfileClick } mxEvent={this.props.mxEvent} aux={aux} />;
sender = <SenderProfile onClick={ this.onSenderProfileClick } mxEvent={this.props.mxEvent} enableFlair={!aux} aux={aux} />;
}
else {
sender = <SenderProfile mxEvent={this.props.mxEvent} />;
sender = <SenderProfile mxEvent={this.props.mxEvent} enableFlair={true} />;
}
}

View File

@ -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 = (
<AccessibleButton onClick={this.onIgnoreToggle} className="mx_MemberInfo_field">
{this.state.isIgnoring ? _t("Unignore") : _t("Ignore")}
</AccessibleButton>
);
}
if (!ignoreButton) return null;
return (
<div>
<h3>{ _t("User Options") }</h3>
<div className="mx_MemberInfo_buttons">
{ignoreButton}
</div>
</div>
);
},
render: function() {
var startChat, kickButton, banButton, muteButton, giveModButton, spinner;
if (this.props.member.userId !== this.props.matrixClient.credentials.userId) {
@ -708,7 +751,7 @@ module.exports = withMatrixClient(React.createClass({
if (kickButton || banButton || muteButton || giveModButton) {
adminTools =
<div>
<h3>{_t("Admin tools")}</h3>
<h3>{_t("Admin Tools")}</h3>
<div className="mx_MemberInfo_buttons">
{muteButton}
@ -756,6 +799,8 @@ module.exports = withMatrixClient(React.createClass({
</div>
</div>
{ this._renderUserOptions() }
{ adminTools }
{ startChat }

View File

@ -1,6 +1,7 @@
/*
Copyright 2015, 2016 OpenMarket Ltd
Copyright 2017 Vector Creations Ltd
Copyright 2017 New Vector Ltd
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@ -14,42 +15,37 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
var React = require('react');
import React from 'react';
import { _t } from '../../../languageHandler';
var classNames = require('classnames');
var Matrix = require("matrix-js-sdk");
import Promise from 'bluebird';
var MatrixClientPeg = require("../../../MatrixClientPeg");
var Modal = require("../../../Modal");
var Entities = require("../../../Entities");
var sdk = require('../../../index');
var GeminiScrollbar = require('react-gemini-scrollbar');
var rate_limited_func = require('../../../ratelimitedfunc');
var CallHandler = require("../../../CallHandler");
var Invite = require("../../../Invite");
var INITIAL_LOAD_NUM_MEMBERS = 30;
const INITIAL_LOAD_NUM_MEMBERS = 30;
const INITIAL_LOAD_NUM_INVITED = 5;
const SHOW_MORE_INCREMENT = 100;
module.exports = React.createClass({
displayName: 'MemberList',
getInitialState: function() {
var state = {
members: [],
this.memberDict = this.getMemberDict();
const members = this.roomMembers();
return {
members: members,
filteredJoinedMembers: this._filterMembers(members, 'join'),
filteredInvitedMembers: this._filterMembers(members, 'invite'),
// ideally we'd size this to the page height, but
// in practice I find that a little constraining
truncateAt: INITIAL_LOAD_NUM_MEMBERS,
truncateAtJoined: INITIAL_LOAD_NUM_MEMBERS,
truncateAtInvited: INITIAL_LOAD_NUM_INVITED,
searchQuery: "",
};
if (!this.props.roomId) return state;
var cli = MatrixClientPeg.get();
var room = cli.getRoom(this.props.roomId);
if (!room) return state;
this.memberDict = this.getMemberDict();
state.members = this.roomMembers();
return state;
},
componentWillMount: function() {
@ -147,10 +143,12 @@ module.exports = React.createClass({
// console.log("Updating memberlist");
this.memberDict = this.getMemberDict();
var self = this;
this.setState({
members: self.roomMembers()
});
const newState = {
members: this.roomMembers(),
};
newState.filteredJoinedMembers = this._filterMembers(newState.members, 'join');
newState.filteredInvitedMembers = this._filterMembers(newState.members, 'invite');
this.setState(newState);
}, 500),
getMemberDict: function() {
@ -199,7 +197,15 @@ module.exports = React.createClass({
return to_display;
},
_createOverflowTile: function(overflowCount, totalCount) {
_createOverflowTileJoined: function(overflowCount, totalCount) {
return this._createOverflowTile(overflowCount, totalCount, this._showMoreJoinedMemberList);
},
_createOverflowTileInvited: function(overflowCount, totalCount) {
return this._createOverflowTile(overflowCount, totalCount, this._showMoreInvitedMemberList);
},
_createOverflowTile: function(overflowCount, totalCount, onClick) {
// For now we'll pretend this is any entity. It should probably be a separate tile.
const EntityTile = sdk.getComponent("rooms.EntityTile");
const BaseAvatar = sdk.getComponent("avatars.BaseAvatar");
@ -208,13 +214,19 @@ module.exports = React.createClass({
<EntityTile className="mx_EntityTile_ellipsis" avatarJsx={
<BaseAvatar url="img/ellipsis.svg" name="..." width={36} height={36} />
} name={text} presenceState="online" suppressOnHover={true}
onClick={this._showFullMemberList} />
onClick={onClick} />
);
},
_showFullMemberList: function() {
_showMoreJoinedMemberList: function() {
this.setState({
truncateAt: -1
truncateAtJoined: this.state.truncateAtJoined + SHOW_MORE_INCREMENT,
});
},
_showMoreInvitedMemberList: function() {
this.setState({
truncateAtInvited: this.state.truncateAtInvited + SHOW_MORE_INCREMENT,
});
},
@ -280,17 +292,17 @@ module.exports = React.createClass({
},
onSearchQueryChanged: function(ev) {
this.setState({ searchQuery: ev.target.value });
const q = ev.target.value;
this.setState({
searchQuery: q,
filteredJoinedMembers: this._filterMembers(this.state.members, 'join', q),
filteredInvitedMembers: this._filterMembers(this.state.members, 'invite', q),
});
},
makeMemberTiles: function(membership, query) {
var MemberTile = sdk.getComponent("rooms.MemberTile");
query = (query || "").toLowerCase();
var self = this;
var memberList = self.state.members.filter(function(userId) {
var m = self.memberDict[userId];
_filterMembers: function(members, membership, query) {
return members.filter((userId) => {
const m = this.memberDict[userId];
if (query) {
const matchesName = m.name.toLowerCase().indexOf(query) !== -1;
@ -302,14 +314,23 @@ module.exports = React.createClass({
}
return m.membership == membership;
}).map(function(userId) {
var m = self.memberDict[userId];
});
},
_makeMemberTiles: function(members, membership) {
const MemberTile = sdk.getComponent("rooms.MemberTile");
const memberList = members.map((userId) => {
const m = this.memberDict[userId];
return (
<MemberTile key={userId} member={m} ref={userId} />
);
});
// XXX: surely this is not the right home for this logic.
// Double XXX: Now it's really, really not the right home for this logic:
// we shouldn't even be passing in the 'membership' param to this function.
// Ew, ew, and ew.
if (membership === "invite") {
// include 3pid invites (m.room.third_party_invite) state events.
// The HS may have already converted these into m.room.member invites so
@ -333,7 +354,7 @@ module.exports = React.createClass({
return;
}
memberList.push(
<EntityTile key={e.getStateKey()} name={e.getContent().display_name} />
<EntityTile key={e.getStateKey()} name={e.getContent().display_name} suppressOnHover={true} />
);
});
}
@ -342,21 +363,42 @@ module.exports = React.createClass({
return memberList;
},
_getChildrenJoined: function(start, end) {
return this._makeMemberTiles(this.state.filteredJoinedMembers.slice(start, end));
},
_getChildCountJoined: function() {
return this.state.filteredJoinedMembers.length;
},
_getChildrenInvited: function(start, end) {
return this._makeMemberTiles(this.state.filteredInvitedMembers.slice(start, end));
},
_getChildCountInvited: function() {
return this.state.filteredInvitedMembers.length;
},
render: function() {
var invitedSection = null;
var invitedMemberTiles = this.makeMemberTiles('invite', this.state.searchQuery);
if (invitedMemberTiles.length > 0) {
const TruncatedList = sdk.getComponent("elements.TruncatedList");
let invitedSection = null;
if (this._getChildCountInvited() > 0) {
invitedSection = (
<div className="mx_MemberList_invited">
<h2>{ _t("Invited") }</h2>
<div className="mx_MemberList_wrapper">
{invitedMemberTiles}
<TruncatedList className="mx_MemberList_wrapper" truncateAt={this.state.truncateAtInvited}
createOverflowElement={this._createOverflowTileInvited}
getChildren={this._getChildrenInvited}
getChildCount={this._getChildCountInvited}
/>
</div>
</div>
);
}
var inputBox = (
const inputBox = (
<form autoComplete="off">
<input className="mx_MemberList_query" id="mx_MemberList_query" type="text"
onChange={this.onSearchQueryChanged} value={this.state.searchQuery}
@ -364,15 +406,15 @@ module.exports = React.createClass({
</form>
);
var TruncatedList = sdk.getComponent("elements.TruncatedList");
return (
<div className="mx_MemberList">
{ inputBox }
<GeminiScrollbar autoshow={true} className="mx_MemberList_joined mx_MemberList_outerWrapper">
<TruncatedList className="mx_MemberList_wrapper" truncateAt={this.state.truncateAt}
createOverflowElement={this._createOverflowTile}>
{this.makeMemberTiles('join', this.state.searchQuery)}
</TruncatedList>
<TruncatedList className="mx_MemberList_wrapper" truncateAt={this.state.truncateAtJoined}
createOverflowElement={this._createOverflowTileJoined}
getChildren={this._getChildrenJoined}
getChildCount={this._getChildCountJoined}
/>
{invitedSection}
</GeminiScrollbar>
</div>

View File

@ -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 = <ManageIntegsButton
roomId={this.props.room.roomId}
/>;

View File

@ -87,7 +87,9 @@ module.exports = React.createClass({
cli.on("Room.receipt", this.onRoomReceipt);
cli.on("RoomState.events", this.onRoomStateEvents);
cli.on("RoomMember.name", this.onRoomMemberName);
cli.on("Event.decrypted", this.onEventDecrypted);
cli.on("accountData", this.onAccountData);
cli.on("Group.myMembership", this._onGroupMyMembership);
this.refreshRoomList();
@ -154,7 +156,9 @@ module.exports = React.createClass({
MatrixClientPeg.get().removeListener("Room.receipt", this.onRoomReceipt);
MatrixClientPeg.get().removeListener("RoomState.events", this.onRoomStateEvents);
MatrixClientPeg.get().removeListener("RoomMember.name", this.onRoomMemberName);
MatrixClientPeg.get().removeListener("Event.decrypted", this.onEventDecrypted);
MatrixClientPeg.get().removeListener("accountData", this.onAccountData);
MatrixClientPeg.get().removeListener("Group.myMembership", this._onGroupMyMembership);
}
// cancel any pending calls to the rate_limited_funcs
this._delayedRefreshRoomList.cancelPendingCall();
@ -223,12 +227,21 @@ module.exports = React.createClass({
this._delayedRefreshRoomList();
},
onEventDecrypted: function(ev) {
// An event being decrypted may mean we need to re-order the room list
this._delayedRefreshRoomList();
},
onAccountData: function(ev) {
if (ev.getType() == 'm.direct') {
this._delayedRefreshRoomList();
}
},
_onGroupMyMembership: function(group) {
this.forceUpdate();
},
_delayedRefreshRoomList: new rate_limited_func(function() {
this.refreshRoomList();
}, 500),
@ -543,8 +556,24 @@ module.exports = React.createClass({
}
},
_makeGroupInviteTiles() {
const ret = [];
const GroupInviteTile = sdk.getComponent('groups.GroupInviteTile');
for (const group of MatrixClientPeg.get().getGroups()) {
if (group.myMembership !== 'invite') continue;
ret.push(<GroupInviteTile key={group.groupId} group={group} />);
}
return ret;
},
render: function() {
var RoomSubList = sdk.getComponent('structures.RoomSubList');
const RoomSubList = sdk.getComponent('structures.RoomSubList');
const inviteSectionExtraTiles = this._makeGroupInviteTiles();
var self = this;
return (
<GeminiScrollbar className="mx_RoomList_scrollbar"
@ -560,7 +589,9 @@ module.exports = React.createClass({
collapsed={ self.props.collapsed }
searchFilter={ self.props.searchFilter }
onHeaderClick={ self.onSubListHeaderClick }
onShowMoreRooms={ self.onShowMoreRooms } />
onShowMoreRooms={ self.onShowMoreRooms }
extraTiles={ inviteSectionExtraTiles }
/>
<RoomSubList list={ self.state.lists['m.favourite'] }
label={ _t('Favourites') }

View File

@ -208,7 +208,7 @@ module.exports = React.createClass({
if (!this.state.cachedPassword) {
currentPassword = <div className={rowClassName}>
<div className={rowLabelClassName}>
<label htmlFor="passwordold">Current password</label>
<label htmlFor="passwordold">{ _t('Current password') }</label>
</div>
<div className={rowInputClassName}>
<input id="passwordold" type="password" ref="old_input" />

View File

@ -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;

31
src/groups.js Normal file
View File

@ -0,0 +1,31 @@
/*
Copyright 2017 New Vector Ltd
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import PropTypes from 'prop-types';
export const GroupMemberType = PropTypes.shape({
userId: PropTypes.string.isRequired,
displayname: PropTypes.string,
avatarUrl: PropTypes.string,
});
export function groupMemberFromApiObject(apiObject) {
return {
userId: apiObject.user_id,
displayname: apiObject.displayname,
avatarUrl: apiObject.avatar_url,
};
}

View File

@ -7,6 +7,5 @@
"Close": "إغلاق",
"Create new room": "إنشاء غرفة جديدة",
"Custom Server Options": "إعدادات السيرفر خاصة",
"Direct Chat": "دردشة مباشرة",
"Dismiss": "صرف النظر"
}

65
src/i18n/strings/ca.json Normal file
View File

@ -0,0 +1,65 @@
{
"People": "Gent",
"Add a widget": "Afegeix un giny",
"af": "Afrikaans",
"ar-ae": "Àrab (Emirats Àrabs Units)",
"ar-bh": "Àrab (Bahrain)",
"ar-dz": "Àrab (Algèria)",
"ar-eg": "Àrab (Egipte)",
"ar-iq": "Àrab (Iraq)",
"ar-jo": "Àrab (Jordània)",
"ar-kw": "Àrab (Kuwait)",
"ar-lb": "Àrab (Líban)",
"ar-ly": "Àrab (Líbia)",
"ar-ma": "Àrab (Marroc)",
"ar-om": "Àrab (Oman)",
"ar-qa": "Àrab (Qatar)",
"ar-sa": "Àrab (Aràbia Saudita)",
"ca": "Català",
"cs": "Txec",
"de-at": "Alemany (Àustria)",
"de-ch": "Alemany (Suïssa)",
"de": "Alemany",
"de-li": "Alemany (Liechtenstein)",
"el": "Grec",
"de-lu": "Alemany (Luxemburg)",
"en-au": "Anglès (Austràlia)",
"Account": "Compte",
"VoIP": "Veu IP",
"No Microphones detected": "No s'ha detectat cap micròfon",
"No Webcams detected": "No s'ha detectat cap càmera web",
"Microphone": "Micròfon",
"Camera": "Càmera",
"Advanced": "Avançat",
"Algorithm": "Algoritme",
"Hide removed messages": "Amaga els missatges esborrats",
"Always show message timestamps": "Mostra sempre la marca de temps del missatge",
"Alias (optional)": "Àlies (opcional)",
"and": "i",
"An email has been sent to": "S'ha enviat un correu electrònic a",
"Cancel": "Cancel·la",
"Close": "Tanca",
"Create new room": "Crea una nova sala",
"Error": "Error",
"Failed to forget room %(errCode)s": "No s'ha pogut oblidar la sala %(errCode)s",
"Favourite": "Favorit",
"Mute": "Silenciat",
"Room directory": "Directori de sales",
"Settings": "Paràmetres",
"Start chat": "Inicia un xat",
"Failed to change password. Is your password correct?": "Hi ha hagut un error al canviar la vostra contrasenya. És correcte la vostra contrasenya?",
"Continue": "Continua",
"Custom Server Options": "Opcions de servidor personalitzat",
"Dismiss": "Omet",
"Notifications": "Notificacions",
"Remove": "Elimina",
"unknown error code": "codi d'error desconegut",
"Sunday": "Diumenge",
"Monday": "Dilluns",
"Tuesday": "Dimarts",
"Wednesday": "Dimecres",
"Thursday": "Dijous",
"Friday": "Divendres",
"Saturday": "Dissabte",
"OK": "D'acord"
}

View File

@ -18,7 +18,7 @@
"Start Chat": "Začít chat",
"This room": "Tato místnost",
"Unencrypted room": "Nezašifrovaná místnost",
"Failed to upload file": "Nahrát soubor",
"Failed to upload file": "Nahrání souboru se nezdařilo",
"Video call": "Videohovor",
"Voice call": "Telefonát",
"Sun": "Ne",
@ -47,16 +47,12 @@
"Options": "Možnosti",
"Register": "Zaregistrovat",
"Cancel": "Storno",
"Direct Chat": "Přímý chat",
"Error": "Chyba",
"Failed to join the room": "Nepodařilo se vstoupit do místnosti",
"Favourite": "V oblíbených",
"Mute": "Ztišit",
"Continue": "Pokračovat",
"Failed to change password. Is your password correct?": "Nepodařilo se změnit heslo. Je vaše heslo správné?",
"Welcome page": "Uvítací stránka",
"Operation failed": "Chyba operace",
"Please Register": "Prosím zaregistrujte se",
"Remove": "Odebrat",
"unknown error code": "neznámý kód chyby",
"Sunday": "Neděle",
@ -98,10 +94,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ě?",
@ -111,5 +105,114 @@
"Attachment": "Příloha",
"Autoplay GIFs and videos": "Automaticky přehrávat GIFy a videa",
"Bug Report": "Hlášení o chybě",
"Can't connect to homeserver - please check your connectivity, ensure your <a>homeserver's SSL certificate</a> is trusted, and that a browser extension is not blocking requests.": "Nelze se připojit k domovskému serveru zkontrolujte prosím své připojení, prověřte, zdali je <a>SSL certifikát</a> vašeho domovského serveru důvěryhodný, a že některé z rozšíření prohlížeče neblokuje komunikaci."
"Can't connect to homeserver - please check your connectivity, ensure your <a>homeserver's SSL certificate</a> is trusted, and that a browser extension is not blocking requests.": "Nelze se připojit k domovskému serveru zkontrolujte prosím své připojení, prověřte, zdali je <a>SSL certifikát</a> vašeho domovského serveru důvěryhodný, a že některé z rozšíření prohlížeče neblokuje komunikaci.",
"Anyone who knows the room's link, apart from guests": "Kdokoliv, kdo má odkaz na místnost, kromě hostů",
"Anyone who knows the room's link, including guests": "Kdokoliv, kdo má odkaz na místnost, a to i hosté",
"Banned users": "Vykázaní uživatelé",
"Ban": "Vykázat",
"Bans user with given id": "Vykáže uživatele s daným id",
"Bulk Options": "Hromadné volby",
"Can't load user settings": "Nelze načíst uživatelské nastavení",
"Cannot add any more widgets": "Nelze přidat žádné další widgety",
"Change Password": "Změnit heslo",
"%(senderName)s changed their profile picture.": "%(senderName)s změnil/a svůj profilový obrázek.",
"%(senderDisplayName)s changed the room name to %(roomName)s.": "%(senderDisplayName)s změnil/a název místnosti na %(roomName)s.",
"%(senderDisplayName)s removed the room name.": "%(senderDisplayName)s odstranil/a název místnosti.",
"%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s změnil/a téma na \"%(topic)s\".",
"Changes to who can read history will only apply to future messages in this room": "Změny viditelnosti historie budou platné až pro budoucí zprávy v této místnosti",
"Changes your display nickname": "Změní vaši zobrazovanou přezdívku",
"Changes colour scheme of current room": "Změní barevné schéma aktuální místnosti",
"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.": "V současnosti změna hesla resetuje všechny šifrovací klíče na všech zařízeních, což vám znepřístupní historii zašifrovaných chatů, pokud si nejprve nevyexportujete klíče svých místností a pak je do nich znova nevložíte. Toto bude v budoucnu lépe ošetřeno.",
"Clear Cache and Reload": "Vymazat vyrovnávací paměť a načíst znovu",
"Clear Cache": "Vymazat vyrovnávací paměť",
"<a>Click here</a> to join the discussion!": "<a>Kliknutím zde</a> se přidáte k diskuzi!",
"Command error": "Chyba příkazu",
"Commands": "Příkazy",
"Conference call failed.": "Konferenční hovor selhal.",
"Conference calling is in development and may not be reliable.": "Konferenční hovory jsou stále ve vývoji a nemusí být spolehlivé.",
"Conference calls are not supported in encrypted rooms": "V šifrovaných místnostech nejsou konferenční hovory podporovány",
"Conference calls are not supported in this client": "V tomto klientovi nejsou konferenční hovory podporovány",
"Confirm password": "Potvrďte heslo",
"Confirm your new password": "Potvrďte své nové heslo",
"Could not connect to the integration server": "Nepodařilo se spojit se začleňovacím serverem",
"%(count)s new messages|one": "%(count)s nová zpráva",
"%(count)s new messages|other": "%(count)s nových zpráv",
"Create an account": "Vytvořit účet",
"Create Room": "Vytvořit místnost",
"Cryptography": "Kryptografie",
"Current password": "Současné heslo",
"Custom": "Vlastní",
"Custom level": "Vlastní úroveň",
"/ddg is not a command": "/ddg není příkazem",
"Deactivate Account": "Deaktivovat účet",
"Deactivate my account": "Deaktivovat můj účet",
"Decline": "Odmítnout",
"Decrypt %(text)s": "Dešifrovat %(text)s",
"Decryption error": "Chyba dešifrování",
"Delete": "Vymazat",
"Delete widget": "Vymazat widget",
"Default": "Výchozí",
"Device already verified!": "Zařízení již bylo ověřeno!",
"Device ID": "ID zařízení",
"Device ID:": "ID zařízení:",
"device id: ": "id zařízení: ",
"Device key:": "Klíč zařízení:",
"Devices": "Zařízení",
"Direct chats": "Přímé chaty",
"Disable Notifications": "Vypnout upozornění",
"disabled": "vypnuto",
"Disinvite": "Odvolat pozvání",
"Display name": "Zobrazované jméno",
"Don't send typing notifications": "Neupozorňovat ostatní, že píšu",
"Download %(text)s": "Stáhnout %(text)s",
"Drop File Here": "Přetáhněte soubor sem",
"Edit": "Upravit",
"Email": "E-mail",
"Email address": "E-mailová adresa",
"Email address (optional)": "E-mailová adresa (nepovinná)",
"Email, name or matrix ID": "E-mail, jméno nebo matrix ID",
"Emoji": "Emodži",
"Enable automatic language detection for syntax highlighting": "Zapnout kvůli zvýrazňování syntaxe automatické rozpoznávání jazyka",
"Enable encryption": "Zapnout šifrování",
"Enable Notifications": "Zapnout upozornění",
"enabled": "zapnuto",
"Encrypted by a verified device": "Zašifrováno ověřeným zařízením",
"Encrypted by an unverified device": "Zašifrováno neověřeným zařízením",
"Encrypted messages will not be visible on clients that do not yet implement encryption": "Zašifrované zprávy nepůjde vidět v klientech, kteří šifrování ještě nezavedli",
"Encrypted room": "Zašifrovaná místnost",
"Encryption is enabled in this room": "V této místnosti je zapnuto šifrování",
"Encryption is not enabled in this room": "V této místnosti není zapnuto šifrování",
"%(senderName)s ended the call.": "%(senderName)s ukončil/a hovor.",
"End-to-end encryption information": "Informace o end-to-end šifrování",
"End-to-end encryption is in beta and may not be reliable": "End-to-end šifrování je v raném vývoji a nemusí být spolehlivé",
"Enter Code": "Zadejte kód",
"Enter passphrase": "Zadejte heslo",
"Error decrypting attachment": "Chyba při dešifrování přílohy",
"Error: Problem communicating with the given homeserver.": "Chyba: problém v komunikaci s daným domovským serverem.",
"Event information": "Informace o události",
"Existing Call": "Probíhající hovor",
"Export": "Exportovat",
"Export E2E room keys": "Exportovat E2E klíče místnosti",
"Failed to ban user": "Nepodařilo se vykázat uživatele",
"Failed to delete device": "Nepodařilo se vymazat zařízení",
"Failed to join room": "Vstup do místnosti se nezdařil",
"Failed to kick": "Vykopnutí se nezdařilo",
"Failed to leave room": "Opuštění místnosti se nezdařilo",
"Failed to mute user": "Ztlumení uživatele se nezdařilo",
"Failed to send email": "Odeslání e-mailu se nezdařilo",
"Failed to save settings": "Uložení nastavení se nezdařilo",
"Failed to reject invitation": "Odmítnutí pozvánky se nezdařilo",
"Failed to reject invite": "Odmítnutí pozvání se nezdařilo",
"Failed to register as guest:": "Registrace jako host se nezdařila:",
"Failed to send request.": "Odeslání žádosti se nezdařilo.",
"Failed to set avatar.": "Nastavení avataru se nezdařilo.",
"Failed to set display name": "Nastavení zobrazovaného jména se nezdařilo",
"Failed to set up conference call": "Nastavení konferenčního hovoru se nezdařilo",
"Failed to toggle moderator status": "Změna statusu moderátora se nezdařila",
"Failed to unban": "Odvolání vykázání se nezdařilo",
"Failed to upload profile picture!": "Nahrání profilového obrázku se nezdařilo",
"Failure to create room": "Vytvoření místnosti se nezdařilo",
"Forget room": "Zapomenout místnost",
"Forgot your password?": "Zapomněl/a jste své heslo?",
"For security, this session has been signed out. Please sign in again.": "Z bezpečnostních důvodů bylo toto přihlášení ukončeno. Přihlašte se prosím znovu."
}

View File

@ -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?",
@ -100,7 +96,6 @@
"Default": "Standard",
"demote": "degradere",
"Devices will not yet be able to decrypt history from before they joined the room": "Enhederne vil ikke være i stand til at dekryptere historikken fra, før de kom til rummet",
"Direct Chat": "Personligt Chat",
"Disable inline URL previews by default": "Deaktiver forrige weblinks forhåndsvisninger som standard",
"Display name": "Visningsnavn",
"Email Address": "Email adresse",
@ -122,7 +117,6 @@
"Failed to unban": "Var ikke i stand til at ophæve forbuddet",
"Favourite": "Favorit",
"Notifications": "Meddelser",
"Please Register": "Vær venlig at registrere",
"Remove": "Fjerne",
"Settings": "Indstillinger",
"unknown error code": "Ukendt fejlkode",

View File

@ -49,17 +49,14 @@
"Send an encrypted message": "Verschlüsselte Nachricht senden",
"Send a message (unencrypted)": "Nachricht senden (unverschlüsselt)",
"Warning!": "Warnung!",
"Direct Chat": "Direkt-Chat",
"Error": "Fehler",
"accept": "akzeptiere",
"accepted an invitation": "Einladung akzeptieren",
"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 +96,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",
@ -126,8 +121,6 @@
"For security, this session has been signed out. Please sign in again.": "Aus Sicherheitsgründen wurde diese Sitzung beendet. Bitte melde dich erneut an.",
"Found a bug?": "Fehler gefunden?",
"Guests cannot join this room even if explicitly invited.": "Gäste können diesem Raum nicht beitreten, auch wenn sie explizit eingeladen wurden.",
"Guests can't set avatars. Please register.": "Gäste können kein Profilbild setzen. Bitte registrieren.",
"Guest users can't upload files. Please register to upload.": "Gäste können keine Dateien hochladen. Bitte zunächst registrieren.",
"had": "hatte",
"Hangup": "Auflegen",
"Homeserver is": "Home-Server:",
@ -149,7 +142,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",
@ -173,7 +165,6 @@
"Phone": "Telefon",
"placed a": "plazierte einen",
"Please check your email and click on the link it contains. Once this is done, click continue.": "Bitte prüfe deinen E-Mail-Posteingang und klicke auf den in der E-Mail enthaltenen Link. Anschließend auf \"Fortsetzen\" klicken.",
"Please Register": "Bitte registrieren",
"Privacy warning": "Datenschutzwarnung",
"Privileged Users": "Privilegierte Nutzer",
"Profile": "Profil",
@ -230,7 +221,6 @@
"Server may be unavailable, overloaded, or you hit a bug.": "Server ist nicht verfügbar, überlastet oder du bist auf einen Fehler gestoßen.",
"Could not connect to the integration server": "Konnte keine Verbindung zum Integrations-Server herstellen",
"Disable inline URL previews by default": "URL-Vorschau im Chat standardmäßig deaktivieren",
"Guests can't use labs features. Please register.": "Gäste können keine Labor-Funktionen nutzen. Bitte registrieren.",
"Labs": "Labor",
"Show panel": "Panel anzeigen",
"To redact messages": "Zum Nachrichten verbergen",
@ -245,7 +235,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",
@ -288,17 +277,15 @@
"Failed to set up conference call": "Konferenzgespräch konnte nicht gestartet werden",
"Failed to verify email address: make sure you clicked the link in the email": "Verifizierung der E-Mail-Adresse fehlgeschlagen: Bitte stelle sicher, dass du den Link in der E-Mail angeklickt hast",
"Failure to create room": "Raumerstellung fehlgeschlagen",
"Guest users can't create new rooms. Please register to create room and start a chat.": "Gastnutzer können keine neuen Räume erstellen. Bitte registriere dich um Räume zu erstellen und Chats zu starten.",
"Riot does not have permission to send you notifications - please check your browser settings": "Riot hat keine Berechtigung, um Benachrichtigungen zu senden - bitte Browser-Einstellungen überprüfen",
"Riot was not given permission to send notifications - please try again": "Riot hat keine Berechtigung für das Senden von Benachrichtigungen erhalten - bitte erneut versuchen",
"This email address is already in use": "Diese E-Mail-Adresse wird bereits verwendet",
"This email address was not found": "Diese E-Mail-Adresse konnte nicht gefunden werden",
"The file '%(fileName)s' exceeds this home server's size limit for uploads": "Die Datei '%(fileName)s' überschreitet das Größen-Limit für Uploads auf diesem Homeserver",
"The file '%(fileName)s' exceeds this home server's size limit for uploads": "Die Datei '%(fileName)s' überschreitet das Größen-Limit für Uploads auf diesem Heimserver",
"The file '%(fileName)s' failed to upload": "Das Hochladen der Datei '%(fileName)s' schlug fehl",
"The remote side failed to pick up": "Die Gegenstelle konnte nicht abheben",
"This phone number is already in use": "Diese Telefonnummer wird bereits verwendet",
"Unable to restore previous session": "Die vorherige Sitzung konnte nicht wiederhergestellt werden",
"Unable to capture screen": "Der Bildschirm konnte nicht aufgenommen werden.",
"Unable to capture screen": "Der Bildschirm konnte nicht aufgenommen werden",
"Unable to enable Notifications": "Benachrichtigungen konnten nicht aktiviert werden",
"Upload Failed": "Upload fehlgeschlagen",
"VoIP is unsupported": "VoIP wird nicht unterstützt",
@ -366,11 +353,14 @@
"%(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",
"New Composer & Autocomplete": "Neuer Eingabeverarbeiter & Autovervollständigung",
"(not supported by this browser)": "(wird von diesem Browser nicht unterstützt)",
"%(senderName)s placed a %(callType)s call.": "%(senderName)s startete einen %(callType)s-Anruf.",
"Power level must be positive integer.": "Berechtigungslevel muss eine positive ganze Zahl sein.",
@ -399,7 +389,6 @@
"Riot was unable to find the correct Data for the selected Language.": "Riot war nicht in der Lage die korrekten Daten für die ausgewählte Sprache zu finden.",
"Connectivity to the server has been lost.": "Verbindung zum Server wurde unterbrochen.",
"Sent messages will be stored until your connection has returned.": "Gesendete Nachrichten werden gespeichert, bis die Internetverbindung wiederhergestellt wird.",
"Auto-complete": "Autovervollständigung",
"Resend all": "Alle erneut senden",
"cancel all": "alles abbrechen",
"now. You can also select individual messages to resend or cancel.": "jetzt. Du kannst auch einzelne Nachrichten zum erneuten Senden oder Abbrechen auswählen.",
@ -414,8 +403,6 @@
"ru": "Russisch",
"Drop here %(toAction)s": "Hierher ziehen: %(toAction)s",
"Drop here to tag %(section)s": "Hierher ziehen: %(section)s taggen",
"Press": "Drücke",
"tag as %(tagName)s": "als %(tagName)s markieren",
"to browse the directory": "um das Raum-Verzeichnis zu durchsuchen",
"to demote": "um die Priorität herabzusetzen",
"to favourite": "zum Favorisieren",
@ -435,7 +422,6 @@
"Saturday": "Samstag",
"Sunday": "Sonntag",
"Failed to forget room %(errCode)s": "Das Entfernen des Raums ist fehlgeschlagen %(errCode)s",
"Failed to join the room": "Fehler beim Betreten des Raumes",
"A text message has been sent to +%(msisdn)s. Please enter the verification code it contains": "Eine Textnachricht wurde an +%(msisdn)s gesendet. Bitte den darin enthaltenen Verifizierungscode eingeben",
"and %(count)s others...|other": "und %(count)s weitere...",
"and %(count)s others...|one": "und ein(e) weitere(r)...",
@ -494,7 +480,6 @@
"Some of your messages have not been sent.": "Einige deiner Nachrichten wurden nicht gesendet.",
"Submit": "Absenden",
"The main address for this room is: %(canonical_alias_section)s": "Die Hauptadresse für diesen Raum ist: %(canonical_alias_section)s",
"This action cannot be performed by a guest user. Please register to be able to do this.": "Diese Aktion kann nicht von einem Gast ausgeführt werden. Bitte registriere dich um dies zu tun.",
"%(actionVerb)s this person?": "Diese Person %(actionVerb)s?",
"This room has no local addresses": "Dieser Raum hat keine lokale Adresse",
"This room is private or inaccessible to guests. You may be able to join if you register": "Dieser Raum ist privat oder für Gäste nicht zugänglich. Du kannst jedoch eventuell beitreten, wenn du dich registrierst",
@ -549,7 +534,7 @@
"%(oneUser)sleft and rejoined %(repeats)s times": "%(oneUser)shat den Raum %(repeats)s mal verlassen und wieder neu betreten",
"%(severalUsers)sleft and rejoined": "%(severalUsers)shaben den Raum verlassen und wieder neu betreten",
"%(oneUser)sleft left and rejoined": "%(oneUser)sging und trat erneut bei",
"%(severalUsers)srejected their invitations %(repeats)s times": "%(severalUsers)shaben ihre Einladung %(repeats)s mal abgelehnt",
"%(severalUsers)srejected their invitations %(repeats)s times": "%(severalUsers)shaben ihre Einladung %(repeats)s-mal abgelehnt",
"%(oneUser)srejected their invitation %(repeats)s times": "%(oneUser)shat die Einladung %(repeats)s mal abgelehnt",
"%(severalUsers)srejected their invitations": "%(severalUsers)shaben ihre Einladung abgelehnt",
"%(oneUser)srejected their invitation": "%(oneUser)shat die Einladung abgelehnt",
@ -557,7 +542,7 @@
"%(oneUser)shad their invitation withdrawn %(repeats)s times": "%(oneUser)swurde die Einladung %(repeats)s mal wieder entzogen",
"%(severalUsers)shad their invitations withdrawn": "%(severalUsers)szogen ihre Einladungen zurück",
"%(oneUser)shad their invitation withdrawn": "%(oneUser)swurde die ursprüngliche Einladung wieder entzogen",
"were invited %(repeats)s times": "wurden %(repeats)s mal eingeladen",
"were invited %(repeats)s times": "wurden %(repeats)s-mal eingeladen",
"was invited %(repeats)s times": "wurde %(repeats)s mal eingeladen",
"were invited": "wurden eingeladen",
"were banned %(repeats)s times": "wurden %(repeats)s-mal aus dem Raum verbannt",
@ -596,7 +581,6 @@
"riot-web version:": "Version von riot-web:",
"Scroll to bottom of page": "Zum Ende der Seite springen",
"Show timestamps in 12 hour format (e.g. 2:30pm)": "Zeitstempel im 12-Stunden-Format anzeigen (z. B. 2:30pm)",
"to tag as %(tagName)s": "um als \"%(tagName)s\" zu markieren",
"Email address": "E-Mail-Adresse",
"Error decrypting attachment": "Fehler beim Entschlüsseln des Anhangs",
"Mute": "Stummschalten",
@ -617,7 +601,6 @@
"You must join the room to see its files": "Du musst dem Raum beitreten, um die Raum-Dateien sehen zu können",
"Reject all %(invitedRooms)s invites": "Alle %(invitedRooms)s Einladungen ablehnen",
"Start new Chat": "Starte neuen Chat",
"Guest users can't invite users. Please register.": "Gäste können keine Benutzer einladen. Bitte registrieren.",
"Failed to invite": "Einladen fehlgeschlagen",
"Failed to invite user": "Einladen des Nutzers ist fehlgeschlagen",
"Confirm Removal": "Entfernen bestätigen",
@ -632,7 +615,6 @@
"I verify that the keys match": "Ich bestätige, dass die Schlüssel identisch sind",
"Unable to restore session": "Sitzungswiederherstellung fehlgeschlagen",
"Continue anyway": "Trotzdem fortfahren",
"Your display name is how you'll appear to others when you speak in rooms. What would you like it to be?": "Dein Anzeigename ist der Name, der anderen Nutzern angezeigt wird, wenn du in Räumen kommunizierst. Welchen Anzeigenamen möchtest du wählen?",
"You are currently blacklisting unverified devices; to send messages to these devices you must verify them.": "Nicht verifizierte Geräte werden aktuell blockiert und auf die Sperrliste gesetzt. Um Nachrichten an diese Geräte senden zu können, müssen diese zunächst verifiziert werden.",
"\"%(RoomName)s\" contains devices that you haven't seen before.": "\"%(RoomName)s\" enthält Geräte, die du bislang noch nicht gesehen hast.",
"Unknown devices": "Unbekannte Geräte",
@ -704,7 +686,6 @@
"disabled": "deaktiviert",
"enabled": "aktiviert",
"Invited": "Eingeladen",
"Set a Display Name": "Anzeigenamen festlegen",
"for %(amount)ss": "für %(amount)ss",
"for %(amount)sm": "seit %(amount)smin",
"for %(amount)sh": "für %(amount)sh",
@ -743,7 +724,6 @@
"Setting a user name will create a fresh account": "Die Eingabe eines Benutzernamens wird ein neues Konto erzeugen",
"Tagged as: ": "Markiert als: ",
"This Home Server does not support login using email address.": "Dieser Heimserver unterstützt den Login mittels E-Mail-Adresse nicht.",
"There was a problem logging in.": "Beim Anmelden ist ein Problem aufgetreten.",
"Unknown (user, device) pair:": "Unbekanntes (Nutzer-/Gerät-)Paar:",
"Remote addresses for this room:": "Remote-Adressen für diesen Raum:",
"Unrecognised command:": "Unbekannter Befehl:",
@ -759,7 +739,6 @@
"%(senderDisplayName)s changed the avatar for %(roomName)s": "%(senderDisplayName)s hat das Raum-Bild für %(roomName)s geändert",
"Hide removed messages": "Gelöschte Nachrichten verbergen",
"Start new chat": "Neuen Chat starten",
"Disable markdown formatting": "Markdown-Formatierung deaktivieren",
"Add": "Hinzufügen",
"%(count)s new messages|one": "%(count)s neue Nachricht",
"%(count)s new messages|other": "%(count)s neue Nachrichten",
@ -773,7 +752,6 @@
"You must <a>register</a> to use this functionality": "Du musst dich <a>registrieren</a>, um diese Funktionalität nutzen zu können",
"<a>Resend all</a> or <a>cancel all</a> now. You can also select individual messages to resend or cancel.": "<a>Alle erneut senden</a> oder <a>alle verwerfen</a>. Du kannst auch einzelne Nachrichten erneut senden oder verwerfen.",
"Create new room": "Neuen Raum erstellen",
"Welcome page": "Willkommensseite",
"Room directory": "Raum-Verzeichnis",
"Start chat": "Chat starten",
"New Password": "Neues Passwort",
@ -792,7 +770,7 @@
"a room": "einen Raum",
"Accept": "Akzeptieren",
"Active call (%(roomName)s)": "Aktiver Anruf (%(roomName)s)",
"Admin tools": "Admin-Werkzeuge",
"Admin Tools": "Admin-Werkzeuge",
"And %(count)s more...": "Und %(count)s weitere...",
"Alias (optional)": "Alias (optional)",
"Can't connect to homeserver - please check your connectivity, ensure your <a>homeserver's SSL certificate</a> is trusted, and that a browser extension is not blocking requests.": "Verbindung zum Heimserver fehlgeschlagen - bitte überprüfe die Internetverbindung und stelle sicher, dass dem <a>SSL-Zertifikat deines Heimservers</a> vertraut wird und dass Anfragen nicht durch eine Browser-Erweiterung blockiert werden.",
@ -821,7 +799,6 @@
"Room contains unknown devices": "Raum enthält unbekannte Geräte",
"%(roomName)s does not exist.": "%(roomName)s existert nicht.",
"%(roomName)s is not accessible at this time.": "%(roomName)s ist aktuell nicht zugreifbar.",
"Searching known users": "Suche nach bekannten Nutzern",
"Seen by %(userName)s at %(dateTime)s": "Gesehen von %(userName)s um %(dateTime)s",
"Send anyway": "Trotzdem senden",
"Set": "Setze",
@ -906,7 +883,7 @@
"You are a member of these groups:": "Du bist Mitglied in folgenden Gruppen:",
"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.": "Erstelle eine Gruppe um deine Community darzustellen! Definiere eine Menge von Räumen und deine eigene angepasste Startseite um deinen Bereich im Matrix-Universum zu markieren.",
"Join an existing group": "Trete eine existierenden Gruppe bei",
"To join an existing group you'll have to know its group identifier; this will look something like <i>+example:matrix.org</i>.": "Um einer bereits vorhandenen Gruppe beitreten zu können, muss dir die Gruppen-Kennung bekannt sein. Diese sieht ungefähr so aus: '<i>+example:matrix.org</i>'.",
"To join an existing group you'll have to know its group identifier; this will look something like <i>+example:matrix.org</i>.": "Um einer bereits vorhandenen Gruppe beitreten zu können, muss dir die Gruppen-Kennung bekannt sein. Diese sieht aus wie <i>+example:matrix.org</i>.",
"Featured Rooms:": "Hervorgehobene Räume:",
"Error whilst fetching joined groups": "Fehler beim Laden beigetretener Gruppen",
"Featured Users:": "Hervorgehobene Nutzer:",
@ -924,5 +901,10 @@
"NOTE: Apps are not end-to-end encrypted": "BEACHTE: Apps sind nicht Ende-zu-Ende verschlüsselt",
"%(widgetName)s widget added by %(senderName)s": "Widget \"%(widgetName)s\" von %(senderName)s hinzugefügt",
"%(widgetName)s widget removed by %(senderName)s": "Widget \"%(widgetName)s\" von %(senderName)s entfernt",
"Robot check is currently unavailable on desktop - please use a <a>web browser</a>": "In der Desktop-Version kann derzeit nicht geprüft werden, ob ein Benutzer ein Roboter ist. Bitte einen <a>Webbrowser</a> verwenden"
"Robot check is currently unavailable on desktop - please use a <a>web browser</a>": "In der Desktop-Version kann derzeit nicht geprüft werden, ob ein Benutzer ein Roboter ist. Bitte einen <a>Webbrowser</a> 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",
"Copied!": "Kopiert!",
"Failed to copy": "Kopieren fehlgeschlagen"
}

View File

@ -1,11 +1,9 @@
{
"Error": "Σφάλμα",
"Failed to forget room %(errCode)s": "Δεν ήταν δυνατή η διαγραφή του δωματίου (%(errCode)s)",
"Failed to join the room": "Δεν ήταν δυνατή η σύνδεση στο δωμάτιο",
"Mute": "Σίγαση",
"Notifications": "Ειδοποιήσεις",
"Operation failed": "Η λειτουργία απέτυχε",
"Please Register": "Παρακαλούμε εγγραφείτε",
"Remove": "Αφαίρεση",
"Search": "Αναζήτηση",
"Settings": "Ρυθμίσεις",
@ -43,15 +41,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 και ένας ακόμα",
@ -100,7 +94,6 @@
"device id: ": "αναγνωριστικό συσκευής: ",
"Device key:": "Κλειδί συσκευής:",
"Devices": "Συσκευές",
"Direct Chat": "Απευθείας συνομιλία",
"Direct chats": "Απευθείας συνομιλίες",
"disabled": "ανενεργό",
"Disinvite": "Ανάκληση πρόσκλησης",
@ -143,7 +136,6 @@
"For security, this session has been signed out. Please sign in again.": "Για λόγους ασφαλείας, αυτή η συνεδρία έχει τερματιστεί. Παρακαλούμε συνδεθείτε ξανά.",
"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.": "Για λόγους ασφαλείας, τα κλειδιά κρυπτογράφησης θα διαγράφονται από τον περιηγητή κατά την αποσύνδεση σας. Εάν επιθυμείτε να αποκρυπτογραφήσετε τις συνομιλίες σας στο μέλλον, εξάγετε τα κλειδιά σας και κρατήστε τα ασφαλή.",
"Found a bug?": "Βρήκατε κάποιο πρόβλημα;",
"Guest users can't upload files. Please register to upload.": "Οι επισκέπτες δεν μπορούν να ανεβάσουν αρχεία. Παρακαλώ εγγραφείτε πρώτα.",
"had": "είχε",
"Hangup": "Κλείσιμο",
"Historical": "Ιστορικό",
@ -264,12 +256,11 @@
"Create new room": "Δημιουργία νέου δωματίου",
"Room directory": "Ευρετήριο",
"Start chat": "Έναρξη συνομιλίας",
"Welcome page": "Αρχική σελίδα",
"a room": "ένα δωμάτιο",
"Accept": "Αποδοχή",
"Active call (%(roomName)s)": "Ενεργή κλήση (%(roomName)s)",
"Add": "Προσθήκη",
"Admin tools": "Εργαλεία διαχειριστή",
"Admin Tools": "Εργαλεία διαχειριστή",
"And %(count)s more...": "Και %(count)s περισσότερα...",
"No media permissions": "Χωρίς δικαιώματα πολυμέσων",
"Alias (optional)": "Ψευδώνυμο (προαιρετικό)",
@ -288,7 +279,6 @@
"Custom": "Προσαρμοσμένο",
"Decline": "Απόρριψη",
"Disable Notifications": "Απενεργοποίηση ειδοποιήσεων",
"Disable markdown formatting": "Απενεργοποίηση μορφοποίησης markdown",
"Drop File Here": "Αποθέστε εδώ το αρχείο",
"Enable Notifications": "Ενεργοποίηση ειδοποιήσεων",
"Encryption is enabled in this room": "Η κρυπτογράφηση είναι ενεργοποιημένη σε αυτό το δωμάτιο",
@ -332,7 +322,6 @@
"Room %(roomId)s not visible": "Το δωμάτιο %(roomId)s δεν είναι ορατό",
"%(roomName)s does not exist.": "Το %(roomName)s δεν υπάρχει.",
"Searches DuckDuckGo for results": "Γίνεται αναζήτηση στο DuckDuckGo για αποτελέσματα",
"Searching known users": "Αναζήτηση γνωστών χρηστών",
"Seen by %(userName)s at %(dateTime)s": "Διαβάστηκε από %(userName)s στις %(dateTime)s",
"Send anyway": "Αποστολή ούτως ή άλλως",
"Send Invites": "Αποστολή προσκλήσεων",
@ -349,7 +338,6 @@
"The main address for this room is": "Η κύρια διεύθυνση για το δωμάτιο είναι",
"%(actionVerb)s this person?": "%(actionVerb)s αυτού του ατόμου;",
"The file '%(fileName)s' failed to upload": "Απέτυχε η αποστολή του αρχείου '%(fileName)s'",
"There was a problem logging in.": "Υπήρξε ένα πρόβλημα κατά την σύνδεση.",
"This room has no local addresses": "Αυτό το δωμάτιο δεν έχει τοπικές διευθύνσεις",
"This doesn't appear to be a valid email address": "Δεν μοιάζει με μια έγκυρη διεύθυνση ηλεκτρονικής αλληλογραφίας",
"This phone number is already in use": "Αυτός ο αριθμός τηλεφώνου είναι ήδη σε χρήση",
@ -368,7 +356,6 @@
"Turn Markdown on": "Ενεργοποίηση Markdown",
"Unable to add email address": "Αδυναμία προσθήκης διεύθυνσης ηλ. αλληλογραφίας",
"Unable to remove contact information": "Αδυναμία αφαίρεσης πληροφοριών επαφής",
"Unable to restore previous session": "Αδυναμία επαναφοράς της προηγούμενης συνεδρίας",
"Unable to verify email address.": "Αδυναμία επιβεβαίωσης διεύθυνσης ηλεκτρονικής αλληλογραφίας.",
"Unban": "Άρση αποκλεισμού",
"%(senderName)s unbanned %(targetName)s.": "Ο χρήστης %(senderName)s έδιωξε τον χρήστη %(targetName)s.",
@ -380,7 +367,6 @@
"unknown caller": "άγνωστος καλών",
"unknown device": "άγνωστη συσκευή",
"Unknown room %(roomId)s": "Άγνωστο δωμάτιο %(roomId)s",
"unknown": "άγνωστο",
"Unmute": "Άρση σίγασης",
"Unnamed Room": "Ανώνυμο δωμάτιο",
"Unrecognised command:": "Μη αναγνωρίσιμη εντολή:",
@ -433,7 +419,6 @@
"%(weekDayName)s, %(monthName)s %(day)s %(time)s": "%(weekDayName)s, %(day)s %(monthName)s %(time)s",
"%(weekDayName)s %(time)s": "%(weekDayName)s %(time)s",
"Set a display name:": "Ορισμός ονόματος εμφάνισης:",
"Set a Display Name": "Ορισμός ονόματος εμφάνισης",
"Upload an avatar:": "Αποστολή προσωπικής εικόνας:",
"This server does not support authentication with a phone number.": "Αυτός ο διακομιστής δεν υποστηρίζει πιστοποίηση με αριθμό τηλεφώνου.",
"Missing password.": "Λείπει ο κωδικός πρόσβασης.",
@ -446,7 +431,6 @@
"Make Moderator": "Ορισμός συντονιστή",
"Encrypt room": "Κρυπτογράφηση δωματίου",
"Room": "Δωμάτιο",
"Auto-complete": "Αυτόματη συμπλήρωση",
"(~%(count)s results)|one": "(~%(count)s αποτέλεσμα)",
"(~%(count)s results)|other": "(~%(count)s αποτελέσματα)",
"Active call": "Ενεργή κλήση",
@ -472,7 +456,6 @@
"Import room keys": "Εισαγωγή κλειδιών δωματίου",
"File to import": "Αρχείο για εισαγωγή",
"Start new chat": "Έναρξη νέας συνομιλίας",
"Guest users can't invite users. Please register.": "Οι επισκέπτες δεν έχουν τη δυνατότητα να προσκαλέσουν άλλους χρήστες. Παρακαλούμε εγγραφείτε πρώτα.",
"Confirm Removal": "Επιβεβαίωση αφαίρεσης",
"Unknown error": "Άγνωστο σφάλμα",
"Incorrect password": "Λανθασμένος κωδικός πρόσβασης",
@ -536,9 +519,6 @@
"Failed to unban": "Δεν ήταν δυνατή η άρση του αποκλεισμού",
"%(userId)s from %(fromPowerLevel)s to %(toPowerLevel)s": "%(userId)s από %(fromPowerLevel)s σε %(toPowerLevel)s",
"Guest access is disabled on this Home Server.": "Έχει απενεργοποιηθεί η πρόσβαση στους επισκέπτες σε αυτόν τον διακομιστή.",
"Guests can't set avatars. Please register.": "Οι επισκέπτες δεν μπορούν να ορίσουν προσωπικές εικόνες. Παρακαλούμε εγγραφείτε.",
"Guest users can't create new rooms. Please register to create room and start a chat.": "Οι επισκέπτες δεν μπορούν να δημιουργήσουν νέα δωμάτια. Παρακαλούμε εγγραφείτε για να δημιουργήσετε ένα δωμάτιο και να ξεκινήσετε μια συνομιλία.",
"Guests can't use labs features. Please register.": "Οι επισκέπτες δεν μπορούν να χρησιμοποιήσουν τα πειραματικά χαρακτηριστικά. Παρακαλούμε εγγραφείτε.",
"Guests cannot join this room even if explicitly invited.": "Οι επισκέπτες δεν μπορούν να συνδεθούν στο δωμάτιο ακόμη και αν έχουν καλεστεί.",
"Hide Text Formatting Toolbar": "Απόκρυψη εργαλειοθήκης μορφοποίησης κειμένου",
"Incoming call from %(name)s": "Εισερχόμενη κλήση από %(name)s",
@ -551,14 +531,17 @@
"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": "Πρέπει να βλέπετε ένα δωμάτιο",
"Never send encrypted messages to unverified devices from this device": "Να μη γίνει ποτέ αποστολή κρυπτογραφημένων μηνυμάτων σε ανεπιβεβαίωτες συσκευές από αυτή τη συσκευή",
"Never send encrypted messages to unverified devices in this room": "Να μη γίνει ποτέ αποστολή κρυπτογραφημένων μηνυμάτων σε ανεπιβεβαίωτες συσκευές σε αυτό το δωμάτιο",
"Never send encrypted messages to unverified devices in this room from this device": "Να μη γίνει ποτέ αποστολή κρυπτογραφημένων μηνυμάτων σε ανεπιβεβαίωτες συσκευές, σε αυτό το δωμάτιο, από αυτή τη συσκευή",
"New Composer & Autocomplete": "Νέος επεξεργαστής κειμένου και αυτόματη συμπλήρωση",
"not set": "δεν έχει οριστεί",
"not specified": "μη καθορισμένο",
"NOT verified": "ΧΩΡΙΣ επαλήθευση",
@ -571,7 +554,6 @@
"Otherwise, <a>click here</a> to send a bug report.": "Διαφορετικά, κάντε <a>κλικ εδώ</a> για να αποστείλετε μια αναφορά σφάλματος.",
"%(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": "Πατήστε",
"Refer a friend to Riot:": "Πείτε για το Riot σε έναν φίλο σας:",
"Rejoin": "Επανασύνδεση",
"%(senderName)s removed their profile picture.": "Ο %(senderName)s αφαίρεσε τη φωτογραφία του προφίλ του.",
@ -679,10 +661,8 @@
"%(senderName)s sent an invitation to %(targetDisplayName)s to join the room.": "Ο %(senderName)s έστειλε μια πρόσκληση στον %(targetDisplayName)s για να συνδεθεί στο δωμάτιο.",
"%(senderName)s set their display name to %(displayName)s.": "Ο %(senderName)s όρισε το όνομα του σε %(displayName)s.",
"Sorry, this homeserver is using a login which is not recognised ": "Συγγνώμη, ο διακομιστής χρησιμοποιεί έναν τρόπο σύνδεσης που δεν αναγνωρίζεται ",
"tag as %(tagName)s": "ετικέτα ως %(tagName)s",
"tag direct chat": "προσθήκη ετικέτας στην απευθείας συνομιλία",
"The phone number entered looks invalid": "Ο αριθμός που καταχωρίσατε δεν είναι έγκυρος",
"This action cannot be performed by a guest user. Please register to be able to do this.": "Αυτή η ενέργεια δεν μπορεί να εκτελεστεί από έναν επισκέπτη. Παρακαλούμε εγγραφείτε για να μπορέσετε να το κάνετε.",
"The email address linked to your account must be entered.": "Πρέπει να εισηχθεί η διεύθυνση ηλ. αλληλογραφίας που είναι συνδεδεμένη με τον λογαριασμό σας.",
"The file '%(fileName)s' exceeds this home server's size limit for uploads": "Το αρχείο '%(fileName)s' υπερβαίνει το όριο μεγέθους του διακομιστή για αποστολές",
"The remote side failed to pick up": "Η απομακρυσμένη πλευρά απέτυχε να συλλέξει",
@ -694,7 +674,6 @@
"This room is not accessible by remote Matrix servers": "Αυτό το δωμάτιο δεν είναι προσβάσιμο από απομακρυσμένους διακομιστές Matrix",
"to demote": "για υποβίβαση",
"To reset your password, enter the email address linked to your account": "Για να επαναφέρετε τον κωδικό πρόσβασης σας, πληκτρολογήστε τη διεύθυνση ηλ. αλληλογραφίας όπου είναι συνδεδεμένη με τον λογαριασμό σας",
"to tag as %(tagName)s": "για να οριστεί ετικέτα ως %(tagName)s",
"to tag direct chat": "για να οριστεί ετικέτα σε απευθείας συνομιλία",
"%(senderName)s turned on end-to-end encryption (algorithm %(algorithm)s).": "Ο %(senderName)s ενεργοποίησε την από άκρο σε άκρο κρυπτογράφηση (algorithm %(algorithm)s).",
"Undecryptable": "Μη αποκρυπτογραφημένο",
@ -780,7 +759,6 @@
"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.": "Εάν ταιριάζει, πατήστε το κουμπί επιβεβαίωσης παρακάτω. Εάν όχι, τότε κάποιος άλλος παρακολουθεί αυτή τη συσκευή και ίσως θέλετε να πατήσετε το κουμπί της μαύρης λίστας.",
"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.": "Παρουσιάστηκε ένα σφάλμα κατά την προσπάθεια επαναφοράς της προηγούμενης συνεδρίας. Αν συνεχίσετε, θα χρειαστεί να συνδεθείτε ξανά και το κρυπτογραφημένο ιστορικό συνομιλιών θα είναι μη αναγνώσιμο.",
"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.": "Αν χρησιμοποιούσατε προηγουμένως μια πιο πρόσφατη έκδοση του Riot, η συνεδρία σας ίσως είναι μη συμβατή με αυτήν την έκδοση. Κλείστε αυτό το παράθυρο και επιστρέψτε στην πιο πρόσφατη έκδοση.",
"Your display name is how you'll appear to others when you speak in rooms. What would you like it to be?": "Το εμφανιζόμενο όνομα είναι το πως θα εμφανιστείτε σε άλλους όταν μιλάτε σε δωμάτια. Τι θα θέλατε να είναι;",
"You are currently blacklisting unverified devices; to send messages to these devices you must verify them.": "Αυτήν τη στιγμή βάζετε σε μαύρη λίστα μη επιβαιωμένες συσκευές. Για να στείλετε μηνύματα σε αυτές τις συσκευές, πρέπει να τις επιβεβαιώσετε.",
"We recommend you go through the verification process for each device to confirm they belong to their legitimate owner, but you can resend the message without verifying if you prefer.": "Σας συνιστούμε να ολοκληρώσετε τη διαδικασία επαλήθευσης για κάθε συσκευή και να επιβεβαιώσετε ότι ανήκουν στον νόμιμο κάτοχό της, αλλά εάν προτιμάτε μπορείτε να στείλετε ξανά το μήνυμα χωρίς επαλήθευση.",
"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?": "Θα μεταφερθείτε σε έναν ιστότοπου τρίτου για να πραγματοποιηθεί η πιστοποίηση του λογαριασμού σας με το %(integrationsUrl)s. Θα θέλατε να συνεχίσετε;",

View File

@ -13,7 +13,7 @@
"Add email address": "Add email address",
"Add phone number": "Add phone number",
"Admin": "Admin",
"Admin tools": "Admin tools",
"Admin Tools": "Admin tools",
"Allow": "Allow",
"And %(count)s more...": "And %(count)s more...",
"VoIP": "VoIP",
@ -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",
@ -130,12 +126,10 @@
"Device key:": "Device key:",
"Devices": "Devices",
"Devices will not yet be able to decrypt history from before they joined the room": "Devices will not yet be able to decrypt history from before they joined the room",
"Direct Chat": "Direct Chat",
"Direct chats": "Direct chats",
"Disable Notifications": "Disable Notifications",
"disabled": "disabled",
"Disable inline URL previews by default": "Disable inline URL previews by default",
"Disable markdown formatting": "Disable markdown formatting",
"Disinvite": "Disinvite",
"Display name": "Display name",
"Displays action": "Displays action",
@ -181,7 +175,6 @@
"Failed to fetch avatar URL": "Failed to fetch avatar URL",
"Failed to forget room %(errCode)s": "Failed to forget room %(errCode)s",
"Failed to join room": "Failed to join room",
"Failed to join the room": "Failed to join the room",
"Failed to kick": "Failed to kick",
"Failed to leave room": "Failed to leave room",
"Failed to load timeline position": "Failed to load timeline position",
@ -214,10 +207,6 @@
"Found a bug?": "Found a bug?",
"%(userId)s from %(fromPowerLevel)s to %(toPowerLevel)s": "%(userId)s from %(fromPowerLevel)s to %(toPowerLevel)s",
"Guest access is disabled on this Home Server.": "Guest access is disabled on this Home Server.",
"Guests can't set avatars. Please register.": "Guests can't set avatars. Please register.",
"Guest users can't create new rooms. Please register to create room and start a chat.": "Guest users can't create new rooms. Please register to create room and start a chat.",
"Guest users can't upload files. Please register to upload.": "Guest users can't upload files. Please register to upload.",
"Guests can't use labs features. Please register.": "Guests can't use labs features. Please register.",
"Guests cannot join this room even if explicitly invited.": "Guests cannot join this room even if explicitly invited.",
"had": "had",
"Hangup": "Hangup",
@ -264,6 +253,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 +275,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",
@ -297,7 +301,6 @@
"Never send encrypted messages to unverified devices in this room": "Never send encrypted messages to unverified devices in this room",
"Never send encrypted messages to unverified devices in this room from this device": "Never send encrypted messages to unverified devices in this room from this device",
"New address (e.g. #foo:%(localDomain)s)": "New address (e.g. #foo:%(localDomain)s)",
"New Composer & Autocomplete": "New Composer & Autocomplete",
"New password": "New password",
"New passwords don't match": "New passwords don't match",
"New passwords must match each other.": "New passwords must match each other.",
@ -331,9 +334,7 @@
"Phone": "Phone",
"%(senderName)s placed a %(callType)s call.": "%(senderName)s placed a %(callType)s call.",
"Please check your email and click on the link it contains. Once this is done, click continue.": "Please check your email and click on the link it contains. Once this is done, click continue.",
"Please Register": "Please Register",
"Power level must be positive integer.": "Power level must be positive integer.",
"Press": "Press",
"Press <StartChatButton> to start a chat with someone": "Press <StartChatButton> to start a chat with someone",
"Privacy warning": "Privacy warning",
"Private Chat": "Private Chat",
@ -379,7 +380,6 @@
"Search": "Search",
"Search failed": "Search failed",
"Searches DuckDuckGo for results": "Searches DuckDuckGo for results",
"Searching known users": "Searching known users",
"Seen by %(userName)s at %(dateTime)s": "Seen by %(userName)s at %(dateTime)s",
"Send a message (unencrypted)": "Send a message (unencrypted)",
"Send an encrypted message": "Send an encrypted message",
@ -421,7 +421,6 @@
"Start Chat": "Start Chat",
"Submit": "Submit",
"Success": "Success",
"tag as %(tagName)s": "tag as %(tagName)s",
"tag direct chat": "tag direct chat",
"Tagged as: ": "Tagged as: ",
"The default role for new room members is": "The default role for new room members is",
@ -429,7 +428,6 @@
"The maximum permitted number of widgets have already been added to this room.": "The maximum permitted number of widgets have already been added to this room.",
"The phone number entered looks invalid": "The phone number entered looks invalid",
"The signing key you provided matches the signing key you received from %(userId)s's device %(deviceId)s. Device marked as verified.": "The signing key you provided matches the signing key you received from %(userId)s's device %(deviceId)s. Device marked as verified.",
"This action cannot be performed by a guest user. Please register to be able to do this.": "This action cannot be performed by a guest user. Please register to be able to do this.",
"This email address is already in use": "This email address is already in use",
"This email address was not found": "This email address was not found",
"%(actionVerb)s this person?": "%(actionVerb)s this person?",
@ -439,7 +437,6 @@
"The remote side failed to pick up": "The remote side failed to pick up",
"This Home Server does not support login using email address.": "This Home Server does not support login using email address.",
"This invitation was sent to an email address which is not associated with this account:": "This invitation was sent to an email address which is not associated with this account:",
"There was a problem logging in.": "There was a problem logging in.",
"This room has no local addresses": "This room has no local addresses",
"This room is not recognised.": "This room is not recognised.",
"These are experimental features that may break in unexpected ways": "These are experimental features that may break in unexpected ways",
@ -467,7 +464,6 @@
"To send events of type": "To send events of type",
"To send messages": "To send messages",
"to start a chat with someone": "to start a chat with someone",
"to tag as %(tagName)s": "to tag as %(tagName)s",
"to tag direct chat": "to tag direct chat",
"To use it, just wait for autocomplete results to load and tab through them.": "To use it, just wait for autocomplete results to load and tab through them.",
"Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.",
@ -478,7 +474,6 @@
"Unable to add email address": "Unable to add email address",
"Unable to create widget.": "Unable to create widget.",
"Unable to remove contact information": "Unable to remove contact information",
"Unable to restore previous session": "Unable to restore previous session",
"Unable to verify email address.": "Unable to verify email address.",
"Unban": "Unban",
"Unbans user with given id": "Unbans user with given id",
@ -496,7 +491,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:",
@ -601,7 +595,6 @@
"%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s",
"%(weekDayName)s %(time)s": "%(weekDayName)s %(time)s",
"Set a display name:": "Set a display name:",
"Set a Display Name": "Set a Display Name",
"Upload an avatar:": "Upload an avatar:",
"This server does not support authentication with a phone number.": "This server does not support authentication with a phone number.",
"Missing password.": "Missing password.",
@ -620,9 +613,10 @@
"Encrypt room": "Encrypt room",
"There are no visible files in this room": "There are no visible files in this room",
"Room": "Room",
"Copied!": "Copied!",
"Failed to copy": "Failed to copy",
"Connectivity to the server has been lost.": "Connectivity to the server has been lost.",
"Sent messages will be stored until your connection has returned.": "Sent messages will be stored until your connection has returned.",
"Auto-complete": "Auto-complete",
"<a>Resend all</a> or <a>cancel all</a> now. You can also select individual messages to resend or cancel.": "<a>Resend all</a> or <a>cancel all</a> now. You can also select individual messages to resend or cancel.",
"(~%(count)s results)|one": "(~%(count)s result)",
"(~%(count)s results)|other": "(~%(count)s results)",
@ -694,7 +688,6 @@
"%(oneUser)schanged their avatar": "%(oneUser)schanged their avatar",
"Please select the destination room for this message": "Please select the destination room for this message",
"Create new room": "Create new room",
"Welcome page": "Welcome page",
"Room directory": "Room directory",
"Start chat": "Start chat",
"New Password": "New Password",
@ -717,7 +710,6 @@
"You must join the room to see its files": "You must join the room to see its files",
"Reject all %(invitedRooms)s invites": "Reject all %(invitedRooms)s invites",
"Start new chat": "Start new chat",
"Guest users can't invite users. Please register.": "Guest users can't invite users. Please register.",
"Failed to invite": "Failed to invite",
"Failed to invite user": "Failed to invite user",
"Failed to invite the following users to the %(roomName)s room:": "Failed to invite the following users to the %(roomName)s room:",
@ -741,7 +733,6 @@
"Unable to restore session": "Unable to restore session",
"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.": "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.",
"Continue anyway": "Continue anyway",
"Your display name is how you'll appear to others when you speak in rooms. What would you like it to be?": "Your display name is how you'll appear to others when you speak in rooms. What would you like it to be?",
"You are currently blacklisting unverified devices; to send messages to these devices you must verify them.": "You are currently blacklisting unverified devices; to send messages to these devices you must verify them.",
"We recommend you go through the verification process for each device to confirm they belong to their legitimate owner, but you can resend the message without verifying if you prefer.": "We recommend you go through the verification process for each device to confirm they belong to their legitimate owner, but you can resend the message without verifying if you prefer.",
"\"%(RoomName)s\" contains devices that you haven't seen before.": "\"%(RoomName)s\" contains devices that you haven't seen before.",
@ -825,6 +816,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",
@ -851,5 +843,48 @@
"%(widgetName)s widget added by %(senderName)s": "%(widgetName)s widget added by %(senderName)s",
"%(widgetName)s widget removed by %(senderName)s": "%(widgetName)s widget removed by %(senderName)s",
"%(widgetName)s widget modified by %(senderName)s": "%(widgetName)s widget modified by %(senderName)s",
"Robot check is currently unavailable on desktop - please use a <a>web browser</a>": "Robot check is currently unavailable on desktop - please use a <a>web browser</a>"
"Robot check is currently unavailable on desktop - please use a <a>web browser</a>": "Robot check is currently unavailable on desktop - please use a <a>web browser</a>",
"Description": "Description",
"Filter group members": "Filter group members",
"Remove from group": "Remove from group",
"Invite new group members": "Invite new group members",
"Who would you like to add to this group?": "Who would you like to add to this group?",
"Name or matrix ID": "Name or matrix ID",
"Invite to Group": "Invite to Group",
"Unable to accept invite": "Unable to accept invite",
"Unable to leave room": "Unable to leave room",
"%(inviter)s has invited you to join this group": "%(inviter)s has invited you to join this group",
"You are a member of this group": "You are a member of this group",
"Leave": "Leave",
"Failed to remove user from group": "Failed to remove user from group",
"Failed to invite the following users to %(groupId)s:": "Failed to invite the following users to %(groupId)s:",
"Failed to invite users group": "Failed to invite users group",
"Failed to invite users to %(groupId)s": "Failed to invite users to %(groupId)s",
"Unable to reject invite": "Unable to reject invite",
"Leave Group": "Leave Group",
"Leave %(groupName)s?": "Leave %(groupName)s?",
"%(widgetName)s widget modified by %(senderName)s": "%(widgetName)s widget modified by %(senderName)s",
"Robot check is currently unavailable on desktop - please use a <a>web browser</a>": "Robot check is currently unavailable on desktop - please use a <a>web browser</a>",
"Flair": "Flair",
"Add a Room": "Add a Room",
"Add a User": "Add a User",
"Add users to the group summary": "Add users to the group summary",
"Who would you like to add to this summary?": "Who would you like to add to this summary?",
"Add to summary": "Add to summary",
"Failed to add the following users to the summary of %(groupId)s:": "Failed to add the following users to the summary of %(groupId)s:",
"Add rooms to the group summary": "Add rooms to the group summary",
"Which rooms would you like to add to this summary?": "Which rooms would you like to add to this summary?",
"Room name or alias": "Room name or alias",
"You are an administrator of this group": "You are an administrator of this group",
"Failed to add the following rooms to the summary of %(groupId)s:": "Failed to add the following rooms to the summary of %(groupId)s:",
"Failed to remove the room from the summary of %(groupId)s": "Failed to remove the room from the summary of %(groupId)s",
"The room '%(roomName)s' could not be removed from the summary.": "The room '%(roomName)s' could not be removed from the summary.",
"Failed to remove a user from the summary of %(groupId)s": "Failed to remove a user from the summary of %(groupId)s",
"The user '%(displayName)s' could not be removed from the summary.": "The user '%(displayName)s' could not be removed from the summary.",
"Failed to add the following rooms to the summary of %(groupId)s:": "Failed to add the following rooms to the summary of %(groupId)s:",
"The room '%(roomName)s' could not be removed from the summary.": "The room '%(roomName)s' could not be removed from the summary.",
"Your membership of this group is public": "Your membership of this group is public",
"Your membership of this group is private": "Your membership of this group is private",
"Make private": "Make private",
"Make public": "Make public"
}

View File

@ -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",
@ -118,7 +114,6 @@
"Device key:": "Device key:",
"Devices": "Devices",
"Devices will not yet be able to decrypt history from before they joined the room": "Devices will not yet be able to decrypt history from before they joined the room",
"Direct Chat": "Direct Chat",
"Direct chats": "Direct chats",
"disabled": "disabled",
"Disable inline URL previews by default": "Disable inline URL previews by default",
@ -156,7 +151,6 @@
"Failed to delete device": "Failed to delete device",
"Failed to forget room %(errCode)s": "Failed to forget room %(errCode)s",
"Failed to join room": "Failed to join room",
"Failed to join the room": "Failed to join the room",
"Failed to kick": "Failed to kick",
"Failed to leave room": "Failed to leave room",
"Failed to load timeline position": "Failed to load timeline position",
@ -188,10 +182,6 @@
"Found a bug?": "Found a bug?",
"%(userId)s from %(fromPowerLevel)s to %(toPowerLevel)s": "%(userId)s from %(fromPowerLevel)s to %(toPowerLevel)s",
"Guest access is disabled on this Home Server.": "Guest access is disabled on this Home Server.",
"Guests can't set avatars. Please register.": "Guests can't set avatars. Please register.",
"Guest users can't create new rooms. Please register to create room and start a chat.": "Guest users can't create new rooms. Please register to create room and start a chat.",
"Guest users can't upload files. Please register to upload.": "Guest users can't upload files. Please register to upload.",
"Guests can't use labs features. Please register.": "Guests can't use labs features. Please register.",
"Guests cannot join this room even if explicitly invited.": "Guests cannot join this room even if explicitly invited.",
"had": "had",
"Hangup": "Hangup",
@ -231,6 +221,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 +242,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",
@ -263,7 +268,6 @@
"Never send encrypted messages to unverified devices in this room": "Never send encrypted messages to unverified devices in this room",
"Never send encrypted messages to unverified devices in this room from this device": "Never send encrypted messages to unverified devices in this room from this device",
"New address (e.g. #foo:%(localDomain)s)": "New address (e.g. #foo:%(localDomain)s)",
"New Composer & Autocomplete": "New Composer & Autocomplete",
"New password": "New password",
"New passwords don't match": "New passwords don't match",
"New passwords must match each other.": "New passwords must match each other.",
@ -292,9 +296,7 @@
"Phone": "Phone",
"%(senderName)s placed a %(callType)s call.": "%(senderName)s placed a %(callType)s call.",
"Please check your email and click on the link it contains. Once this is done, click continue.": "Please check your email and click on the link it contains. Once this is done, click continue.",
"Please Register": "Please Register",
"Power level must be positive integer.": "Power level must be positive integer.",
"Press": "Press",
"Privacy warning": "Privacy warning",
"Privileged Users": "Privileged Users",
"Profile": "Profile",
@ -367,13 +369,11 @@
"Start Chat": "Start Chat",
"Submit": "Submit",
"Success": "Success",
"tag as %(tagName)s": "tag as %(tagName)s",
"tag direct chat": "tag direct chat",
"Tagged as: ": "Tagged as: ",
"The default role for new room members is": "The default role for new room members is",
"The main address for this room is": "The main address for this room is",
"The signing key you provided matches the signing key you received from %(userId)s's device %(deviceId)s. Device marked as verified.": "The signing key you provided matches the signing key you received from %(userId)s's device %(deviceId)s. Device marked as verified.",
"This action cannot be performed by a guest user. Please register to be able to do this.": "This action cannot be performed by a guest user. Please register to be able to do this.",
"This email address is already in use": "This email address is already in use",
"This email address was not found": "This email address was not found",
"%(actionVerb)s this person?": "%(actionVerb)s this person?",
@ -382,7 +382,6 @@
"The file '%(fileName)s' failed to upload": "The file '%(fileName)s' failed to upload",
"The remote side failed to pick up": "The remote side failed to pick up",
"This Home Server does not support login using email address.": "This Home Server does not support login using email address.",
"There was a problem logging in.": "There was a problem logging in.",
"This room has no local addresses": "This room has no local addresses",
"This room is not recognised.": "This room is not recognized.",
"These are experimental features that may break in unexpected ways": "These are experimental features that may break in unexpected ways",
@ -410,7 +409,6 @@
"To send events of type": "To send events of type",
"To send messages": "To send messages",
"to start a chat with someone": "to start a chat with someone",
"to tag as %(tagName)s": "to tag as %(tagName)s",
"to tag direct chat": "to tag direct chat",
"To use it, just wait for autocomplete results to load and tab through them.": "To use it, just wait for autocomplete results to load and tab through them.",
"Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.",
@ -420,7 +418,6 @@
"%(senderName)s turned on end-to-end encryption (algorithm %(algorithm)s).": "%(senderName)s turned on end-to-end encryption (algorithm %(algorithm)s).",
"Unable to add email address": "Unable to add email address",
"Unable to remove contact information": "Unable to remove contact information",
"Unable to restore previous session": "Unable to restore previous session",
"Unable to verify email address.": "Unable to verify email address.",
"Unban": "Unban",
"%(senderName)s unbanned %(targetName)s.": "%(senderName)s unbanned %(targetName)s.",
@ -433,7 +430,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:",
@ -518,7 +514,6 @@
"%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s": "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s",
"%(weekDayName)s %(time)s": "%(weekDayName)s %(time)s",
"Set a display name:": "Set a display name:",
"Set a Display Name": "Set a Display Name",
"Upload an avatar:": "Upload an avatar:",
"This server does not support authentication with a phone number.": "This server does not support authentication with a phone number.",
"Missing password.": "Missing password.",
@ -539,7 +534,6 @@
"Room": "Room",
"Connectivity to the server has been lost.": "Connectivity to the server has been lost.",
"Sent messages will be stored until your connection has returned.": "Sent messages will be stored until your connection has returned.",
"Auto-complete": "Auto-complete",
"Resend all": "Resend all",
"(~%(searchCount)s results)": "(~%(searchCount)s results)",
"Cancel": "Cancel",
@ -631,7 +625,6 @@
"You must join the room to see its files": "You must join the room to see its files",
"Reject all %(invitedRooms)s invites": "Reject all %(invitedRooms)s invites",
"Start new chat": "Start new chat",
"Guest users can't invite users. Please register.": "Guest users can't invite users. Please register.",
"Failed to invite": "Failed to invite",
"Failed to invite user": "Failed to invite user",
"Failed to invite the following users to the %(roomName)s room:": "Failed to invite the following users to the %(roomName)s room:",
@ -653,7 +646,6 @@
"Unable to restore session": "Unable to restore session",
"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.": "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.",
"Continue anyway": "Continue anyway",
"Your display name is how you'll appear to others when you speak in rooms. What would you like it to be?": "Your display name is how you'll appear to others when you speak in rooms. What would you like it to be?",
"You are currently blacklisting unverified devices; to send messages to these devices you must verify them.": "You are currently blacklisting unverified devices; to send messages to these devices you must verify them.",
"We recommend you go through the verification process for each device to confirm they belong to their legitimate owner, but you can resend the message without verifying if you prefer.": "We recommend you go through the verification process for each device to confirm they belong to their legitimate owner, but you can resend the message without verifying if you prefer.",
"\"%(RoomName)s\" contains devices that you haven't seen before.": "\"%(RoomName)s\" contains devices that you haven't seen before.",
@ -714,7 +706,7 @@
"Accept": "Accept",
"a room": "a room",
"Add": "Add",
"Admin tools": "Admin tools",
"Admin Tools": "Admin tools",
"And %(count)s more...": "And %(count)s more...",
"Alias (optional)": "Alias (optional)",
"Can't connect to homeserver - please check your connectivity, ensure your <a>homeserver's SSL certificate</a> is trusted, and that a browser extension is not blocking requests.": "Can't connect to homeserver - please check your connectivity, ensure your <a>homeserver's SSL certificate</a> is trusted, and that a browser extension is not blocking requests.",
@ -724,13 +716,11 @@
"%(count)s new messages|other": "%(count)s new messages",
"Custom": "Custom",
"Decline": "Decline",
"Disable markdown formatting": "Disable markdown formatting",
"Disable Notifications": "Disable Notifications",
"Enable Notifications": "Enable Notifications",
"Create new room": "Create new room",
"Room directory": "Room directory",
"Start chat": "Start chat",
"Welcome page": "Welcome page",
"Create a new chat or reuse an existing one": "Create a new chat or reuse an existing one",
"Drop File Here": "Drop File Here",
"Encrypted by a verified device": "Encrypted by a verified device",
@ -756,7 +746,6 @@
"Room contains unknown devices": "Room contains unknown devices",
"%(roomName)s does not exist.": "%(roomName)s does not exist.",
"%(roomName)s is not accessible at this time.": "%(roomName)s is not accessible at this time.",
"Searching known users": "Searching known users",
"Seen by %(userName)s at %(dateTime)s": "Seen by %(userName)s at %(dateTime)s",
"Send anyway": "Send anyway",
"Set": "Set",
@ -838,6 +827,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",

View File

@ -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",
@ -42,7 +38,7 @@
"Banned users": "Usuarios bloqueados",
"Bans user with given id": "Bloquear usuario por ID",
"Blacklisted": "En lista negra",
"Bug Report": "Reporte de error",
"Bug Report": "Reporte de fallo",
"Bulk Options": "Opciones masivas",
"Call Timeout": "Tiempo de espera de la llamada",
"Can't connect to homeserver - please check your connectivity and ensure your <a>homeserver's SSL certificate</a> is trusted.": "No se puede conectar con el servidor - Por favor verifique su conexión y asegúrese de que su <a>certificado SSL del servidor</a> sea confiable.",
@ -95,7 +91,6 @@
"Device ID": "ID del dispositivo",
"Devices": "Dispositivos",
"Devices will not yet be able to decrypt history from before they joined the room": "Los dispositivos aun no serán capaces de descifrar el historial antes de haberse unido a la sala",
"Direct Chat": "Conversación directa",
"Direct chats": "Conversaciones directas",
"Disable inline URL previews by default": "Desactivar previsualización de enlaces por defecto",
"Disinvite": "Deshacer invitación",
@ -128,7 +123,6 @@
"Failed to delete device": "Falló al borrar el dispositivo",
"Failed to forget room %(errCode)s": "Falló al olvidar la sala %(errCode)s",
"Failed to join room": "Falló al unirse a la sala",
"Failed to join the room": "Falló al unirse a la sala",
"Failed to kick": "Falló al expulsar",
"Failed to leave room": "Falló al dejar la sala",
"Failed to load timeline position": "Falló al cargar el historico",
@ -158,10 +152,6 @@
"For security, logging out will delete any end-to-end encryption keys from this browser. If you want to be able to decrypt your conversation history from future Riot sessions, please export your room keys for safe-keeping.": "Por seguridad, al cerrar la sesión borrará cualquier clave de encriptación de extremo a extremo en este navegador. Si quieres ser capaz de descifrar tu historial de conversación, para las futuras sesiones en Riot, por favor exporta las claves de la sala para protegerlas.",
"Found a bug?": "¿Encontraste un error?",
"%(userId)s from %(fromPowerLevel)s to %(toPowerLevel)s": "%(userId)s de %(fromPowerLevel)s a %(toPowerLevel)s",
"Guests can't set avatars. Please register.": "Invitados no puedes establecer avatares. Por favor regístrate.",
"Guest users can't create new rooms. Please register to create room and start a chat.": "Usuarios invitados no pueden crear nuevas salas. Por favor regístrate para crear la sala y iniciar la conversación.",
"Guest users can't upload files. Please register to upload.": "Usuarios invitados no puedes subir archivos. Por favor regístrate para subir tus archivos.",
"Guests can't use labs features. Please register.": "Invitados no puedes usar las características en desarrollo. Por favor regístrate.",
"Guests cannot join this room even if explicitly invited.": "Invitados no pueden unirse a esta sala aun cuando han sido invitados explícitamente.",
"had": "tuvo",
"Hangup": "Colgar",
@ -208,7 +198,7 @@
"Low priority": "Baja prioridad",
"Accept": "Aceptar",
"Add": "Añadir",
"Admin tools": "Herramientas de administración",
"Admin Tools": "Herramientas de administración",
"VoIP": "Voz IP",
"No Microphones detected": "No se ha detectado micrófono",
"No Webcams detected": "No se ha detectado cámara",
@ -254,7 +244,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",
@ -277,7 +271,6 @@
"%(oneUser)schanged their avatar": "%(oneUser)s cambió su avatar",
"Please select the destination room for this message": "Por favor, seleccione la sala destino para este mensaje",
"Create new room": "Crear nueva sala",
"Welcome page": "Página de bienvenida",
"Start chat": "Comenzar chat",
"New Password": "Nueva contraseña",
"Analytics": "Analíticas",
@ -292,7 +285,6 @@
"You must join the room to see its files": "Debe unirse a la sala para ver los ficheros",
"Reject all %(invitedRooms)s invites": "Rechazar todas las invitaciones a %(invitedRooms)s",
"Start new chat": "Iniciar una nueva conversación",
"Guest users can't invite users. Please register.": "Los invitados no pueden invitar a otros usuarios. Por favor, regístrese.",
"Failed to invite": "Fallo en la invitación",
"Failed to invite user": "No se pudo invitar al usuario",
"Failed to invite the following users to the %(roomName)s room:": "No se pudo invitar a los siguientes usuarios a la sala %(roomName)s:",
@ -319,7 +311,6 @@
"Scroll to unread messages": "Ir al primer mensaje sin leer",
"Search": "Búsqueda",
"Search failed": "Falló la búsqueda",
"Searching known users": "Buscando usuarios conocidos",
"Seen by %(userName)s at %(dateTime)s": "Visto por %(userName)s el %(dateTime)s",
"Send a message (unencrypted)": "Enviar un mensaje (sin cifrar)",
"Send an encrypted message": "Enviar un mensaje cifrado",
@ -357,7 +348,6 @@
"Start Chat": "Comenzar la conversación",
"Submit": "Enviar",
"Success": "Éxito",
"tag as %(tagName)s": "etiquetar como %(tagName)s",
"tag direct chat": "etiquetar la conversación directa",
"Tagged as: ": "Etiquetado como: ",
"The default role for new room members is": "El nivel por defecto para los nuevos miembros de esta sala es",
@ -373,7 +363,6 @@
"Can't connect to homeserver - please check your connectivity, ensure your <a>homeserver's SSL certificate</a> is trusted, and that a browser extension is not blocking requests.": "No se puede conectar al servidor - compruebe su conexión, asegúrese de que el <a>certificado SSL del servidor</a> es de confiaza, y compruebe que no hay extensiones del navegador bloqueando las peticiones.",
"%(senderDisplayName)s removed the room name.": "%(senderDisplayName)s ha quitado el nombre de la sala.",
"Device key:": "Clave del dispositivo:",
"Disable markdown formatting": "Desactivar el formato Markdown",
"Drop File Here": "Deje el fichero aquí",
"Guest access is disabled on this Home Server.": "El acceso de invitados está desactivado en este servidor.",
"Join as <voiceText>voice</voiceText> or <videoText>video</videoText>.": "Conecte con <voiceText>voz</voiceText> o <videoText>vídeo</videoText>.",
@ -425,9 +414,7 @@
"Phone": "Teléfono",
"%(senderName)s placed a %(callType)s call.": "%(senderName)s ha hecho una llamada de tipo %(callType)s.",
"Please check your email and click on the link it contains. Once this is done, click continue.": "Por favor, compruebe su e-mail y pulse el enlace que contiene. Una vez esté hecho, pulse continuar.",
"Please Register": "Por favor, regístrese",
"Power level must be positive integer.": "El nivel debe ser un entero positivo.",
"Press": "Pulse",
"Privacy warning": "Alerta de privacidad",
"Private Chat": "Conversación privada",
"Privileged Users": "Usuarios con privilegios",
@ -463,7 +450,6 @@
"Server may be unavailable or overloaded": "El servidor podría estar saturado o desconectado",
"Show timestamps in 12 hour format (e.g. 2:30pm)": "Mostrar el tiempo en formato 12h (am/pm)",
"The signing key you provided matches the signing key you received from %(userId)s's device %(deviceId)s. Device marked as verified.": "La clave de firma que usted ha proporcionado coincide con la recibida del dispositivo %(deviceId)s de %(userId)s. Dispositivo verificado.",
"This action cannot be performed by a guest user. Please register to be able to do this.": "Esto no puede ser hecho por un invitado. Por favor, regístrese para poder hacerlo.",
"This email address is already in use": "Dirección e-mail en uso",
"This email address was not found": "Dirección e-mail no encontrada",
"%(actionVerb)s this person?": "¿%(actionVerb)s a esta persona?",
@ -473,7 +459,6 @@
"The remote side failed to pick up": "El sitio remoto falló al sincronizar",
"This Home Server does not support login using email address.": "Este servidor no permite identificarse con direcciones e-mail.",
"This invitation was sent to an email address which is not associated with this account:": "Se envió la invitación a un e-mail no asociado con esta cuenta:",
"There was a problem logging in.": "Hubo un problema identificándose.",
"This room has no local addresses": "Esta sala no tiene direcciones locales",
"This room is not recognised.": "Esta sala no se reconoce.",
"These are experimental features that may break in unexpected ways": "Estas son funcionalidades experimentales, podrían fallar de formas imprevistas",
@ -510,7 +495,6 @@
"Thursday": "Jueves",
"Friday": "Viernes",
"Saturday": "Sábado",
"New Composer & Autocomplete": "Nuevo compositor & Autocompletar",
"Start verification": "Comenzar la verificación",
"Skip": "Saltar",
"To return to your account in future you need to set a password": "Para volver a usar su cuenta en el futuro es necesario que establezca una contraseña",
@ -524,7 +508,6 @@
"To send events of type": "Para enviar eventos de tipo",
"To send messages": "Para enviar mensajes",
"to start a chat with someone": "para empezar a charlar con alguien",
"to tag as %(tagName)s": "para etiquetar como %(tagName)s",
"to tag direct chat": "para etiquetar como charla directa",
"Add a widget": "Añadir widget",
"Allow": "Permitir",
@ -549,7 +532,6 @@
"Unable to add email address": "No se ha podido añadir la dirección de correo electrónico",
"Unable to create widget.": "No se ha podido crear el widget.",
"Unable to remove contact information": "No se ha podido eliminar la información de contacto",
"Unable to restore previous session": "No se ha podido restablecer la sesión anterior",
"Unable to verify email address.": "No se ha podido verificar la dirección de correo electrónico.",
"Unban": "Revocar bloqueo",
"Unbans user with given id": "Revoca el bloqueo del usuario con la identificación dada",
@ -564,7 +546,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",

View File

@ -5,20 +5,16 @@
"%(targetName)s accepted an invitation.": "%(targetName)s erabiltzaileak gonbidapena onartu du.",
"Close": "Itxi",
"Create new room": "Sortu gela berria",
"Welcome page": "Ongi etorri orria",
"Continue": "Jarraitu",
"Direct Chat": "Txat zuzena",
"Drop here %(toAction)s": "Jaregin hona %(toAction)s",
"Error": "Errorea",
"Failed to change password. Is your password correct?": "Pasahitza aldatzean huts egin du. Zuzena da pasahitza?",
"Failed to forget room %(errCode)s": "Huts egin du %(errCode)s gela ahaztean",
"Failed to join the room": "Huts egin du gelara elkartzean",
"Favourite": "Gogokoa",
"Mute": "Mututu",
"Notifications": "Jakinarazpenak",
"OK": "Ados",
"Operation failed": "Eragiketak huts egin du",
"Please Register": "Erregistratu",
"Remove": "Kendu",
"Search": "Bilatu",
"Settings": "Ezarpenak",
@ -91,7 +87,6 @@
"Hide read receipts": "Ezkutatu irakurtze-agiria",
"Don't send typing notifications": "Ez bidali idatzi bitarteko jakinarazpenak",
"Always show message timestamps": "Erakutsi beti mezuen denbora-zigilua",
"Disable markdown formatting": "Desgaitu markdown formatua",
"Name": "Izena",
"Device Name": "Gailuaren izena",
"Last seen": "Azkenekoz ikusia",
@ -153,7 +148,6 @@
"Success": "Arrakasta",
"For security, this session has been signed out. Please sign in again.": "Segurtasunagatik saio hau amaitu da. Hasi saioa berriro.",
"Found a bug?": "Akats bat aurkitu duzu?",
"Guests can't use labs features. Please register.": "Bisitariek ezin dituzte laborategiko ezaugarriak erabili. Erregistratu.",
"Guests cannot join this room even if explicitly invited.": "Bisitariak ezin dira gela honetara elkartu ez bazaie zuzenean gonbidatu.",
"Hangup": "Eseki",
"Homeserver is": "Hasiera zerbitzaria:",
@ -167,7 +161,7 @@
"Add": "Gehitu",
"Add a topic": "Gehitu gai bat",
"Admin": "Kudeatzailea",
"Admin tools": "Kudeaketa tresnak",
"Admin Tools": "Kudeaketa tresnak",
"And %(count)s more...": "Eta %(count)s gehiago...",
"VoIP": "VoIP",
"Missing Media Permissions, click here to request.": "Media baimenak falta dira, egin klik eskatzeko.",
@ -180,15 +174,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?",
@ -300,9 +290,6 @@
"Forgot your password?": "Pasahitza ahaztu duzu?",
"%(userId)s from %(fromPowerLevel)s to %(toPowerLevel)s": "%(userId)s %(fromPowerLevel)s mailatik %(toPowerLevel)s mailara",
"Guest access is disabled on this Home Server.": "Bisitarien sarbidea desgaituta dago hasiera zerbitzari honetan.",
"Guests can't set avatars. Please register.": "Bisitariek ezin dituzte abatarrak ezarri. Erregistratu zaitez.",
"Guest users can't create new rooms. Please register to create room and start a chat.": "Bisitariek ezin dituzte gela berriak sortu. Erregistratu gela sortu eta txat bat hasteko.",
"Guest users can't upload files. Please register to upload.": "Bisitariek ezin dituzte fitxategiak igo. Erregistratu igotzeko.",
"Hide Text Formatting Toolbar": "Ezkutatu testu-formatuaren tresna-barra",
"Incoming call from %(name)s": "%(name)s erabiltzailearen deia jasotzen",
"Incoming video call from %(name)s": "%(name)s erabiltzailearen bideo deia jasotzen",
@ -345,7 +332,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",
@ -359,7 +350,6 @@
"Never send encrypted messages to unverified devices in this room": "Ez bidali inoiz zifratutako mezuak egiaztatu gabeko gailuetara gela honetan",
"Never send encrypted messages to unverified devices in this room from this device": "Ez bidali inoiz zifratutako mezuak egiaztatu gabeko gailuetara gela honetan gailu honetatik",
"New address (e.g. #foo:%(localDomain)s)": "Helbide berria (adib. #foo:%(localDomain)s)",
"New Composer & Autocomplete": "Konposatzaile berria eta osatze automatikoa",
"New passwords don't match": "Pasahitz berriak ez datoz bat",
"New passwords must match each other.": "Pasahitz berriak berdinak izan behar dira.",
"not set": "ezarri gabe",
@ -382,7 +372,6 @@
"Permissions": "Baimenak",
"%(senderName)s placed a %(callType)s call.": "%(senderName)s erabiltzaileak %(callType)s dei bat hasi du.",
"Power level must be positive integer.": "Botere maila osoko zenbaki positibo bat izan behar da.",
"Press": "Sakatu",
"Press <StartChatButton> to start a chat with someone": "Sakatu <StartChatButton> norbaitekin txat bat hasteko",
"Privacy warning": "Pribatutasun abisua",
"Private Chat": "Txat pribatua",
@ -426,7 +415,6 @@
"Scroll to unread messages": "Korritu irakurri gabeko mezuetara",
"Search failed": "Bilaketak huts egin du",
"Searches DuckDuckGo for results": "DuckDuckGo-n bilatzen ditu emaitzak",
"Searching known users": "Erabiltzaile ezagunen bila",
"Seen by %(userName)s at %(dateTime)s": "%(userName)s erabiltzaileak ikusia %(dateTime)s(e)an",
"Send a message (unencrypted)": "Bidali mezua (zifratu gabea)",
"Send an encrypted message": "Bidali mezu zifratua",
@ -454,14 +442,12 @@
"since they were invited": "gonbidatu zaienetik",
"Some of your messages have not been sent.": "Zure mezu batzuk ez dira bidali.",
"Sorry, this homeserver is using a login which is not recognised ": "Hasiera zerbitzari honek ezagutzen ez den saio bat erabiltzen du ",
"tag as %(tagName)s": "jarri %(tagName)s etiketa",
"tag direct chat": "jarri etiketa txat zuzenari",
"Tagged as: ": "Jarritako etiketa: ",
"The default role for new room members is": "Gelako kide berrien lehenetsitako rola:",
"The main address for this room is": "Gela honen helbide nagusia:",
"The phone number entered looks invalid": "Sartutako telefono zenbakia ez dirudi baliozkoa",
"The signing key you provided matches the signing key you received from %(userId)s's device %(deviceId)s. Device marked as verified.": "Eman duzun sinadura-gakoa %(userId)s erabiltzailearen %(deviceId)s gailutik jasotako bera da. Gailua egiaztatuta gisa markatu da.",
"This action cannot be performed by a guest user. Please register to be able to do this.": "Bisitari batek ezin du ekintza hau burutu. Erregistratu hau egin ahal izateko.",
"This email address was not found": "Ez da e-mail helbide hau aurkitu",
"%(actionVerb)s this person?": "%(actionVerb)s pertsona hau?",
"The file '%(fileName)s' exceeds this home server's size limit for uploads": "'%(fileName)s' fitxategiak hasiera zerbitzarian igoerei ezarritako tamaina-muga gainditzen du",
@ -469,7 +455,6 @@
"The remote side failed to pick up": "Urruneko aldeak hartzean huts egin du",
"This Home Server does not support login using email address.": "Hasiera zerbitzari honek ez du e-mail helbidearekin saioa hastea onartzen.",
"This invitation was sent to an email address which is not associated with this account:": "Gonbidapen hau kontu honekin lotuta ez dagoen e-mail helbide batera bidali da:",
"There was a problem logging in.": "Arazo bat egon da saioa hastean.",
"This room is not recognised.": "Ez da gela hau ezagutzen.",
"These are experimental features that may break in unexpected ways": "Hauek ezaugarri esperimentalak dira eta agian ez dabiltza behar bezala",
"The visibility of existing history will be unchanged": "Aurreko historialaren ikusgaitasuna ez da aldatuko",
@ -494,7 +479,6 @@
"To send events of type": "Mota honetako gertaerak bidaltzea:",
"To send messages": "Mezuak bidaltzea",
"to start a chat with someone": "norbaitekin txat bat hastea",
"to tag as %(tagName)s": "%(tagName)s gisa etiketatzea",
"to tag direct chat": "txat zuzena etiketatzea",
"To use it, just wait for autocomplete results to load and tab through them.": "Erabiltzeko, itxaron osatze automatikoaren emaitzak kargatu arte eta gero tabuladorearekin hautatu.",
"Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "Gela honen denbora-lerroko puntu zehatz bat kargatzen saiatu zara, baina ez duzu mezu zehatz hori ikusteko baimenik.",
@ -504,7 +488,6 @@
"%(senderName)s turned on end-to-end encryption (algorithm %(algorithm)s).": "%(senderName)s erabiltzaileak muturretik muturrerako (algorithm %(algorithm)s) zifratzea aktibatu du.",
"Unable to add email address": "Ezin izan da e-mail helbidea gehitu",
"Unable to remove contact information": "Ezin izan da kontaktuaren informazioa kendu",
"Unable to restore previous session": "Ezin izan da aurreko saioa berreskuratu",
"Unable to verify email address.": "Ezin izan da e-mail helbidea egiaztatu.",
"%(senderName)s unbanned %(targetName)s.": "%(senderName)s erabiltzaileak debekua kendu dio %(targetName)s erabiltzaileari.",
"Unable to ascertain that the address this invite was sent to matches one associated with your account.": "Ezin izan da ziurtatu gonbidapen hau zure kontuarekin lotutako helbide batera bidali zela.",
@ -519,7 +502,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:",
@ -612,7 +594,6 @@
"%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s": "%(weekDayName)s, %(fullYear)sko %(monthName)sk %(day)s %(time)s",
"%(weekDayName)s %(time)s": "%(weekDayName)s %(time)s",
"Set a display name:": "Ezarri pantaila-izena:",
"Set a Display Name": "Ezarri pantaila-izena",
"Upload an avatar:": "Igo abatarra:",
"This server does not support authentication with a phone number.": "Zerbitzari honek ez du telefono zenbakia erabiliz autentifikatzea onartzen.",
"Missing password.": "Pasahitza falta da.",
@ -630,7 +611,6 @@
"Encrypt room": "Zifratu gela",
"There are no visible files in this room": "Ez dago fitxategi ikusgairik gela honetan",
"Sent messages will be stored until your connection has returned.": "Bidalitako mezuak zure konexioa berreskuratu arte gordeko dira.",
"Auto-complete": "Osatze automatikoa",
"<a>Resend all</a> or <a>cancel all</a> now. You can also select individual messages to resend or cancel.": "<a>Birbidali guztiak</a> edo <a>baztertu guztiak</a> orain. Mezuak banaka aukeratu ditzakezu ere birbidali ala baztertzeko.",
"(~%(count)s results)|one": "(~%(count)s emaitza)",
"(~%(count)s results)|other": "(~%(count)s emaitza)",
@ -658,7 +638,7 @@
"%(oneUser)sleft and rejoined %(repeats)s times": "Erabiltzaile %(oneUser)s %(repeats)s aldiz atera eta berriro elkartu da",
"%(severalUsers)sleft and rejoined": "%(severalUsers)s erabiltzaile atera eta berriro elkartu dira",
"%(oneUser)sleft and rejoined": "Erabiltzaile %(oneUser)s atera eta berriro sartu da",
"%(severalUsers)shad their invitations withdrawn %(repeats)s times": "%(severalUsers) erabiltzaileen gonbidapenak %(repeats)s aldiz atzera bota dira",
"%(severalUsers)shad their invitations withdrawn %(repeats)s times": "%(severalUsers)s erabiltzaileen gonbidapenak %(repeats)s aldiz atzera bota dira",
"%(oneUser)shad their invitation withdrawn %(repeats)s times": "Erabiltzaile %(oneUser)sen gonbidapena %(repeats)s aldiz bota da atzera",
"%(severalUsers)shad their invitations withdrawn": "%(severalUsers)s erabiltzaileen gonbidapena atzera bota da",
"%(oneUser)shad their invitation withdrawn": "Erabiltzaile %(oneUser)sen gonbidapena atzera bota da",
@ -703,7 +683,6 @@
"The export file will be protected with a passphrase. You should enter the passphrase here, to decrypt the file.": "Esportatutako fitxategia pasaesaldi batez babestuko da. Pasaesaldia bertan idatzi behar duzu, fitxategia deszifratzeko.",
"You must join the room to see its files": "Gelara elkartu behar zara bertako fitxategiak ikusteko",
"Start new chat": "Hasi txat berria",
"Guest users can't invite users. Please register.": "Bisitariek ezin dituzte erabiltzaileak gonbidatu, erregistratu zaitez.",
"Failed to invite": "Huts egin du ganbidapenak",
"Failed to invite user": "Huts egin du erabiltzailea gonbidatzean",
"Failed to invite the following users to the %(roomName)s room:": "Huts egin du honako erabiltzaile hauek %(roomName)s gelara gonbidatzean:",
@ -721,7 +700,6 @@
"Unable to restore session": "Ezin izan da saioa berreskuratu",
"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.": "Aurretik Riot bertsio berriago bat erabili baduzu, zure saioa bertsio honekin bateraezina izan daiteke. Itxi leiho hau eta itzuli bertsio berriagora.",
"Continue anyway": "Jarraitu hala ere",
"Your display name is how you'll appear to others when you speak in rooms. What would you like it to be?": "Zure pantaila izena geletan hitz egiten duzunean besteek ikusten dutena da. Zein nahi duzu?",
"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.": "Gailu bakoitzaren egiaztaketa prozesua jarraitzea aholkatzen dizugu, benetako jabeari dagozkiela baieztatzeko, baina mezua egiaztatu gabe birbidali dezakezu ere.",
"\"%(RoomName)s\" contains devices that you haven't seen before.": "\"%(RoomName)s\" gelan aurretik ikusi ez dituzun gailuak daude.",
"Unknown devices": "Gailu ezezagunak",
@ -851,5 +829,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 <i>+example:matrix.org</i>.": "Dagoen talde batetara elkartzeko taldearen identifikatzailea ezagutu behar duzu, honen antza du: <i>+adibidea:matrix.org</i>.",
"Robot check is currently unavailable on desktop - please use a <a>web browser</a>": "Robot egiaztaketa orain ez dago eskuragarri mahaigainean - erabili <a>web nabigatzailea</a>",
"%(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"
}

View File

@ -1 +1,341 @@
{}
{
"a room": "huone",
"A text message has been sent to +%(msisdn)s. Please enter the verification code it contains": "Numeroon +%(msisdn)s on lähetetty tekstiviesti. Ole hyvä ja syötä sen sisältämä varmennuskoodi",
"Accept": "Hyväksy",
"Cancel": "Peruuta",
"Close": "Sulje",
"Create new room": "Luo uusi huone",
"Custom Server Options": "Omat palvelinasetukset",
"Dismiss": "Hylkää",
"Drop here %(toAction)s": "Pudota tänne %(toAction)s",
"Error": "Virhe",
"Failed to forget room %(errCode)s": "Huoneen unohtaminen epäonnistui %(errCode)s",
"Favourite": "Suosikki",
"Mute": "Vaimenna",
"Notifications": "Ilmoitukset",
"Operation failed": "Toiminto epäonnistui",
"Remove": "Poista",
"Room directory": "Huonehakemisto",
"Search": "Haku",
"Settings": "Asetukset",
"Start chat": "Aloita keskustelu",
"unknown error code": "tuntematon virhekoodi",
"Sunday": "Sunnuntai",
"Monday": "Maanantai",
"Tuesday": "Tiistai",
"Wednesday": "Keskiviikko",
"Thursday": "Torstai",
"Friday": "Perjantai",
"Saturday": "Lauantai",
"Failed to change password. Is your password correct?": "Salasanan muuttaminen epäonnistui. Onko salasanasi oikein?",
"Continue": "Jatka",
"powered by Matrix": "Matrix-pohjainen",
"Active call (%(roomName)s)": "Aktivoi puhelu (%(roomName)s)",
"Add": "Lisää",
"Add a topic": "Lisää aihe",
"Add email address": "Lisää sähköpostiosoite",
"Add phone number": "Lisää puhelinnumero",
"Admin": "Ylläpitäjä",
"Admin tools": "Ylläpitotyökalut",
"Allow": "Salli",
"And %(count)s more...": "Ja %(count)s lisää...",
"VoIP": "VoIP",
"Missing Media Permissions, click here to request.": "Mediaoikeudet puuttuvat. Klikkaa tästä pyytääksesi oikeudet.",
"No Microphones detected": "Mikrofonia ei löytynyt",
"No Webcams detected": "Webkameraa ei löytynyt",
"No media permissions": "Ei mediaoikeuksia",
"You may need to manually permit Riot to access your microphone/webcam": "Sinun täytyy ehkä manuaalisesti sallia mikrofonin/webkameran käyttö",
"Default Device": "Oletuslaite",
"Microphone": "Mikrofoni",
"Camera": "Kamera",
"Advanced": "Kehittyneet",
"Algorithm": "Algoritmi",
"Hide removed messages": "Piilota poistetut viestit",
"Always show message timestamps": "Näytä aina viestien aikaleimat",
"Authentication": "Autentikointi",
"Alias (optional)": "Alias (valinnainen)",
"and": "ja",
"%(items)s and %(remaining)s others": "%(items)s ja %(remaining)s lisää",
"%(items)s and one other": "%(items)s ja yksi lisää",
"%(items)s and %(lastItem)s": "%(items)s ja %(lastItem)s",
"and %(count)s others....other": "ja %(count)s lisää...",
"and %(count)s others....one": "ja yksi lisää...",
"%(names)s and %(lastPerson)s are typing": "%(names)s ja %(lastPerson)s kirjoittavat",
"%(names)s and one other are typing": "%(names)s ja yksi muu kirjoittavat",
"%(names)s and %(count)s others are typing": "%(names)s ja %(count)s muuta kirjoittavat",
"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.",
"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",
"Anyone who knows the room's link, including guests": "Kaikki jotka tietävät huoneen osoitteen, mukaanlukien vieraat",
"Are you sure?": "Oletko varma?",
"Are you sure you want to leave the room '%(roomName)s'?": "Oletko varma että haluat poistua huoneesta '%(roomName)s'?",
"Are you sure you want to reject the invitation?": "Oletko varma että haluat hylätä kutsun?",
"Are you sure you want to upload the following files?": "Oletko varma että haluat ladata seuraavat tiedostot?",
"Attachment": "Liite",
"Autoplay GIFs and videos": "Toista automaattisesti GIF-animaatiot ja videot",
"%(senderName)s banned %(targetName)s.": "%(senderName)s antoi porttikiellon käyttäjälle %(targetName)s.",
"Can't connect to homeserver - please check your connectivity, ensure your <a>homeserver's SSL certificate</a> is trusted, and that a browser extension is not blocking requests.": "Yhdistäminen kotipalvelimeen epäonnistui. Ole hyvä ja tarkista verkkoyhteytesi ja varmista että <a>kotipalvelimen SSL-sertifikaatti</a> on luotettu, ja että jokin selaimen lisäosa ei estä pyyntöjen lähettämisen.",
"Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or <a>enable unsafe scripts</a>.": "Yhdistäminen kotipalveluun HTTP:n avulla ei ole mahdollista kun selaimen osoitepalkissa on HTTPS URL. Käytä joko HTTPS tai <a>salli turvattomat skriptit</a>.",
"Can't load user settings": "Käyttäjäasetusten lataaminen epäonnistui",
"Change Password": "Muuta salasana",
"%(senderName)s changed their display name from %(oldDisplayName)s to %(displayName)s.": "%(senderName)s muutti näyttönimensä %(oldDisplayName)s -> %(displayName)s.",
"%(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",
"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ä",
"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)",
"<not supported>": "<ei tuettu>",
"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",
"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",
"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"
}

View File

@ -1,6 +1,4 @@
{
"anyone": "n'importe qui",
"Direct Chat": "Discussion directe",
"Direct chats": "Conversations directes",
"Disable inline URL previews by default": "Désactiver laperçu des URLs",
"Disinvite": "Désinviter",
@ -30,7 +28,6 @@
"Failed to change power level": "Échec du changement de niveau d'autorité",
"Failed to delete device": "Échec de la suppression de l'appareil",
"Failed to forget room %(errCode)s": "Échec lors de l'oubli du salon %(errCode)s",
"Please Register": "Veuillez vous inscrire",
"Remove": "Supprimer",
"was banned": "a été banni(e)",
"was invited": "a été invité(e)",
@ -50,7 +47,6 @@
"Favourite": "Favoris",
"Notifications": "Notifications",
"Settings": "Paramètres",
"Failed to join the room": "Échec de l'adhésion au salon",
"A text message has been sent to +%(msisdn)s. Please enter the verification code it contains": "Un message texte a été envoyé à +%(msisdn)s. Merci d'entrer le code de vérification qu'il contient",
"accept": "Accepter",
"%(targetName)s accepted an invitation.": "%(targetName)s a accepté une invitation.",
@ -60,9 +56,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",
@ -172,8 +165,6 @@
"For security, this session has been signed out. Please sign in again.": "Par sécurité, la session a expiré. Merci de vous authentifier à nouveau.",
"Found a bug?": "Trouvé un problème ?",
"%(userId)s from %(fromPowerLevel)s to %(toPowerLevel)s": "%(userId)s de %(fromPowerLevel)s à %(toPowerLevel)s",
"Guest users can't create new rooms. Please register to create room and start a chat.": "Les visiteurs ne peuvent créer de nouveaux salons. Merci de vous inscrire pour commencer une discussion.",
"Guest users can't upload files. Please register to upload.": "Les visiteurs ne peuvent pas télécharger de fichier. Veuillez vous inscrire pour télécharger.",
"had": "avait",
"Hangup": "Raccrocher",
"Hide read receipts": "Cacher les accusés de lecture",
@ -217,7 +208,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é",
@ -235,7 +230,6 @@
"Never send encrypted messages to unverified devices in this room": "Ne jamais envoyer de message chiffré aux appareils non-vérifiés dans ce salon",
"Never send encrypted messages to unverified devices in this room from this device": "Ne jamais envoyer de message chiffré aux appareils non-vérifiés dans ce salon depuis cet appareil",
"New address (e.g. #foo:%(localDomain)s)": "Nouvelle adresse (par ex. #foo:%(localDomain)s)",
"New Composer & Autocomplete": "Nouveau compositeur et autocomplétion",
"New password": "Nouveau mot de passe",
"New passwords don't match": "Les mots de passe ne correspondent pas",
"New passwords must match each other.": "Les nouveaux mots de passe doivent être identiques.",
@ -266,8 +260,6 @@
"Error decrypting attachment": "Erreur lors du déchiffrement de la pièce jointe",
"Failed to set avatar.": "Erreur lors de la définition de la photo de profil.",
"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.": "Par sécurité une déconnexion supprimera toutes les clés de chiffrement de ce navigateur. Si vous voulez être capable de déchiffrer lhistorique de votre conversation lors de sessions futures de Riot, merci dexporter les clés pour le salon.",
"Guests can't set avatars. Please register.": "Les visiteurs ne peuvent définir de photo de profil. Merci de vous inscrire.",
"Guests can't use labs features. Please register.": "Les visiteurs ne peuvent utiliser les fonctionalités du laboratoire. Merci de vous inscrire.",
"Guests cannot join this room even if explicitly invited.": "Les visiteurs ne peuvent rejoindre ce salon, même si explicitement invités.",
"Invalid file%(extra)s": "Fichier %(extra)s invalide",
"Mute": "Couper le son",
@ -277,7 +269,6 @@
"%(senderName)s placed a %(callType)s call.": "%(senderName)s a placé un appel %(callType)s.",
"Please check your email and click on the link it contains. Once this is done, click continue.": "Veuillez vérifier vos e-mails et cliquer sur le lien que vous avez reçu. Puis cliquez sur continuer.",
"Power level must be positive integer.": "Le niveau d'autorité doit être un entier positif.",
"Press": "Cliquer",
"Privacy warning": "Alerte de confidentialité",
"Privileged Users": "Utilisateur privilégié",
"Profile": "Profil",
@ -342,11 +333,9 @@
"Start Chat": "Démarrer une discussion",
"Submit": "Soumettre",
"Success": "Succès",
"tag as %(tagName)s": "marquer comme %(tagName)s",
"tag direct chat": "marquer comme discussion directe",
"The default role for new room members is": "Le rôle par défaut des nouveaux membres est",
"The main address for this room is": "L'adresse principale pour ce salon est",
"This action cannot be performed by a guest user. Please register to be able to do this.": "Cette action ne peut être effectuée par un visiteur. Merci de vous inscrire afin de pouvoir effectuer cette action.",
"This email address is already in use": "Cette adresse e-mail est déjà utilisée",
"This email address was not found": "Cette adresse e-mail na pas été trouvée",
"%(actionVerb)s this person?": "%(actionVerb)s cette personne ?",
@ -381,7 +370,6 @@
"To send events of type": "Pour envoyer des évènements du type",
"To send messages": "Pour envoyer des messages",
"to start a chat with someone": "pour démarrer une discussion avec quelquun",
"to tag as %(tagName)s": "pour marquer comme %(tagName)s",
"to tag direct chat": "pour marquer comme conversation directe",
"To use it, just wait for autocomplete results to load and tab through them.": "Pour lutiliser, attendez simplement que les résultats de lauto-complétion saffichent et défilez avec la touche Tab.",
"Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "Un instant donné de la chronologie na pu être chargé car vous navez pas la permission de le visualiser.",
@ -391,7 +379,6 @@
"%(senderName)s turned on end-to-end encryption (algorithm %(algorithm)s).": "%(senderName)s a activé le chiffrement de bout-en-bout (algorithme %(algorithm)s).",
"Unable to add email address": "Impossible d'ajouter l'adresse e-mail",
"Unable to remove contact information": "Impossible de supprimer les informations du contact",
"Unable to restore previous session": "Impossible de rétablir la session précédente",
"Unable to verify email address.": "Impossible de vérifier ladresse e-mail.",
"Unban": "Amnistier (annuler le bannissement)",
"%(senderName)s unbanned %(targetName)s.": "%(senderName)s a amnistié %(targetName)s.",
@ -402,7 +389,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",
@ -496,7 +482,6 @@
"Room": "Salon",
"Connectivity to the server has been lost.": "La connectivité au serveur a été perdue.",
"Sent messages will be stored until your connection has returned.": "Les messages envoyés seront stockés jusquà ce que votre connection revienne.",
"Auto-complete": "Auto-complétion",
"Resend all": "Tout renvoyer",
"(~%(searchCount)s results)": "(~%(searchCount)s résultats)",
"Cancel": "Annuler",
@ -570,7 +555,6 @@
"You must join the room to see its files": "Vous devez joindre le salon pour voir ses fichiers",
"Reject all %(invitedRooms)s invites": "Rejeter la totalité des %(invitedRooms)s invitations",
"Start new chat": "Démarrer une nouvelle discussion",
"Guest users can't invite users. Please register.": "Les visiteurs ne peuvent inviter dautres utilisateurs. Merci de vous inscrire.",
"Failed to invite": "Echec de l'invitation",
"Failed to invite user": "Echec lors de l'invitation de l'utilisateur",
"Failed to invite the following users to the %(roomName)s room:": "Echec lors de linvitation des utilisateurs suivants dans le salon %(roomName)s :",
@ -592,7 +576,6 @@
"Unable to restore session": "Impossible de restaurer la session",
"If you have previously used a more recent version of Riot, your session may be incompatible with this version. Close this window and return to the more recent version.": "Si vous avez utilisé une version plus récente de Riot précédemment, votre session risque dêtre incompatible avec cette version. Fermez cette fenêtre et retournez à la version plus récente.",
"Continue anyway": "Continuer quand même",
"Your display name is how you'll appear to others when you speak in rooms. What would you like it to be?": "Votre nom daffichage est la manière dont vous allez apparaître pour les autres quand vous parlerez dans les salons. Que voulez-vous quil soit ?",
"You are currently blacklisting unverified devices; to send messages to these devices you must verify them.": "Vous êtes en train dajouter à la liste noire des appareils non-vérifiés ; pour envoyer des messages à ces appareils vous devez les vérifier.",
"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.": "Nous vous recommandons deffectuer le processus de vérification pour tous les appareils afin de confirmer quils appartiennent à leurs propriétaires légitimes, mais vous pouvez renvoyer le(s) message(s) sans vérifier si vous préférez.",
"\"%(RoomName)s\" contains devices that you haven't seen before.": "\"%(RoomName)s\" contient des appareils que vous n'avez encore jamais vus.",
@ -648,7 +631,6 @@
"Removed or unknown message type": "Type de message inconnu ou supprimé",
"disabled": "désactivé",
"enabled": "activé",
"Set a Display Name": "Définir un nom daffichage",
"for %(amount)ss": "depuis %(amount)ss",
"for %(amount)sm": "depuis %(amount)sm",
"for %(amount)sh": "depuis %(amount)sh",
@ -665,7 +647,6 @@
"Results from DuckDuckGo": "Résultats de DuckDuckGo",
"The signing key you provided matches the signing key you received from %(userId)s's device %(deviceId)s. Device marked as verified.": "Les clés de signature que vous avez transmises correspondent aux clés que vous avez reçues de lappareil %(deviceId)s de %(userId)s. Lappareil est vérifié.",
"This Home Server does not support login using email address.": "Ce serveur ne supporte pas lidentification par e-mail.",
"There was a problem logging in.": "Un problème a été rencontré lors de lidentification.",
"Unknown (user, device) pair:": "Couple (utilisateur, appareil) inconnu :",
"Unrecognised command:": "Commande non-reconnue :",
"Unrecognised room alias:": "Alias de salon non-reconnu :",
@ -703,7 +684,6 @@
"Add": "Ajouter",
"%(count)s new messages|one": "%(count)s nouveau message",
"%(count)s new messages|other": "%(count)s nouveaux messages",
"Disable markdown formatting": "Désactiver le formattage markdown",
"Error: Problem communicating with the given homeserver.": "Erreur : problème de communication avec le homeserver.",
"Failed to fetch avatar URL": "Échec lors de la récupération de lURL de lavatar",
"The phone number entered looks invalid": "Le numéro de téléphone entré semble être invalide",
@ -714,7 +694,6 @@
"You must <a>register</a> to use this functionality": "Vous devez vous <a>inscrire</a> pour utiliser cette fonctionnalité",
"<a>Resend all</a> or <a>cancel all</a> now. You can also select individual messages to resend or cancel.": "<a>Tout renvoyer</a> ou <a>tout annuler</a> maintenant. Vous pouvez aussi sélectionner des messages individuels à envoyer ou annuler.",
"Create new room": "Créer un nouveau salon",
"Welcome page": "Page d'accueil",
"Room directory": "Répertoire des salons",
"Start chat": "Démarrer une discussion",
"New Password": "Nouveau mot de passe",
@ -788,7 +767,6 @@
"Join as <voiceText>voice</voiceText> or <videoText>video</videoText>.": "Joindre avec <voiceText>audio</voiceText> ou <videoText>vidéo</videoText>.",
"Last seen": "Vu pour la dernière fois",
"Level:": "Niveau :",
"Searching known users": "Recherche d'utilisateurs connus",
"Set": "Défini",
"%(userName)s (power %(powerLevelNumber)s)": "%(userName)s (pouvoir %(powerLevelNumber)s)",
"(could not connect media)": "(impossible de se connecter au média)",

View File

@ -3,17 +3,14 @@
"Search": "Keresés",
"OK": "Rendben",
"Custom Server Options": "Egyedi szerver beállítások",
"Direct Chat": "Közvetlen csevegés",
"Dismiss": "Eltűntet",
"Drop here %(toAction)s": "%(toAction)s -t húzd ide",
"Error": "Hiba",
"Failed to forget room %(errCode)s": "Nem lehet eltávolítani a szobát: %(errCode)s",
"Failed to join the room": "Nem lehet csatlakozni a szobához",
"Favourite": "Kedvenc",
"Mute": "Elnémít",
"Notifications": "Értesítések",
"Operation failed": "Művelet sikertelen",
"Please Register": "Regisztrálj",
"powered by Matrix": "Matrixon alapul",
"Remove": "Törlés",
"Settings": "Beállítások",
@ -39,7 +36,7 @@
"Add email address": "E-mail cím megadása",
"Add phone number": "Telefonszám megadása",
"Admin": "Adminisztrátor",
"Admin tools": "Admin. eszközök",
"Admin Tools": "Admin. eszközök",
"And %(count)s more...": "És még %(count)s...",
"VoIP": "VoIP",
"Missing Media Permissions, click here to request.": "Hiányzó Média jogosultság, kattintson ide az igényléshez.",
@ -56,7 +53,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",
@ -66,9 +62,6 @@
"Close": "Bezár",
"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 +74,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",
@ -162,7 +154,6 @@
"Disable Notifications": "Értesítések tiltása",
"disabled": "letiltva",
"Disable inline URL previews by default": "Beágyazott URL előnézet alapértelmezetten tiltva",
"Disable markdown formatting": "Markdown formázás tiltva",
"Disinvite": "Meghívás visszavonása",
"Display name": "Megjelenített név",
"Displays action": "Tevékenységek megjelenítése",
@ -232,10 +223,6 @@
"Found a bug?": "Hibát találtál?",
"%(userId)s from %(fromPowerLevel)s to %(toPowerLevel)s": "%(userId)s : %(fromPowerLevel)s -> %(toPowerLevel)s",
"Guest access is disabled on this Home Server.": "Vendég belépés tiltva van a Saját szerveren.",
"Guests can't set avatars. Please register.": "A vendégek nem tudnak avatar képet beállítani. Kérlek regisztrálj.",
"Guest users can't create new rooms. Please register to create room and start a chat.": "Vendégek nem készíthetnek szobákat. Kérlek regisztrálj, hogy szobát tudják nyitni és el tudj kezdeni csevegni.",
"Guest users can't upload files. Please register to upload.": "Vendégek nem tölthetnek fel fájlokat. A feltöltéshez kérlek regisztrálj.",
"Guests can't use labs features. Please register.": "Vendégek nem használhatnak labor funkciókat. Kérlek regisztrálj.",
"Guests cannot join this room even if explicitly invited.": "Vendégek akkor sem csatlakozhatnak ehhez a szobához ha külön meghívók kaptak.",
"had": "van",
"Hangup": "Megszakít",
@ -289,7 +276,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",
@ -308,7 +299,6 @@
"Never send encrypted messages to unverified devices in this room": "Soha ne küldj titkosított üzenetet ebből a szobából ellenőrizetlen eszközre",
"Never send encrypted messages to unverified devices in this room from this device": "Soha ne küldj titkosított üzenetet ebből a szobából ellenőrizetlen eszközre erről az eszközről",
"New address (e.g. #foo:%(localDomain)s)": "Új cím (e.g. #foo:%(localDomain)s)",
"New Composer & Autocomplete": "Új szerkesztő és automatikus kiegészítés",
"New password": "Új jelszó",
"New passwords don't match": "Az új jelszavak nem egyeznek",
"New passwords must match each other.": "Az új jelszavaknak meg kell egyezniük egymással.",
@ -337,7 +327,6 @@
"%(senderName)s placed a %(callType)s call.": "%(senderName)s %(callType)s hívást kezdeményezett.",
"Please check your email and click on the link it contains. Once this is done, click continue.": "Ellenőrizd az e-mail-edet és kattints a benne lévő linkre. Ha ez megvan, kattints a folytatásra.",
"Power level must be positive integer.": "A szintnek pozitív egésznek kell lennie.",
"Press": "Nyomd meg",
"Private Chat": "Privát csevegés",
"Privileged Users": "Privilegizált felhasználók",
"Profile": "Profil",
@ -377,7 +366,6 @@
"Scroll to unread messages": "Olvasatlan üzenetekhez görget",
"Search failed": "Keresés sikertelen",
"Searches DuckDuckGo for results": "Keresés DuckDuckGo-val",
"Searching known users": "Ismert felhasználók keresése",
"Seen by %(userName)s at %(dateTime)s": "%(userName)s %(dateTime)s időpontban látta",
"Send a message (unencrypted)": "Üzenet küldése (titkosítás nélkül)",
"Send an encrypted message": "Titkosított üzenet küldése",
@ -416,14 +404,12 @@
"Start Chat": "Csevegés indítása",
"Submit": "Elküld",
"Success": "Sikeres",
"tag as %(tagName)s": "címke beállítása: %(tagName)s",
"tag direct chat": "megjelölés közvetlen csevegésnek",
"Tagged as: ": "Címkék: ",
"The default role for new room members is": "Az alapértelmezett szerep új tagoknak:",
"The main address for this room is": "A szoba elsődleges címe:",
"The phone number entered looks invalid": "A megadott telefonszám érvénytelennek tűnik",
"The signing key you provided matches the signing key you received from %(userId)s's device %(deviceId)s. Device marked as verified.": "Az általad megadott aláíró kulcs megegyezik %(userId)s felhasználótól kapott kulccsal amit %(deviceId)s eszközhöz használ. Az eszköz ellenőrzöttnek jelölve.",
"This action cannot be performed by a guest user. Please register to be able to do this.": "Ezt nem teheti vendég felhasználó. Kérlek regisztrálj, hogy megtehesd.",
"This email address is already in use": "Ez az e-mail cím már használatban van",
"This email address was not found": "Az e-mail cím nem található",
"%(actionVerb)s this person?": "Ezt a felhasználót %(actionVerb)s?",
@ -435,7 +421,6 @@
"The remote side failed to pick up": "A hívott fél nem vette fel",
"This Home Server does not support login using email address.": "A Saját szerver nem támogatja a belépést e-mail címmel.",
"This invitation was sent to an email address which is not associated with this account:": "A meghívó olyan e-mail címre lett küldve ami nincs összekötve ezzel a fiókkal:",
"There was a problem logging in.": "Hiba történt a bejelentkezésnél.",
"This room has no local addresses": "Ennek a szobának nincs helyi címe",
"This room is not recognised.": "Ez a szoba nem ismerős.",
"These are experimental features that may break in unexpected ways": "Ezek kísérleti funkciók amik kiszámíthatatlanok lehetnek",
@ -461,7 +446,6 @@
"To send events of type": "Az alábbi típusú üzenetek küldéséhez",
"To send messages": "Üzenetek küldéséhez",
"to start a chat with someone": "csevegés indításához valakivel",
"to tag as %(tagName)s": "megjelölni mint: %(tagName)s",
"to tag direct chat": "megjelölni közvetlen csevegésnek",
"To use it, just wait for autocomplete results to load and tab through them.": "A használatához csak várd meg az automatikus kiegészítéshez a találatok betöltését és TAB-bal választhatsz közülük.",
"Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "Megpróbáltam betölteni a szoba megadott időpontjának megfelelő adatait, de nincs jogod a kérdéses üzenetek megjelenítéséhez.",
@ -471,7 +455,6 @@
"%(senderName)s turned on end-to-end encryption (algorithm %(algorithm)s).": "%(senderName)s bekapcsolta a titkosítást ponttól pontig (algoritmus %(algorithm)s).",
"Unable to add email address": "Az e-mail címet nem sikerült hozzáadni",
"Unable to remove contact information": "A névjegy információkat nem sikerült törölni",
"Unable to restore previous session": "Az előző kapcsolat visszaállítása sikertelen",
"Unable to verify email address.": "Az e-mail cím ellenőrzése sikertelen.",
"Unban": "Kitiltás visszavonása",
"%(senderName)s unbanned %(targetName)s.": "%(senderName)s visszaengedte %(targetName)s felhasználót.",
@ -486,7 +469,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:",
@ -588,7 +570,6 @@
"%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s": "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s",
"%(weekDayName)s %(time)s": "%(weekDayName)s %(time)s",
"Set a display name:": "Megjelenítési név beállítása:",
"Set a Display Name": "Megjelenítési név beállítása",
"Upload an avatar:": "Avatar kép feltöltése:",
"This server does not support authentication with a phone number.": "Ez a szerver nem támogatja a telefonszámmal való azonosítást.",
"Missing password.": "Hiányzó jelszó.",
@ -609,7 +590,6 @@
"Room": "Szoba",
"Connectivity to the server has been lost.": "A szerverrel a kapcsolat megszakadt.",
"Sent messages will be stored until your connection has returned.": "Az elküldött üzenetek addig lesznek tárolva amíg a kapcsolatod újra elérhető lesz.",
"Auto-complete": "Automatikus kiegészítés",
"<a>Resend all</a> or <a>cancel all</a> now. You can also select individual messages to resend or cancel.": "Most <a>újraküldöd mind</a> vagy <a>eldobod mind</a>. Újraküldésre vagy eldobásra egyenként is kiválaszthatod az üzeneteket.",
"(~%(count)s results)|one": "(~%(count)s db eredmény)",
"(~%(count)s results)|other": "(~%(count)s db eredmény)",
@ -689,7 +669,6 @@
"You must join the room to see its files": "Ahhoz hogy lásd a fájlokat be kell lépned a szobába",
"Reject all %(invitedRooms)s invites": "Minden %(invitedRooms)s meghívó elutasítása",
"Start new chat": "Új csevegés indítása",
"Guest users can't invite users. Please register.": "Vendég felhasználók nem tudnak másokat meghívni. Kérlek regisztrálj.",
"Failed to invite": "Meghívás sikertelen",
"Failed to invite user": "Felhasználó meghívása sikertelen",
"Failed to invite the following users to the %(roomName)s room:": "Az alábbi felhasználókat nem sikerült meghívni a(z) %(roomName)s szobába:",
@ -775,7 +754,6 @@
"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.": "Ha megegyezik, nyomd meg az megerősítő gombot alul. Ha nem akkor valaki más használja az eszközt és inkább a Feketelista gombot szeretnéd használni.",
"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.": "Az előző kapcsolat visszaállításánál hibára akadtunk. Ha folytatod újra be kell jelentkezned és a titkosított csevegések olvashatatlanok lesznek.",
"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.": "Ha egy újabb Riot verziót használtál valószínűleg ez kapcsolat nem lesz kompatibilis vele. Zárd be az ablakot és térj vissza az újabb verzióhoz.",
"Your display name is how you'll appear to others when you speak in rooms. What would you like it to be?": "A megjelenítési neved az ahogy a többiek látják amikor a szobában csevegsz. Mit szeretnél mi legyen?",
"You are currently blacklisting unverified devices; to send messages to these devices you must verify them.": "Jelenleg fekete listára teszel minden ismeretlen eszközt. Ha üzenetet szeretnél küldeni ezekre az eszközökre először ellenőrizned kell őket.",
"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.": "Azt javasoljuk, hogy menj végig ellenőrző folyamaton minden eszköznél, hogy meg megerősítsd minden eszköz a jogos tulajdonosához tartozik, de újraküldheted az üzenetet ellenőrzés nélkül, ha úgy szeretnéd.",
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.": "Használhatod az Otthoni szerver opciót, hogy más Matrix szerverre csatlakozz Saját szerver URL megadásával.",
@ -835,7 +813,7 @@
"You are a member of these groups:": "Ezeknek a csoportoknak vagy a tagja:",
"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.": "Hozz létre csoportot a közösség meghatározásához! Jelölj ki szobákat és saját kezdőoldalt amivel meghatározhatod a territóriumodat a Matrix univerzumában.",
"Join an existing group": "Csatlakozz meglévő csoporthoz",
"To join an existing group you'll have to know its group identifier; this will look something like <i>+example:matrix.org</i>.": "Ahhoz, hogy meglévő csoporthoz csatlakozhass tudnod kell a csoport azonosítóját ami valahogy így nézhet ki: <i>+példa:matrix.org</i>.",
"To join an existing group you'll have to know its group identifier; this will look something like <i>+example:matrix.org</i>.": "Ahhoz, hogy meglévő csoporthoz csatlakozhass tudnod kell a csoport azonosítóját ami valahogy így nézhet ki: <i>+example:matrix.org</i>.",
"Featured Rooms:": "Kiemelt szobák:",
"Error whilst fetching joined groups": "Hiba a csatlakozott csoportok betöltésénél",
"Featured Users:": "Kiemelt felhasználók:",
@ -852,5 +830,6 @@
"The maximum permitted number of widgets have already been added to this room.": "A maximálisan megengedett számú kisalkalmazás már hozzá van adva a szobához.",
"%(widgetName)s widget added by %(senderName)s": "%(widgetName)s kisalkalmazást %(senderName)s hozzáadta",
"%(widgetName)s widget removed by %(senderName)s": "%(widgetName)s kisalkalmazást %(senderName)s eltávolította",
"Robot check is currently unavailable on desktop - please use a <a>web browser</a>": "Robot ellenőrzés az asztali verzióban nem érhető el - használd a <a>web böngészőt</a>"
"Robot check is currently unavailable on desktop - please use a <a>web browser</a>": "Robot ellenőrzés az asztali verzióban nem érhető el - használd a <a>web böngészőt</a>",
"%(widgetName)s widget modified by %(senderName)s": "%(widgetName)s kisalkalmazást %(senderName)s módosította"
}

View File

@ -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?",
@ -45,7 +44,6 @@
"Decline": "Tolak",
"Default": "Bawaan",
"Device ID:": "ID Perangkat:",
"Direct Chat": "Obrolan Langsung",
"Direct chats": "Obrolan langsung",
"Display name": "Nama yang ditampilkan",
"Download %(text)s": "Unduh %(text)s",
@ -93,7 +91,6 @@
"People": "Orang",
"Passwords can't be empty": "Password tidak boleh kosong",
"Permissions": "Izin",
"Please Register": "Mohon registrasi",
"Private Chat": "Obrolan Privat",
"Profile": "Profil",
"Public Chat": "Obrolan Publik",
@ -134,7 +131,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",
@ -174,7 +170,7 @@
"Access Token:": "Token Akses:",
"Active call (%(roomName)s)": "Panggilan aktif (%(roomName)s)",
"Admin": "Admin",
"Admin tools": "Alat admin",
"Admin Tools": "Alat admin",
"And %(count)s more...": "Dan %(count)s lagi...",
"VoIP": "VoIP",
"Missing Media Permissions, click here to request.": "Tidak ada Izin Media, klik disini untuk meminta.",

View File

@ -3,7 +3,6 @@
"Mute": "Silenzia",
"Notifications": "Notifiche",
"Operation failed": "Operazione fallita",
"Please Register": "Per favore registrati",
"powered by Matrix": "offerto da Matrix",
"Remove": "Rimuovi",
"Search": "Cerca",
@ -15,10 +14,8 @@
"Close": "Chiudi",
"Create new room": "Crea una nuova stanza",
"Custom Server Options": "Opzioni Server Personalizzate",
"Direct Chat": "Chat Diretta",
"Dismiss": "Scarta",
"Error": "Errore",
"Failed to join the room": "Impossibile entrare nella stanza",
"Favourite": "Preferito",
"Sunday": "Domenica",
"Monday": "Lunedì",
@ -28,7 +25,6 @@
"Friday": "Venerdì",
"Saturday": "Sabato",
"OK": "OK",
"Welcome page": "Pagina di benvenuto",
"Drop here %(toAction)s": "Rilascia qui %(toAction)s",
"Failed to change password. Is your password correct?": "Modifica password fallita. La tua password è corretta?",
"Continue": "Continua",
@ -42,7 +38,7 @@
"Add email address": "Aggiungi indirizzo email",
"Add phone number": "Aggiungi numero di telefono",
"Admin": "Amministratore",
"Admin tools": "Strumenti di amministrazione",
"Admin Tools": "Strumenti di amministrazione",
"VoIP": "VoIP",
"No Microphones detected": "Nessun Microfono rilevato",
"No Webcams detected": "Nessuna Webcam rilevata",
@ -56,8 +52,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"
}

View File

@ -8,7 +8,6 @@
"Create Room": "部屋を作成",
"Current password": "現在のパスワード",
"Delete": "削除",
"Direct Chat": "対話",
"Direct chats": "対話",
"Display name": "表示名",
"Enable encryption": "暗号会話開始",
@ -26,7 +25,6 @@
"Notifications": "通知",
"Cancel": "取消",
"Create new room": "新しい部屋を作成",
"Failed to join the room": "部屋への参加に失敗しました",
"Room directory": "公開部屋一覧",
"Search": "検索",
"Settings": "設定",

View File

@ -3,12 +3,10 @@
"Close": "닫기",
"Create new room": "새 방 만들기",
"Custom Server Options": "사용자 지정 서버 설정",
"Direct Chat": "직접 이야기하기",
"Dismiss": "없애기",
"Error": "오류",
"Mute": "알림 끄기",
"Notifications": "알림",
"Please Register": "계정을 등록해주세요",
"powered by Matrix": "매트릭스의 지원을 받고 있어요",
"Remove": "지우기",
"Room directory": "방 목록",
@ -24,7 +22,6 @@
"Friday": "금요일",
"Saturday": "토요일",
"OK": "알았어요",
"Welcome page": "환영 화면",
"Continue": "게속하기",
"a room": "방",
"Accept": "수락",
@ -33,7 +30,7 @@
"Add email address": "이메일 주소 추가하기",
"Add phone number": "전화번호 추가하기",
"Admin": "관리자",
"Admin tools": "관리 도구",
"Admin Tools": "관리 도구",
"VoIP": "인터넷전화",
"No Microphones detected": "마이크를 찾지 못했어요",
"No Webcams detected": "카메라를 찾지 못했어요",
@ -51,7 +48,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": "붙이기",
@ -86,7 +82,6 @@
"Email, name or matrix ID": "이메일, 이름 혹은 매트릭스 ID",
"Drop here %(toAction)s": "여기에 놓아주세요 %(toAction)s",
"Failed to forget room %(errCode)s": "방 %(errCode)s를 잊지 못했어요",
"Failed to join the room": "방에 들어가지 못했어요",
"Favourite": "즐겨찾기",
"Operation failed": "작업 실패",
"Failed to change password. Is your password correct?": "비밀번호를 바꾸지 못했어요. 이 비밀번호가 정말 맞으세요?",
@ -101,9 +96,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",
@ -166,7 +158,6 @@
"Device key:": "장치 키:",
"Devices will not yet be able to decrypt history from before they joined the room": "방에 들어가기 전에는 장치에서 기록을 해독할 수 없어요",
"Disable inline URL previews by default": "기본적으로 인라인 URL 미리보기를 끄기",
"Disable markdown formatting": "마크다운 형식 끄기",
"Disinvite": "초대 취소",
"Displays action": "활동 보이기",
"Download %(text)s": "%(text)s 받기",
@ -231,10 +222,6 @@
"Found a bug?": "오류를 찾으셨나요?",
"%(userId)s from %(fromPowerLevel)s to %(toPowerLevel)s": "%(userId)s를 %(fromPowerLevel)s에서 %(toPowerLevel)s로",
"Guest access is disabled on this Home Server.": "손님은 이 홈 서버에 접근하실 수 없어요.",
"Guests can't set avatars. Please register.": "손님은 아바타를 설정하실 수 없어요. 계정을 등록해주세요.",
"Guest users can't create new rooms. Please register to create room and start a chat.": "손님은 새 방을 만드실 수 없어요. 계정을 등록하셔서 방을 만드시고 이야기를 시작하세요.",
"Guest users can't upload files. Please register to upload.": "손님은 파일을 올릴 수 없어요. 파일을 올리시려면 계정을 등록해주세요.",
"Guests can't use labs features. Please register.": "손님은 실험실 기능을 쓸 수 없어요. 계정을 등록해주세요.",
"Guests cannot join this room even if explicitly invited.": "손님은 분명하게 초대받았어도 이 방에 들어가실 수 없어요.",
"had": "했어요",
"Hangup": "전화 끊기",
@ -289,7 +276,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": "마크다운이 켜져있어요",
@ -308,7 +299,6 @@
"Never send encrypted messages to unverified devices in this room": "이 방에서 인증받지 않은 장치로 암호화한 메시지를 보내지 마세요",
"Never send encrypted messages to unverified devices in this room from this device": "이 장치에서 이 방의 인증받지 않은 장치로 암호화한 메시지를 보내지 마세요",
"New address (e.g. #foo:%(localDomain)s)": "새 주소 (예. #foo:%(localDomain)s)",
"New Composer & Autocomplete": "새 구성 & 자동 완성",
"New password": "새 비밀번호",
"New passwords don't match": "새 비밀번호가 맞지 않아요",
"New passwords must match each other.": "새 비밀번호는 서로 같아야 해요.",
@ -339,7 +329,6 @@
"Power level must be positive integer.": "권한 등급은 양의 정수여야만 해요.",
"%(userName)s (power %(powerLevelNumber)s)": "%(userName)s (권한 %(powerLevelNumber)s)",
"You will not be able to undo this change as you are promoting the user to have the same power level as yourself.": "사용자를 자신과 같은 권한 등급으로 승급시키면 되돌릴 수 없어요.",
"Press": "누르세요",
"Privacy warning": "개인정보 경고",
"Private Chat": "비공개 이야기",
"Privileged Users": "권한 있는 사용자",
@ -382,7 +371,6 @@
"Scroll to unread messages": "읽지 않은 메시지로 이동",
"Search failed": "찾지 못함",
"Searches DuckDuckGo for results": "덕덕고에서 검색",
"Searching known users": "아는 사용자 검색중",
"Seen by %(userName)s at %(dateTime)s": "%(userName)s님이 %(dateTime)s에 확인",
"Send a message (unencrypted)": "메시지 보내기 (비암호화)",
"Send an encrypted message": "암호화한 메시지 보내기",
@ -420,14 +408,12 @@
"Start Chat": "이야기하기",
"Submit": "보내기",
"Success": "성공",
"tag as %(tagName)s": "%(tagName)s로 지정하기",
"tag direct chat": "직접 이야기 지정하기",
"Tagged as: ": "지정함: ",
"The default role for new room members is": "방 새 구성원의 기본 역할",
"The main address for this room is": "이 방의 주요 주소",
"The phone number entered looks invalid": "입력한 전화번호가 잘못된 거 같아요",
"The signing key you provided matches the signing key you received from %(userId)s's device %(deviceId)s. Device marked as verified.": "입력한 서명 키는 %(userId)s님의 장치 %(deviceId)s에서 받은 서명 키와 일치하네요. 인증한 장치로 표시할게요.",
"This action cannot be performed by a guest user. Please register to be able to do this.": "손님은 이 작업을 할 수 없어요. 하려면 계정을 등록해주세요.",
"This email address is already in use": "이 이메일 주소는 사용중이에요",
"This email address was not found": "이 이메일 주소를 찾지 못했어요",
"%(actionVerb)s this person?": "이 사용자에게 %(actionVerb)s?",
@ -437,7 +423,6 @@
"The remote side failed to pick up": "원격 측에서 찾지 못했어요",
"This Home Server does not support login using email address.": "이 홈 서버는 이메일 주소 로그인을 지원하지 않아요.",
"This invitation was sent to an email address which is not associated with this account:": "이 초대는 이 계정과 연결되지 않은 이메일 주소로 보냈어요:",
"There was a problem logging in.": "로그인하는 데 문제가 있어요.",
"This room has no local addresses": "이 방은 로컬 주소가 없어요",
"This room is not recognised.": "이 방은 드러나지 않아요.",
"These are experimental features that may break in unexpected ways": "예상치 못한 방법으로 망가질 지도 모르는 실험 기능이에요",
@ -464,7 +449,6 @@
"To send events of type": "유형 이벤트 보내기",
"To send messages": "메시지 보내기",
"to start a chat with someone": "다른 사람과 이야기하기",
"to tag as %(tagName)s": "%(tagName)s로 지정하려면",
"to tag direct chat": "직접 이야기를 지정하려면",
"To use it, just wait for autocomplete results to load and tab through them.": "이 기능을 사용하시려면, 자동완성 결과가 나오길 기다리신 뒤에 탭으로 움직여주세요.",
"Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "이 방의 타임라인에서 특정 시점을 불러오려고 했지만, 문제의 메시지를 볼 수 있는 권한이 없어요.",
@ -474,7 +458,6 @@
"%(senderName)s turned on end-to-end encryption (algorithm %(algorithm)s).": "%(senderName)s님이 종단간 암호화를 켜셨어요 (알고리즘 %(algorithm)s).",
"Unable to add email address": "이메일 주소를 추가할 수 없어요",
"Unable to remove contact information": "연락처를 지울 수 없어요",
"Unable to restore previous session": "이전 세션을 복구할 수 없어요",
"Unable to verify email address.": "이메일 주소를 인증할 수 없어요.",
"Unban": "차단풀기",
"%(senderName)s unbanned %(targetName)s.": "%(senderName)s님이 %(targetName)s님의 차단을 푸셨어요.",
@ -490,7 +473,6 @@
"unknown device": "알 수 없는 장치",
"Unknown room %(roomId)s": "알 수 없는 방 %(roomId)s",
"Unknown (user, device) pair:": "알 수 없는 (사용자, 장치) 연결:",
"unknown": "알 수 없음",
"Unmute": "소리 켜기",
"Unnamed Room": "이름 없는 방",
"Unrecognised command:": "인식 할 수 없는 명령:",
@ -592,7 +574,6 @@
"%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s": "%(weekDayName)s, %(monthName)s %(day)s일 %(fullYear)s년 %(time)s",
"%(weekDayName)s %(time)s": "%(weekDayName)s, %(time)s",
"Set a display name:": "별명 설정:",
"Set a Display Name": "별명 설정",
"Upload an avatar:": "아바타 올리기:",
"This server does not support authentication with a phone number.": "이 서버는 전화번호 인증을 지원하지 않아요.",
"Missing password.": "비밀번호를 틀렸어요.",
@ -613,7 +594,6 @@
"Room": "방",
"Connectivity to the server has been lost.": "서버 연결이 끊어졌어요.",
"Sent messages will be stored until your connection has returned.": "보내신 메시지는 다시 연결될 때까지 저장할 거에요.",
"Auto-complete": "자동 완성",
"<a>Resend all</a> or <a>cancel all</a> now. You can also select individual messages to resend or cancel.": "<a>전부 다시 보내거나</a> <a>취소하세요</a>. 다시 보내거나 취소할 메시지를 하나씩 고르실 수도 있어요.",
"(~%(count)s results)|one": "(~%(count)s 결과)",
"(~%(count)s results)|other": "(~%(count)s 결과)",
@ -691,7 +671,6 @@
"You must join the room to see its files": "파일을 보려면 방에 들어가야만 해요",
"Reject all %(invitedRooms)s invites": "모든 %(invitedRooms)s의 초대를 거절하기",
"Start new chat": "새로 이야기하기",
"Guest users can't invite users. Please register.": "손님은 사용자를 초대할 수 없어요. 계정을 등록해주세요.",
"Failed to invite": "초대하지 못했어요",
"Failed to invite user": "사용자를 초대하지 못했어요",
"Failed to invite the following users to the %(roomName)s room:": "다음 사용자들을 %(roomName)s 방으로 초대하지 못했어요:",
@ -718,7 +697,6 @@
"Unable to restore session": "세션을 복구할 수 없어요",
"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.": "이전에 더 최근 버전의 라이엇을 쓰셨다면, 이 버전과 맞지 않을 거에요. 창을 닫고 더 최근 버전으로 돌아가세요.",
"Continue anyway": "무시하고 계속하기",
"Your display name is how you'll appear to others when you speak in rooms. What would you like it to be?": "별명은 방에서 말할 때 다른 사람에게 보일 이름을 정하는 거에요. 어떤 게 좋으세요?",
"You are currently blacklisting unverified devices; to send messages to these devices you must verify them.": "현재 인증하지 않은 장치를 요주의로 지정하셨어요. 이 장치들에 메시지를 보내려면 인증을 해야 해요.",
"We recommend you go through the verification process for each device to confirm they belong to their legitimate owner, but you can resend the message without verifying if you prefer.": "각 장치가 알맞은 소유자에게 속해 있는지 인증 과정을 거치길 추천하지만, 원하신다면 그러지 않고 메시지를 다시 보내실 수 있어요.",
"\"%(RoomName)s\" contains devices that you haven't seen before.": "\"%(RoomName)s\"에 본 적 없는 장치가 있어요.",

View File

@ -12,7 +12,7 @@
"Add email address": "Pievieno Epasta adresi",
"Add phone number": "Pievieno tālruņa numuru",
"Admin": "Administrators",
"Admin tools": "Administratora rīki",
"Admin Tools": "Administratora rīki",
"And %(count)s more...": "Un vēl %(count)s citi...",
"VoIP": "VoIP",
"Missing Media Permissions, click here to request.": "Nav pieejas medija saturam. Klikšķini šeit, lai pieprasītu.",
@ -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",
@ -124,12 +120,10 @@
"Device key:": "Ierīces atslēga:",
"Devices": "Ierīces",
"Devices will not yet be able to decrypt history from before they joined the room": "Ierīces nevarēs atšifrēt to ziņu vēsturi, kuras ir tikušas pievienotas, pirms ierīce pieslēdzās istabai",
"Direct Chat": "Tiešais čats",
"Direct chats": "Tiešie čati",
"Disable Notifications": "Atslēgt paziņojumus",
"disabled": "atslēgts",
"Disable inline URL previews by default": "Pēc noklusējuma atslēgt saišu priekšskatījumu",
"Disable markdown formatting": "Atslēgt formatēšanas iespēju",
"Disinvite": "Atsaukt",
"Display name": "Redzamais vārds",
"Displays action": "Parāda darbību",
@ -174,7 +168,6 @@
"Failed to fetch avatar URL": "Neizdevās noteikt avatara URL adresi",
"Failed to forget room %(errCode)s": "Neizdevās \"aizmirst\" istabu %(errCode)s",
"Failed to join room": "Neizdevās pievienoties istabai",
"Failed to join the room": "Neizdevās pievienoties istabai",
"Failed to kick": "Neizdevās veikt \"kick\" darbību",
"Failed to leave room": "Neizdevās pamest istabu",
"Failed to load timeline position": "Neizdevās ielādēt laikpaziņojumu pozīciju",
@ -207,10 +200,6 @@
"Found a bug?": "Pamanīji kļūdu?",
"%(userId)s from %(fromPowerLevel)s to %(toPowerLevel)s": "%(userId)s no %(fromPowerLevel)s uz %(toPowerLevel)s",
"Guest access is disabled on this Home Server.": "Šajā serverī viesu pierakstīšanās nav iespējama.",
"Guests can't set avatars. Please register.": "Viesi nevar iestatīt profila attēlus. Lūdzu reģistrējies vai pieraksties.",
"Guest users can't create new rooms. Please register to create room and start a chat.": "Viesi nevar izveidot jaunas istabas. Lūdzu reģistrējies vai pieraksties, un uzsāc čatu.",
"Guest users can't upload files. Please register to upload.": "Viesi nevar augšuplādēt failus. Lūdzu reģistrējies vai pieraksties.",
"Guests can't use labs features. Please register.": "Viesi nevar izmantot laboratorijas funkcijas. Lūdzu reģistrējies vai pieraksties.",
"Guests cannot join this room even if explicitly invited.": "Viesi nevar pievienoties šai istabai pat ja ir uzaicināti.",
"had": "bija",
"Hangup": "Aizturēt",
@ -264,7 +253,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",
@ -287,7 +280,6 @@
"Never send encrypted messages to unverified devices in this room": "Nekad nesūti šifrētas ziņas uz neverificētām ierīcēm šajā istabā",
"Never send encrypted messages to unverified devices in this room from this device": "Nekad nesūti no šīs ierīces šifrētas ziņas neverificētām ierīcēm šajā istabā",
"New address (e.g. #foo:%(localDomain)s)": "Jauna adrese (piemēram #kautkas:%(localDomain)s)",
"New Composer & Autocomplete": "Jauns teksta izveidotājs & automātiskā aizpildīšana",
"New password": "Jauna parole",
"New passwords don't match": "Jaunās paroles nesakrīt",
"New passwords must match each other.": "Jaunajām parolēm ir jāsakrīt vienai ar otru.",
@ -318,8 +310,6 @@
"Phone": "Telefons",
"%(senderName)s placed a %(callType)s call.": "%(senderName)s nolika %(callType)s zvanu.",
"Please check your email and click on the link it contains. Once this is done, click continue.": "Lūdzu pārbaudi savu epastu un noklikšķini tajā esošo saiti. Tiklīdz tas ir izdarīts, klikšķini \"turpināt\".",
"Please Register": "Lūdzu reģistrējies",
"Press": "Nospied",
"Press <StartChatButton> to start a chat with someone": "Nospied <StartChatButton>, lai uzsāktu čatu ar kādu",
"Privacy warning": "Privātuma brīdinājums",
"Private Chat": "Privātais čats",
@ -364,12 +354,10 @@
"%(senderName)s sent an invitation to %(targetDisplayName)s to join the room.": "%(senderName)s nosūtīja uzaicinājumu %(targetDisplayName)s pievienoties istabai.",
"%(senderName)s set a profile picture.": "%(senderName)s uzstādīja profila attēlu.",
"%(senderName)s set their display name to %(displayName)s.": "%(senderName)s uzstādīja redzamo vārdu uz: %(displayName)s.",
"tag as %(tagName)s": "birka kā %(tagName)s",
"The signing key you provided matches the signing key you received from %(userId)s's device %(deviceId)s. Device marked as verified.": "Tevis uzdotā pierakstīšanās atslēga sakrīt ar atslēgu, kuru Tu saņēmi no %(userId)s ierīces %(deviceId)s. Ierīce tika atzīmēta kā verificēta.",
"%(actionVerb)s this person?": "%(actionVerb)s šo personu?",
"The file '%(fileName)s' exceeds this home server's size limit for uploads": "Faila '%(fileName)s' izmērs pārsniedz šī mājas servera augšupielādes lieluma ierobežojumu",
"The file '%(fileName)s' failed to upload": "Failu '%(fileName)s' neizdevās augšuplādēt",
"to tag as %(tagName)s": "uz birku kā %(tagName)s",
"%(senderName)s turned on end-to-end encryption (algorithm %(algorithm)s).": "%(senderName)s ieslēdza ierīce-ierīce šifrēšanu (algorithm %(algorithm)s).",
"%(senderName)s unbanned %(targetName)s.": "%(senderName)s atcēla pieejas ierobežojumu (atbanoja) %(targetName)s.",
"Unknown room %(roomId)s": "Nezināma istaba %(roomId)s",
@ -459,7 +447,6 @@
"Search": "Meklēt",
"Search failed": "Meklēšana neizdevās",
"Searches DuckDuckGo for results": "Meklē DuckDuckGo rezultātus",
"Searching known users": "Meklē zināmus lietotājus",
"Send a message (unencrypted)": "Nosūtīt ziņu (netiek šifrēta)",
"Send an encrypted message": "Nosūtīt šifrētu ziņu",
"Send anyway": "Nosūtīt jebkurā gadījumā",
@ -498,14 +485,12 @@
"Tagged as: ": "Atzīmēts,kā: ",
"The main address for this room is": "Galvenā šīs istabas adrese ir",
"The phone number entered looks invalid": "Ievadītais telefona numurs izskatās nepareizs",
"This action cannot be performed by a guest user. Please register to be able to do this.": "Viesi nevar veikt šo darbību. Lūdzu reģistrējies vai pieraksties.",
"This email address is already in use": "Šī epasta adrese jau tiek izmantota",
"This email address was not found": "Šāda epasta adrese nav atrasta",
"The email address linked to your account must be entered.": "Ir jāievada tavam kontam piesaistītā epasta adrese.",
"The remote side failed to pick up": "Neizdevās uzņemt attālināto pusi",
"This Home Server does not support login using email address.": "Šis serveris neatbalsta pierakstīšanos ar epasta adresi.",
"This invitation was sent to an email address which is not associated with this account:": "Šis uzaicinājums tika nosūtīts uz epasta adresi, kura nav piesaistīta šim kontam:",
"There was a problem logging in.": "Radās problēma ar pierakstīšanos.",
"This room has no local addresses": "Šai istabai nav lokālo adrešu",
"This room is not recognised.": "Šī istaba netika atpazīta.",
"These are experimental features that may break in unexpected ways": "Šīs ir eksperimentālās iespējas, kuras var būt dažādos veidos nestrādājošas",
@ -538,7 +523,6 @@
"Tried to load a specific point in this room's timeline, but was unable to find it.": "Notika mēģinājums ielādēt šīs istabas specifisku laikpaziņojumu sadaļu, bet tā netika atrasta.",
"Unable to add email address": "Nav iespējams pievienot epasta adresi",
"Unable to remove contact information": "Nav iespējams dzēst kontaktinformāciju",
"Unable to restore previous session": "Nav iespējams atjaunot iepriekšējo sesiju",
"Unable to verify email address.": "Nav iespējams apstiprināt epasta adresi.",
"Unban": "Atbanot",
"Unable to ascertain that the address this invite was sent to matches one associated with your account.": "Nav iespējams pārliecināties, ka šis uzaicinājums tika nosūtīts uz to pašu adresi, kura ir piesaistīta tavam kontam.",
@ -553,7 +537,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",
@ -643,8 +626,6 @@
"Nov": "Nov.",
"Dec": "Dec.",
"Set a display name:": "Iestatīt redzamo vārdu:",
"Set a Display Name": "Iestatīt redzamo vārdu",
"Your display name is how you'll appear to others when you speak in rooms. What would you like it to be?": "Tavs redzamais vārds ir tas,kurš parādās citiem, kad tu sarunājies vai atrodies istabās. Kas Tu vēlētos būt?",
"This image cannot be displayed.": "Šo attēlu nav iespējams parādīt.",
"$senderDisplayName changed the room avatar to <img/>": "$senderDisplayName nomainīja istabas attēlu uz <img/>",
"Upload an avatar:": "Augšuplādē profila attēlu:",
@ -665,7 +646,6 @@
"Room": "Istaba",
"Connectivity to the server has been lost.": "Savienojums ar serveri tika zaudēts.",
"Sent messages will be stored until your connection has returned.": "Nosūtītās ziņas tiks saglabātas tiklīdz savienojums tiks atjaunots.",
"Auto-complete": "Automātiskā ieteikšana",
"<a>Resend all</a> or <a>cancel all</a> now. You can also select individual messages to resend or cancel.": "<a>Sūtīt vēlreiz visas</a> vai <a>atcelt visas</a>. Tu vari arī atlasīt atsevišķas ziņas, kuras sūtīt vai atcelt.",
"or": "vai",
"Active call": "Aktīvs zvans",
@ -693,7 +673,6 @@
"were kicked": "kur tika \"izsperts\" (kick)",
"was kicked": "tika izsperts/a (kick)",
"Please select the destination room for this message": "Lūdzu izvēlies šīs ziņas mērķa istabu",
"Welcome page": "\"Laipni lūdzam\" lapa",
"Room directory": "Istabu katalogs",
"Start chat": "Uzsākt čatu",
"New Password": "Jauna parole",
@ -715,7 +694,6 @@
"The export file will be protected with a passphrase. You should enter the passphrase here, to decrypt the file.": "Eksporta fails būs aizsargāts ar paroles frāzi. Tā ir jāievada šeit, lai atšifrētu failu.",
"You must join the room to see its files": "Tev ir jāpievienojas istabai, lai redzētu tās failus",
"Start new chat": "Uzsākt jaunu čatu",
"Guest users can't invite users. Please register.": "Viesi nevar uzaicināt lietotājus. Lūdzu reģistrējies.",
"Failed to invite": "Neizdevās uzaicināt",
"Failed to invite user": "Neizdevās uzaicināt lietotāju",
"Confirm Removal": "Apstiprini dzēšanu",

View File

@ -3,17 +3,14 @@
"Close": "അടയ്ക്കുക",
"Create new room": "പുതിയ റൂം സൃഷ്ടിക്കുക",
"Custom Server Options": "കസ്റ്റം സെര്‍വര്‍ ഓപ്ഷനുകള്‍",
"Direct Chat": "നേരിട്ടുള്ള ചാറ്റ്",
"Dismiss": "ഒഴിവാക്കുക",
"Drop here %(toAction)s": "ഇവിടെ നിക്ഷേപിക്കുക %(toAction)s",
"Error": "എറര്‍",
"Failed to forget room %(errCode)s": "%(errCode)s റൂം ഫോര്‍ഗെറ്റ് ചെയ്യുവാന്‍ സാധിച്ചില്ല",
"Failed to join the room": "റൂമില്‍ അംഗമാകുവാന്‍ സാധിച്ചില്ല",
"Favourite": "പ്രിയപ്പെട്ടവ",
"Mute": "നിശ്ശബ്ദം",
"Notifications": "നോട്ടിഫിക്കേഷനുകള്‍",
"Operation failed": "ശ്രമം പരാജയപ്പെട്ടു",
"Please Register": "ദയവായി റെജിസ്റ്റർ ചെയ്യുക",
"powered by Matrix": "മാട്രിക്സില്‍ പ്രവര്‍ത്തിക്കുന്നു",
"Remove": "നീക്കം ചെയ്യുക",
"Room directory": "റൂം ഡയറക്ടറി",
@ -29,7 +26,6 @@
"Friday": "വെള്ളി",
"Saturday": "ശനി",
"OK": "ശരി",
"Welcome page": "സ്വാഗതം",
"Failed to change password. Is your password correct?": "രഹസ്യവാക്ക് മാറ്റാന്‍ സാധിച്ചില്ല. രഹസ്യവാക്ക് ശരിയാണോ ?",
"Continue": "മുന്നോട്ട്",
"Microphone": "മൈക്രോഫോൺ",

View File

@ -1,5 +1,4 @@
{
"Direct Chat": "Privégesprek",
"A text message has been sent to +%(msisdn)s. Please enter the verification code it contains": "Voer alsjeblieft de verificatiecode in die is verstuurd naar +%(msisdn)s",
"accept": "accepteer",
"%(targetName)s accepted an invitation.": "%(targetName)s heeft een uitnodiging geaccepteerd.",
@ -13,9 +12,6 @@
"Algorithm": "Algoritme",
"Always show message timestamps": "Laat altijd tijdstempels van berichten zien",
"Authentication": "Authenticatie",
"all room members": "alle kamer leden",
"all room members, from the point they are invited": "alle kamer leden, vanaf het moment dat ze uitgenodigt zijn",
"all room members, from the point they joined": "alle kamer leden, 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",
@ -26,13 +22,12 @@
"%(names)s and %(lastPerson)s are typing": "%(names)s en %(lastPerson)s zijn aan het typen",
"%(names)s and one other are typing": "%(names)s en één andere zijn aan het typen",
"%(names)s and %(count)s others are typing": "%(names)s en %(count)s andere zijn aan het typen",
"An email has been sent to": "Er is een email verzonden naar",
"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 audio gesprek.",
"anyone": "iedereen",
"%(senderName)s answered the call.": "%(senderName)s heeft deelgenomen aan het audiogesprek.",
"An error has occurred.": "Er is een fout opgetreden.",
"Anyone who knows the room's link, apart from guests": "Iedereen die de kamer link weet, behalve gasten",
"Anyone who knows the room's link, including guests": "Iedereen die de kamer link weet, inclusief gasten",
"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",
"Are you sure?": "Weet je het zeker?",
"Are you sure you want to reject the invitation?": "Weet je zeker dat je de uitnodiging wilt weigeren?",
"Are you sure you want upload the following files?": "Weet je zeker dat je de volgende bestanden wilt uploaden?",
@ -41,21 +36,21 @@
"%(senderName)s banned %(targetName)s.": "%(senderName)s heeft %(targetName)s verbannen.",
"Ban": "Verban",
"Banned users": "Verbannen gebruikers",
"Bans user with given id": "Verbant de gebruiker met de gegeven id",
"Bans user with given id": "Verbant de gebruiker met het gegeven ID",
"Blacklisted": "Buitengesloten",
"Bug Report": "Bug report",
"Bulk Options": "Bulk opties",
"Call Timeout": "Gesprek time-out",
"Can't connect to homeserver - please check your connectivity and ensure your <a>homeserver's SSL certificate</a> is trusted.": "Kan niet met de homeserver verbinden - controleer alsjeblieft je verbinding en wees zeker dat je <a>homeserver's SSL certificaat</a> vertrouwd wordt.",
"Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or <a>enable unsafe scripts</a>.": "Kan niet met de homeserver verbinden via HTTP wanneer er een HTTPS URL in je browser balk staat. Gebruik HTTPS of <a>activeer onveilige scripts</a>.",
"Can't load user settings": "Kan de gebruiker instellingen niet laden",
"Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or <a>enable unsafe scripts</a>.": "Kan niet met de thuisserver verbinden via HTTP wanneer er een HTTPS-URL in je browser balk staat. Gebruik HTTPS of <a>activeer onveilige scripts</a>.",
"Can't load user settings": "Kan de gebruikersinstellingen niet laden",
"Change Password": "Wachtwoord veranderen",
"%(senderName)s changed their display name from %(oldDisplayName)s to %(displayName)s.": "%(senderName)s heeft zijn of haar weergave naam veranderd van %(oldDisplayName)s naar %(displayName)s.",
"%(senderName)s changed their profile picture.": "%(senderName)s heeft zijn of haar profiel foto veranderd.",
"%(senderName)s changed their display name from %(oldDisplayName)s to %(displayName)s.": "%(senderName)s heeft zijn of haar weergavenaam veranderd van %(oldDisplayName)s naar %(displayName)s.",
"%(senderName)s changed their profile picture.": "%(senderName)s heeft zijn of haar profielfoto veranderd.",
"%(senderName)s changed the power level of %(powerLevelDiffText)s.": "%(senderName)s heeft het machtsniveau van %(powerLevelDiffText)s gewijzigd.",
"%(senderDisplayName)s changed the room name to %(roomName)s.": "%(senderDisplayName)s heeft de kamer naam van %(roomName)s gewijzigd.",
"%(senderDisplayName)s changed the room name to %(roomName)s.": "%(senderDisplayName)s heeft de kamernaam van %(roomName)s gewijzigd.",
"%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s heeft het onderwerp gewijzigd naar \"%(topic)s\".",
"Changes to who can read history will only apply to future messages in this room": "Veranderingen aan wie de historie kan lezen worden alleen maar toegepast op toekomstige berichten in deze kamer",
"Changes to who can read history will only apply to future messages in this room": "Veranderingen aan wie de geschiedenis kan lezen worden alleen maar toegepast op toekomstige berichten in deze kamer",
"Changes your display nickname": "Verandert jouw weergavenaam",
"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.": "Het veranderen van het wachtwoord zal op het moment alle eind-tot-eind encryptie sleutels resetten, wat alle versleutelde chat geschiedenis onleesbaar zou maken, behalve als je eerst je kamer sleutels exporteert en achteraf opnieuw importeert. Dit zal worden verbeterd in de toekomst.",
"Clear Cache and Reload": "Legen cache en herlaad",
@ -67,23 +62,23 @@
"click to reveal": "klik om te laten zien",
"Click to unmute video": "Klik om de demping van de video op te heffen",
"Click to unmute audio": "Klik om het dempen van het geluid op te heffen",
"Command error": "Opdracht fout",
"Command error": "Opdrachtfout",
"Commands": "Opdrachten",
"Conference call failed.": "Conferentie gesprek mislukt.",
"Conference calling is in development and may not be reliable.": "Conferentie gesprekken zijn nog in ontwikkelingen en kunnen onbetrouwbaar zijn.",
"Conference calls are not supported in encrypted rooms": "Conferentie gesprekken worden niet ondersteunt in versleutelde kamers",
"Conference calls are not supported in this client": "Conferentie gesprekken worden niet ondersteunt in deze client",
"Conference call failed.": "Conferentiegesprek mislukt.",
"Conference calling is in development and may not be reliable.": "Conferentiegesprekken zijn nog in ontwikkelingen en kunnen onbetrouwbaar zijn.",
"Conference calls are not supported in encrypted rooms": "Conferentiegesprekken worden niet ondersteunt in versleutelde kamers",
"Conference calls are not supported in this client": "Conferentiegesprekken worden niet ondersteunt in deze client",
"Confirm password": "Bevestigen wachtwoord",
"Confirm your new password": "Bevestig je nieuwe wachtwoord",
"Continue": "Doorgaan",
"Could not connect to the integration server": "Mislukt om te verbinden met de integratie server",
"Could not connect to the integration server": "Mislukt om te verbinden met de integratieserver",
"Cancel": "Annuleren",
"a room": "een ruimte",
"Accept": "Accepteren",
"Active call (%(roomName)s)": "Actief gesprek (%(roomName)s)",
"Add": "Toevoegen",
"Add a topic": "Een onderwerp toevoegen",
"Admin tools": "Beheerhulpmiddelen",
"Admin Tools": "Beheerhulpmiddelen",
"And %(count)s more...": "Nog %(count)s andere...",
"VoIP": "VoiP",
"Missing Media Permissions, click here to request.": "Ontbrekende mediatoestemmingen, klik hier om aan te vragen.",
@ -108,12 +103,10 @@
"Drop here %(toAction)s": "%(toAction)s hier naartoe verplaatsen",
"Error": "Fout",
"Failed to forget room %(errCode)s": "Ruimte vergeten mislukt %(errCode)s",
"Failed to join the room": "Kamer binnengaan mislukt",
"Favourite": "Favoriet",
"Mute": "Dempen",
"Notifications": "Meldingen",
"Operation failed": "Actie mislukt",
"Please Register": "Registreer Alstublieft",
"powered by Matrix": "mogelijk gemaakt door Matrix",
"Remove": "Verwijderen",
"Room directory": "Kamerlijst",
@ -127,7 +120,6 @@
"Thursday": "Donderdag",
"Friday": "Vrijdag",
"Saturday": "Zaterdag",
"Welcome page": "Welkomstpagina",
"Search": "Zoeken",
"OK": "OK",
"Failed to change password. Is your password correct?": "Wachtwoord wijzigen mislukt. Is uw wachtwoord juist?",
@ -156,7 +148,6 @@
"Permissions": "Toestemmingen",
"Phone": "Telefoonnummer",
"%(senderName)s placed a %(callType)s call.": "%(senderName)s heeft een %(callType)s-gesprek gestart.",
"Press": "Druk",
"Privacy warning": "Privacywaarschuwing",
"Private Chat": "Privégesprek",
"Privileged Users": "Gebruikers met rechten",
@ -179,23 +170,22 @@
"Start Chat": "Gesprek starten",
"Submit": "Bevestigen",
"Success": "Gereed",
"tag as %(tagName)s": "Met %(tagName)s labelen",
"tag direct chat": "Privéchat labelen",
"Tagged as: ": "Gelabeld als: ",
"Sun": "Zon",
"Mon": "Maa",
"Tue": "Din",
"Wed": "Woe",
"Thu": "Don",
"Fri": "Vrij",
"Sat": "Zat",
"Sun": "Zo",
"Mon": "Ma",
"Tue": "Di",
"Wed": "Wo",
"Thu": "Do",
"Fri": "Vr",
"Sat": "Za",
"Jan": "Jan",
"Feb": "Feb",
"Mar": "Maa",
"Mar": "Mrt",
"Apr": "Apr",
"May": "Mei",
"Jun": "Juni",
"Jul": "Juli",
"Jun": "Jun",
"Jul": "Jul",
"Aug": "Aug",
"Sep": "Sep",
"Oct": "Okt",
@ -205,7 +195,6 @@
"%(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:": "Weergavenaam instellen:",
"Set a Display Name": "Weergavenaam instellen",
"Upload an avatar:": "Een avatar uploaden:",
"Can't connect to homeserver - please check your connectivity, ensure your <a>homeserver's SSL certificate</a> is trusted, and that a browser extension is not blocking requests.": "Geen verbinding met de thuisserver - controleer je verbinding. Controleer het <a>SSL-certificaat van de thuisserver</a> en browser-extensies die verzoeken kunnen blokkeren.",
"%(count)s new messages|other": "%(count)s nieuwe berichten",
@ -214,7 +203,7 @@
"Current password": "Huidig wachtwoord",
"%(senderDisplayName)s removed the room name.": "%(senderDisplayName)s heeft de naam van de kamer verwijderd.",
"Create a new chat or reuse an existing one": "Maak een nieuwe chat aan of ga verder met een bestaande",
"Create Room": "Maak een kamer",
"Create Room": "Maak een kamer aan",
"Curve25519 identity key": "Curve25519-identiteitssleutel",
"/ddg is not a command": "/ddg is geen commando",
"Deactivate Account": "Account Deactiveren",
@ -233,13 +222,12 @@
"Devices will not yet be able to decrypt history from before they joined the room": "Apparaten kunnen nog niet de geschiedenis van voordat ze de ruimte betraden ontsleutelen",
"Direct chats": "Privégesprekken",
"Disable Notifications": "Notificaties uitschakelen",
"Disable markdown formatting": "Markdown-opmaak uitschakelen",
"Disinvite": "Uitnodiging terugtrekken",
"Display name": "Weergavenaam",
"Don't send typing notifications": "Geen typnotificatie sturen",
"Download %(text)s": "%(text)s Downloaden",
"Drop File Here": "Plaats Bestand Hier",
"Ed25519 fingerprint": "Ed25519 vingerafdruk",
"Ed25519 fingerprint": "Ed25519-vingerafdruk",
"Email": "E-mail",
"Email address": "E-mailadres",
"Email address (optional)": "E-mailadres (optioneel)",
@ -249,22 +237,22 @@
"Deops user with given id": "Ontmachtigd gebruiker met het gegeven ID",
"Default": "Standaard",
"Disable inline URL previews by default": "URL-voorvertoningen standaard uitschakelen",
"Displays action": "Weergeeft actie",
"Displays action": "Geeft actie weer",
"Drop here to tag %(section)s": "Hiernaartoe verplaatsen om %(section)s te etiketteren",
"Email, name or matrix ID": "E-mail, naam of matrix ID",
"Email, name or matrix ID": "E-mail, naam of matrix-ID",
"Emoji": "Emoji",
"Enable encryption": "Versleuteling inschakelen",
"Enable Notifications": "Notificaties inschakelen",
"enabled": "ingeschakeld",
"Encrypted by a verified device": "Versleuteld bij een geverifieerd apparaat",
"Encrypted by an unverified device": "Versleuteld bij een niet geverifieerd apparaat",
"Encrypted by a verified device": "Versleuteld door een geverifieerd apparaat",
"Encrypted by an unverified device": "Versleuteld door een niet-geverifieerd apparaat",
"Encrypted messages will not be visible on clients that do not yet implement encryption": "Versleutelde berichten zullen nog niet zichtbaar zijn op applicaties die geen versleuteling ondersteunen",
"Encrypted room": "Versleutelde ruimte",
"Encryption is enabled in this room": "Versleuteling is ingeschakeld in deze ruimte",
"Encryption is not enabled in this room": "Versleuteling is niet ingeschakeld in deze ruimte",
"%(senderName)s ended the call.": "%(senderName)s heeft opgehangen.",
"End-to-end encryption information": "Eind-tot-eind versleuteling informatie",
"End-to-end encryption is in beta and may not be reliable": "Eind-tot-eind versleuteling is nog in beta en kan onbetrouwbaar zijn",
"End-to-end encryption information": "end-to-endbeveiligingsinformatie",
"End-to-end encryption is in beta and may not be reliable": "End-to-endbeveiliging is nog in bèta en kan onbetrouwbaar zijn",
"Enter Code": "Voer code in",
"Enter passphrase": "Voer wachtzin in",
"Error decrypting attachment": "Fout tijdens het ontsleutelen van de bijlage",
@ -272,14 +260,14 @@
"Event information": "Gebeurtenis-informatie",
"Existing Call": "Bestaande oproep",
"Export": "Exporteren",
"Export E2E room keys": "Exporteer E2E ruimte sleutels",
"Export E2E room keys": "Exporteer E2E-ruimte-sleutels",
"Failed to ban user": "Niet gelukt om de gebruiker te verbannen",
"Failed to change power level": "Niet gelukt om het machtsniveau te wijzigen",
"Failed to delete device": "Niet gelukt om het apparaat te verwijderen",
"Failed to fetch avatar URL": "Niet gelukt om de avatar URL op te halen",
"Failed to fetch avatar URL": "Niet gelukt om de avatar-URL op te halen",
"Failed to join room": "Niet gelukt om tot de ruimte toe te treden",
"Failed to leave room": "Niet gelukt om de ruimte te verlaten",
"Failed to load timeline position": "Niet gelukt om de tijdlijn positie te laden",
"Failed to load timeline position": "Niet gelukt om de tijdlijnpositie te laden",
"Failed to lookup current room": "Niet gelukt om de huidige ruimte op te zoeken",
"Failed to mute user": "Niet gelukt om de gebruiker te dempen",
"Failed to register as guest:": "Niet gelukt om als gast te registreren:",
@ -300,18 +288,14 @@
"favourite": "favoriet",
"Favourites": "Favorieten",
"Fill screen": "Scherm vullen",
"Filter room members": "Ruimte leden filteren",
"Filter room members": "Ruimteleden filteren",
"Forget room": "Ruimte vergeten",
"Forgot your password?": "Wachtwoord vergeten?",
"For security, this session has been signed out. Please sign in again.": "Voor veiligheidsredenen is deze sessie uitgelogd. Log alsjeblieft opnieuw in.",
"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.": "In verband met veiligheidsredenen zullen alle eind-tot-eind versleutelingssleutels van deze browser verwijderd worden. Als je je gespreksgeschiedenis van toekomstige Riot sessies wilt kunnen ontsleutelen, exporteer en bewaar dan de ruimte sleutels.",
"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.": "In verband met veiligheidsredenen zullen alle end-to-endbeveiligingsleutels van deze browser verwijderd worden. Als je je gespreksgeschiedenis van toekomstige Riot sessies wilt kunnen ontsleutelen, exporteer en bewaar dan de ruimte sleutels.",
"Found a bug?": "Een fout gevonden?",
"%(userId)s from %(fromPowerLevel)s to %(toPowerLevel)s": "%(userId)s van %(fromPowerLevel)s naar %(toPowerLevel)s",
"Guest access is disabled on this Home Server.": "Gast toegang is uitgeschakeld op deze thuisserver.",
"Guests can't set avatars. Please register.": "Gasten kunnen geen avatars instellen. Registreer je alsjeblieft.",
"Guest users can't create new rooms. Please register to create room and start a chat.": "Gast gebruikers kunnen geen nieuwe ruimtes aanmaken. Registreer je om een nieuwe ruimte aan te maken en een gesprek te starten.",
"Guest users can't upload files. Please register to upload.": "Gast gebruikers kunnen geen bestanden uploaden. Registreer je om te uploaden.",
"Guests can't use labs features. Please register.": "Gasten kunnen geen labs mogelijkheden gebruiken. Registreer je alsjeblieft.",
"Guest access is disabled on this Home Server.": "Gasttoegang is uitgeschakeld op deze thuisserver.",
"Guests cannot join this room even if explicitly invited.": "Gasten kunnen niet tot deze ruimte toetreden, zelfs als ze expliciet uitgenodigd zijn.",
"had": "had",
"Hangup": "Ophangen",
@ -323,22 +307,22 @@
"Identity Server is": "Identiteitsserver is",
"I have verified my email address": "Ik heb mijn e-mailadres geverifieerd",
"Import": "Importeren",
"Import E2E room keys": "E2E ruimte sleutels importeren",
"Import E2E room keys": "E2E-ruimte-sleutels importeren",
"Incoming call from %(name)s": "Inkomende oproep van %(name)s",
"Incoming video call from %(name)s": "Inkomende video-oproep van %(name)s",
"Incoming voice call from %(name)s": "Inkomende spraakoproep van %(name)s",
"Incorrect username and/or password.": "Incorrecte gebruikersnaam en/of wachtwoord.",
"Incorrect verification code": "Incorrecte verificatie code",
"Interface Language": "Interface Taal",
"Invalid alias format": "Ongeldig naam formaat",
"Invalid address format": "Ongeldig adres formaat",
"Incorrect verification code": "Incorrecte verificatiecode",
"Interface Language": "Interfacetaal",
"Invalid alias format": "Ongeldig naamformaat",
"Invalid address format": "Ongeldig adresformaat",
"Invalid Email Address": "Ongeldig e-mailadres",
"Invalid file%(extra)s": "Ongeldig bestand%(extra)s",
"%(senderName)s invited %(targetName)s.": "%(senderName)s heeft %(targetName)s uitgenodigd.",
"Invite new room members": "Nieuwe ruimte leden uitnodigen",
"Invited": "Uitgenodigd",
"Invites": "Uitnodigingen",
"Invites user with given id to current room": "Nodigt de gebruiker met het gegeven id uit in de huidige ruimte",
"Invites user with given id to current room": "Nodigt de gebruiker met het gegeven ID uit in de huidige ruimte",
"'%(alias)s' is not a valid format for an address": "'%(alias)s' is niet een geldig formaat voor een adres",
"'%(alias)s' is not a valid format for an alias": "'%(alias)s' is niet een geldig formaat voor een naam",
"%(displayName)s is typing": "%(displayName)s is aan het typen",
@ -362,22 +346,25 @@
"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 ruimte geschiedenis 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": "Opmaak is uitgeschakeld",
"Markdown is enabled": "Opmaak ingeschakeld",
"matrix-react-sdk version:": "matrix-react-sdk versie:",
"Markdown is disabled": "Markdown is uitgeschakeld",
"Markdown is enabled": "Markdown ingeschakeld",
"matrix-react-sdk version:": "matrix-react-sdk-versie:",
"Members only": "Alleen leden",
"Message not sent due to unknown devices being present": "Bericht niet verzonden doordat er een onbekende apparaten aanwezig zijn",
"Missing room_id in request": "Het room_id mist in het verzoek",
"Missing user_id in request": "De user_id mist in het verzoek",
"Mobile phone number": "Mobiel telefoonnummer",
"Mobile phone number (optional)": "Mobiel telefoonnummer (optioneel)",
"Mobile phone number": "Mobiele-telefoonnummer",
"Mobile phone number (optional)": "Mobiele-telefoonnummer (optioneel)",
"Never send encrypted messages to unverified devices from this device": "Nooit versleutelde berichten vanaf dit apparaat naar niet geverifieerde apparaten versturen",
"Never send encrypted messages to unverified devices in this room": "Nooit versleutelde berichten naar niet geverifieerde apparaten sturen in deze ruimte",
"Never send encrypted messages to unverified devices in this room from this device": "Nooit vanaf dit apparaat versleutelde berichten naar niet geverifieerde apparaten in deze ruimte sturen",
"New address (e.g. #foo:%(localDomain)s)": "Nieuw adres (bijv. #foo:%(localDomain)s)",
"New Composer & Autocomplete": "Nieuw tekstopmaakvenster & automatisch aanvullen",
"New passwords don't match": "Nieuwe wachtwoorden komen niet overeen",
"New passwords must match each other.": "Nieuwe wachtwoorden moeten overeenkomen.",
"Once encryption is enabled for a room it cannot be turned off again (for now)": "Zodra versleuteling in een kamer is ingeschakeld kan het niet meer worden uitgeschakeld (voor nu)",
@ -391,18 +378,18 @@
"Failed to kick": "Niet gelukt om te er uit te zetten",
"Press <StartChatButton> to start a chat with someone": "Druk op <StartChatButton> om een gesprek met iemand te starten",
"Remove %(threePid)s?": "%(threePid)s verwijderen?",
"%(senderName)s requested a VoIP conference.": "%(senderName)s heeft een VoIP gesprek aangevraagd.",
"%(senderName)s requested a VoIP conference.": "%(senderName)s heeft een VoIP-gesprek aangevraagd.",
"Report it": "Melden",
"Resetting password will currently reset any end-to-end encryption keys on all devices, making encrypted chat history unreadable, unless you first export your room keys and re-import them afterwards. In future this will be improved.": "Het wachtwoord veranderen betekent momenteel dat alle eind-tot-eind versleutelingssleutels op alle apparaten veranderen waardoor versleutelde gespreksgeschiedenis onleesbaar wordt, behalve als je eerst de ruimte sleutels exporteert en daarna opnieuw importeert. Dit zal in de toekomst verbeterd worden.",
"Resetting password will currently reset any end-to-end encryption keys on all devices, making encrypted chat history unreadable, unless you first export your room keys and re-import them afterwards. In future this will be improved.": "Het wachtwoord veranderen betekent momenteel dat alle end-to-endbeveiligingssleutels op alle apparaten veranderen waardoor versleutelde gespreksgeschiedenis onleesbaar wordt, behalve als je eerst de ruimte sleutels exporteert en daarna opnieuw importeert. Dit zal in de toekomst verbeterd worden.",
"restore": "herstellen",
"Results from DuckDuckGo": "Resultaten van DuckDuckGo",
"Return to app": "Naar de app terugkeren",
"Return to login screen": "Naar het inlogscherm terugkeren",
"Riot does not have permission to send you notifications - please check your browser settings": "Riot heeft geen permissie om je notificaties te versturen - controleer je browser instellingen",
"Riot does not have permission to send you notifications - please check your browser settings": "Riot heeft geen permissie om je notificaties te versturen - controleer je browserinstellingen",
"Riot was not given permission to send notifications - please try again": "Riot heeft geen permissie gekregen om notificaties te versturen - probeer het opnieuw",
"riot-web version:": "riot-web versie:",
"Room %(roomId)s not visible": "Ruimte %(roomId)s is niet zichtbaar",
"Room Colour": "Ruimte Kleur",
"Room Colour": "Ruimtekleur",
"Room contains unknown devices": "De ruimte bevat onbekende apparaten",
"Room name (optional)": "Ruimtenaam (optioneel)",
"%(roomName)s does not exist.": "%(roomName)s bestaat niet.",
@ -413,32 +400,31 @@
"Scroll to unread messages": "Scroll naar ongelezen berichten",
"Search failed": "Zoeken mislukt",
"Searches DuckDuckGo for results": "Zoekt op DuckDuckGo voor resultaten",
"Searching known users": "Aan het zoeken naar bekende gebruikers",
"Seen by %(userName)s at %(dateTime)s": "Gezien bij %(userName)s op %(dateTime)s",
"Send a message (unencrypted)": "Stuur een bericht (onversleuteld)",
"Send an encrypted message": "Stuur een versleuteld bericht",
"Send anyway": "Alsnog versturen",
"Sender device information": "Afzender apparaat informatie",
"Send Reset Email": "Stuur Reset E-mail",
"Sender device information": "Afzenderapparaatinformatie",
"Send Reset Email": "Stuur Reset-E-mail",
"sent an image": "stuurde een afbeelding",
"%(senderDisplayName)s sent an image.": "%(senderDisplayName)s stuurde een afbeelding.",
"%(senderName)s sent an invitation to %(targetDisplayName)s to join the room.": "%(senderName)s stuurde een uitnodiging naar %(targetDisplayName)s om tot de ruimte toe te treden.",
"sent a video": "stuurde een video",
"Server error": "Server fout",
"Server error": "Serverfout",
"Server may be unavailable or overloaded": "De server kan onbereikbaar of overbelast zijn",
"Server may be unavailable, overloaded, or search timed out :(": "De server is misschien onbereikbaar, overbelast of het zoeken duurde te lang :(",
"Server may be unavailable, overloaded, or the file too big": "De server is misschien onbereikbaar, overbelast of het bestand is te groot",
"Server may be unavailable, overloaded, or you hit a bug.": "De server is misschien onbereikbaar, overbelast of je bent tegen een fout aangelopen.",
"Server unavailable, overloaded, or something else went wrong.": "De server is onbereikbaar, overbelast of iets anders ging fout.",
"Session ID": "Sessie ID",
"Session ID": "Sessie-ID",
"%(senderName)s kicked %(targetName)s.": "%(senderName)s heeft %(targetName)s de ruimte uitgestuurd.",
"Kick": "Er uit sturen",
"Kicks user with given id": "Stuurt de gebruiker met het gegeven id er uit",
"Kicks user with given id": "Stuurt de gebruiker met het gegeven ID er uit",
"%(senderName)s set a profile picture.": "%(senderName)s heeft een profielfoto ingesteld.",
"%(senderName)s set their display name to %(displayName)s.": "%(senderName)s heeft zijn of haar weergavenaam naar %(displayName)s veranderd.",
"Set": "Instellen",
"Show panel": "Paneel weergeven",
"Show Text Formatting Toolbar": "Tekst Opmaak Werkbalk Weergeven",
"Show Text Formatting Toolbar": "Tekstopmaakwerkbalk Weergeven",
"Show timestamps in 12 hour format (e.g. 2:30pm)": "Laat de tijd in twaalf uur formaat zien (bijv. 2:30pm)",
"Signed Out": "Uitgelogd",
"Sign in": "Inloggen",
@ -448,12 +434,11 @@
"since they were invited": "sinds ze zijn uitgenodigd",
"Some of your messages have not been sent.": "Een paar van je berichten zijn niet verstuurd.",
"Someone": "Iemand",
"Sorry, this homeserver is using a login which is not recognised ": "Sorry, deze thuisserver gebruikt een inlog methode die niet wordt herkend. ",
"The default role for new room members is": "De standaard rol voor nieuwe ruimteleden is",
"Sorry, this homeserver is using a login which is not recognised ": "Sorry, deze thuisserver gebruikt een inlogmethode die niet wordt herkend. ",
"The default role for new room members is": "De standaardrol voor nieuwe ruimteleden is",
"The main address for this room is": "Het hoofdadres voor deze ruimte is",
"The phone number entered looks invalid": "Het telefoonnummer dat ingevoerd is ziet er ongeldig uit",
"The signing key you provided matches the signing key you received from %(userId)s's device %(deviceId)s. Device marked as verified.": "De versleutelingssleutel die je hebt verstrekt komt overeen met de versleutelingssleutel die je hebt ontvangen van %(userId)s's apparaat %(deviceId)s. Apparaat is gemarkeerd als geverifieerd.",
"This action cannot be performed by a guest user. Please register to be able to do this.": "Deze actie kan niet door een gastaccount worden uitgevoerd. Registreer je om deze actie uit te kunnen voeren.",
"This email address is already in use": "Dit e-mailadres is al in gebruik",
"This email address was not found": "Dit e-mailadres was niet gevonden",
"%(actionVerb)s this person?": "%(actionVerb)s deze persoon?",
@ -463,16 +448,15 @@
"The remote side failed to pick up": "De andere kant heeft niet opgenomen",
"This Home Server does not support login using email address.": "Deze Thuisserver ondersteunt het inloggen met een e-mailadres niet.",
"This invitation was sent to an email address which is not associated with this account:": "Deze uitnodiging was naar een e-mailadres gestuurd die niet geassocieerd is met dit account:",
"There was a problem logging in.": "Er was een probleem met het inloggen.",
"This room has no local addresses": "Deze ruimte heeft geen lokale adressen",
"This room is not recognised.": "Deze ruimte wordt niet herkend.",
"These are experimental features that may break in unexpected ways": "Dit zijn experimentele functies die misschien kunnen breken op onverwachte manieren",
"The visibility of existing history will be unchanged": "De zichtbaarheid van de bestaande geschiedenis zal onveranderd blijven",
"This doesn't appear to be a valid email address": "Het ziet er niet naar uit dat dit een geldig e-mailadres is",
"This is a preview of this room. Room interactions have been disabled": "Dit is een voorvertoning van de ruimte. Ruimte interacties zijn uitgeschakeld",
"This is a preview of this room. Room interactions have been disabled": "Dit is een voorvertoning van de ruimte. Ruimte-interacties zijn uitgeschakeld",
"This phone number is already in use": "Dit telefoonnummer is al in gebruik",
"This room": "Deze ruimte",
"This room is not accessible by remote Matrix servers": "Deze ruimte is niet toegankelijk voor afgelegen Matrix servers",
"This room is not accessible by remote Matrix servers": "Deze ruimte is niet toegankelijk voor afgelegen Matrix-servers",
"This room's internal ID is": "Het interne ID van deze ruimte is",
"times": "keer",
"To ban users": "om gebruikers te verbannen",
@ -490,17 +474,15 @@
"To send events of type": "Om een bepaalde soort gebeurtenissen te sturen",
"To send messages": "Om berichten te versturen",
"to start a chat with someone": "om een gesprek met iemand te starten",
"to tag as %(tagName)s": "om als %(tagName)s te etiketteren",
"to tag direct chat": "als directe chat etiketteren",
"To use it, just wait for autocomplete results to load and tab through them.": "Om het te gebruiken, wacht tot de automatisch aangevulde resultaten geladen zijn en tab er doorheen.",
"Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "Je probeerde een specifiek punt in de tijdlijn van deze ruimte te laden maar je hebt niet de permissie om de desbetreffende berichten te zien.",
"Tried to load a specific point in this room's timeline, but was unable to find it.": "Het is niet gelukt om een specifiek punt in de tijdlijn van deze ruimte te laden.",
"Turn Markdown off": "Doe opmaak uit",
"Turn Markdown on": "Zet opmaak aan",
"Turn Markdown off": "Zet Markdown uit",
"Turn Markdown on": "Zet Markdown aan",
"%(senderName)s turned on end-to-end encryption (algorithm %(algorithm)s).": "%(senderName)s heeft eind-tot-eind versleuteling aangezet (algoritme %(algorithm)s).",
"Unable to add email address": "Niet mogelijk om e-mailadres toe te voegen",
"Unable to remove contact information": "Niet mogelijk om contactinformatie te verwijderen",
"Unable to restore previous session": "Niet mogelijk om de vorige sessie te herstellen",
"Unable to verify email address.": "Niet mogelijk om het e-mailadres te verifiëren.",
"Unban": "Ontbannen",
"%(senderName)s unbanned %(targetName)s.": "%(senderName)s ontbande %(targetName)s.",
@ -511,13 +493,12 @@
"Undecryptable": "Niet ontsleutelbaar",
"Unencrypted room": "Ontsleutelde ruimte",
"unencrypted": "ontsleuteld",
"Unencrypted message": "Niet versleuteld bericht",
"Unencrypted message": "Niet-versleuteld bericht",
"unknown caller": "onbekende beller",
"Unknown command": "Onbekende commando",
"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:",
@ -533,25 +514,25 @@
"Upload file": "Bestand uploaden",
"Upload new:": "Nieuwe uploaden:",
"Usage": "Gebruik",
"Use compact timeline layout": "Gebruik een compacte tijdlijn indeling",
"Use compact timeline layout": "Gebruik een compacte tijdlijnindeling",
"Use with caution": "Gebruik met behoedzaamheid",
"User ID": "Gebruiker ID",
"User Interface": "Gebruiker Interface",
"User ID": "Gebruikers-ID",
"User Interface": "Gebruikersinterface",
"%(user)s is a": "%(user)s is een",
"User name": "Gebruikersnaam",
"%(userName)s (power %(powerLevelNumber)s)": "%(userName)s (macht %(powerLevelNumber)s)",
"Username invalid: %(errMessage)s": "Gebruikersnaam ongeldig: %(errMessage)s",
"Users": "Gebruikers",
"User": "Gebruiker",
"Verification Pending": "Verificatie Wachtend",
"Verification Pending": "Verificatie Uitstaand",
"Verification": "Verificatie",
"verified": "geverifieerd",
"Verified": "Geverifieerd",
"Verified key": "Geverifieerde sleutel",
"Video call": "Video-oproep",
"Voice call": "Spraakoproep",
"VoIP conference finished.": "VoIP vergadering beëindigd.",
"VoIP conference started.": "VoIP vergadering gestart.",
"VoIP conference finished.": "VoIP-vergadering beëindigd.",
"VoIP conference started.": "VoIP-vergadering gestart.",
"VoIP is unsupported": "VoIP is niet ondersteund",
"(could not connect media)": "(kan media niet verbinden)",
"(no answer)": "(geen antwoord)",
@ -559,27 +540,27 @@
"(warning: cannot be disabled again!)": "(waarschuwing: kan niet meer uitgezet worden!)",
"Warning!": "Waarschuwing!",
"WARNING: Device already verified, but keys do NOT MATCH!": "WAARSCHUWING: Apparaat al geverifieerd, maar de sleutels KOMEN NIET OVEREEN!",
"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!": "WAARSCHUWING: SLEUTEL VERIFICATIE IS MISLUKT! De ondertekende sleutel voor %(userId)s en apparaat %(deviceId)s is \"%(fprint)s\" wat niet overeenkomt met de verschafte sleutel \"%(fingerprints)s\". Dit kan betekenen dat je communicatie onderschept wordt!",
"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!": "WAARSCHUWING: SLEUTELVERIFICATIE IS MISLUKT! De ondertekende sleutel voor %(userId)s en apparaat %(deviceId)s is \"%(fprint)s\" wat niet overeenkomt met de verschafte sleutel \"%(fingerprint)s\". Dit kan betekenen dat je communicatie onderschept wordt!",
"Who can access this room?": "Wie heeft toegang tot deze ruimte?",
"Who can read history?": "Wie kan de geschiedenis lezen?",
"Who would you like to add to this room?": "Wie wil je aan deze ruimte toevoegen?",
"Who would you like to communicate with?": "Met wie zou je willen communiceren?",
"%(senderName)s withdrew %(targetName)s's invitation.": "%(sernderName)s trok %(targetName)s's uitnodiging terug.",
"%(senderName)s withdrew %(targetName)s's invitation.": "%(senderName)s trok %(targetName)s's uitnodiging terug.",
"Would you like to <acceptText>accept</acceptText> or <declineText>decline</declineText> this invitation?": "Wil je deze uitnodiging <acceptText>accepteren</acceptText> of <declineText>afwijzen</declineText>?",
"You already have existing direct chats with this user:": "Je hebt al bestaande privé gesprekken met deze gebruiker:",
"You already have existing direct chats with this user:": "Je hebt al bestaande privé-gesprekken met deze gebruiker:",
"You are already in a call.": "Je bent al in gesprek.",
"You're not in any rooms yet! Press <CreateRoomButton> to make a room or <RoomDirectoryButton> to browse the directory": "Je zit nog niet in een ruimte! Druk op <CreateRoomButton> om een ruimte te maken of <RoomDirectoryButton> om door de catalogus te bladeren",
"You are trying to access %(roomName)s.": "Je probeert in %(roomName)s toe te treden.",
"You cannot place a call with yourself.": "Je kan geen spraakoproep met jezelf maken.",
"You cannot place VoIP calls in this browser.": "Je kan geen VoIP oproepen in deze browser doen.",
"You cannot place VoIP calls in this browser.": "Je kan geen VoIP-oproepen in deze browser doen.",
"You do not have permission to post to this room": "Je hebt geen permissie om in deze ruimte te praten",
"You have been banned from %(roomName)s by %(userName)s.": "Je bent verbannen van %(roomName)s door %(userName)s.",
"You have been invited to join this room by %(inviterName)s": "Je bent in deze ruimte uitgenodigd door %(inviterName)s",
"You have been kicked from %(roomName)s by %(userName)s.": "Je bent uit %(roomName)s gezet door %(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": "Je bent op alle apparaten uitgelegd en je zal niet langer notificaties ontvangen. Om notificaties weer aan te zetten, log op elk apparaat opnieuw in",
"You have <a>disabled</a> URL previews by default.": "Je hebt URL voorvertoningen standaard <a>uitgezet</a>.",
"You have <a>enabled</a> URL previews by default.": "Je hebt URL voorvertoningen standaard <a>aangezet</a>.",
"You have entered an invalid contact. Try using their Matrix ID or email address.": "Je hebt een ongeldig contact ingevoerd. Probeer zijn of haar Matrix ID of e-mailadres te gebruiken.",
"You have <a>disabled</a> URL previews by default.": "Je hebt URL-voorvertoningen standaard <a>uitgezet</a>.",
"You have <a>enabled</a> URL previews by default.": "Je hebt URL-voorvertoningen standaard <a>aangezet</a>.",
"You have entered an invalid contact. Try using their Matrix ID or email address.": "Je hebt een ongeldig contact ingevoerd. Probeer zijn of haar Matrix-ID of e-mailadres te gebruiken.",
"You have no visible notifications": "Je hebt geen zichtbare notificaties",
"You may wish to login with a different account, or add this email to this account.": "Je wilt misschien met een ander account inloggen of deze e-mail aan je account toevoegen.",
"you must be a": "wat je moet zijn is een",
@ -587,14 +568,14 @@
"You need to be able to invite users to do that.": "Je moet bevoegd zijn om gebruikers uit te nodigen om dat te doen.",
"You need to be logged in.": "Je moet ingelogd zijn.",
"You need to enter a user name.": "Je moet een gebruikersnaam invoeren.",
"Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "Het ziet er naar uit dat je e-mailadres niet met een Matrix ID geassocieerd is op deze thuisserver.",
"Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "Het ziet er naar uit dat je e-mailadres niet met een Matrix-ID geassocieerd is op deze thuisserver.",
"Your password has been reset": "Je wachtwoord is gereset",
"Your password was successfully changed. You will not receive push notifications on other devices until you log back in to them": "Je wachtwoord is succesvol veranderd. Je zal geen notificaties op andere apparaten ontvangen totdat je er opnieuw inlogd",
"You seem to be in a call, are you sure you want to quit?": "Het ziet er naar uit dat je in een gesprek zit, weet je zeker dat je wilt afsluiten?",
"You seem to be uploading files, are you sure you want to quit?": "Het ziet er naar uit dat je bestanden aan het uploaden bent, weet je zeker dat je wilt afsluiten?",
"You should not yet trust it to secure data": "Je moet het nog niet vertrouwen om gegevens te beveiligen",
"You will not be able to undo this change as you are promoting the user to have the same power level as yourself.": "Je zal deze verandering niet terug kunnen draaien omdat je de gebruiker naar hetzelfde machtsniveau als jezelf promoot.",
"Your home server does not support device management.": "Je thuisserver ondersteund geen apparaat beheer.",
"Your home server does not support device management.": "Je thuisserver ondersteund geen apparaatbeheer.",
"This server does not support authentication with a phone number.": "Deze server ondersteunt geen authenticatie met een telefoonnummer.",
"Missing password.": "Het wachtwoord mist.",
"Passwords don't match.": "De wachtwoorden komen niet overeen.",
@ -614,7 +595,6 @@
"Room": "Ruimte",
"Connectivity to the server has been lost.": "De connectiviteit naar de server is verloren.",
"Sent messages will be stored until your connection has returned.": "Verstuurde berichten zullen opgeslagen worden tot je connectie weer terug is.",
"Auto-complete": "Automatisch aanvullen",
"<a>Resend all</a> or <a>cancel all</a> now. You can also select individual messages to resend or cancel.": "<a>Verstuur alle</a> of <a>annuleer alle</a> nu. Je kan ook individuele berichten selecteren om te versturen of te annuleren.",
"(~%(count)s results)|one": "(~%(count)s resultaat)",
"(~%(count)s results)|other": "(~%(count)s resultaten)",
@ -633,10 +613,10 @@
"%(severalUsers)sjoined": "%(severalUsers)s zijn toegretreden",
"%(oneUser)sjoined": "%(oneUser)s is toegetreden",
"%(severalUsers)sleft %(repeats)s times": "%(severalUsers)s zijn %(repeats)s vertrokken",
"%(oneUser)sleft %(repeats)s times": "%(oneUser) is %(repeats)s vertrokken",
"%(oneUser)sleft %(repeats)s times": "%(oneUser)s is %(repeats)s vertrokken",
"%(severalUsers)sleft": "%(severalUsers)s zijn vertrokken",
"%(oneUser)sleft": "%(oneUser)s is vertrokken",
"%(severalUsers)sjoined and left %(repeats)s times": "%(severalUsers) zijn %(repeats)s toegetreden en weer vertrokken",
"%(severalUsers)sjoined and left %(repeats)s times": "%(severalUsers)szijn %(repeats)s toegetreden en weer vertrokken",
"%(oneUser)sjoined and left %(repeats)s times": "%(oneUser)s is %(repeats)s keer toegetreden en vertrokken",
"%(severalUsers)sjoined and left": "%(severalUsers)s zijn toegetreden en vertrokken",
"%(oneUser)sjoined and left": "%(oneUser)s is toegetreden en weer vertrokken",
@ -644,14 +624,14 @@
"%(oneUser)sleft and rejoined %(repeats)s times": "%(oneUser)s is %(repeats)s keer vertrokken en opnieuw toegetreden",
"%(severalUsers)sleft and rejoined": "%(severalUsers)s zijn vertrokken en opnieuw toegetreden",
"%(oneUser)sleft and rejoined": "%(oneUser)s is vertrokken en opnieuw toegetreden",
"%(severalUsers)srejected their invitations %(repeats)s times": "%(severalUsers)s hebben hun uitnodiging uitnodiging %(repeats)s keer afgewezen",
"%(severalUsers)srejected their invitations %(repeats)s times": "%(severalUsers)s hebben hun uitnodiging %(repeats)s keer afgewezen",
"%(oneUser)srejected their invitation %(repeats)s times": "%(oneUser)s heeft zijn of haar uitnodiging %(repeats)s keer afgewezen",
"%(severalUsers)srejected their invitations": "%(severalUsers)s hebben hun uitnodiging afgewezen",
"%(oneUser)srejected their invitation": "%(oneUser)s heeft zijn of haar uitnodiging afgewezen",
"%(severalUsers)shad their invitations withdrawn %(repeats)s times": "%(severalUsers) hun uitnodiging is %(repeats)s keer terug getrokken",
"%(severalUsers)shad their invitations withdrawn %(repeats)s times": "%(severalUsers)shun uitnodiging is %(repeats)s keer terug getrokken",
"%(oneUser)shad their invitation withdrawn %(repeats)s times": "%(oneUser)s zijn of haar uitnodiging is %(repeats)s keer terug getrokken",
"%(severalUsers)shad their invitations withdrawn": "%(severalUsers)s hun uitnodiging is terug getrokken",
"%(oneUser)shad their invitation withdrawn": "%(oneUser) zijn of haar uitnodiging is terug getrokken",
"%(oneUser)shad their invitation withdrawn": "%(oneUser)szijn of haar uitnodiging is terug getrokken",
"were invited %(repeats)s times": "is %(repeats)s keer uitgenodigd",
"was invited %(repeats)s times": "was %(repeats)s keer uitgenodigd",
"were invited": "waren uitgenodigd",
@ -672,32 +652,31 @@
"%(oneUser)schanged their name %(repeats)s times": "%(oneUser)s heeft zijn of haar naam %(repeats)s keer aangepast",
"%(severalUsers)schanged their name": "%(severalUsers)s hebben hun naam aangepast",
"%(oneUser)schanged their name": "%(oneUser)s heeft zijn of haar naam aangepast",
"%(severalUsers)schanged their avatar %(repeats)s times": "%(severalUsers) hebben hun avatar %(repeats)s keer aangepast",
"%(severalUsers)schanged their avatar %(repeats)s times": "%(severalUsers)shebben hun avatar %(repeats)s keer aangepast",
"%(oneUser)schanged their avatar %(repeats)s times": "%(oneUser)s heeft zijn of haar avatar %(repeats)s keer aangepast",
"%(severalUsers)schanged their avatar": "%(severalUsers)s hebben hun avatar aangepast",
"%(oneUser)schanged their avatar": "%(oneUser)s heeft zijn of haar avatar aangepast",
"Please select the destination room for this message": "Selecteer de destinatie ruimte voor dit bericht",
"Please select the destination room for this message": "Selecteer de destinatie-ruimte voor dit bericht",
"New Password": "Nieuw wachtwoord",
"Start automatically after system login": "Start automatisch na systeem aanmelding",
"Desktop specific": "Desktop specifiek",
"Analytics": "Analisaties",
"Opt out of analytics": "Uitschrijven voor gegevens analisaties",
"Start automatically after system login": "Start automatisch na systeem-aanmelding",
"Desktop specific": "Desktop-specifiek",
"Analytics": "Gegevensanalyse",
"Opt out of analytics": "Uitschrijven voor gegevensanalyse",
"Options": "Opties",
"Riot collects anonymous analytics to allow us to improve the application.": "Riot verzameld anonieme analisaties dat het mogelijk maakt om de applicatie te verbeteren.",
"Riot collects anonymous analytics to allow us to improve the application.": "Riot verzameld anonieme gegevensanalyse die het mogelijk maakt om de applicatie te verbeteren.",
"Passphrases must match": "Wachtzinnen moeten overeenkomen",
"Passphrase must not be empty": "Wachtzin mag niet leeg zijn",
"Export room keys": "Ruimtesleutels exporteren",
"Confirm passphrase": "Wachtzin bevestigen",
"Import room keys": "Ruimtesleutels importeren",
"File to import": "Bestand om te importeren",
"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.": "Dit proces maakt het mogelijk om de sleutels van je ontvangen berichten in versleutelde ruimtes naar een lokaal bestand te exporteren. Je zal daarna in de toekomst het bestand in een ander Matrix programma kunnen importeren zodat dat programma ook deze berichten kan ontsleutelen.",
"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.": "Het geëxporteerde bestand zal het voor iedereen dat het kan lezen mogelijk maken om alle berichten die jij kan zien te ontsleutelen, je zal daarom voorzichtig moeten zijn en het veilig houden. Om hiermee te helpen zou je een wachtzin moeten invoeren hieronder, deze zal dan gebruikt worden om de geëxporteerde gegevens dte versleutelen. Het is dan alleen mogelijk om de gegevens te importeren met hetzelfde wachtwoord.",
"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.": "Dit proces maakt het mogelijk om versleutelingssleutels die je eerst had geëxporteerd vanaf een ander Matrix programma te importeren. Je zal daarna alle berichten kunnen ontsleutelen die het andere programma ook kon ontsleutelen.",
"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.": "Dit proces maakt het mogelijk om de sleutels van je ontvangen berichten in versleutelde ruimtes naar een lokaal bestand te exporteren. Je zal daarna in de toekomst het bestand in een ander Matrix-programma kunnen importeren zodat dat programma ook deze berichten kan ontsleutelen.",
"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.": "Het geëxporteerde bestand zal het voor iedereen dat het kan lezen mogelijk maken om alle berichten die jij kan zien te ontsleutelen, je zal daarom voorzichtig moeten zijn en het veilig houden. Om hiermee te helpen zou je een wachtzin moeten invoeren hieronder, deze zal dan gebruikt worden om de geëxporteerde gegevens te versleutelen. Het is dan alleen mogelijk om de gegevens te importeren met hetzelfde wachtwoord.",
"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.": "Dit proces maakt het mogelijk om versleutelingssleutels die je eerst had geëxporteerd vanaf een ander Matrix-programma te importeren. Je zal daarna alle berichten kunnen ontsleutelen die het andere programma ook kon ontsleutelen.",
"The export file will be protected with a passphrase. You should enter the passphrase here, to decrypt the file.": "Het te exporteren bestand zal beveiligd zijn met een wachtzin. Je moet hier een wachtzin invoeren om het bestand te ontsleutelen.",
"You must join the room to see its files": "Je moet tot een ruimte toetreden om de bestanden te zien",
"Reject all %(invitedRooms)s invites": "Alle %(invitedRooms)s uitnodigingen afslaan",
"Start new chat": "Nieuwe chat starten",
"Guest users can't invite users. Please register.": "Gast gebruikers kunnen geen gebruikers uitnodigen. Registreer je alsjeblieft.",
"Failed to invite": "Niet gelukt om uit te nodigen",
"Failed to invite user": "Niet gelukt om de gebruiker uit te nodigen",
"Failed to invite the following users to the %(roomName)s room:": "Niet gelukt om de volgende gebruikers voor de %(roomName)s ruimte uit te nodigen:",
@ -705,7 +684,7 @@
"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.": "Weet je zeker dat je deze gebeurtenis wilt verwijderen? Wees er wel van bewust dat als je een ruimtenaam of onderwerp verwijderd je de verandering ongedaan kunt maken.",
"Unknown error": "Onbekende fout",
"Incorrect password": "Incorrect wachtwoord",
"This will make your account permanently unusable. You will not be able to re-register the same user ID.": "Dit zal je account permanent onbruikbaar maken. Je zal ook niet opnieuw kunnen registreren met hetzelfde gebruikers ID.",
"This will make your account permanently unusable. You will not be able to re-register the same user ID.": "Dit zal je account permanent onbruikbaar maken. Je zal ook niet opnieuw kunnen registreren met hetzelfde gebruikers-ID.",
"This action is irreversible.": "Deze actie is onomkeerbaar.",
"To continue, please enter your password.": "Om verder te gaan, voer je wachtwoord in.",
"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:": "Om te verifiëren dat dit apparaat vertrouwd kan worden, contacteer de eigenaar op een andere manier (bijv. persoonlijk of via een telefoontje) en vraag of de sleutel die ze zien in de Gebruikersinstellingen voor dit apparaat overeenkomt met de onderstaande sleutel:",
@ -723,7 +702,6 @@
"Unable to restore session": "Het is niet mogelijk om de sessie te herstellen",
"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.": "Als je eerst gebruik hebt gemaakt van een recentere versie van Riot, dan is je sessie misschien onverenigbaar met deze versie. Sluit dit scherm en ga terug naar de recentere versie.",
"Continue anyway": "Toch doorgaan",
"Your display name is how you'll appear to others when you speak in rooms. What would you like it to be?": "Je weergavenaam is hoe je voor anderen zal verschijnen terwijl je in ruimtes praat. Wat wil je dat het wordt?",
"We recommend you go through the verification process for each device to confirm they belong to their legitimate owner, but you can resend the message without verifying if you prefer.": "We raden je aan om door het verificatieproces van elk apparaat te gaan om te bevestigen dat ze tot de legitieme eigenaar behoren maar je kan het bericht versturen zonder te verifiëren als je dat liever doet.",
"\"%(RoomName)s\" contains devices that you haven't seen before.": "\"%(RoomName)s\" bevat apparaten die je nog niet eerder hebt gezien.",
"Unknown devices": "Onbekende apparaten",
@ -734,8 +712,8 @@
"Add User": "Gebruiker Toevoegen",
"This Home Server would like to make sure you are not a robot": "Deze thuisserver wil er zeker van zijn dat je geen robot bent",
"Sign in with CAS": "Inloggen met CAS",
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.": "Je kan de aangepaste server opties gebruiken om bij andere Matrix servers in te loggen door een andere thuisserver URL te specificeren.",
"This allows you to use this app with an existing Matrix account on a different home server.": "Dit maakt het mogelijk om deze applicatie te gebruiken met een bestaand Matrix account op een andere thuisserver.",
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.": "Je kan de aangepaste server opties gebruiken om bij andere Matrix-servers in te loggen door een andere thuisserver-URL te specificeren.",
"This allows you to use this app with an existing Matrix account on a different home server.": "Dit maakt het mogelijk om deze applicatie te gebruiken met een bestaand Matrix-account op een andere thuisserver.",
"You can also set a custom identity server but this will typically prevent interaction with users based on email address.": "Je kan ook een aangepaste identiteitsserver instellen maar dit zal waarschijnlijk interactie met gebruikers gebaseerd op een e-mailadres voorkomen.",
"Please check your email to continue registration.": "Bekijk je e-mail om door te gaan met de registratie.",
"Token incorrect": "Bewijs incorrect",
@ -743,10 +721,10 @@
"Please enter the code it contains:": "Voer de code in die het bevat:",
"If you don't specify an email address, you won't be able to reset your password. Are you sure?": "Als je geen e-mailadres specificeert zal je niet je wachtwoord kunnen resetten. Weet je het zeker?",
"You are registering with %(SelectedTeamName)s": "Je registreert je met %(SelectedTeamName)s",
"Default server": "Standaard server",
"Default server": "Standaardserver",
"Custom server": "Aangepaste server",
"Home server URL": "Thuisserver URL",
"Identity server URL": "Identiteitsserver URL",
"Home server URL": "Thuisserver-URL",
"Identity server URL": "Identiteitsserver-URL",
"What does this mean?": "Wat betekent dit?",
"Error decrypting audio": "Fout met het ontsleutelen van de audio",
"Error decrypting image": "Fout met het ontsleutelen van de afbeelding",
@ -754,20 +732,20 @@
"This image cannot be displayed.": "Deze afbeelding kan niet worden weergeven.",
"Error decrypting video": "Fout met het ontsleutelen van de video",
"Add an Integration": "Voeg een integratie toe",
"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?": "Je wordt zo naar een derde-partij website verbonden zodat je het account kan legitimeren voor gebruik met %(integrationsUrl)s. Wil je doorgaan?",
"Removed or unknown message type": "Verwijderd of onbekend bericht type",
"Disable URL previews by default for participants in this room": "Zet URL voorvertoningen standaard uit voor deelnemers aan deze ruimte",
"Disable URL previews for this room (affects only you)": "Zet URL voorvertoningen uit voor deze ruimte (heeft alleen effect op jou)",
"URL previews are %(globalDisableUrlPreview)s by default for participants in this room.": "URL voorvertoningen staan standaard %(globalDisableUrlPreview)s voor deelnemers aan deze ruimte.",
"URL Previews": "URL Voorvertoningen",
"Enable URL previews for this room (affects only you)": "URL voorvertoningen in deze ruimte aanzetten (heeft alleen effect op jou)",
"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?": "Je wordt zo naar een derde-partij-website verbonden zodat je het account kan legitimeren voor gebruik met %(integrationsUrl)s. Wil je doorgaan?",
"Removed or unknown message type": "Verwijderd of onbekend berichttype",
"Disable URL previews by default for participants in this room": "Zet URL-voorvertoningen standaard uit voor deelnemers aan deze ruimte",
"Disable URL previews for this room (affects only you)": "Zet URL-voorvertoningen uit voor deze ruimte (heeft alleen effect op jou)",
"URL previews are %(globalDisableUrlPreview)s by default for participants in this room.": "URL-voorvertoningen staan standaard %(globalDisableUrlPreview)s voor deelnemers aan deze ruimte.",
"URL Previews": "URL-Voorvertoningen",
"Enable URL previews for this room (affects only you)": "URL-voorvertoningen in deze ruimte aanzetten (heeft alleen effect op jou)",
"Drop file here to upload": "Bestand hier laten vallen om te uploaden",
" (unsupported)": " (niet ondersteund)",
"Ongoing conference call%(supportedText)s.": "Lopend vergaderingsgesprek %(supportedText)s.",
"for %(amount)ss": "voor %(amount)ss",
"for %(amount)sm": "voor %(amount)sm",
"for %(amount)sh": "voor %(amount)su",
"for %(amount)sd": "for %(amound)sd",
"for %(amount)sd": "for %(amount)sd",
"Online": "Online",
"Idle": "Afwezig",
"Offline": "Offline",
@ -783,9 +761,9 @@
"Username not available": "Gebruikersnaam niet beschikbaar",
"Something went wrong!": "Iets ging niet goed!",
"This will be your account name on the <span></span> homeserver, or you can pick a <a>different server</a>.": "Dit zal je account naam worden op de <span></span> thuisserver of je kan een <a>verschillende server</a> pakken.",
"If you already have a Matrix account you can <a>log in</a> instead.": "Als je al een Matrix account hebt kan je in plaats daarvan <a>inloggen</a>.",
"Your browser does not support the required cryptography extensions": "Je browser ondersteunt de benodigde cryptografie extensies niet",
"Not a valid Riot keyfile": "Niet een geldig Riot sleutelbestand",
"If you already have a Matrix account you can <a>log in</a> instead.": "Als je al een Matrix-account hebt kan je in plaats daarvan <a>inloggen</a>.",
"Your browser does not support the required cryptography extensions": "Je browser ondersteunt de benodigde cryptografie-extensies niet",
"Not a valid Riot keyfile": "Niet een geldig Riot-sleutelbestand",
"Authentication check failed: incorrect password?": "Authenticatie controle gefaald: incorrect wachtwoord?",
"Disable Peer-to-Peer for 1:1 calls": "Peer-to-Peer voor 1:1 oproepen uitschakelen",
"Do you want to set an email address?": "Wil je een e-mailadres instellen?",
@ -795,7 +773,7 @@
"Start verification": "Verificatie starten",
"Share without verifying": "Delen zonder verificatie",
"Ignore request": "Verzoek negeren",
"You added a new device '%(displayName)s', which is requesting encryption keys.": "Je hebt een nieuwe apparaat '%(displayName)s' toegevoegd die om versleutelingssleutels vraagt.",
"You added a new device '%(displayName)s', which is requesting encryption keys.": "Je hebt een nieuw apparaat '%(displayName)s' toegevoegd dat om versleutelingssleutels vraagt.",
"Your unverified device '%(displayName)s' is requesting encryption keys.": "Je niet geverifieerde apparaat '%(displayName)s' vraagt naar versleutelingssleutels.",
"Encryption key request": "Verzoek voor versleutelingssleutel",
"Define the power level of a user": "Definieer het machtsniveau van een gebruiker",
@ -806,18 +784,18 @@
"Delete widget": "Widget verwijderen",
"Do you want to load widget from URL:": "Wil je de widget laden van de URL:",
"Edit": "Wijzigen",
"Enable automatic language detection for syntax highlighting": "Automatische taaldetectie voor zinsbouw markeringen aanzetten",
"Enable automatic language detection for syntax highlighting": "Automatische taaldetectie voor zinsbouwmarkeringen aanzetten",
"Hide Apps": "Apps verbergen",
"Hide join/leave messages (invites/kicks/bans unaffected)": "Toetreed/verlaat berichten verbergen (uitnodigingen/verwijderingen/verbanningen zullen ongeschonden blijven)",
"Hide avatar and display name changes": "Avatar en weergavenaam wijzigingen verbergen",
"Integrations Error": "Integraties Fout",
"Integrations Error": "Integratiesfout",
"Publish this room to the public in %(domain)s's room directory?": "Deze ruimte publiekelijk maken in %(domain)s's ruimte catalogus?",
"Matrix Apps": "Matrix Apps",
"AM": "AM",
"PM": "PM",
"NOTE: Apps are not end-to-end encrypted": "OPMERKING: Apps zijn niet eind-tot-eind versleuteld",
"NOTE: Apps are not end-to-end encrypted": "OPMERKING: Apps zijn niet end-to-endbeveiligd",
"Revoke widget access": "Toegang tot widget intrekken",
"Sets the room topic": "Wijzigt het ruimte onderwerp",
"Sets the room topic": "Wijzigt het ruimte-onderwerp",
"Show Apps": "Apps Weergeven",
"The maximum permitted number of widgets have already been added to this room.": "Het maximum aantal toegestane widgets is al aan deze ruimte toegevoegd.",
"To get started, please pick a username!": "Om te beginnen, kies een gebruikersnaam!",
@ -826,24 +804,24 @@
"You are not in this room.": "Je zit niet in deze ruimte.",
"You do not have permission to do that in this room.": "Je hebt geen permissie om dat te doen in deze ruimte.",
"Verifies a user, device, and pubkey tuple": "Verifieert een gebruiker, apparaat en pubkey tupel",
"Autocomplete Delay (ms):": "Automatisch aanvullen vertraging (ms):",
"Autocomplete Delay (ms):": "Automatisch-aanvullen-vertraging (ms):",
"This Home server does not support groups": "Deze thuisserver ondersteunt geen groepen",
"Loading device info...": "Apparaat info aan het laden...",
"Groups": "Groepen",
"Create a new group": "Maak een nieuwe groep",
"Create Group": "Groep Aanmaken",
"Group Name": "Groepnaam",
"Group Name": "Groepsnaam",
"Example": "Voorbeeld",
"Create": "Creëer",
"Group ID": "Groep ID",
"Group ID": "Groeps-ID",
"+example:%(domain)s": "+voorbeeld:%(domain)s",
"Group IDs must be of the form +localpart:%(domain)s": "Groep IDs moeten er als +lokaalgedeelte:%(domain)s uit zien",
"It is currently only possible to create groups on your own home server: use a group ID ending with %(domain)s": "Het is momenteel mogelijk om groepen op je eigen thuisserver aan te maken: gebruik een groep ID dat eindigt met %(domain)s",
"Group IDs must be of the form +localpart:%(domain)s": "Groeps-IDs moeten er als +lokaalgedeelte:%(domain)s uit zien",
"It is currently only possible to create groups on your own home server: use a group ID ending with %(domain)s": "Het is momenteel mogelijk om groepen op je eigen thuisserver aan te maken: gebruik een groeps-ID dat eindigt met %(domain)s",
"Room creation failed": "Het aanmaken van de ruimte is niet gelukt",
"You are a member of these groups:": "Je bent een deelnemer van deze groepen:",
"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.": "Maak een groep aan om je gemeenschap te representateren! Defineer een set van ruimtes en maak je eigen aangepaste homepagina om je eigen plek in het Matrix universum te creëren.",
"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.": "Maak een groep aan om je gemeenschap te representateren! Defineer een set van ruimtes en maak je eigen aangepaste homepagina om je eigen plek in het Matrix-universum te creëren.",
"Join an existing group": "Treed tot een bestaande groep toe",
"To join an existing group you'll have to know its group identifier; this will look something like <i>+example:matrix.org</i>.": "Om tot een bestaande groep toe te treden moet je groep identificatie weten; dit zal er ongeveer uit zien als <i>+voorbeeld:matrix.org</i>.",
"To join an existing group you'll have to know its group identifier; this will look something like <i>+example:matrix.org</i>.": "Om tot een bestaande groep toe te treden moet je groepsidentificatie weten; dit zal er ongeveer uit zien als <i>+voorbeeld:matrix.org</i>.",
"Featured Rooms:": "Prominente Ruimtes:",
"Error whilst fetching joined groups": "Er is een fout opgetreden tijdens het ophalen van de tot toegretreden groepen",
"Featured Users:": "Prominente Gebruikers:",
@ -851,8 +829,9 @@
"Automatically replace plain text Emoji": "Automatisch normale tekst vervangen met Emoji",
"Failed to upload image": "Het is niet gelukt om de afbeelding te uploaden",
"Failed to update group": "Het is niet gelukt om de groep bij te werken",
"Hide avatars in user and room mentions": "Avatars in gebruiker en ruimte vermeldingen verbergen",
"%(widgetName)s widget added by %(senderName)s": "%(widgetName)s widget toegevoegd door %(senderName)s",
"%(widgetName)s widget removed by %(senderName)s": "%(widgetName)s widget verwijderd door %(senderName)s",
"Robot check is currently unavailable on desktop - please use a <a>web browser</a>": "Robot check is momenteel niet beschikbaar op de desktop - gebruik in plaats daarvan een <a>webbrowser</a>"
"Hide avatars in user and room mentions": "Avatars in gebruiker- en ruimte-vermeldingen verbergen",
"%(widgetName)s widget added by %(senderName)s": "%(widgetName)s-widget toegevoegd door %(senderName)s",
"%(widgetName)s widget removed by %(senderName)s": "%(widgetName)s-widget verwijderd door %(senderName)s",
"Robot check is currently unavailable on desktop - please use a <a>web browser</a>": "Robot-check is momenteel niet beschikbaar op de desktop - gebruik in plaats daarvan een <a>webbrowser</a>",
"%(widgetName)s widget modified by %(senderName)s": "%(widgetName)s-widget aangepast door %(senderName)s"
}

View File

@ -1,6 +1,6 @@
{
"Ignore request": "Zignoruj żądanie",
"Start verification": "Rozpocznij weryfikacje",
"Start verification": "Rozpocznij weryfikację",
"Skip": "Pomiń",
"This will allow you to reset your password and receive notifications.": "To pozwoli Ci zresetować Twoje hasło i otrzymać powiadomienia.",
"Your browser does not support the required cryptography extensions": "Twoja przeglądarka nie wspiera wymaganych rozszerzeń kryptograficznych",
@ -14,23 +14,22 @@
"This image cannot be displayed.": "Ten obrazek nie może zostać wyświetlony.",
"Default server": "Domyślny serwer",
"A text message has been sent to": "Wiadomość tekstowa została wysłana do",
"Add User": "Dodaj Użytkownika",
"Add User": "Dodaj użytkownika",
"Verify...": "Zweryfikuj...",
"Unknown Address": "Nieznany Adres",
"Unknown Address": "Nieznany adres",
"Unknown devices": "Nieznane urządzenia",
"Verify device": "Zweryfikuj urządzenie",
"Device key": "Klucz urządzenia",
"Device Name": "Nazwa Urządzenia",
"Device Name": "Nazwa urządzenia",
"Device name": "Nazwa urządzenia",
"To continue, please enter your password.": "Aby kontynuować, proszę wprowadzić swoje hasło.",
"Incorrect password": "Nieprawidłowe hasło",
"Unknown error": "Nieznany błąd",
"Start new chat": "Rozpocznij nową konwersację",
"Options": "Opcje",
"New Password": "Nowe Hasło",
"New Password": "Nowe hasło",
"Room directory": "Spis pokojów",
"Start chat": "Rozpocznij rozmowę",
"Welcome page": "Strona powitalna",
"Create new room": "Utwórz nowy pokój",
"Sunday": "Niedziela",
"Wednesday": "Środa",
@ -67,8 +66,8 @@
"User": "Użytkownik",
"Users": "Użytkownicy",
"User name": "Nazwa użytkownika",
"User ID": "ID Użytkownika",
"User Interface": "Interfejs Użytkownika",
"User ID": "ID użytkownika",
"User Interface": "Interfejs użytkownika",
"Usage": "Użycie",
"Upload file": "Prześlij plik",
"Unban": "Odbanuj",
@ -95,7 +94,6 @@
"Create an account": "Stwórz konto",
"Delete": "Usuń",
"Devices": "Urządzenia",
"Direct Chat": "Rozmowa bezpośrednia",
"Drop here %(toAction)s": "Upuść tutaj %(toAction)s",
"Error": "Błąd",
"Notifications": "Powiadomienia",
@ -106,12 +104,10 @@
"unknown error code": "nieznany kod błędu",
"OK": "OK",
"Custom Server Options": "Niestandardowe opcje serwera",
"Dismiss": "Zdymisjonować",
"Dismiss": "Zamknij",
"Failed to forget room %(errCode)s": "Nie mogłem zapomnieć o pokoju %(errCode)s",
"Failed to join the room": "Nie udało się dołączyć do pokoju",
"Favourite": "Ulubiony",
"Mute": "Wycisz",
"Please Register": "Proszę się zarejestrować",
"powered by Matrix": "napędzany przez Matrix",
"Failed to change password. Is your password correct?": "Zmiana hasła nie powiodła się. Czy Twoje hasło jest poprawne?",
"Add a topic": "Dodaj temat",
@ -123,21 +119,18 @@
"Active call (%(roomName)s)": "Aktywne połączenie (%(roomName)s)",
"Add email address": "Dodaj adres e-mail",
"Admin": "Administrator",
"Admin tools": "Narzędzia administracyjne",
"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 +142,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,6 +152,688 @@
"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",
"Blacklisted": "Umieszczono na czarnej liście"
"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 jeden inny...",
"Bug Report": "Raport błędu",
"Bulk Options": "Masowe opcje",
"Call Timeout": "Upłynął limit czasu połączenia",
"Can't connect to homeserver - please check your connectivity, ensure your <a>homeserver's SSL certificate</a> is trusted, and that a browser extension is not blocking requests.": "Nie można nawiązać połączenia z serwerem - proszę sprawdź twoje połączenie, upewnij się, że <a>certyfikat SSL serwera</a> jest zaufany, i że dodatki przeglądarki nie blokują żądania.",
"Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or <a>enable unsafe scripts</a>.": "Nie można nawiązać połączenia z serwerem przy użyciu HTTP podczas korzystania z HTTPS dla bieżącej strony. Użyj HTTPS lub <a>włącz niebezpieczne skrypty</a>.",
"Can't load user settings": "Nie można załadować ustawień użytkownika",
"Cannot add any more widgets": "Nie można dodać już więcej widżetów",
"%(senderName)s changed their display name from %(oldDisplayName)s to %(displayName)s.": "%(senderName)s zmienił swoją nazwę z %(oldDisplayName)s na %(displayName)s.",
"%(senderName)s changed their profile picture.": "%(senderName)s zmienił swoje zdjęcie profilowe.",
"fo": "Farerski",
"rm": "Retoromański",
"tn": "Tswana",
"%(senderName)s changed the power level of %(powerLevelDiffText)s.": "%(senderName)s zmienił poziom mocy %(powerLevelDiffText)s.",
"%(senderDisplayName)s changed the room name to %(roomName)s.": "%(senderDisplayName)s zmienił nazwę pokoju na %(roomName)s.",
"%(senderDisplayName)s removed the room name.": "%(senderDisplayName)s usunął nazwę pokoju.",
"%(senderDisplayName)s changed the topic to \"%(topic)s\".": "%(senderDisplayName)s zmienił temat na \"%(topic)s\".",
"Changes to who can read history will only apply to future messages in this room": "Zmiany w dostępie do historii będą dotyczyć tylko przyszłych wiadomości w tym pokoju",
"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": "Zażądano odcisk klucza Ed25519",
"Clear Cache and Reload": "Wyczyść pamięć podręczną i przeładuj",
"Clear Cache": "Wyczyść pamięć podręczną",
"<a>Click here</a> to join the discussion!": "<a>Kliknij tutaj</a>, aby dołączyć do dyskusji!",
"Click here to fix": "Kliknij tutaj, aby naprawić",
"Click to mute audio": "Kliknij, aby wyciszyć dźwięk",
"Click to mute video": "Kliknij, aby wyłączyć obraz",
"click to reveal": "kliknij, aby ujawnić",
"Click to unmute video": "Kliknij, aby włączyć obraz",
"Click to unmute audio": "Kliknij, aby włączyć dźwięk",
"Command error": "Błąd polecenia",
"Commands": "Polecenia",
"Conference call failed.": "Połączenie konferencyjne nie powiodło się.",
"Conference calling is in development and may not be reliable.": "Rozmowy konferencyjne są w trakcie opracowywania i mogą nie działać poprawnie.",
"Conference calls are not supported in encrypted rooms": "Połączenia konferencyjne nie są obsługiwane w zaszyfrowanych pokojach",
"Conference calls are not supported in this client": "Połączenia konferencyjne nie są obsługiwane w tym kliencie",
"Could not connect to the integration server": "Nie można połączyć się z serwerem integracji",
"Create a new chat or reuse an existing one": "Utwórz nowy czat lub użyj istniejącego",
"Curve25519 identity key": "Curve25519 klucz tożsamości",
"Custom": "Własny",
"Custom level": "Własny poziom",
"/ddg is not a command": "/ddg nie jest poleceniem",
"Deactivate Account": "Dezaktywuj konto",
"Deactivate my account": "Dezaktywuj moje konto",
"Decline": "Odrzuć",
"Decrypt %(text)s": "Odszyfruj %(text)s",
"Decryption error": "Błąd odszyfrowywania",
"Delete widget": "Usuń widżet",
"demote": "zdegraduj",
"Default": "Domyślny",
"Define the power level of a user": "Zdefiniuj poziom mocy użytkownika",
"Device already verified!": "Urządzenie jest już zweryfikowane!",
"Device ID": "Identyfikator urządzenia",
"Device ID:": "Identyfikator urządzenia:",
"device id: ": "identyfikator urządzenia: ",
"Device key:": "Klucz urządzenia:",
"Devices will not yet be able to decrypt history from before they joined the room": "Urządzenia nie będą mogły odszyfrowywać historii sprzed dołączenia do pokoju",
"Direct chats": "Rozmowy bezpośrednie",
"Disable Notifications": "Wyłącz powiadomienia",
"disabled": "wyłączone",
"Disable inline URL previews by default": "Domyślnie wyłącz podgląd linków",
"Disinvite": "Anuluj zaproszenie",
"Display name": "Wyświetlana nazwa",
"Displays action": "Wyświetlane akcje",
"Do you want to load widget from URL:": "Czy chcesz załadować widżet z adresu:",
"Don't send typing notifications": "Nie wysyłaj powiadomienia o pisaniu",
"Download %(text)s": "Pobrano %(text)s",
"Drop File Here": "Upuść plik tutaj",
"Drop here to tag %(section)s": "Upuść tutaj by oznaczyć %(section)s",
"Ed25519 fingerprint": "Odcisk Ed25519",
"Edit": "Edytuj",
"Email": "E-mail",
"Email address": "Adres e-mail",
"Email address (optional)": "Adres e-mail (opcjonalnie)",
"Email, name or matrix ID": "E-mail, nazwa lub matrix ID",
"Emoji": "Emoji",
"Enable automatic language detection for syntax highlighting": "Włącz automatyczne rozpoznawanie języka dla podświetlania składni",
"Enable encryption": "Włącz szyfrowanie",
"Enable Notifications": "Włącz powiadomienia",
"enabled": "włączone",
"Encrypted by a verified device": "Zaszyfrowane przez zweryfikowane urządzenie",
"Encrypted by an unverified device": "Zaszyfrowane przez niezweryfikowane urządzenie",
"Encrypted messages will not be visible on clients that do not yet implement encryption": "Szyfrowane wiadomości nie są widoczne w programach, które nie implementują szyfrowania",
"Encrypted room": "Pokój szyfrowany",
"Encryption is enabled in this room": "Szyfrowanie jest włączone w tym pokoju",
"Encryption is not enabled in this room": "Szyfrowanie nie jest włączone w tym pokoju",
"%(senderName)s ended the call.": "%(senderName)s zakończył połączenie.",
"End-to-end encryption information": "Informacje o szyfrowaniu końcówka-do-końcówki",
"End-to-end encryption is in beta and may not be reliable": "Szyfrowanie końcówka-do-końcówki jest w fazie beta i może nie być dopracowane",
"Enter Code": "Wpisz kod",
"Enter passphrase": "Wpisz frazę",
"Error decrypting attachment": "Błąd odszyfrowywania załącznika",
"Error: Problem communicating with the given homeserver.": "Błąd: wystąpił problem podczas komunikacji z podanym serwerem.",
"Event information": "Informacje zdarzenia",
"Existing Call": "Istniejące połączenie",
"Export": "Eksport",
"Export E2E room keys": "Eksportuj klucze E2E pokojów",
"Failed to ban user": "Nie udało się zbanować użytkownika",
"Failed to change power level": "Nie udało się zmienić poziomu mocy",
"Failed to delete device": "Nie udało się usunąć urządzenia",
"Failed to fetch avatar URL": "Nie udało się pobrać awatara",
"Failed to join room": "Nie udało się dołączyć do pokoju",
"Failed to kick": "Nie udało się wykopać użytkownika",
"Failed to leave room": "Nie udało się opuścić pokoju",
"Failed to load timeline position": "Nie udało się wczytać pozycji osi czasu",
"Failed to lookup current room": "Nie udało się wyszukać aktualnego pokoju",
"Failed to mute user": "Nie udało się wyciszyć użytkownika",
"Failed to register as guest:": "Nie udało się zarejestrować jako gość:",
"Failed to reject invite": "Nie udało się odrzucić zaproszenia",
"Failed to reject invitation": "Nie udało się odrzucić zaproszenia",
"Failed to save settings": "Nie udało się zapisać ustawień",
"Failed to send email": "Nie udało się wysłać wiadomości e-mail",
"Failed to send request.": "Nie udało się wysłać żądania.",
"Failed to set avatar.": "Nie udało się ustawić awataru.",
"Failed to set display name": "Nie udało się ustawić wyświetlanej nazwy",
"Failed to set up conference call": "Nie udało się ustanowić połączenia konferencyjnego",
"Failed to toggle moderator status": "Nie udało się przełączyć na stan moderatora",
"Failed to unban": "Nie udało się odbanować",
"Failed to upload file": "Nie udało się wgrać pliku",
"Failed to upload profile picture!": "Nie udało się wgrać zdjęcia profilowego!",
"Failed to verify email address: make sure you clicked the link in the email": "Nie udało się zweryfikować adresu e-mail: upewnij się że kliknąłeś w link w e-mailu",
"Failure to create room": "Nie udało się stworzyć pokoju",
"favourite": "ulubiony",
"Favourites": "Ulubione",
"Fill screen": "Wypełnij ekran",
"Filter room members": "Filtruj uczestników pokoju",
"Forget room": "Zapomnij pokój",
"Forgot your password?": "Zapomniałeś hasła?",
"For security, this session has been signed out. Please sign in again.": "Ze względów bezpieczeństwa ta sesja została wylogowana. Zaloguj się jeszcze raz.",
"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.": "Ze względów bezpieczeństwa, wylogowanie skasuje z tej przeglądarki wszystkie klucze szyfrowania końcówka-do-końcówki. Jeśli chcesz móc odszyfrować swoje historie konwersacji z przyszłych sesji Riot-a, proszę wyeksportuj swoje klucze pokojów do bezpiecznego miejsca.",
"Found a bug?": "Znalazłeś błąd?",
"%(userId)s from %(fromPowerLevel)s to %(toPowerLevel)s": "%(userId)s z %(fromPowerLevel)s na %(toPowerLevel)s",
"Guest access is disabled on this Home Server.": "Dostęp dla gości jest wyłączony na tym serwerze.",
"Deops user with given id": "Usuwa prawa administratora użytkownikowi o danym ID",
"Guests cannot join this room even if explicitly invited.": "Goście nie mogą dołączać do tego pokoju, nawet jeśli zostali specjalnie zaproszeni.",
"Hangup": "Rozłącz się",
"Hide avatar and display name changes": "Ukryj zmiany awatarów i nazw ekranowych",
"Hide Text Formatting Toolbar": "Ukryj pasek formatowania tekstu",
"Home": "Strona startowa",
"Homeserver is": "Serwer domowy 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",
"Incoming call from %(name)s": "Połączenie przychodzące od %(name)s",
"Incoming video call from %(name)s": "Przychodzące połączenie wideo od %(name)s",
"Incoming voice call from %(name)s": "Przychodzące połączenie głosowe od %(name)s",
"Incorrect username and/or password.": "Nieprawidłowa nazwa użytkownika i/lub hasło.",
"Incorrect verification code": "Nieprawidłowy kod weryfikujący",
"Integrations Error": "Błąd integracji",
"Interface Language": "Język interfejsu",
"Invalid alias format": "Nieprawidłowy format aliasu",
"Invalid address format": "Nieprawidłowy format adresu",
"Invalid Email Address": "Nieprawidłowy adres e-mail",
"Invalid file%(extra)s": "Nieprawidłowy plik %(extra)s",
"%(senderName)s invited %(targetName)s.": "%(senderName)s zaprosił %(targetName)s.",
"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 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",
"Sign in with": "Zaloguj się używając",
"Join as <voiceText>voice</voiceText> or <videoText>video</videoText>.": "Dołącz <voiceText>głosowo</voiceText> lub przez <videoText>wideo</videoText>.",
"Join Room": "Dołącz do pokoju",
"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 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ć",
"Kicks user with given id": "Wyrzuca użytkownika o danym ID",
"Labs": "Laboratoria",
"Last seen": "Ostatnio widziany",
"Leave room": "Opuść pokój",
"left and rejoined": "wyszedł i ponownie dołączył",
"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 pokojów domeny %(domain)s?",
"Local addresses for this room:": "Lokalne adresy dla tego pokoju:",
"Logged in as:": "Zalogowany jako:",
"Login as guest": "Zaloguj jako gość",
"Logout": "Wyloguj",
"Low priority": "Niski priorytet",
"%(senderName)s made future room history visible to all room members, from the point they are invited.": "%(senderName)s uczynił przyszłą historię pokoju widoczną dla wszyscy członkowie pokoju, od momentu ich zaproszenia.",
"%(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",
"matrix-react-sdk version:": "Wersja matrix-react-sdk:",
"Matrix Apps": "Aplikacje Matrix",
"Members only": "Tylko dla członków",
"Message not sent due to unknown devices being present": "Wiadomość nie została wysłana z powodu obecności nieznanych urządzeń",
"Missing room_id in request": "Brakujące room_id w żądaniu",
"Missing user_id in request": "Brakujące user_id w żądaniu",
"Mobile phone number": "Numer telefonu komórkowego",
"Mobile phone number (optional)": "Numer telefonu komórkowego (opcjonalne)",
"Moderator": "Moderator",
"my Matrix ID": "mój Matrix ID",
"Name": "Imię",
"Never send encrypted messages to unverified devices from this device": "Nigdy nie wysyłaj zaszyfrowanych wiadomości do niezweryfikowanych urządzeń z tego urządzenia",
"Never send encrypted messages to unverified devices in this room": "Nigdy nie wysyłaj zaszyfrowanych wiadomości do niezweryfikowanych urządzeń w tym pokoju",
"Never send encrypted messages to unverified devices in this room from this device": "Nigdy nie wysyłaj niezaszyfrowanych wiadomości do niezweryfikowanych urządzeń z tego urządzenia",
"New address (e.g. #foo:%(localDomain)s)": "Nowy adres (np. #foo:%(localDomain)s)",
"New password": "Nowe hasło",
"New passwords don't match": "Nowe hasła nie zgadzają się",
"New passwords must match each other.": "Nowe hasła muszą się zgadzać.",
"none": "żaden",
"not set": "nieustawiony",
"not specified": "nieokreślony",
"(not supported by this browser)": "(niewspierany przez tę przeglądarkę)",
"<not supported>": "<niewspierany>",
"AM": "AM",
"PM": "PM",
"NOT verified": "NIEzweryfikowany",
"NOTE: Apps are not end-to-end encrypted": "UWAGA: Aplikacje nie są szyfrowane metodą użytkownik-użytkownik",
"No devices with registered encryption keys": "Brak urządzeń z zarejestrowanymi kluczami szyfrującymi",
"No display name": "Brak nazwy ekranowej",
"No more results": "Nie ma więcej wyników",
"No results": "Brak wyników",
"No users have specific privileges in this room": "Żadni użytkownicy w tym pokoju nie mają specyficznych uprawnień",
"olm version:": "wersja olm:",
"Once encryption is enabled for a room it cannot be turned off again (for now)": "Po włączeniu szyfrowania w pokoju nie można go ponownie wyłączyć (póki co)",
"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, <a>click here</a> to send a bug report.": "W przeciwnym razie, <a>kliknij tutaj</a> by wysłać raport o błędzie.",
"had": "był",
"Password": "Hasło",
"Password:": "Hasło:",
"Passwords can't be empty": "Hasła nie mogą być puste",
"People": "Ludzie",
"Permissions": "Uprawnienia",
"Phone": "Telefon",
"%(senderName)s placed a %(callType)s call.": "%(senderName)s rozpoczął połączenie %(callType)s.",
"Please check your email and click on the link it contains. Once this is done, click continue.": "Sprawdź swój e-mail i kliknij link w nim zawarty. Kiedy już to zrobisz, kliknij \"kontynuuj\".",
"Power level must be positive integer.": "Poziom uprawnień musi być liczbą dodatnią.",
"Press <StartChatButton> to start a chat with someone": "Naciśnij <StartChatButton>, by rozpocząć rozmowę z kimś",
"Privacy warning": "Ostrzeżenie o prywatności",
"Private Chat": "Rozmowa prywatna",
"Privileged Users": "Użytkownicy uprzywilejowani",
"Profile": "Profil",
"Public Chat": "Rozmowa publiczna",
"Reason": "Powód",
"Reason: %(reasonText)s": "Powód: %(reasonText)s",
"Revoke Moderator": "Usuń prawa moderatorskie",
"Revoke widget access": "Usuń dostęp do widżetów",
"Refer a friend to Riot:": "Zaproś znajomego do Riota:",
"Register": "Zarejestruj",
"rejected": "odrzucone",
"%(targetName)s rejected the invitation.": "%(targetName)s odrzucił zaproszenie.",
"Reject invitation": "Odrzuć zaproszenie",
"Rejoin": "Dołącz ponownie",
"Remote addresses for this room:": "Adresy zdalne dla tego pokoju:",
"Remove Contact Information?": "Usunąć dane kontaktowe?",
"%(senderName)s removed their display name (%(oldDisplayName)s).": "%(senderName)s usunął swoją nazwę ekranową (%(oldDisplayName)s).",
"%(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ł grupowego połączenia głosowego VoIP.",
"Report it": "Zgłoś",
"restore": "przywróć",
"Results from DuckDuckGo": "Wyniki z DuckDuckGo",
"Return to app": "Wróć do aplikacji",
"Return to login screen": "Wróć do ekranu logowania",
"Riot does not have permission to send you notifications - please check your browser settings": "Riot nie ma uprawnień, by wysyłać ci powiadomienia - sprawdź ustawienia swojej przeglądarki",
"Hide join/leave messages (invites/kicks/bans unaffected)": "Ukryj wiadomości o dołączeniu/opuszczeniu (nie obejmuje zaproszeń/wyrzuceń/banów)",
"Hide read receipts": "Ukryj potwierdzenia odczytu",
"Historical": "Historyczne",
"Resetting password will currently reset any end-to-end encryption keys on all devices, making encrypted chat history unreadable, unless you first export your room keys and re-import them afterwards. In future this will be improved.": "Resetowanie 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.",
"Riot was not given permission to send notifications - please try again": "Riot nie otrzymał uprawnień do wysyłania powiadomień - proszę spróbuj ponownie",
"riot-web version:": "wersja riot-web:",
"Room %(roomId)s not visible": "Pokój %(roomId)s nie jest widoczny",
"Room Colour": "Kolor pokoju",
"Room contains unknown devices": "Pokój zawiera nieznane urządzenia",
"Room name (optional)": "Nazwa pokoju (opcjonalna)",
"%(roomName)s does not exist.": "%(roomName)s nie istnieje.",
"%(roomName)s is not accessible at this time.": "%(roomName)s nie jest dostępny w tym momencie.",
"Rooms": "Pokoje",
"Save": "Zapisz",
"Scroll to bottom of page": "Przewiń do końca strony",
"Scroll to unread messages": "Przewiń do nieprzeczytanych wiadomości",
"Search failed": "Wyszukiwanie nie powiodło się",
"Searches DuckDuckGo for results": "Przeszukaj DuckDuckGo dla wyników",
"Seen by %(userName)s at %(dateTime)s": "Widziane przez %(userName)s o %(dateTime)s",
"Send a message (unencrypted)": "Wyślij wiadomość (nieszyfrowaną)",
"Send an encrypted message": "Wyślij szyfrowaną wiadomość",
"Send anyway": "Wyślij mimo to",
"Sender device information": "Informacja o urządzeniu nadawcy",
"Send Invites": "Wyślij zaproszenie",
"Send Reset Email": "Wyślij e-mail resetujący hasło",
"sent an image": "wysłano obraz",
"%(senderDisplayName)s sent an image.": "%(senderDisplayName)s wysłał obraz.",
"%(senderName)s sent an invitation to %(targetDisplayName)s to join the room.": "%(senderName)s wysłał zaproszenie do %(targetDisplayName)s do dołączenia do pokoju.",
"sent a video": "wysłał wideo",
"Server error": "Błąd serwera",
"Server may be unavailable or overloaded": "Serwer może być niedostępny lub przeciążony",
"Server may be unavailable, overloaded, or search timed out :(": "Serwer może być niedostępny, przeciążony, lub upłynął czas wyszukiwania :(",
"Server may be unavailable, overloaded, or the file too big": "Serwer może być niedostępny, przeciążony, lub plik jest za duży",
"Server may be unavailable, overloaded, or you hit a bug.": "Serwer może być niedostępny, przeciążony, lub trafiłeś na błąd.",
"Server unavailable, overloaded, or something else went wrong.": "Serwer może być niedostępny, przeciążony, lub coś innego poszło źle.",
"Session ID": "Identyfikator sesji",
"%(senderName)s set a profile picture.": "%(senderName)s ustawił zdjęcie profilowe.",
"%(senderName)s set their display name to %(displayName)s.": "%(senderName)s ustawił swoją nazwę na %(displayName)s.",
"Set": "Ustaw",
"Sets the room topic": "Ustaw temat pokoju",
"Show Apps": "Pokaż aplikacje",
"Show panel": "Pokaż panel",
"Show Text Formatting Toolbar": "Pokaż pasek narzędzi formatowania tekstu",
"Show timestamps in 12 hour format (e.g. 2:30pm)": "Pokaż czas w formacie 12-sto godzinnym (n.p. 2:30pm)",
"Signed Out": "Wylogowano",
"Sign in": "Zaloguj",
"Sign out": "Wyloguj",
"since the point in time of selecting this option": "od momentu zaznaczenia tej opcji",
"since they joined": "od momentu dołączenia",
"since they were invited": "od momentu zaproszenia",
"Some of your messages have not been sent.": "Niektóre z twoich wiadomości nie zostały wysłane.",
"Someone": "Ktoś",
"Sorry, this homeserver is using a login which is not recognised ": "Przepraszamy, ten serwer używa loginu który nie jest rozpoznawany ",
"Start a chat": "Rozpocznij rozmowę",
"Start authentication": "Rozpocznij uwierzytelnienie",
"Start Chat": "Rozpocznij rozmowę",
"Submit": "Wyślij",
"Success": "Sukces",
"tag direct chat": "oznaczył bezpośrednią rozmowę",
"Tagged as: ": "Oznaczone jako: ",
"The default role for new room members is": "Domyślną rolą dla nowych członków pokoju jest",
"The main address for this room is": "Głównym adresem dla tego pokoju jest",
"The maximum permitted number of widgets have already been added to this room.": "Do tego pokoju dodano już maksymalną dozwoloną liczbę widżetów.",
"The phone number entered looks invalid": "Wprowadzony numer telefonu wygląda na niepoprawny",
"The signing key you provided matches the signing key you received from %(userId)s's device %(deviceId)s. Device marked as verified.": "Podany klucz podpisu odpowiada kluczowi podpisania otrzymanemu z urządzenia %(userId)s %(deviceId)s. Urządzenie oznaczone jako zweryfikowane.",
"This email address is already in use": "Podany adres e-mail jest już w użyciu",
"This email address was not found": "Podany adres e-mail nie został znaleziony",
"%(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 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",
"This room has no local addresses": "Ten pokój nie ma lokalnych adresów",
"This room is not recognised.": "Ten pokój nie został rozpoznany.",
"These are experimental features that may break in unexpected ways": "Te funkcje są eksperymentalne i może wystąpić błąd",
"The visibility of existing history will be unchanged": "Widoczność dotychczasowej historii nie zostanie zmieniona",
"This doesn't appear to be a valid email address": "Ten adres e-mail zdaje się nie być poprawny",
"This is a preview of this room. Room interactions have been disabled": "To jest podgląd tego pokoju. Interakcje w pokoju zostały wyłączone",
"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": "Wewnętrzne ID tego pokoju to",
"times": "razy",
"To ban users": "Żeby zablokować użytkowników",
"to browse the directory": "żeby przeglądać katalog",
"To configure the room": "Żeby skonfigurować pokój",
"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 usuwać użytkowników",
"to make a room or": "żeby utworzyć pokój lub",
"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ś",
"To send events of type": "Żeby wysyłać wydarzenia typu",
"to tag direct chat": "żeby oznaczyć rozmowę bezpośrednią",
"Turn Markdown off": "Wyłącz Markdown",
"Turn Markdown on": "Włącz Markdown",
"%(senderName)s turned on end-to-end encryption (algorithm %(algorithm)s).": "%(senderName)s włączył szyfrowanie użytkownik-użytkownik (algorithm %(algorithm)s).",
"Unable to add email address": "Nie można dodać adresu e-mail",
"Unable to create widget.": "Nie można utworzyć widżetu.",
"Unable to remove contact information": "Nie można usunąć informacji kontaktowych",
"Unable to verify email address.": "Weryfikacja adresu e-mail nie powiodła się.",
"%(senderName)s unbanned %(targetName)s.": "%(senderName)s odblokował/a %(targetName)s.",
"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": "Odszyfrowanie niemożliwe",
"Unencrypted room": "Pokój nieszyfrowany",
"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ę 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",
"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 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 awatar",
"Upload Failed": "Błąd przesyłania",
"Upload Files": "Prześlij pliki",
"Upload new:": "Prześlij nowy:",
"Use with caution": "Używać ostrożnie",
"%(user)s is a": "%(user)s jest",
"%(userName)s (power %(powerLevelNumber)s)": "%(userName)s (moc uprawnień administratorskich %(powerLevelNumber)s)",
"Username invalid: %(errMessage)s": "Niepoprawna nazwa użytkownika: %(errMessage)s",
"Verification Pending": "Oczekuje weryfikacji",
"Verification": "Weryfikacja",
"verified": "zweryfikowany",
"Verified": "Zweryfikowany",
"Verified key": "Zweryfikowany klucz",
"Video call": "Rozmowa wideo",
"Voice call": "Rozmowa głosowa",
"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 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.",
"Would you like to <acceptText>accept</acceptText> or <declineText>decline</declineText> this invitation?": "Czy chcesz <acceptText>zaakceptować</acceptText> czy <declineText>odrzucić</declineText> to zaproszenie?",
"You already have existing direct chats with this user:": "Masz już istniejącą bezpośrednią konwersację z tym użytkownikiem:",
"You are already in a call.": "Jesteś już w trakcie połączenia.",
"You are not in this room.": "Nie jesteś w tym pokoju.",
"You do not have permission to do that in this room.": "Nie masz pozwolenia na wykonanie tej akcji w tym pokoju.",
"You're not in any rooms yet! Press <CreateRoomButton> to make a room or <RoomDirectoryButton> to browse the directory": "Nie jesteś jeszcze w żadnym pokoju! Naciśnij <CreateRoomButton>, aby stworzyć pokój lub <RoomDirectoryButton>, ż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 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 <a>disabled</a> URL previews by default.": "Masz domyślnie <a>wyłączone</a> 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 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 <a>register</a> to use this functionality": "Musisz się <a>zarejestrować</a> 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 ż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ść?",
"You seem to be uploading files, are you sure you want to quit?": "Wygląda na to, że jesteś w trakcie przesyłania plików; jesteś pewien, że chcesz wyjść?",
"You should not yet trust it to secure data": "Na chwilę obecną nie powinieneś ufać mu w kwestii zabezpieczenia danych",
"Set a display name:": "Ustaw nazwę ekranową:",
"This server does not support authentication with a phone number.": "Ten serwer nie wspiera autentykacji za pomocą numeru telefonu.",
"This doesn't look like a valid email address.": "To nie wygląda na poprawny adres e-mail.",
"This doesn't look like a valid phone number.": "To nie wygląda na poprawny numer telefonu.",
"User names may only contain letters, numbers, dots, hyphens and underscores.": "Nazwa użytkownika może zawierać tylko litery, cyfry, kropki, myślniki i podkreślenia.",
"An unknown error occurred.": "Wystąpił nieznany błąd.",
"I already have an account": "Posiadam już konto",
"Share message history with new users": "Udostępnij historię wiadomości nowym użytkownikom",
"Encrypt room": "Zaszyfruj pokój",
"There are no visible files in this room": "Nie ma widocznych plików w tym pokoju",
"Connectivity to the server has been lost.": "Połączenie z serwerem zostało utracone.",
"bold": "wytłuszczenie",
"italic": "kursywa",
"underline": "podkreślenie",
"code": "kod",
"quote": "cytat",
"Edit Group": "Edytuj grupę",
"Join an existing group": "Dołącz do istniejącej grupy",
"Create a new group": "Stwórz nową grupę",
"Create": "Utwórz",
"Groups": "Grupy",
"Online": "Dostępny",
"Offline": "Niedostępny",
"Add an Integration": "Dodaj integrację",
"Token incorrect": "Niepoprawny token",
"This action is irreversible.": "Ta akcja jest nieodwracalna.",
"To link to a room it must have <a>an address</a>.": "Aby móc stworzyć link do pokoju musi on mieć swój <a>adres</a>.",
"unencrypted": "niezaszyfrowany",
"Unknown (user, device) pair:": "Nieznana para (użytkownik, urządzenie):",
"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.": "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",
"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).",
"An error occurred: %(error_string)s": "Wystąpił błąd: %(error_string)s",
"Make Moderator": "Nadaj uprawnienia moderatora",
"Make this room private": "Nadaj temu pokojowi charakter prywatny",
"Sent messages will be stored until your connection has returned.": "Wysłane wiadomości będą przechowywane aż do momentu odzyskania połączenia.",
"<a>Resend all</a> or <a>cancel all</a> now. You can also select individual messages to resend or cancel.": "<a>Wyślij ponownie wszystkie</a> lub <a>anuluj wszystkie</a> 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 wyników)",
"Active call": "Aktywna rozmowa",
"strike": "przekreślenie",
"bullet": "lista",
"numbullet": "lista numerowana",
"%(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",
"%(severalUsers)shad their invitations withdrawn %(repeats)s times": "%(severalUsers)swycofali swoje zaproszenia %(repeats)s razy",
"%(oneUser)shad their invitation withdrawn %(repeats)s times": "%(oneUser)swycofał swoje zaproszenie %(repeats)s razy",
"%(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ł(a) zaproszony/a %(repeats)s razy",
"were invited": "zostali zaproszeni",
"was invited": "został(a) zaproszony/a",
"were banned %(repeats)s times": "zostali zablokowani %(repeats)s times",
"was banned %(repeats)s times": "został(a) zablokowany/a %(repeats)s razy",
"were banned": "zostali zablokowani",
"was banned": "został(a) zablokowany/a",
"were unbanned %(repeats)s times": "zostali odblokowani %(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)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)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 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 ó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",
"Failed to invite": "Wysłanie zaproszenia nie powiodło się",
"Failed to invite user": "Wysłanie zaproszenia użytkownikowi nie powiodło się",
"Failed to invite the following users to the %(roomName)s room:": "Wysłanie zaproszenia do następujących użytkowników do pokoju %(roomName)s nie powiodło się:",
"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 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 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ś/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.",
"Verifies a user, device, and pubkey tuple": "Weryfikuje użytkownika, urządzenie i krotkę kluczy publicznych",
"\"%(RoomName)s\" contains devices that you haven't seen before.": "\"%(RoomName)s\" zawiera niewidziane przez Ciebie wcześniej urządzenia.",
"ex. @bob:example.com": "np. @jan:example.com",
"This Home Server would like to make sure you are not a robot": "Ten serwer domowy chciałby się upewnić, że nie jesteś robotem",
"Sign in with CAS": "Zaloguj się używając CAS",
"This allows you to use this app with an existing Matrix account on a different home server.": "To umożliwia Ci używanie tej aplikacji wraz z istniejącym kontem Matrix na innym serwerze domowym.",
"Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "Nastąpiła próba załadowania danego punktu w historii tego pokoju, lecz nie masz uprawnień, by zobaczyć określoną wiadomość.",
"Use compact timeline layout": "Użyj kompaktowego stylu linii czasu",
"You have <a>enabled</a> URL previews by default.": "Masz domyślnie <a>włączone</a> podglądy linków.",
"Opt out of analytics": "Zrezygnuj z analityk",
"Please check your email to continue registration.": "Sprawdź swój e-mail, aby kontynuować rejestrację.",
"Please enter the code it contains:": "Wpisz kod, który jest tam zawarty:",
"If you don't specify an email address, you won't be able to reset your password. Are you sure?": "Jeśli nie ustawisz adresu e-mail, nie będzie możliwe zresetowanie Twojego hasła. Kontynuować?",
"You are registering with %(SelectedTeamName)s": "Rejestrujesz się z %(SelectedTeamName)s",
"Custom server": "Serwer niestandardowy",
"Home server URL": "Adres serwera domowego",
"What does this mean?": "Co to znaczy?",
"Error decrypting audio": "Błąd deszyfrowania audio",
"Error decrypting image": "Błąd deszyfrowania obrazu",
"Image '%(Body)s' cannot be displayed.": "Obraz '%(Body)s' nie może zostać wyświetlony.",
"Error decrypting video": "Błąd deszyfrowania wideo",
"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.": "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",
"for %(amount)sh": "%(amount)s godz",
"for %(amount)sd": "%(amount)s dni",
"Idle": "Bezczynny",
"Check for update": "Sprawdź aktualizacje",
"$senderDisplayName changed the room avatar to <img/>": "$senderDisplayName zmienił awatar pokoju na <img/>",
"%(senderDisplayName)s removed the room avatar.": "%(senderDisplayName)s usunął awatar pokoju.",
"%(senderDisplayName)s changed the avatar for %(roomName)s": "%(senderDisplayName)s zmienił awatar %(roomName)s",
"This will be your account name on the <span></span> homeserver, or you can pick a <a>different server</a>.": "To będzie twoja nazwa konta na <span></span> serwerze domowym; możesz też wybrać <a>inny serwer</a>.",
"If you already have a Matrix account you can <a>log in</a> instead.": "Jeśli już posiadasz konto Matrix możesz się <a>zalogować</a>.",
"Not a valid Riot keyfile": "Niepoprawny plik klucza Riot",
"Authentication check failed: incorrect password?": "Próba autentykacji nieudana: nieprawidłowe hasło?",
"Disable Peer-to-Peer for 1:1 calls": "Wyłącz P2P dla połączeń 1:1",
"Do you want to set an email address?": "Czy chcesz ustawić adres e-mail?",
"To return to your account in future you need to set a password": "By móc powrócić do swojego konta w przyszłości musisz ustawić hasło",
"Share without verifying": "Udostępnij bez weryfikacji",
"You added a new device '%(displayName)s', which is requesting encryption keys.": "Dodałeś nowe urządzenie '%(displayName)s', które żąda kluczy szyfrujących.",
"Your unverified device '%(displayName)s' is requesting encryption keys.": "Twoje niezweryfikowane urządzenie '%(displayName)s' żąda kluczy szyfrujących.",
"Encryption key request": "Żądanie klucza szyfrującego",
"Autocomplete Delay (ms):": "Opóźnienie autouzupełniania (ms):",
"This Home server does not support groups": "Ten serwer domowy nie wspiera grup",
"Loading device info...": "Wczytywanie informacji o urządzeniu...",
"Create Group": "Utwórz grupę",
"Group Name": "Nazwa grupy",
"Example": "Przykład",
"Group ID": "ID grupy",
"+example:%(domain)s": "+przyklad:%(domain)s",
"Room creation failed": "Nie udało się utworzyć pokoju",
"You are a member of these groups:": "Jesteś członkiem następujących grup:",
"Drop file here to upload": "Upuść plik tutaj, aby go przesłać",
"Error whilst fetching joined groups": "Błąd podczas pobierania informacji o dołączonych grupach",
"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ę",
"%(count)s new messages|one": "%(count)s nowa wiadomość",
"%(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",
"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 <i>+example:matrix.org</i>.": "Aby dołączyć do istniejącej grupy musisz znać jej identyfikator; wygląda on mniej więcej tak: <i>+example:matrix.org</i>.",
"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 <a>web browser</a>": "Sprawdzanie człowieczeństwa jest obecnie niedostępne na aplikacji klienckiej desktop - proszę użyć <a>przeglądarki internetowej</a>"
}

View File

@ -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",
@ -63,7 +60,6 @@
"Deops user with given id": "Retirar função de moderador do usuário com o identificador informado",
"Device ID": "Identificador do dispositivo",
"Devices will not yet be able to decrypt history from before they joined the room": "Os dispositivos não serão ainda capazes de descriptografar o histórico anterior à sua entrada na sala",
"Direct Chat": "Conversa pessoal",
"Disable inline URL previews by default": "Desabilitar visualizações prévias por padrão",
"Display name": "Nome",
"Displays action": "Visualizar atividades",
@ -99,9 +95,6 @@
"For security, this session has been signed out. Please sign in again.": "Por questões de segurança, esta sessão foi encerrada. Por gentileza conecte-se novamente.",
"Found a bug?": "Encontrou um problema de funcionamento do sistema?",
"Guests cannot join this room even if explicitly invited.": "Visitantes não podem entrar nesta sala, mesmo se forem explicitamente convidadas/os.",
"Guests can't set avatars. Please register.": "Convidados não podem definir uma foto do perfil. Por favor, registre-se.",
"Guests can't use labs features. Please register.": "Convidados não podem usar as funcionalidades de laboratório (lab), por gentileza se registre.",
"Guest users can't upload files. Please register to upload.": "Usuários não podem fazer envio de arquivos. Por favor se cadastre para enviar arquivos.",
"had": "teve",
"Hangup": "Desligar",
"Historical": "Histórico",
@ -130,7 +123,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",
@ -161,7 +153,6 @@
"Phone": "Telefone",
"placed a": "iniciou uma",
"Please check your email and click on the link it contains. Once this is done, click continue.": "Por favor verifique seu email e clique no link enviado. Quando finalizar este processo, clique para continuar.",
"Please Register": "Por favor registe-se",
"Privacy warning": "Alerta sobre privacidade",
"Privileged Users": "Usuárias/os privilegiadas/os",
"Profile": "Perfil",
@ -243,7 +234,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 +301,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.",
@ -335,22 +324,23 @@
"Failed to verify email address: make sure you clicked the link in the email": "Não foi possível verificar o endereço de email: verifique se você realmente clicou no link que está no seu email",
"Failure to create room": "Não foi possível criar a sala",
"%(userId)s from %(fromPowerLevel)s to %(toPowerLevel)s": "%(userId)s de %(fromPowerLevel)s para %(toPowerLevel)s",
"Guest users can't create new rooms. Please register to create room and start a chat.": "Visitantes não podem criar novas salas. Por favor, registre-se para criar uma sala e iniciar uma conversa.",
"%(senderName)s invited %(targetName)s.": "%(senderName)s convidou %(targetName)s.",
"%(displayName)s is typing": "%(displayName)s está escrevendo",
"%(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",
"New Composer & Autocomplete": "Nova ferramenta de formatação de mensagens e autocompletar",
"(not supported by this browser)": "(não é compatível com este navegador)",
"olm version": "versão olm",
"%(senderName)s placed a %(callType)s call.": "%(senderName)s fez uma chamada de %(callType)s.",
"Power level must be positive integer.": "O nível de permissões tem que ser um número inteiro e positivo.",
"Press": "Aperte",
"Reason": "Razão",
"%(targetName)s rejected the invitation.": "%(targetName)s recusou o convite.",
"%(senderName)s removed their display name (%(oldDisplayName)s).": "%(senderName)s removeu o seu nome público (%(oldDisplayName)s).",
@ -363,7 +353,6 @@
"%(senderName)s sent an invitation to %(targetDisplayName)s to join the room.": "%(senderName)s enviou um convite para %(targetDisplayName)s entrar na sala.",
"%(senderName)s set a profile picture.": "%(senderName)s definiu uma imagem de perfil.",
"%(senderName)s set their display name to %(displayName)s.": "%(senderName)s definiu seu nome público para %(displayName)s.",
"tag as %(tagName)s": "marcar como %(tagName)s",
"This email address is already in use": "Este endereço de email já está sendo usado",
"This email address was not found": "Este endereço de email não foi encontrado",
"The file '%(fileName)s' exceeds this home server's size limit for uploads": "O arquivo '%(fileName)s' ultrapassa o limite de tamanho que nosso servidor permite enviar",
@ -379,11 +368,9 @@
"To remove other users' messages": "Para apagar mensagens de outras pessoas",
"to restore": "para restaurar",
"to start a chat with someone": "para iniciar uma conversa com alguém",
"to tag as %(tagName)s": "para marcar como %(tagName)s",
"to tag direct chat": "para marcar a conversa como pessoal",
"To use it, just wait for autocomplete results to load and tab through them.": "Para usar esta funcionalidade, espere o carregamento dos resultados de autocompletar e então escolha entre as opções.",
"%(senderName)s turned on end-to-end encryption (algorithm %(algorithm)s).": "%(senderName)s ativou criptografia ponta a ponta (algoritmo %(algorithm)s).",
"Unable to restore previous session": "Não foi possível restaurar a sessão anterior",
"%(senderName)s unbanned %(targetName)s.": "%(senderName)s desfez o banimento de %(targetName)s.",
"Unable to capture screen": "Não foi possível capturar a imagem da tela",
"Unable to enable Notifications": "Não foi possível ativar as notificações",
@ -421,7 +408,6 @@
"Riot was unable to find the correct Data for the selected Language.": "Não foi possível encontrar os dados para o idioma selecionado.",
"Connectivity to the server has been lost.": "A conexão com o servidor foi perdida. Verifique sua conexão de internet.",
"Sent messages will be stored until your connection has returned.": "Imagens enviadas ficarão armazenadas até que sua conexão seja reestabelecida.",
"Auto-complete": "Autocompletar",
"Resend all": "Reenviar todas as mensagens",
"cancel all": "cancelar todas",
"now. You can also select individual messages to resend or cancel.": "agora. Você também pode escolher mensagens individuais e definir se vai reenviar ou cancelar o envio.",
@ -431,7 +417,6 @@
"ar-eg": "Árabe (Egito)",
"ar-tn": "Árabe (Tunísia)",
"Failed to forget room %(errCode)s": "Falha ao esquecer a sala %(errCode)s",
"Failed to join the room": "Falha ao entrar na sala",
"Tuesday": "Terça-feira",
"Wednesday": "Quarta-feira",
"Thursday": "Quinta-feira",
@ -514,7 +499,6 @@
"Some of your messages have not been sent.": "Algumas das suas mensagens não foram enviadas.",
"Submit": "Enviar",
"The main address for this room is": "O endereço principal desta sala é",
"This action cannot be performed by a guest user. Please register to be able to do this.": "Esta ação não pode ser realizada por um/a usuário/a visitante. Por favor, registre-se para poder fazer isso.",
"%(actionVerb)s this person?": "%(actionVerb)s esta pessoa?",
"This room has no local addresses": "Esta sala não tem endereços locais",
"Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "Tentei carregar um ponto específico na linha do tempo desta sala, mas parece que você não tem permissões para ver a mensagem em questão.",
@ -623,7 +607,6 @@
"You must join the room to see its files": "Você precisa ingressar na sala para ver seus arquivos",
"Reject all %(invitedRooms)s invites": "Rejeitar todos os %(invitedRooms)s convites",
"Start new chat": "Iniciar nova conversa",
"Guest users can't invite users. Please register.": "Visitantes não podem convidar usuárias(os) registradas(os). Favor registrar.",
"Failed to invite": "Falha ao enviar o convite",
"Failed to invite user": "Falha ao convidar a(o) usuária(o)",
"Failed to invite the following users to the %(roomName)s room:": "Falha ao convidar as(os) seguintes usuárias(os) para a sala %(roomName)s:",
@ -645,7 +628,6 @@
"Unable to restore session": "Não foi possível restaurar a sessão",
"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.": "Se você já usou antes uma versão mais recente do Riot, a sua sessão pode ser incompatível com esta versão. Feche esta janela e tente abrir com a versão mais recente.",
"Continue anyway": "Continuar de qualquer maneira",
"Your display name is how you'll appear to others when you speak in rooms. What would you like it to be?": "O seu nome público é como você aparecerá para as outras pessoas quando conversar nas salas. Qual nome público você deseja ter?",
"You are currently blacklisting unverified devices; to send messages to these devices you must verify them.": "Você está atualmente bloqueando dispositivos não verificados. Para enviar mensagens para estes dispositivos, você necessita antes verificá-los.",
"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.": "Nós recomendamos que você passe pelo processo de verificação para cada dispositivo para confirmar que eles pertencem às pessoas que efetivamente são suas donas, mas você pode reenviar a mensagem sem verificar isso, se assim o desejar.",
"\"%(RoomName)s\" contains devices that you haven't seen before.": "\"%(RoomName)s\" contém dispositivos que você não viu antes.",
@ -712,7 +694,6 @@
"Results from DuckDuckGo": "Resultados de DuckDuckGo",
"The signing key you provided matches the signing key you received from %(userId)s's device %(deviceId)s. Device marked as verified.": "A chave de assinatura que você forneceu é a mesma que a chave de assinatura que você recebeu do dispositivo %(deviceId)s de %(userId)s . O dispositivo foi portanto marcado como verificado.",
"This Home Server does not support login using email address.": "Este Servidor de Base não permite login usando endereço de e-mail.",
"There was a problem logging in.": "Houve um problema ao fazer login.",
"Unknown (user, device) pair:": "Par usuária(o)-dispositivo desconhecido:",
"Unrecognised command:": "Comando não reconhecido:",
"Unrecognised room alias:": "Apelido de sala não reconhecido:",
@ -720,7 +701,6 @@
"Verified key": "Chave verificada",
"WARNING: Device already verified, but keys do NOT MATCH!": "ATENÇÃO: O dispositivo já foi verificado, mas as chaves NÃO SÃO IGUAIS!",
"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!": "ATENÇÃO: VERIFICAÇÃO DE CHAVE FALHOU! A chave de assinatura para a(o) usuária(o) %(userId)s e dispositivo %(deviceId)s é \"%(fprint)s\", que não é igual à chave fornecida \"%(fingerprint)s\". Isso pode significar que suas comunicações estão sendo interceptadas!",
"Set a Display Name": "Definir seu nome público",
"for %(amount)ss": "por %(amount)ss",
"for %(amount)sm": "por %(amount)sm",
"for %(amount)sh": "por %(amount)sh",
@ -759,13 +739,11 @@
"This room": "Esta sala",
"Create new room": "Criar nova sala",
"Click on the button below to start chatting!": "Clique no botão abaixo para começar a conversar!",
"Disable markdown formatting": "Desabilitar formatação MarkDown",
"No display name": "Sem nome público de usuária(o)",
"This will be your account name on the <span></span> homeserver, or you can pick a <a>different server</a>.": "Este será seu nome de conta no Servidor de Base <span></span>, ou então você pode escolher um <a>servidor diferente</a>.",
"Uploading %(filename)s and %(count)s others|one": "Enviando o arquivo %(filename)s e %(count)s outros arquivos",
"Hide removed messages": "Ocultar mensagens removidas",
"You may wish to login with a different account, or add this email to this account.": "Você pode querer fazer login com uma conta diferente, ou adicionar este e-mail a esta conta.",
"Welcome page": "Página de boas-vindas",
"Upload new:": "Enviar novo:",
"Private Chat": "Conversa privada",
"You must <a>register</a> to use this functionality": "Você deve <a>se registrar</a> para poder usar esta funcionalidade",
@ -774,7 +752,7 @@
"Public Chat": "Conversa pública",
"Uploading %(filename)s and %(count)s others|zero": "Enviando o arquivo %(filename)s",
"Room contains unknown devices": "Esta sala contém dispositivos desconhecidos",
"Admin tools": "Ferramentas de administração",
"Admin Tools": "Ferramentas de administração",
"You have been kicked from %(roomName)s by %(userName)s.": "Você foi removido(a) da sala %(roomName)s por %(userName)s.",
"Undecryptable": "Não é possível descriptografar",
"Incoming video call from %(name)s": "Chamada de vídeo de %(name)s recebida",
@ -782,7 +760,6 @@
"To link to a room it must have <a>an address</a>.": "Para produzir um link para uma sala, ela necessita ter <a>um endereço</a>.",
"a room": "uma sala",
"Your home server does not support device management.": "O seu Servidor de Base não suporta o gerenciamento de dispositivos.",
"Searching known users": "Buscando pessoas conhecidas",
"Alias (optional)": "Apelido (opcional)",
"Active call (%(roomName)s)": "Chamada ativa (%(roomName)s)",
"Unable to ascertain that the address this invite was sent to matches one associated with your account.": "Não foi possível garantir que o endereço para o qual este convite foi enviado bate com alqum que está associado com sua conta.",

View File

@ -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",
@ -63,7 +60,6 @@
"Deops user with given id": "Retirar função de moderador do usuário com o identificador informado",
"Device ID": "Identificador do dispositivo",
"Devices will not yet be able to decrypt history from before they joined the room": "Os dispositivos não serão ainda capazes de descriptografar o histórico anterior à sua entrada na sala",
"Direct Chat": "Conversa pessoal",
"Disable inline URL previews by default": "Desabilitar visualizações prévias por padrão",
"Display name": "Nome",
"Displays action": "Visualizar atividades",
@ -99,9 +95,6 @@
"For security, this session has been signed out. Please sign in again.": "Por questões de segurança, esta sessão foi encerrada. Por gentileza conecte-se novamente.",
"Found a bug?": "Encontrou um problema de funcionamento do sistema?",
"Guests cannot join this room even if explicitly invited.": "Visitantes não podem entrar nesta sala, mesmo se forem explicitamente convidadas/os.",
"Guests can't set avatars. Please register.": "Convidados não podem definir uma foto do perfil. Por favor, registre-se.",
"Guests can't use labs features. Please register.": "Convidados não podem usar as funcionalidades de laboratório (lab), por gentileza se registre.",
"Guest users can't upload files. Please register to upload.": "Usuários não podem fazer envio de arquivos. Por favor se cadastre para enviar arquivos.",
"had": "teve",
"Hangup": "Desligar",
"Historical": "Histórico",
@ -130,7 +123,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",
@ -161,7 +153,6 @@
"Phone": "Telefone",
"placed a": "iniciou uma",
"Please check your email and click on the link it contains. Once this is done, click continue.": "Por favor verifique seu email e clique no link enviado. Quando finalizar este processo, clique para continuar.",
"Please Register": "Por favor, cadastre-se",
"Privacy warning": "Alerta sobre privacidade",
"Privileged Users": "Usuárias/os privilegiadas/os",
"Profile": "Perfil",
@ -243,7 +234,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 +295,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.",
@ -335,22 +322,23 @@
"Failed to verify email address: make sure you clicked the link in the email": "Não foi possível verificar o endereço de email: verifique se você realmente clicou no link que está no seu email",
"Failure to create room": "Não foi possível criar a sala",
"%(userId)s from %(fromPowerLevel)s to %(toPowerLevel)s": "%(userId)s de %(fromPowerLevel)s para %(toPowerLevel)s",
"Guest users can't create new rooms. Please register to create room and start a chat.": "Visitantes não podem criar novas salas. Por favor, registre-se para criar uma sala e iniciar uma conversa.",
"%(senderName)s invited %(targetName)s.": "%(senderName)s convidou %(targetName)s.",
"%(displayName)s is typing": "%(displayName)s está escrevendo",
"%(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",
"New Composer & Autocomplete": "Nova ferramenta de formatação de mensagens e autocompletar",
"(not supported by this browser)": "(não é compatível com este navegador)",
"olm version": "versão olm",
"%(senderName)s placed a %(callType)s call.": "%(senderName)s fez uma chamada de %(callType)s.",
"Power level must be positive integer.": "O nível de permissões tem que ser um número inteiro e positivo.",
"Press": "Aperte",
"Press <StartChatButton> to start a chat with someone": "Clique em <StartChatButton> para iniciar a conversa com alguém",
"Reason": "Razão",
"%(targetName)s rejected the invitation.": "%(targetName)s recusou o convite.",
@ -364,7 +352,6 @@
"%(senderName)s sent an invitation to %(targetDisplayName)s to join the room.": "%(senderName)s enviou um convite para %(targetDisplayName)s entrar na sala.",
"%(senderName)s set a profile picture.": "%(senderName)s definiu uma imagem de perfil.",
"%(senderName)s set their display name to %(displayName)s.": "%(senderName)s definiu seu nome público para %(displayName)s.",
"tag as %(tagName)s": "marcar como %(tagName)s",
"This email address is already in use": "Este endereço de email já está sendo usado",
"This email address was not found": "Este endereço de email não foi encontrado",
"The file '%(fileName)s' exceeds this home server's size limit for uploads": "O arquivo '%(fileName)s' ultrapassa o limite de tamanho que nosso servidor permite enviar",
@ -380,11 +367,9 @@
"To remove other users' messages": "Para apagar mensagens de outras pessoas",
"to restore": "para restaurar",
"to start a chat with someone": "para iniciar uma conversa com alguém",
"to tag as %(tagName)s": "para marcar como %(tagName)s",
"to tag direct chat": "para marcar a conversa como pessoal",
"To use it, just wait for autocomplete results to load and tab through them.": "Para usar esta funcionalidade, espere o carregamento dos resultados de autocompletar e então escolha entre as opções.",
"%(senderName)s turned on end-to-end encryption (algorithm %(algorithm)s).": "%(senderName)s ativou criptografia ponta a ponta (algoritmo %(algorithm)s).",
"Unable to restore previous session": "Não foi possível restaurar a sessão anterior",
"%(senderName)s unbanned %(targetName)s.": "%(senderName)s desfez o banimento de %(targetName)s.",
"Unable to capture screen": "Não foi possível capturar a imagem da tela",
"Unable to enable Notifications": "Não foi possível ativar as notificações",
@ -424,13 +409,11 @@
"Riot was unable to find the correct Data for the selected Language.": "Não foi possível encontrar os dados para o idioma selecionado.",
"Connectivity to the server has been lost.": "A conexão com o servidor foi perdida. Verifique sua conexão de internet.",
"Sent messages will be stored until your connection has returned.": "Imagens enviadas ficarão armazenadas até que sua conexão seja reestabelecida.",
"Auto-complete": "Autocompletar",
"Resend all": "Reenviar todas as mensagens",
"cancel all": "cancelar todas",
"now. You can also select individual messages to resend or cancel.": "agora. Você também pode escolher mensagens individuais e definir se vai reenviar ou cancelar o envio.",
"Active call": "Chamada ativa",
"Failed to forget room %(errCode)s": "Falhou ao esquecer a sala %(errCode)s",
"Failed to join the room": "Falhou ao entrar na sala",
"Tuesday": "Terça",
"Wednesday": "Quarta",
"Thursday": "Quinta",
@ -513,7 +496,6 @@
"Some of your messages have not been sent.": "Algumas das suas mensagens não foram enviadas.",
"Submit": "Enviar",
"The main address for this room is": "O endereço principal desta sala é",
"This action cannot be performed by a guest user. Please register to be able to do this.": "Esta ação não pode ser realizada por um/a usuário/a visitante. Por favor, registre-se para poder fazer isso.",
"%(actionVerb)s this person?": "%(actionVerb)s esta pessoa?",
"This room has no local addresses": "Esta sala não tem endereços locais",
"Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "Tentei carregar um ponto específico na linha do tempo desta sala, mas parece que você não tem permissões para ver a mensagem em questão.",
@ -622,7 +604,6 @@
"You must join the room to see its files": "Você precisa ingressar na sala para ver seus arquivos",
"Reject all %(invitedRooms)s invites": "Rejeitar todos os %(invitedRooms)s convites",
"Start new chat": "Iniciar nova conversa",
"Guest users can't invite users. Please register.": "Visitantes não podem convidar usuárias(os) registradas(os). Favor registrar.",
"Failed to invite": "Falha ao enviar o convite",
"Failed to invite user": "Falha ao convidar a(o) usuária(o)",
"Failed to invite the following users to the %(roomName)s room:": "Falha ao convidar as(os) seguintes usuárias(os) para a sala %(roomName)s:",
@ -644,7 +625,6 @@
"Unable to restore session": "Não foi possível restaurar a sessão",
"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.": "Se você já usou antes uma versão mais recente do Riot, a sua sessão pode ser incompatível com esta versão. Feche esta janela e tente abrir com a versão mais recente.",
"Continue anyway": "Continuar de qualquer maneira",
"Your display name is how you'll appear to others when you speak in rooms. What would you like it to be?": "O seu nome público é como você aparecerá para as outras pessoas quando conversar nas salas. Qual nome público você deseja ter?",
"You are currently blacklisting unverified devices; to send messages to these devices you must verify them.": "Você está atualmente bloqueando dispositivos não verificados. Para enviar mensagens para estes dispositivos, você necessita antes verificá-los.",
"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.": "Nós recomendamos que você passe pelo processo de verificação para cada dispositivo para confirmar que eles pertencem às pessoas que efetivamente são suas donas, mas você pode reenviar a mensagem sem verificar isso, se assim o desejar.",
"\"%(RoomName)s\" contains devices that you haven't seen before.": "\"%(RoomName)s\" contém dispositivos que você não viu antes.",
@ -711,7 +691,6 @@
"Results from DuckDuckGo": "Resultados de DuckDuckGo",
"The signing key you provided matches the signing key you received from %(userId)s's device %(deviceId)s. Device marked as verified.": "A chave de assinatura que você forneceu é a mesma que a chave de assinatura que você recebeu do dispositivo %(deviceId)s de %(userId)s . O dispositivo foi portanto marcado como verificado.",
"This Home Server does not support login using email address.": "Este Servidor de Base não permite login usando endereço de e-mail.",
"There was a problem logging in.": "Houve um problema ao fazer login.",
"Unknown (user, device) pair:": "Par usuária(o)-dispositivo desconhecido:",
"Unrecognised command:": "Comando não reconhecido:",
"Unrecognised room alias:": "Apelido de sala não reconhecido:",
@ -719,7 +698,6 @@
"Verified key": "Chave verificada",
"WARNING: Device already verified, but keys do NOT MATCH!": "ATENÇÃO: O dispositivo já foi verificado, mas as chaves NÃO SÃO IGUAIS!",
"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!": "ATENÇÃO: VERIFICAÇÃO DE CHAVE FALHOU! A chave de assinatura para a(o) usuária(o) %(userId)s e dispositivo %(deviceId)s é \"%(fprint)s\", que não é igual à chave fornecida \"%(fingerprint)s\". Isso pode significar que suas comunicações estão sendo interceptadas!",
"Set a Display Name": "Definir seu nome público",
"for %(amount)ss": "por %(amount)ss",
"for %(amount)sm": "por %(amount)sm",
"for %(amount)sh": "por %(amount)sh",
@ -757,7 +735,6 @@
"Add": "Adicionar",
"%(count)s new messages|one": "%(count)s nova mensagem",
"%(count)s new messages|other": "%(count)s novas mensagens",
"Disable markdown formatting": "Desabilitar formatação MarkDown",
"Error: Problem communicating with the given homeserver.": "Erro: problema de comunicação com o Servidor de Base fornecido.",
"Failed to fetch avatar URL": "Falha ao obter a URL da imagem de perfil",
"Home": "Início",
@ -766,11 +743,9 @@
"Uploading %(filename)s and %(count)s others|one": "Enviando o arquivo %(filename)s e %(count)s outros arquivos",
"Uploading %(filename)s and %(count)s others|other": "Enviando o arquivo %(filename)s e %(count)s outros arquivos",
"Username invalid: %(errMessage)s": "Nome de usuária(o) inválido: %(errMessage)s",
"Searching known users": "Buscando pessoas conhecidas",
"You must <a>register</a> to use this functionality": "Você deve <a>se registrar</a> para poder usar esta funcionalidade",
"<a>Resend all</a> or <a>cancel all</a> now. You can also select individual messages to resend or cancel.": "<a>Reenviar todas</a> ou <a>cancelar todas</a> agora. Você também pode selecionar mensagens individuais que queira reenviar ou cancelar.",
"Create new room": "Criar nova sala",
"Welcome page": "Página de boas vindas",
"Room directory": "Lista pública de salas",
"Start chat": "Iniciar conversa pessoal",
"New Password": "Nova senha",
@ -787,7 +762,7 @@
"a room": "uma sala",
"Accept": "Aceitar",
"Active call (%(roomName)s)": "Chamada ativa (%(roomName)s)",
"Admin tools": "Ferramentas de administração",
"Admin Tools": "Ferramentas de administração",
"And %(count)s more...": "E mais %(count)s...",
"Alias (optional)": "Apelido (opcional)",
"Can't connect to homeserver - please check your connectivity, ensure your <a>homeserver's SSL certificate</a> is trusted, and that a browser extension is not blocking requests.": "Não foi possível conectar ao Servidor de Base. Por favor, confira sua conectividade à internet, garanta que o <a>certificado SSL do Servidor de Base</a> é confiável, e que uma extensão do navegador não esteja bloqueando as requisições de rede.",

View File

@ -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?": "Вы уверены что вы хотите отклонить приглашение?",
@ -59,7 +55,6 @@
"Deops user with given id": "Снимает полномочия оператора с пользователя с заданным ID",
"Device ID": "ID устройства",
"Devices will not yet be able to decrypt history from before they joined the room": "Устройства пока не могут дешифровать историю до их входа в комнату",
"Direct Chat": "Прямой чат",
"Disable inline URL previews by default": "Отключить предпросмотр URL-адресов по умолчанию",
"Display name": "Отображаемое имя",
"Displays action": "Отображение действий",
@ -118,7 +113,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": "Номер мобильного телефона",
@ -145,7 +139,6 @@
"Permissions": "Разрешения",
"Phone": "Телефон",
"placed a": "placed a",
"Please Register": "Пожалуйста, зарегистрируйтесь",
"rejected the invitation.": "rejected the invitation.",
"removed their display name": "removed their display name",
"removed their profile picture": "removed their profile picture",
@ -173,7 +166,6 @@
"unencrypted": "без шифрования",
"unknown device": "неизвестное устройство",
"unknown error code": "неизвестный код ошибки",
"unknown": "неизвестный",
"Upload avatar": "Загрузить аватар",
"uploaded a file": "отправил(а) файл",
"Upload Files": "Отправка файлов",
@ -242,21 +234,22 @@
"Failed to verify email address: make sure you clicked the link in the email": "Не удалось проверить адрес электронной почты: убедитесь, что вы перешли по ссылке в письме",
"Failure to create room": "Не удалось создать комнату",
"%(userId)s from %(fromPowerLevel)s to %(toPowerLevel)s": "%(userId)s с %(fromPowerLevel)s на %(toPowerLevel)s",
"Guest users can't create new rooms. Please register to create room and start a chat.": "Гости не могут создавать новые комнаты. Зарегистрируйтесь, чтобы создать комнату и начать чат.",
"click to reveal": "нажмите для открытия",
"%(senderName)s invited %(targetName)s.": "%(senderName)s приглашает %(targetName)s.",
"%(displayName)s is typing": "%(displayName)s печатает",
"%(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": "Необходимо посмотреть комнату",
"New Composer & Autocomplete": "Новый текстовый редактор и автозаполнение",
"(not supported by this browser)": "(не поддерживается этим браузером)",
"now. You can also select individual messages to resend or cancel.": "теперь. Вы можете также выбрать отдельные сообщения, чтобы снова послать или отменить.",
"Auto-complete": "Автозаполнение",
"Error changing language": "Ошибка изменения языка",
"Riot was unable to find the correct Data for the selected Language.": "Riot был неспособен найти правельные данные для выбранного языка.",
"Connectivity to the server has been lost.": "Связь с сервером потеряна.",
@ -319,7 +312,6 @@
"to tag direct chat": "отметить прямой чат",
"To use it, just wait for autocomplete results to load and tab through them.": "Для того, чтобы использовать эту функцию, просто подождите автозаполнения результатов, а затем используйте клавишу TAB для прокрутки.",
"%(senderName)s turned on end-to-end encryption (algorithm %(algorithm)s).": "%(senderName)s включено сквозное шифрование (algorithm %(algorithm)s).",
"Unable to restore previous session": "Не удалось восстановить предыдущий сеанс",
"%(senderName)s unbanned %(targetName)s.": "%(senderName)s разблокировал(а) %(targetName)s.",
"Unable to capture screen": "Не удается сделать снимок экрана",
"Unable to enable Notifications": "Не удалось включить уведомления",
@ -351,7 +343,6 @@
"Failed to delete device": "Не удалось удалить устройство",
"Failed to forget room %(errCode)s": "Не удалось удалить комнату %(errCode)s",
"Failed to join room": "Не удалось войти в комнату",
"Failed to join the room": "Не удалось войти в комнату",
"Access Token:": "Токен доступа:",
"Always show message timestamps": "Всегда показывать временные метки сообщений",
"Authentication": "Аутентификация",
@ -375,7 +366,6 @@
"Failed to set display name": "Не удалось задать отображаемое имя",
"Failed to toggle moderator status": "Не удалось изменить статус модератора",
"Fill screen": "Заполнить экран",
"Guest users can't upload files. Please register to upload.": "Гости не могут отправлять файлы. Зарегистрируйтесь для отправки.",
"Hide read receipts": "Скрыть отметки о прочтении",
"Hide Text Formatting Toolbar": "Скрыть панель форматирования текста",
"Incorrect verification code": "Неверный код подтверждения",
@ -405,7 +395,6 @@
"%(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.": "Проверьте свою электронную почту и нажмите на содержащуюся ссылку. После этого нажмите кнопку Продолжить.",
"Power level must be positive integer.": "Уровень авторизации должен быть положительным целым числом.",
"Press": "Нажать",
"Profile": "Профиль",
"Reason": "Причина",
"rejected": "отклонено",
@ -447,11 +436,9 @@
"Someone": "Кто-то",
"Submit": "Отправить",
"Success": "Успех",
"tag as %(tagName)s": "пометить как %(tagName)s",
"tag direct chat": "Тег прямого чата",
"The default role for new room members is": "Роль по умолчанию для новых участников комнаты",
"The main address for this room is": "Основной адрес для этой комнаты",
"This action cannot be performed by a guest user. Please register to be able to do this.": "Это действие не может быть выполнено гостем. Пожалуйста, зарегистрируйтесь, чтобы получить возможность сделать то что вы хотите.",
"This email address is already in use": "Этот адрес электронной почты уже используется",
"This email address was not found": "Этот адрес электронной почты не найден",
"The email address linked to your account must be entered.": "Необходимо ввести адрес электронной почты, связанный с вашей учетной записью.",
@ -550,8 +537,6 @@
"VoIP": "VoIP",
"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.": "Для обеспечения безопасности при выходе будут удалены все ключи сквозного шифрования из этого браузера. Если вы хотите иметь возможность расшифровать историю сообщений в будущем, необходимо экспортировать ключи комнат вручную.",
"Guest access is disabled on this Home Server.": "Гостевой доступ отключен на этом сервере.",
"Guests can't set avatars. Please register.": "Гости не могут устанавливать аватары. Пожалуйста, зарегистрируйтесь.",
"Guests can't use labs features. Please register.": "Гости не могут использовать экспериментальные возможности. Пожалуйста, зарегистрируйтесь.",
"Guests cannot join this room even if explicitly invited.": "Гости не могут войти в эту комнату, даже если они приглашены.",
"Missing Media Permissions, click here to request.": "Отсутствуют разрешения, нажмите для запроса.",
"No media permissions": "Нет разрешенных носителей",
@ -566,7 +551,6 @@
"device id: ": "ID устройства: ",
"Device key:": "Ключ устройства:",
"disabled": "отключено",
"Disable markdown formatting": "Отключить Markdown-форматирование",
"Email address": "Адрес электронной почты",
"Email address (optional)": "Адрес электронной почты (необязательно)",
"enabled": "включено",
@ -609,7 +593,6 @@
"%(actionVerb)s this person?": "%(actionVerb)s этот человек?",
"The file '%(fileName)s' exceeds this home server's size limit for uploads": "Файл '%(fileName)s' превышает предельный размер, допустимый к отправке на этом домашнем сервере",
"This Home Server does not support login using email address.": "Этот домашний сервер не поддерживает авторизацию с использованием адреса электронной почты.",
"There was a problem logging in.": "Возникла проблема при авторизации.",
"The visibility of existing history will be unchanged": "Видимость существующей истории не изменится",
"this invitation?": "это приглашение?",
"This room is not accessible by remote Matrix servers": "Это комната недоступна с удаленных серверов Matrix",
@ -623,7 +606,6 @@
"to make a room or": "чтобы создать комнату или",
"To remove other users' messages": "Чтобы удалить сообщения других пользователей",
"To reset your password, enter the email address linked to your account": "Чтобы сбросить пароль, введите адрес электронной почты, связанный с вашей учетной записью",
"to tag as %(tagName)s": "пометить как %(tagName)s",
"Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "Попытка загрузить выбранный интервал истории чата этой комнаты не удалась, так как у вас нет разрешений на просмотр.",
"Tried to load a specific point in this room's timeline, but was unable to find it.": "Попытка загрузить выбранный интервал истории чата этой комнаты не удалась, так как запрошенный элемент не найден.",
"Unable to load device list": "Не удалось загрузить список устройств",
@ -640,7 +622,6 @@
"You need to enter a user name.": "Необходимо ввести имя пользователя.",
"You seem to be in a call, are you sure you want to quit?": "Звонок не завершен, вы уверены, что хотите выйти?",
"You will not be able to undo this change as you are promoting the user to have the same power level as yourself.": "Вы не сможете отменить это изменение, так как этот пользователь получит уровень доступа, аналогичный вашему.",
"Set a Display Name": "Указать отображаемое имя",
"(~%(searchCount)s results)": "(~%(searchCount)s результатов)",
"%(severalUsers)shad their invitations withdrawn %(repeats)s times": "%(severalUsers)s отозвали свои приглашения %(repeats)s раз",
"%(oneUser)shad their invitation withdrawn %(repeats)s times": "%(oneUser)s отозвал свои приглашения %(repeats)s раз",
@ -662,7 +643,6 @@
"You must join the room to see its files": "Вы должны войти в комнату, чтобы просмотреть файлы",
"Reject all %(invitedRooms)s invites": "Отклонить все %(invitedRooms)s приглашения",
"Start new chat": "Начать новый чат",
"Guest users can't invite users. Please register.": "Гости не могут приглашать пользователей. Пожалуйста, зарегистрируйтесь.",
"Failed to invite": "Пригласить не удалось",
"Failed to invite user": "Не удалось пригласить пользователя",
"Failed to invite the following users to the %(roomName)s room:": "Не удалось пригласить следующих пользователей в %(roomName)s:",
@ -684,7 +664,6 @@
"Unable to restore session": "Восстановление сессии не удалось",
"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.": "Если вы использовали более новую версию Riot, то ваша сессия может быть несовместима с текущей. Закройте это окно и вернитесь к использованию более новой версии.",
"Continue anyway": "Все равно продолжить",
"Your display name is how you'll appear to others when you speak in rooms. What would you like it to be?": "Отображаемое имя - это то, как вы отображаетесь в чате. Какое имя вы хотите?",
"You are currently blacklisting unverified devices; to send messages to these devices you must verify them.": "У вас включено занесение непроверенных устройств в черный список. Для отправки сообщений на эти устройства вам необходимо их проверить.",
"We recommend you go through the verification process for each device to confirm they belong to their legitimate owner, but you can resend the message without verifying if you prefer.": "Мы рекомендуем вам выполнить процедуру проверки каждого устройства, чтобы удостовериться, что они принадлежат их законному владельцу, но вы можете переотправить сообщение без проверки, если хотите.",
"\"%(RoomName)s\" contains devices that you haven't seen before.": "\"%(RoomName)s\" содержит неподтвержденные устройства.",
@ -740,7 +719,6 @@
"Create new room": "Создать новую комнату",
"Room directory": "Каталог комнат",
"Start chat": "Начать чат",
"Welcome page": "Страница приветствия",
"Add": "Добавить",
"%(count)s new messages|one": "%(count)s новое сообщение",
"%(count)s new messages|other": "%(count)s новых сообщений",
@ -751,7 +729,6 @@
"Uploading %(filename)s and %(count)s others|one": "Отправка %(filename)s и %(count)s другой",
"Uploading %(filename)s and %(count)s others|other": "Отправка %(filename)s и %(count)s других",
"Username invalid: %(errMessage)s": "Неверное имя пользователя: %(errMessage)s",
"Searching known users": "Поиск известных пользователей",
"You must <a>register</a> to use this functionality": "Вы должны <a>зарегистрироваться</a>, чтобы использовать эту функцию",
"<a>Resend all</a> or <a>cancel all</a> now. You can also select individual messages to resend or cancel.": "<a>Отправить все</a> или <a>отменить отправку</a>. Также можно выбрать отдельные сообщения для повторной отправки или отмены.",
"New Password": "Новый пароль",
@ -769,7 +746,7 @@
"a room": "комната",
"Accept": "Принять",
"Active call (%(roomName)s)": "Активный вызов (%(roomName)s)",
"Admin tools": "Инструменты администратора",
"Admin Tools": "Инструменты администратора",
"And %(count)s more...": "И %(count)s больше...",
"Alias (optional)": "Псевдоним (опционально)",
"<a>Click here</a> to join the discussion!": "<a>Нажмите здесь</a>, чтобы присоединиться к обсуждению!",
@ -891,7 +868,7 @@
"You are a member of these groups:": "Вы являетесь членом этих групп:",
"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.": "Создайте группу для представления своего сообщества! Определите набор комнат и собственную домашнюю страницу, чтобы выделить свое пространство во вселенной Matrix.",
"Join an existing group": "Присоединиться к существующей группе",
"To join an existing group you'll have to know its group identifier; this will look something like <i>+example:matrix.org</i>.": "Чтобы присоединиться к группе, вам нужно знать ее идентификатор; он выглядит примерно так:<i>+пример:matrix.org</i>.",
"To join an existing group you'll have to know its group identifier; this will look something like <i>+example:matrix.org</i>.": "Чтобы присоединиться к группе, вам нужно знать ее идентификатор; он выглядит примерно так:<i>+example:matrix.org</i>.",
"Featured Rooms:": "Рекомендуемые комнаты:",
"Error whilst fetching joined groups": "Ошибка при извлечении объединенных групп",
"Featured Users:": "Избранные пользователи:",
@ -904,5 +881,9 @@
"%(widgetName)s widget removed by %(senderName)s": "%(widgetName)s виджет, удаленный %(senderName)s",
"Robot check is currently unavailable on desktop - please use a <a>web browser</a>": "Проверка робота в настоящее время недоступна на компьютере - пожалуйста, используйте <a>браузер</a>",
"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": "Не удалось скопировать"
}

View File

@ -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.",
@ -112,7 +108,6 @@
"Device key:": "Enhetsnyckel:",
"Devices": "Enheter",
"Devices will not yet be able to decrypt history from before they joined the room": "Enheter kan inte ännu dekryptera meddelandehistorik från före de gick med i rummet",
"Direct Chat": "Direkt-chatt",
"Direct chats": "Direkta chattar",
"disabled": "avstängd",
"Disable inline URL previews by default": "Stäng av inline-URL-förhandsvisningar som standard",
@ -149,7 +144,6 @@
"Failed to delete device": "Det gick inte att radera enhet",
"Failed to forget room %(errCode)s": "Det gick inte att glömma bort rummet %(errCode)s",
"Failed to join room": "Det gick inte att gå med i rummet",
"Failed to join the room": "Det gick inte att gå med i rummet",
"Failed to kick": "Det gick inte att kicka",
"Failed to leave room": "Det gick inte att lämna rummet",
"Failed to load timeline position": "Det gick inte att hämta positionen på tidslinjen",
@ -175,7 +169,7 @@
"Access Token:": "Åtkomsttoken:",
"Active call (%(roomName)s)": "Aktiv samtal (%(roomName)s)",
"Add": "Lägg till",
"Admin tools": "Admin verktyg",
"Admin Tools": "Admin verktyg",
"And %(count)s more...": "Och %(count)s till...",
"Alias (optional)": "Alias (valfri)",
"Can't connect to homeserver - please check your connectivity, ensure your <a>homeserver's SSL certificate</a> is trusted, and that a browser extension is not blocking requests.": "Det gick inte att ansluta till servern - kontrollera anslutningen, försäkra att din <a>hemservers TLS-certifikat</a> är betrott, och att inget webbläsartillägg blockerar förfrågningar.",
@ -188,7 +182,6 @@
"Custom": "Egen",
"Decline": "Avvisa",
"Disable Notifications": "Slå av aviseringar",
"Disable markdown formatting": "Slå av Markdown-formattering",
"Drop File Here": "Dra filen hit",
"Enable Notifications": "Slå på aviseringar",
"Encrypted by a verified device": "Krypterat av en verifierad enhet",
@ -210,10 +203,6 @@
"Found a bug?": "Hittade du en bugg?",
"%(userId)s from %(fromPowerLevel)s to %(toPowerLevel)s": "%(userId)s från %(fromPowerLevel)s till %(toPowerLevel)s",
"Guest access is disabled on this Home Server.": "Gäståtkomst är inte aktiverat på den här hemservern.",
"Guests can't set avatars. Please register.": "Gäster kan inte välja en profilbild. Vänligen registrera dig.",
"Guest users can't create new rooms. Please register to create room and start a chat.": "Gäster kan inte skapa nya rum. Vänligen registrera dig för att skapa rum och starta chattar.",
"Guest users can't upload files. Please register to upload.": "Gäster kan inte ladda upp filer. Vänligen registrera dig för att ladda upp.",
"Guests can't use labs features. Please register.": "Gäster kan inte använda labb-egenskaper. Vänligen registrera dig.",
"Guests cannot join this room even if explicitly invited.": "Gäster kan inte gå med i det här rummet fastän de är uttryckligen inbjudna.",
"had": "hade",
"Hangup": "Lägg på",
@ -267,7 +256,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",
@ -287,7 +279,6 @@
"Never send encrypted messages to unverified devices in this room": "Skicka aldrig krypterade meddelanden till overifierade enheter i det här rummet",
"Never send encrypted messages to unverified devices in this room from this device": "Skicka aldrig krypterade meddelanden till overifierade enheter i det här rummet från den här enheten",
"New address (e.g. #foo:%(localDomain)s)": "Ny address (t.ex. #foo:%(localDomain)s)",
"New Composer & Autocomplete": "Ny redigerare och autoslutförande",
"New password": "Nytt lösenord",
"New passwords don't match": "De nya lösenorden matchar inte",
"New passwords must match each other.": "De nya lösenorden måste vara de samma.",
@ -318,9 +309,7 @@
"Phone": "Telefon",
"%(senderName)s placed a %(callType)s call.": "%(senderName)s startade ett %(callType)ssamtal.",
"Please check your email and click on the link it contains. Once this is done, click continue.": "Öppna meddelandet i din epost och klicka på länken i meddelandet. När du har gjort detta, klicka vidare.",
"Please Register": "Registrera dig",
"Power level must be positive integer.": "Maktnivån måste vara ett positivt heltal.",
"Press": "Tryck",
"Press <StartChatButton> to start a chat with someone": "Tryck på <StartChatButton> för att starta en chatt med någon",
"Privacy warning": "Integritetsvarning",
"Private Chat": "Privatchatt",
@ -365,7 +354,6 @@
"Search": "Sök",
"Search failed": "Sökning misslyckades",
"Searches DuckDuckGo for results": "Söker efter resultat på DuckDuckGo",
"Searching known users": "Söker genom kända användare",
"Seen by %(userName)s at %(dateTime)s": "Sedd av %(userName)s %(dateTime)s",
"Send a message (unencrypted)": "Skicka ett meddelande (okrypterat)",
"Send an encrypted message": "Skicka ett krypterad meddelande",
@ -375,7 +363,7 @@
"Send Reset Email": "Skicka återställningsmeddelande",
"sent an image": "skickade en bild",
"%(senderDisplayName)s sent an image.": "%(senderDisplayName)s skickade en bild.",
"%(senderName)s sent an invitation to %(targetDisplayName)s to join the room.": "%(senderName)s bjöd in %(targetDIsplayName)s med i rummet.",
"%(senderName)s sent an invitation to %(targetDisplayName)s to join the room.": "%(senderName)s bjöd in %(targetDisplayName)s med i rummet.",
"sent a video": "skickade en video",
"Server error": "Serverfel",
"Server may be unavailable or overloaded": "Servern kan vara otillgänglig eller överbelastad",
@ -418,7 +406,6 @@
"Thursday": "torsdag",
"Friday": "fredag",
"Saturday": "lördag",
"Welcome page": "Välkomstsida",
"Add a widget": "Lägg till en widget",
"Allow": "Tillåt",
"Cannot add any more widgets": "Det går inte att lägga till fler widgets",

View File

@ -11,7 +11,7 @@
"Add email address": "ఇమెయిల్ చిరునామాను జోడించండి",
"Add phone number": "ఫోన్ నంబర్ను జోడించండి",
"Admin": "అడ్మిన్",
"Admin tools": "నిర్వాహక ఉపకరణాలు",
"Admin Tools": "నిర్వాహక ఉపకరణాలు",
"VoIP": "విఒఐపి",
"Missing Media Permissions, click here to request.": "మీడియా అనుమతులు మిస్ అయయి, అభ్యర్థించడానికి ఇక్కడ క్లిక్ చేయండి.",
"No Microphones detected": "మైక్రోఫోన్లు కనుగొనబడలేదు",
@ -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": "అతిథులు కాకుండా గది యొక్క లింక్ తెలిసిన వారు ఎవరైనా",
@ -127,7 +123,6 @@
"Sat": "శనివారం",
"Jan": "జనవరి",
"Feb": "ఫిబ్రవరి",
"Disable markdown formatting": "మార్క్డౌన్ ఆకృతీకరణని ఆపివేయి",
"Markdown is disabled": "మార్క్డౌన్ నిలిపివేయబడింది",
"Markdown is enabled": "మార్క్డౌన్ ప్రారంభించబడింది",
"Turn Markdown off": "మార్క్డౌన్ ఆఫ్ చెయ్యి",
@ -152,7 +147,6 @@
"%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s": "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s",
"%(weekDayName)s %(time)s": "%(weekDayName)s %(time)s",
"Set a display name:": "ప్రదర్శన పేరుని సెట్ చేయండి:",
"Set a Display Name": "ప్రదర్శన పేరుని సెట్ చేయండి",
"Upload avatar": "అవతార్ను అప్లోడ్ చేయండి",
"Upload an avatar:": "అవతార్ను అప్లోడ్ చేయండి:",
"This server does not support authentication with a phone number.": "ఈ సర్వర్ ఫోన్ నంబర్తో ప్రామాణీకరణకు మద్దతు ఇవ్వదు.",
@ -173,7 +167,6 @@
"There are no visible files in this room": "ఈ గదిలో కనిపించే ఫైల్లు లేవు",
"Connectivity to the server has been lost.": "సెర్వెర్ కనెక్టివిటీని కోల్పోయారు.",
"Sent messages will be stored until your connection has returned.": "మీ కనెక్షన్ తిరిగి వచ్చే వరకు పంపిన సందేశాలు నిల్వ చేయబడతాయి.",
"Auto-complete": "ఆటో-పూర్తి",
"Cancel": "రద్దు",
"<a>Resend all</a> or <a>cancel all</a> now. You can also select individual messages to resend or cancel.": "<a>అన్నీ మళ్లీ పంపు</a>లేదా<a>అన్నింటినీ రద్దు చేయండి</a>ప్పుడు.వ్యక్తిగత సందేశాలను మీరు మళ్ళీ చేసుకోవచ్చు లేదా రద్దు చేసుకోవచ్చు.",
"Monday": "సోమవారం",
@ -199,23 +192,19 @@
"Return to app": "అనువర్తనానికి తిరిగి వెళ్ళు",
"restore": "పునరుద్దరించండి",
"to restore": "పునరుద్ధరించడానికి",
"Unable to restore previous session": "మునుపటి సెషన్ను పునరుద్ధరించడానికి సాధ్యపడలేదు",
"Unable to restore session": "సెషన్ను పునరుద్ధరించడానికి సాధ్యపడలేదు",
"Report it": "దానిని నివేదించండి",
"Remove": "తొలగించు",
"Room directory": "గది వివరము",
"Create new room": "క్రొత్త గది సృష్టించండి",
"Custom Server Options": "మలచిన సేవిక ఎంపికలు",
"Direct Chat": "ప్రత్యక్ష మాటామంతి",
"Dismiss": "రద్దుచేసే",
"Drop here %(toAction)s": "ఇక్కడ వదలండి %(toAction)s",
"Error": "లోపం",
"Failed to join the room": "గదిలో చేరడం విఫలమైంది",
"Favourite": "గుర్తుంచు",
"Mute": "నిశబ్ధము",
"Notifications": "ప్రకటనలు",
"Operation failed": "కార్యం విఫలమైంది",
"Search": "శోధన",
"Settings": "అమరికలు",
"Welcome page": "స్వాగత పేజీ"
"Settings": "అమరికలు"
}

View File

@ -21,7 +21,6 @@
"Device ID:": "ID อุปกรณ์:",
"device id: ": "id อุปกรณ์: ",
"Devices": "อุปกรณ์",
"Direct Chat": "แชทโดยตรง",
"Download %(text)s": "ดาวน์โหลด %(text)s",
"Emoji": "อีโมจิ",
"Enable encryption": "เปิดใช้งานการเข้ารหัส",
@ -40,7 +39,6 @@
"OK": "ตกลง",
"Password": "รหัสผ่าน",
"Password:": "รหัสผ่าน:",
"Please Register": "กรุณาลงทะเบียน",
"Profile": "โปรไฟล์",
"Reason": "เหตุผล",
"Register": "ลงทะเบียน",
@ -67,7 +65,6 @@
"Report it": "รายงานเลย",
"Remove": "ลบ",
"Custom Server Options": "กำหนดเซิร์ฟเวอร์เอง",
"Failed to join the room": "การเข้าร่วมห้องล้มเหลว",
"Drop here %(toAction)s": "ปล่อยที่นี่%(toAction)s",
"Favourite": "รายการโปรด",
"Failed to forget room %(errCode)s": "การลืมห้องล้มเหลว %(errCode)s",
@ -82,9 +79,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 +89,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": "ทุกคนที่มีลิงก์ ยกเว้นแขก",
@ -294,7 +287,6 @@
"Start Chat": "เริ่มแชท",
"Submit": "ส่ง",
"Success": "สำเร็จ",
"tag as %(tagName)s": "แท็กว่า %(tagName)s",
"tag direct chat": "แท็กว่าแชทตรง",
"Tagged as: ": "แท็กไว้ว่า: ",
"The main address for this room is": "ที่อยู่หลักของห้องนี้คือ",
@ -303,7 +295,6 @@
"%(actionVerb)s this person?": "%(actionVerb)s บุคคลนี้?",
"The file '%(fileName)s' failed to upload": "การอัปโหลดไฟล์ '%(fileName)s' ล้มเหลว",
"This Home Server does not support login using email address.": "เซิร์ฟเวอร์บ้านนี้ไม่รองรับการลงชื่อเข้าใช้ด้วยที่อยู่อีเมล",
"There was a problem logging in.": "มีปัญหาในการลงชื่อเข้าใช้",
"this invitation?": "คำเชิญนี้?",
"This is a preview of this room. Room interactions have been disabled": "นี่คือตัวอย่างของห้อง การตอบสนองภายในห้องถูกปิดใช้งาน",
"This phone number is already in use": "หมายเลขโทรศัพท์นี้ถูกใช้งานแล้ว",
@ -316,12 +307,10 @@
"Create new room": "สร้างห้องใหม่",
"Room directory": "ไดเรกทอรีห้อง",
"Start chat": "เริ่มแชท",
"Welcome page": "หน้าต้อนรับ",
"Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or <a>enable unsafe scripts</a>.": "ไม่สามารถเชื่อมต่อไปยังเซิร์ฟเวอร์บ้านผ่านทาง HTTP ได้เนื่องจาก URL ที่อยู่บนเบราว์เซอร์เป็น HTTPS กรุณาใช้ HTTPS หรือ<a>เปิดใช้งานสคริปต์ที่ไม่ปลอดภัย</a>.",
"%(count)s new messages|one": "มี %(count)s ข้อความใหม่",
"%(count)s new messages|other": "มี %(count)s ข้อความใหม่",
"Disable inline URL previews by default": "ตั้งค่าเริ่มต้นให้ไม่แสดงตัวอย่าง URL ในแชท",
"Disable markdown formatting": "ปิดใช้งานการจัดรูปแบบ markdown",
"End-to-end encryption information": "ข้อมูลการเข้ารหัสจากปลายทางถึงปลายทาง",
"End-to-end encryption is in beta and may not be reliable": "การเข้ารหัสจากปลายทางถึงปลายทางยังอยู่ในเบต้า และอาจพึ่งพาไม่ได้",
"Error: Problem communicating with the given homeserver.": "ข้อผิดพลาด: มีปัญหาในการติดต่อกับเซิร์ฟเวอร์บ้านที่กำหนด",
@ -336,7 +325,6 @@
"The file '%(fileName)s' exceeds this home server's size limit for uploads": "ไฟล์ '%(fileName)s' มีขนาดใหญ่เกินจำกัดของเซิร์ฟเวอร์บ้าน",
"To send messages": "เพื่อส่งข้อความ",
"to start a chat with someone": "เพื่อเริ่มแชทกับผู้อื่น",
"to tag as %(tagName)s": "เพื่อแท็กว่า %(tagName)s",
"to tag direct chat": "เพื่อแทกว่าแชทตรง",
"Turn Markdown off": "ปิด markdown",
"Turn Markdown on": "เปิด markdown",
@ -353,7 +341,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",
@ -406,7 +393,6 @@
"%(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:": "ตั้งชื่อที่แสดง:",
"Set a Display Name": "ตั้งชื่อที่แสดง",
"Passwords don't match.": "รหัสผ่านไม่ตรงกัน",
"Password too short (min %(MIN_PASSWORD_LENGTH)s).": "รหัสผ่านสั้นเกินไป (ขึ้นต่ำ %(MIN_PASSWORD_LENGTH)s ตัวอักษร)",
"An unknown error occurred.": "เกิดข้อผิดพลาดที่ไม่รู้จัก",
@ -490,7 +476,6 @@
"Drop File Here": "วางไฟล์ที่นี่",
"Enable Notifications": "เปิดใฃ้งานการแจ้งเตือน",
"Level:": "ระดับ:",
"Press": "คลิก",
"Press <StartChatButton> to start a chat with someone": "คลิก <StartChatButton> เพื่อเริ่มแชทกับผู้อื่น",
"Private Chat": "แชทส่วนตัว",
"Public Chat": "แชทสาธารณะ",

View File

@ -12,7 +12,7 @@
"Add email address": "E-posta adresi ekle",
"Add phone number": "Telefon numarası ekle",
"Admin": "Admin",
"Admin tools": "Admin araçları",
"Admin Tools": "Admin araçları",
"And %(count)s more...": "Ve %(count)s fazlası...",
"VoIP": "VoIP",
"Missing Media Permissions, click here to request.": "Medya İzinleri Yok , talep etmek için burayı tıklayın.",
@ -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",
@ -124,12 +120,10 @@
"Device key:": "Cihaz anahtarı:",
"Devices": "Cihazlar",
"Devices will not yet be able to decrypt history from before they joined the room": "Cihazlar odaya girdiğinden önceki geçmişin şifresini çözemez",
"Direct Chat": "Doğrudan Sohbet",
"Direct chats": "Doğrudan Sohbetler",
"Disable Notifications": "Bildirimleri Devre Dışı Bırak",
"disabled": "Devre Dışı Bırakıldı",
"Disable inline URL previews by default": "Satır için URL önizlemelerini varsayılan olarak devre dışı bırak",
"Disable markdown formatting": "Markdown formatlamayı devre dışı bırak",
"Disinvite": "Daveti İptal Et",
"Display name": "Görünür İsim",
"Displays action": "Görünür eylem",
@ -172,7 +166,6 @@
"Failed to fetch avatar URL": "Avatar URL'i alınamadı",
"Failed to forget room %(errCode)s": "Oda unutulması başarısız oldu %(errCode)s",
"Failed to join room": "Odaya girme hatası",
"Failed to join the room": "Odaya girme başarısız oldu",
"Failed to kick": "Atma(Kick) işlemi başarısız oldu",
"Failed to leave room": "Odadan ayrılma başarısız oldu",
"Failed to load timeline position": "Zaman çizelgesi konumu yüklenemedi",
@ -205,10 +198,6 @@
"Found a bug?": "Hata buldunuz mu ?",
"%(userId)s from %(fromPowerLevel)s to %(toPowerLevel)s": "%(userId)s %(fromPowerLevel)s den %(toPowerLevel)s ' ye",
"Guest access is disabled on this Home Server.": "Misafir erişimi bu Ana Sunucu için devre dışı.",
"Guests can't set avatars. Please register.": "Misafirler Avatarlarını ayarlayamazlar . Lütfen kayıt olun.",
"Guest users can't create new rooms. Please register to create room and start a chat.": "Misafir kullanıcılar yeni oda oluşturamazlar. Yeni oda oluşturmak ve sohbet başlatmak için lütfen kayıt olun.",
"Guest users can't upload files. Please register to upload.": "Misafir kullanıcılar dosya yükleyemezler . Lütfen yüklemek için kayıt olun.",
"Guests can't use labs features. Please register.": "Misafirler laboratuar özelliklerini kullanamazlar . Lütfen kayıt olun.",
"Guests cannot join this room even if explicitly invited.": "Misafirler açıkca davet edilseler bile bu odaya katılamazlar.",
"had": "vardı",
"Hangup": "Sorun",
@ -262,7 +251,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",
@ -282,7 +275,6 @@
"Never send encrypted messages to unverified devices in this room": "Bu odada doğrulanmamış cihazlara asla şifreli mesajlar göndermeyin",
"Never send encrypted messages to unverified devices in this room from this device": "Bu odada bu cihazdan doğrulanmamış cihazlara asla şifrelenmiş mesajlar göndermeyin",
"New address (e.g. #foo:%(localDomain)s)": "Yeni adres (e.g. #foo:%(localDomain)s)",
"New Composer & Autocomplete": "Yeni Besteci & Otomatik Tamamlama",
"New password": "Yeni Şifre",
"New passwords don't match": "Yeni şifreler uyuşmuyor",
"New passwords must match each other.": "Yeni şifreler birbirleriyle eşleşmelidir.",
@ -313,9 +305,7 @@
"Phone": "Telefon",
"%(senderName)s placed a %(callType)s call.": "%(senderName)s bir %(callType)s çağrısı yerleştirdi.",
"Please check your email and click on the link it contains. Once this is done, click continue.": "Lütfen e-postanızı kontrol edin ve içerdiği bağlantıya tıklayın . Bu işlem tamamlandıktan sonra , 'devam et' e tıklayın .",
"Please Register": "Lütfen Kaydolun",
"Power level must be positive integer.": "Güç seviyesi pozitif tamsayı olmalıdır.",
"Press": "Basın",
"Press <StartChatButton> to start a chat with someone": "Birisiyle sohbet başlatmak için <StartChatButton> tuşuna basın",
"Privacy warning": "Gizlilik uyarısı",
"Private Chat": "Özel Sohbet",
@ -360,7 +350,6 @@
"Search": "Ara",
"Search failed": "Arama başarısız",
"Searches DuckDuckGo for results": "Sonuçlar için DuckDuckGo'yu arar",
"Searching known users": "Bilinen kullanıcıları arama",
"Seen by %(userName)s at %(dateTime)s": "%(dateTime)s ' de %(userName)s tarafından görüldü",
"Send a message (unencrypted)": "Bir mesaj gönder (Şifrelenmemiş)",
"Send an encrypted message": "Şifrelenmiş bir mesaj gönder",
@ -400,14 +389,12 @@
"Start Chat": "Sohbet Başlat",
"Submit": "Gönder",
"Success": "Başarı",
"tag as %(tagName)s": "%(tagName)s olarak etiketle",
"tag direct chat": "Doğrudan sohbeti etiketle",
"Tagged as: ": "Olarak etiketlendi : ",
"The default role for new room members is": "Yeni oda üyelerinin varsayılan rolü",
"The main address for this room is": "Bu oda için ana adres",
"The phone number entered looks invalid": "Girilen telefon numarası geçersiz görünüyor",
"The signing key you provided matches the signing key you received from %(userId)s's device %(deviceId)s. Device marked as verified.": "Sağladığınız imza anahtarı %(userId)s aygıtından %(deviceId)s ile eşleşiyor . Aygıt doğrulanmış olarak işaretlendi.",
"This action cannot be performed by a guest user. Please register to be able to do this.": "Bu eylem bir Misafir Kullanıcı tarafından yapılamaz . Lütfen bunu yapabilmek için Kaydolun .",
"This email address is already in use": "Bu e-posta adresi zaten kullanımda",
"This email address was not found": "Bu e-posta adresi bulunamadı",
"%(actionVerb)s this person?": "Bu kişi %(actionVerb)s yapılsın mı ?",
@ -417,7 +404,6 @@
"The remote side failed to pick up": "Uzak taraf toplanamadı(alınamadı)",
"This Home Server does not support login using email address.": "Bu Ana Sunucu E-posta adresi kullanarak giriş yapmayı desteklemiyor.",
"This invitation was sent to an email address which is not associated with this account:": "Bu davet bu hesapla ilişkili olmayan bir e-posta adresine gönderildi :",
"There was a problem logging in.": "Oturum açarken bir sorun oluştu.",
"This room has no local addresses": "Bu oda hiçbir yerel adrese sahip değil",
"This room is not recognised.": "Bu oda tanınmıyor.",
"These are experimental features that may break in unexpected ways": "Bunlar beklenmedik yollarla bozulabilecek deneysel özellikler",
@ -444,7 +430,6 @@
"To send events of type": "Tip olayını göndermek için",
"To send messages": "Mesaj göndermek için",
"to start a chat with someone": "birisiyle sohbet başlatmak için",
"to tag as %(tagName)s": "%(tagName)s olarak etiketlemek için",
"to tag direct chat": "doğrudan sohbeti etiketlemek için",
"To use it, just wait for autocomplete results to load and tab through them.": "Kullanmak için , otomatik tamamlama sonuçlarının yüklenmesini ve bitmesini bekleyin.",
"Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "Bu odanın zaman çizelgesinde belirli bir nokta yüklemeye çalışıldı , ama geçerli mesajı görüntülemeye izniniz yok.",
@ -454,7 +439,6 @@
"%(senderName)s turned on end-to-end encryption (algorithm %(algorithm)s).": "%(senderName)s uçtanuca şifrelemeyi açtı (algoritma -> %(algorithm)s).",
"Unable to add email address": "E-posta adresi eklenemiyor",
"Unable to remove contact information": "Kişi bilgileri kaldırılamıyor",
"Unable to restore previous session": "Önceki oturumlar geri yüklenemiyor",
"Unable to verify email address.": "E-posta adresi doğrulanamıyor.",
"Unban": "Yasağı Kaldır",
"%(senderName)s unbanned %(targetName)s.": "%(senderName)s %(targetName)s 'in yasağını kaldırdı.",
@ -471,7 +455,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 :",
@ -573,7 +556,6 @@
"%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s": "Hafta - %(weekDayName)s , %(day)s -%(monthName)s -%(fullYear)s , %(time)s",
"%(weekDayName)s %(time)s": "%(weekDayName)s %(time)s",
"Set a display name:": "Görünür isim ayarla :",
"Set a Display Name": "Görünür bir isim Ayarla",
"Upload an avatar:": "Bir Avatar yükle :",
"This server does not support authentication with a phone number.": "Bu sunucu bir telefon numarası ile kimlik doğrulamayı desteklemez.",
"Missing password.": "Şifre eksik.",
@ -594,7 +576,6 @@
"Room": "Oda",
"Connectivity to the server has been lost.": "Sunucuyla olan bağlantı kesildi.",
"Sent messages will be stored until your connection has returned.": "Gönderilen iletiler bağlantınız geri gelene kadar saklanacak.",
"Auto-complete": "Otomatik tamamlama",
"<a>Resend all</a> or <a>cancel all</a> now. You can also select individual messages to resend or cancel.": "<a> Hepsini yeniden gönderin </a> veya <a> Hepsini iptal edin </a> şimdi . Ayrıca yeniden göndermek veya iptal etmek için özel iletiler seçebilirsin.",
"(~%(count)s results)|one": "(~%(count)s sonuç)",
"(~%(count)s results)|other": "(~%(count)s sonuçlar)",
@ -666,7 +647,6 @@
"%(oneUser)schanged their avatar": "%(oneUser)s Avatarını değiştirdi",
"Please select the destination room for this message": "Bu ileti için lütfen hedef oda seçin",
"Create new room": "Yeni Oda Oluştur",
"Welcome page": "Karşılama sayfası",
"Room directory": "Oda Rehberi",
"Start chat": "Sohbet Başlat",
"New Password": "Yeni Şifre",
@ -689,7 +669,6 @@
"You must join the room to see its files": "Dosyalarını görmek için odaya katılmalısınız",
"Reject all %(invitedRooms)s invites": "Tüm %(invitedRooms)s davetlerini reddet",
"Start new chat": "Yeni sohbet başlat",
"Guest users can't invite users. Please register.": "Misafir Kullanıcılar kullanıcıları davet edemez . Lütfen kaydolun .",
"Failed to invite": "Davet edilemedi",
"Failed to invite user": "Kullanıcı davet edilemedi",
"Failed to invite the following users to the %(roomName)s room:": "Aşağıdaki kullanıcılar %(roomName)s odasına davet edilemedi :",
@ -712,7 +691,6 @@
"Unable to restore session": "Oturum geri yüklenemiyor",
"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.": "Eğer daha önce Riot'un daha yeni bir versiyonunu kullandıysanız , oturumunuz bu sürümle uyumsuz olabilir . Bu pencereyi kapatın ve daha yeni sürüme geri dönün.",
"Continue anyway": "Her halükarda devam et",
"Your display name is how you'll appear to others when you speak in rooms. What would you like it to be?": "Görünür isminiz , odalarda konuşurken başkalarına nasıl görüneceğinizdir . İsminizin ne olmasını istersiniz ?",
"You are currently blacklisting unverified devices; to send messages to these devices you must verify them.": "Şu anda doğrulanmamış cihazları kara listeye alıyorsunuz , bu cihazlara mesaj göndermek için onları doğrulamanız gerekir.",
"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.": "Her cihazın yasal sahiplerine ait olduklarını doğrulamak için doğrulama işlemini gerçekleştirmenizi öneririz, ancak tercih edip onaylamadan iletiyi tekrar gönderebilirsiniz.",
"\"%(RoomName)s\" contains devices that you haven't seen before.": "\"%(RoomName)s\" daha önce görmediğiniz cihazları içeriyor.",

View File

@ -3,17 +3,14 @@
"Close": "Закрити",
"Create new room": "Створити нову кімнату",
"Custom Server Options": "Нетипові параметри сервера",
"Direct Chat": "Прямий чат",
"Dismiss": "Відхилити",
"Drop here %(toAction)s": "Кидайте сюди %(toAction)s",
"Error": "Помилка",
"Failed to forget room %(errCode)s": "Не вдалось забути кімнату %(errCode)s",
"Failed to join the room": "Не вдалося приєднатись до кімнати",
"Favourite": "Вибране",
"Mute": "Стишити",
"Notifications": "Сповіщення",
"Operation failed": "Не вдалося виконати дію",
"Please Register": "Зареєструйтеся, будь ласка",
"powered by Matrix": "працює на Matrix",
"Remove": "Прибрати",
"Room directory": "Каталог кімнат",
@ -29,7 +26,6 @@
"Friday": "П'ятниця",
"Saturday": "Субота",
"OK": "Гаразд",
"Welcome page": "Ласкаво просимо",
"Failed to change password. Is your password correct?": "Не вдалось змінити пароль. Ви впевнені, що пароль введено правильно?",
"Continue": "Продовжити",
"a room": "кімната",
@ -45,7 +41,7 @@
"Add email address": "Додати адресу е-пошти",
"Add phone number": "Додати номер телефону",
"Admin": "Адміністратор",
"Admin tools": "Засоби адміністрування",
"Admin Tools": "Засоби адміністрування",
"And %(count)s more...": "І %(count)s більше...",
"VoIP": "VoIP",
"Missing Media Permissions, click here to request.": "Відсутні дозволи, натисніть для запиту.",
@ -65,9 +61,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 і ще один інший",

View File

@ -14,7 +14,6 @@
"Device ID": "设备识别码",
"Devices": "设备列表",
"Devices will not yet be able to decrypt history from before they joined the room": "新加入聊天室的设备不能解密加入之前的聊天记录",
"Direct Chat": "私聊",
"Direct chats": "私聊",
"Disable inline URL previews by default": "默认禁用自动网址预览",
"Disinvite": "取消邀请",
@ -44,7 +43,6 @@
"Failed to delete device": "删除设备失败",
"Failed to forget room %(errCode)s": "无法忘记聊天室 %(errCode)s",
"Failed to join room": "无法加入聊天室",
"Failed to join the room": "无法加入此聊天室",
"Failed to kick": "踢人失败",
"Failed to leave room": "无法离开聊天室",
"Failed to load timeline position": "无法加载时间轴位置",
@ -74,10 +72,6 @@
"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.": "出于安全考虑,用户注销时会清除浏览器里的端到端加密密钥。如果你想要下次登录 Riot 时能解密过去的聊天记录,请导出你的聊天室密钥。",
"Found a bug?": "发现漏洞?",
"%(userId)s from %(fromPowerLevel)s to %(toPowerLevel)s": "%(userId)s 从 %(fromPowerLevel)s 变为 %(toPowerLevel)s",
"Guests can't set avatars. Please register.": "游客不能设置头像。请注册。.",
"Guest users can't create new rooms. Please register to create room and start a chat.": "游客不能创建聊天室。请注册以创建聊天室和聊天.",
"Guest users can't upload files. Please register to upload.": "游客不能上传文件。请注册以上传文件。",
"Guests can't use labs features. Please register.": "游客不能使用实验性功能。请注册。.",
"Guests cannot join this room even if explicitly invited.": "游客不能加入此聊天室,即使有人主动邀请。.",
"had": "已经",
"Hangup": "挂断",
@ -147,7 +141,6 @@
"Success": "成功",
"The default role for new room members is": "此聊天室新成员的默认角色是",
"The main address for this room is": "此聊天室的主要地址是",
"This action cannot be performed by a guest user. Please register to be able to do this.": "游客不能进行此操作。请注册。",
"This email address is already in use": "此邮箱地址已经被使用",
"This email address was not found": "未找到此邮箱地址",
"%(actionVerb)s this person?": "%(actionVerb)s 这个用户?",
@ -160,9 +153,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 正在打字",
@ -193,7 +183,7 @@
"New password": "新密码",
"Add a topic": "添加一个主题",
"Admin": "管理员",
"Admin tools": "管理工具",
"Admin Tools": "管理工具",
"VoIP": "IP 电话",
"Missing Media Permissions, click here to request.": "没有媒体存储权限,点此获取。",
"No Microphones detected": "未检测到麦克风",
@ -212,7 +202,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": "任何知道聊天室链接的人,包括游客",
@ -264,7 +253,6 @@
"Device key:": "设备密钥 :",
"Disable Notifications": "关闭消息通知",
"disabled": "已禁用",
"Disable markdown formatting": "禁用 Markdown 格式",
"Drop File Here": "把文件拖拽到这里",
"Email address (optional)": "电子邮件地址 (可选)",
"Enable Notifications": "启用消息通知",
@ -327,7 +315,6 @@
"Create new room": "创建新聊天室",
"Custom Server Options": "自定义服务器选项",
"Dismiss": "设为已读",
"Please Register": "请注册",
"powered by Matrix": "由 Matrix 提供",
"Remove": "移除",
"Room directory": "聊天室目录",
@ -340,7 +327,6 @@
"Thursday": "星期四",
"Friday": "星期五",
"Saturday": "星期六",
"Welcome page": "欢迎页面",
"Account": "账户",
"Add": "添加",
"Allow": "允许",
@ -396,7 +382,6 @@
"Make Moderator": "使成为主持人",
"Room": "聊天室",
"Connectivity to the server has been lost.": "到服务器的连接已经丢失。",
"Auto-complete": "自动补全",
"bold": "加粗",
"italic": "斜体",
"strike": "删除线",
@ -420,7 +405,6 @@
"Import room keys": "导入聊天室密钥",
"File to import": "要导入的文件",
"Start new chat": "开始新的聊天",
"Guest users can't invite users. Please register.": "游客不能邀请用户。请注册。",
"Failed to invite": "邀请失败",
"Failed to invite user": "邀请用户失败",
"Unknown error": "未知错误",
@ -491,11 +475,9 @@
"Room contains unknown devices": "聊天室有未知设备",
"%(roomName)s does not exist.": "%(roomName)s 不存在。",
"Save": "保存",
"Searching known users": "搜索已知的用户",
"Send anyway": "无论任何都发送",
"Sets the room topic": "设置聊天室主题",
"Show Text Formatting Toolbar": "显示文字格式工具栏",
"There was a problem logging in.": "登录出现了问题。",
"This room has no local addresses": "这个聊天室没有本地地址",
"This doesn't appear to be a valid email address": "这看起来不是一个合法的电子邮件地址",
"This is a preview of this room. Room interactions have been disabled": "这是这个聊天室的一个预览。聊天室交互已禁用",
@ -516,7 +498,6 @@
"Unencrypted message": "未加密的消息",
"unknown caller": "未知的呼叫者",
"unknown device": "未知设备",
"unknown": "未知的",
"Unnamed Room": "未命名的聊天室",
"Unverified": "未验证",
"uploaded a file": "上传一个文件",
@ -543,36 +524,37 @@
"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 <StartChatButton> to start a chat with someone": "按下 <StartChatButton> 来开始和某个人聊天",
"Press <StartChatButton> to start a chat with someone": "按下 <StartChatButton> 来开始和某个人聊天",
"%(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 看到",
"Show Apps": "显示应用",
"Tagged as: ": "标记为:",
"A text message has been sent to +%(msisdn)s. Please enter the verification code it contains": "验证码将发送到+%(msisdn),请输入接收到的验证码",
"%(targetName)s accepted the invitation for %(displayName)s.": "%(targetName) 接受了 %(displayName)的邀请。",
"Active call (%(roomName)s)": "%(roomName)的呼叫",
"And %(count)s more...": "添加%(count)个...",
"%(senderName)s changed the power level of %(powerLevelDiffText)s.": "%(senderName) 将级别调整到%(powerLevelDiffText)。",
"A text message has been sent to +%(msisdn)s. Please enter the verification code it contains": "验证码将发送到+%(msisdn)s,请输入接收到的验证码",
"%(targetName)s accepted the invitation for %(displayName)s.": "%(targetName)s 接受了 %(displayName)s 的邀请。",
"Active call (%(roomName)s)": "%(roomName)s 的呼叫",
"And %(count)s more...": "添加%(count)s 个...",
"%(senderName)s changed the power level of %(powerLevelDiffText)s.": "%(senderName)s 将级别调整到%(powerLevelDiffText)s 。",
"Changes colour scheme of current room": "修改了样式",
"changing room on a RoomView is not supported": "暂不支持修改",
"demote": "降级",
"Deops user with given id": "Deops user",
"Join as <voiceText>voice</voiceText> or <videoText>video</videoText>.": "通过 <voiceText>语言</voiceText> 或者 <videoText>视频</videoText>加入.",
"%(senderName)s made future room history visible to": "%(senderName) 设定历史浏览功能为",
"%(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不支持端对端加密",
"People": "联系人",
"Press": "点击",
"Profile": "个人配置",
"Public Chat": "公开的",
"Refer a friend to Riot:": "介绍朋友加入Riot",
"%(senderName)s removed their display name (%(oldDisplayName)s).": "%(senderName) 删除了显示名称。",
"%(roomName)s is not accessible at this time.": "%(roomName)此时无法访问。",
"%(roomName)s is not accessible at this time.": "%(roomName)s 此时无法访问。",
"Set": "设置",
"Start authentication": "开始认证",
"tag as %(tagName)s": "标签",
"tag direct chat": "标签",
"The maximum permitted number of widgets have already been added to this room.": "小部件的最大允许数量已经添加到这个房间了。",
"The phone number entered looks invalid": "输入的电话号码看起来无效",
@ -585,5 +567,111 @@
"Unable to add email address": "无法添加电子邮件地址",
"Failed to update group": "更新群组失败",
"Automatically replace plain text Emoji": "文字、表情自动转换",
"Join an existing group": "试图加入一个不存在的群组"
"Join an existing group": "试图加入一个不存在的群组",
"To reset your password, enter the email address linked to your account": "要重置你的密码,请输入关联你的帐号的电子邮箱地址",
"Unable to verify email address.": "无法验证电子邮箱地址。",
"Unknown room %(roomId)s": "未知聊天室 %(roomId)s",
"Unknown (user, device) pair:": "未知(用户,设备)对:",
"Unrecognised command:": "无法识别的命令:",
"Unrecognised room alias:": "无法识别的聊天室别名:",
"Use with caution": "谨慎使用",
"User Interface": "用户界面",
"%(user)s is a": "%(user)s 是一个",
"User name": "用户名",
"(no answer)": "(没有回答)",
"(warning: cannot be disabled again!)": "(警告:无法再被禁用!)",
"WARNING: Device already verified, but keys do NOT MATCH!": "警告:设备已经验证,但密钥不匹配!",
"Who can access this room?": "谁可以访问这个聊天室?",
"Who would you like to add to this room?": "你想把谁加入这个聊天室?",
"Who would you like to communicate with?": "你想和谁交流?",
"You are already in a call.": "你已经在一个通话之中。",
"You do not have permission to do that in this room.": "你没有权限在这个聊天室里面做那件事。",
"You are trying to access %(roomName)s.": "你正在尝试访问 %(roomName)s.",
"You cannot place VoIP calls in this browser.": "你不能在这个浏览器中发起 VoIP 通话。",
"You do not have permission to post to this room": "你没有发送到这个聊天室的权限",
"You have been invited to join this room by %(inviterName)s": "你已经被 %(inviterName)s 邀请加入这个聊天室",
"You seem to be in a call, are you sure you want to quit?": "你好像在一个通话中,你确定要退出吗?",
"You seem to be uploading files, are you sure you want to quit?": "你好像正在上传文件,你确定要退出吗?",
"You should not yet trust it to secure data": "你不应该相信它来保护你的数据",
"Upload an avatar:": "上传一个头像:",
"This doesn't look like a valid email address.": "这看起来不是一个合法的电子邮件地址。",
"This doesn't look like a valid phone number.": "这看起来不是一个合法的电话号码。",
"User names may only contain letters, numbers, dots, hyphens and underscores.": "用户名只可以包含字母、数字、点、连字号和下划线。",
"An unknown error occurred.": "一个未知错误出现了。",
"An error occurred: %(error_string)s": "一个错误出现了: %(error_string)s",
"Encrypt room": "加密聊天室",
"There are no visible files in this room": "这个聊天室里面没有可见的文件",
"Active call": "活跃的通话",
"Verify...": "验证...",
"Error decrypting audio": "解密音频时出错",
"Error decrypting image": "解密图像时出错",
"Error decrypting video": "解密视频时出错",
" (unsupported)": "(不支持)",
"Updates": "更新",
"Check for update": "检查更新",
"%(senderDisplayName)s removed the room avatar.": "%(senderDisplayName)s 移除了聊天室头像。",
"Something went wrong!": "出了点问题!",
"If you already have a Matrix account you can <a>log in</a> instead.": "如果你已经有一个 Matrix 帐号,你可以<a>登录</a>。",
"Do you want to set an email address?": "你要设置一个电子邮箱地址吗?",
"Room creation failed": "创建聊天室失败",
"New address (e.g. #foo:%(localDomain)s)": "新的地址(例如 #foo:%(localDomain)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 <acceptText>accept</acceptText> or <declineText>decline</declineText> this invitation?": "你想要 <acceptText>接受</acceptText> 还是 <declineText>拒绝</declineText> 这个邀请?",
"You already have existing direct chats with this user:": "你已经有和这个用户的直接聊天:",
"You're not in any rooms yet! Press <CreateRoomButton> to make a room or <RoomDirectoryButton> to browse the directory": "你现在还不再任何聊天室!按下 <CreateRoomButton> 来创建一个聊天室或者 <RoomDirectoryButton> 来浏览目录",
"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 <a>disabled</a> URL previews by default.": "你已经默认 <a>禁用</a> URL 预览。",
"You have <a>enabled</a> URL previews by default.": "你已经默认 <a>启用</a> 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:": "设置一个昵称:",
"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 邀请"
}

View File

@ -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 其它",
@ -64,7 +60,6 @@
"Device ID": "裝置識別碼",
"Devices": "裝置列表",
"Devices will not yet be able to decrypt history from before they joined the room": "新加入聊天室的裝置不能解密加入之前的聊天記錄",
"Direct Chat": "私人聊天",
"Direct chats": "私聊",
"Disable inline URL previews by default": "預設停用自動網址預覽",
"Disinvite": "取消邀請",
@ -95,7 +90,6 @@
"Failed to delete device": "刪除裝置失敗",
"Failed to forget room %(errCode)s": "無法忘記聊天室 %(errCode)s",
"Failed to join room": "無法加入聊天室",
"Failed to join the room": "無法加入此聊天室",
"Failed to kick": "踢人失敗",
"Failed to leave room": "無法離開聊天室",
"Failed to load timeline position": "無法加載時間軸位置",
@ -125,10 +119,6 @@
"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.": "因為安全因素,登出將會從此瀏覽器刪除任何端到端加密的金鑰。若您想要在未來的 Riot 工作階段中解密您的對話紀錄,請將您的聊天室金鑰匯出並好好存放。",
"Found a bug?": "發現漏洞?",
"%(userId)s from %(fromPowerLevel)s to %(toPowerLevel)s": "%(userId)s 從 %(fromPowerLevel)s 變為 %(toPowerLevel)s",
"Guests can't set avatars. Please register.": "游客不能設置頭像。請注冊。.",
"Guest users can't create new rooms. Please register to create room and start a chat.": "游客不能創建聊天室。請注冊以創建聊天室和聊天.",
"Guest users can't upload files. Please register to upload.": "訪客不能上傳檔案。請註冊以上傳。",
"Guests can't use labs features. Please register.": "游客不能使用實驗性功能。請注冊。.",
"Guests cannot join this room even if explicitly invited.": "游客不能加入此聊天室,即使有人主動邀請。.",
"had": "已經",
"Hangup": "掛斷",
@ -207,7 +197,6 @@
"Success": "成功",
"The default role for new room members is": "此聊天室新成員的預設角色是",
"The main address for this room is": "此聊天室的主要地址是",
"This action cannot be performed by a guest user. Please register to be able to do this.": "訪客無法執行此動作。請註冊以執行此動作。",
"This email address is already in use": "此電子郵件地址已經被使用",
"This email address was not found": "未找到此電子郵件地址",
"%(actionVerb)s this person?": "%(actionVerb)s 這個用戶?",
@ -259,7 +248,6 @@
"Friday": "星期五",
"Saturday": "星期六",
"OK": "確定",
"Please Register": "請註冊",
"Add a topic": "新增標題",
"VoIP": "VoIP",
"Default Device": "預設裝置",
@ -298,7 +286,6 @@
"Create new room": "建立新聊天室",
"Room directory": "聊天室目錄",
"Start chat": "開始聊天",
"Welcome page": "歡迎頁面",
"a room": "房間",
"A text message has been sent to +%(msisdn)s. Please enter the verification code it contains": "文字訊息將會傳送到 +%(msisdn)s。請輸入其中包含的驗證碼",
"Accept": "接受",
@ -306,7 +293,7 @@
"%(targetName)s accepted the invitation for %(displayName)s.": "%(targetName)s 已接受 %(displayName)s 的邀請。",
"Active call (%(roomName)s)": "活躍的通話(%(roomName)s",
"Add": "新增",
"Admin tools": "管理員工具",
"Admin Tools": "管理員工具",
"And %(count)s more...": "還有 %(count)s 個...",
"Missing Media Permissions, click here to request.": "遺失媒體權限,點選這裡來要求。",
"No Microphones detected": "未偵測到麥克風",
@ -354,7 +341,6 @@
"Device key:": "裝置金鑰:",
"Disable Notifications": "停用通知",
"disabled": "已停用",
"Disable markdown formatting": "停用 markdown 格式化",
"Drop File Here": "在此放置檔案",
"Drop here to tag %(section)s": "在此放置以標記 %(section)s",
"Email address (optional)": "電子郵件地址(選擇性)",
@ -400,7 +386,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 已啟用",
@ -419,7 +409,6 @@
"Never send encrypted messages to unverified devices in this room": "從不在此房間傳送加密的訊息到未驗證的裝置",
"Never send encrypted messages to unverified devices in this room from this device": "從不在此房間中從此裝置上傳送未加密的訊息到未驗證的裝置",
"New address (e.g. #foo:%(localDomain)s)": "新地址(例如:#foo:%(localDomain)s",
"New Composer & Autocomplete": "新 Composer 與自動完成",
"New passwords don't match": "新密碼不相符",
"New passwords must match each other.": "新密碼必須互相符合。",
"none": "無",
@ -448,7 +437,6 @@
"demote": "降級",
"Please check your email and click on the link it contains. Once this is done, click continue.": "請檢查您的電子郵件並點選其中包含的連結。只要這個完成了,就點選選繼續。",
"Power level must be positive integer.": "權限等級必需為正整數。",
"Press": "按下",
"Press <StartChatButton> to start a chat with someone": "按下 <StartChatButton> 以開始與某人聊天",
"Privacy warning": "隱私警告",
"Private Chat": "私密聊天",
@ -472,13 +460,11 @@
"%(roomName)s does not exist.": "%(roomName)s 不存在。",
"%(roomName)s is not accessible at this time.": "%(roomName)s 此時無法存取。",
"Save": "儲存",
"Searching known users": "搜尋已知的使用者",
"Seen by %(userName)s at %(dateTime)s": "%(userName)s 在 %(dateTime)s 時看過",
"Send anyway": "無論如何都要傳送",
"Set": "設定",
"Show Text Formatting Toolbar": "顯示文字格式化工具列",
"Start authentication": "開始認證",
"tag as %(tagName)s": "標記為 %(tagName)s",
"tag direct chat": "標記直接聊天",
"Tagged as: ": "標記為: ",
"The phone number entered looks invalid": "輸入的電話號碼看起來無效",
@ -486,7 +472,6 @@
"The remote side failed to pick up": "遠端未能接聽",
"This Home Server does not support login using email address.": "這個家伺服器不支援使用電子郵件地址登入。",
"This invitation was sent to an email address which is not associated with this account:": "這份邀請被傳送給與此帳號無關的電子郵件地址:",
"There was a problem logging in.": "登入時出現問題。",
"This room has no local addresses": "此房間沒有本機地址",
"This room is not recognised.": "此房間不被認可。",
"These are experimental features that may break in unexpected ways": "這些是可能會以非預期的方式故障的實驗性功能",
@ -513,13 +498,11 @@
"To send events of type": "要傳送活動類型",
"To send messages": "要傳送訊息",
"to start a chat with someone": "要開始與某人聊天",
"to tag as %(tagName)s": "要標記為 %(tagName)s",
"to tag direct chat": "要標記直接聊天",
"To use it, just wait for autocomplete results to load and tab through them.": "要使用它,只要等待自動完成的結果載入並在它們上面按 Tab。",
"Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "嘗試載入此房間時間軸的特定時間點,但是問題是您沒有權限檢視相關的訊息。",
"Tried to load a specific point in this room's timeline, but was unable to find it.": "嘗試載入此房間時間軸的特定時間點,但是找不到。",
"Unable to remove contact information": "無法移除聯絡人資訊",
"Unable to restore previous session": "無法復原先前的工作階段",
"Unable to verify email address.": "無法驗證電子郵件。",
"Unban": "解除禁止",
"%(senderName)s unbanned %(targetName)s.": "%(senderName)s 解除禁止 %(targetName)s。",
@ -534,7 +517,6 @@
"unknown device": "未知的裝置",
"Unknown room %(roomId)s": "未知的房間 %(roomId)s",
"Unknown (user, device) pair:": "未知的(使用者,裝置)配對:",
"unknown": "未知",
"Unmute": "解除靜音",
"Unnamed Room": "未命名的房間",
"Unrecognised command:": "無法識別的命令:",
@ -628,7 +610,6 @@
"%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s": "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s",
"%(weekDayName)s %(time)s": "%(weekDayName)s %(time)s",
"Set a display name:": "設定顯示名稱:",
"Set a Display Name": "設定顯示名稱",
"Upload an avatar:": "上傳大頭貼:",
"This server does not support authentication with a phone number.": "這個伺服器不支援以電話號碼認證。",
"Missing password.": "密碼遺失。",
@ -649,7 +630,6 @@
"Room": "房間",
"Connectivity to the server has been lost.": "至伺服器的連線已遺失。",
"Sent messages will be stored until your connection has returned.": "傳送的訊息會在您的連線恢復前先儲存起來。",
"Auto-complete": "自動完成",
"<a>Resend all</a> or <a>cancel all</a> now. You can also select individual messages to resend or cancel.": "現在<a>重新傳送全部</a>或是<a>取消全部</a>。您也可以單獨選擇訊息來重新傳送或取消。",
"(~%(count)s results)|one": "~%(count)s 結果)",
"(~%(count)s results)|other": "~%(count)s 結果)",
@ -728,7 +708,6 @@
"You must join the room to see its files": "您必須加入房間來檢視它的檔案",
"Reject all %(invitedRooms)s invites": "拒絕所有 %(invitedRooms)s 邀請",
"Start new chat": "開始新聊天",
"Guest users can't invite users. Please register.": "訪客無法邀請使用者。請註冊。",
"Failed to invite": "邀請失敗",
"Failed to invite user": "邀請使用者失敗",
"Failed to invite the following users to the %(roomName)s room:": "邀請下列使用者到 %(roomName)s 房間失敗:",
@ -751,7 +730,6 @@
"Unable to restore session": "無法復原工作階段",
"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.": "若您先前使用過較新版本的 Riot您的工作階段可能與此版本不相容。關閉此視窗並回到較新的版本。",
"Continue anyway": "無論如何都繼續",
"Your display name is how you'll appear to others when you speak in rooms. What would you like it to be?": "您的顯示名稱是您在房間裡說話是,別人會看到的名字。您想要怎麼做?",
"You are currently blacklisting unverified devices; to send messages to these devices you must verify them.": "您目前正把未驗證的裝置列入黑名單;要傳送訊息到這些裝置,您必須先驗證它們。",
"We recommend you go through the verification process for each device to confirm they belong to their legitimate owner, but you can resend the message without verifying if you prefer.": "我們建議您對每一個裝置執行驗證過程以確認它們屬於其合法擁有者,但若您想要的話,您也可以重新傳送訊息而不必驗證它們。",
"\"%(RoomName)s\" contains devices that you haven't seen before.": "「%(RoomName)s」包含了您先前沒看過的裝置。",
@ -847,7 +825,7 @@
"You are a member of these groups:": "您是這些群組的成員:",
"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.": "建立一個群組來代表您的社群!定義一組聊天室與您自己的自訂首頁來標記您在 Matrix 世界中的空間。",
"Join an existing group": "加入既有的群組",
"To join an existing group you'll have to know its group identifier; this will look something like <i>+example:matrix.org</i>.": "要加入既有的群組,您將會需要知道其群組識別符;其看起來會像是 <i>+範例:matrix.org</i>。",
"To join an existing group you'll have to know its group identifier; this will look something like <i>+example:matrix.org</i>.": "要加入既有的群組,您將會需要知道其群組識別符;其看起來會像是 <i>+example:matrix.org</i>。",
"Featured Rooms:": "特色聊天室:",
"Error whilst fetching joined groups": "在擷取已加入的群組時發生錯誤",
"Featured Users:": "特色使用者:",
@ -858,5 +836,8 @@
"Hide avatars in user and room mentions": "在使用者與聊天室提及中隱藏大頭貼",
"%(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 <a>web browser</a>": "機器人檢查目前在桌面端不可用 ── 請使用<a>網路瀏覽器</a>"
"Robot check is currently unavailable on desktop - please use a <a>web browser</a>": "機器人檢查目前在桌面端不可用 ── 請使用<a>網路瀏覽器</a>",
"%(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"
}

View File

@ -191,7 +191,7 @@ export function getAllLanguagesFromJson() {
export function getLanguagesFromBrowser() {
if (navigator.languages && navigator.languages.length) return navigator.languages;
if (navigator.language) return [navigator.language];
return [navigator.userLanguage];
return [navigator.userLanguage || "en"];
}
/**

View File

@ -0,0 +1,71 @@
/*
Copyright 2017 New Vector Ltd
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import EventEmitter from 'events';
/**
* Stores the group summary for a room and provides an API to change it
*/
export default class GroupSummaryStore extends EventEmitter {
constructor(matrixClient, groupId) {
super();
this._groupId = groupId;
this._matrixClient = matrixClient;
this._summary = {};
this._fetchSummary();
}
_fetchSummary() {
this._matrixClient.getGroupSummary(this._groupId).then((resp) => {
this._summary = resp;
this._notifyListeners();
}).catch((err) => {
this.emit('error', err);
});
}
_notifyListeners() {
this.emit('update');
}
getSummary() {
return this._summary;
}
addRoomToGroupSummary(roomId, categoryId) {
return this._matrixClient
.addRoomToGroupSummary(this._groupId, roomId, categoryId)
.then(this._fetchSummary.bind(this));
}
addUserToGroupSummary(userId, roleId) {
return this._matrixClient
.addUserToGroupSummary(this._groupId, userId, roleId)
.then(this._fetchSummary.bind(this));
}
removeRoomFromGroupSummary(roomId) {
return this._matrixClient
.removeRoomFromGroupSummary(this._groupId, roomId)
.then(this._fetchSummary.bind(this));
}
removeUserFromGroupSummary(userId) {
return this._matrixClient
.removeUserFromGroupSummary(this._groupId, userId)
.then(this._fetchSummary.bind(this));
}
}

View File

@ -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;
}

View File

@ -1,5 +1,6 @@
/*
Copyright 2016 OpenMarket Ltd
Copyright 2017 New Vector Ltd
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@ -14,16 +15,26 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
import MatrixClientPeg from '../MatrixClientPeg';
import {getAddressType} from '../UserAddress';
import {inviteToRoom} from '../Invite';
import {inviteToRoom} from '../RoomInvite';
import Promise from 'bluebird';
/**
* Invites multiple addresses to a room, handling rate limiting from the server
* Invites multiple addresses to a room or group, handling rate limiting from the server
*/
export default class MultiInviter {
constructor(roomId) {
this.roomId = roomId;
/**
* @param {string} targetId The ID of the room or group to invite to
*/
constructor(targetId) {
if (targetId[0] === '+') {
this.roomId = null;
this.groupId = targetId;
} else {
this.roomId = targetId;
this.groupId = null;
}
this.canceled = false;
this.addrs = [];
@ -104,7 +115,14 @@ export default class MultiInviter {
return;
}
inviteToRoom(this.roomId, addr).then(() => {
let doInvite;
if (this.groupId !== null) {
doInvite = MatrixClientPeg.get().inviteUserToGroup(this.groupId, addr);
} else {
doInvite = inviteToRoom(this.roomId, addr);
}
doInvite.then(() => {
if (this._canceled) { return; }
this.completionStates[addr] = 'invited';

View File

@ -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() {