Merge branch 'develop' into patch-1
This commit is contained in:
commit
9c3e4a1202
614 changed files with 32351 additions and 4122 deletions
|
@ -16,7 +16,7 @@ limitations under the License.
|
|||
|
||||
"use strict";
|
||||
|
||||
var q = require("q");
|
||||
import Promise from 'bluebird';
|
||||
var Matrix = require("matrix-js-sdk");
|
||||
var Room = Matrix.Room;
|
||||
var CallHandler = require('matrix-react-sdk/lib/CallHandler');
|
||||
|
@ -53,11 +53,11 @@ ConferenceCall.prototype._joinConferenceUser = function() {
|
|||
// Make sure the conference user is in the group chat room
|
||||
var groupRoom = this.client.getRoom(this.groupRoomId);
|
||||
if (!groupRoom) {
|
||||
return q.reject("Bad group room ID");
|
||||
return Promise.reject("Bad group room ID");
|
||||
}
|
||||
var member = groupRoom.getMember(this.confUserId);
|
||||
if (member && member.membership === "join") {
|
||||
return q();
|
||||
return Promise.resolve();
|
||||
}
|
||||
return this.client.invite(this.groupRoomId, this.confUserId);
|
||||
};
|
||||
|
@ -75,7 +75,7 @@ ConferenceCall.prototype._getConferenceUserRoom = function() {
|
|||
}
|
||||
}
|
||||
if (confRoom) {
|
||||
return q(confRoom);
|
||||
return Promise.resolve(confRoom);
|
||||
}
|
||||
return this.client.createRoom({
|
||||
preset: "private_chat",
|
||||
|
|
|
@ -1,86 +0,0 @@
|
|||
/*
|
||||
Copyright 2015, 2016 OpenMarket 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* THIS FILE IS AUTO-GENERATED
|
||||
* You can edit it you like, but your changes will be overwritten,
|
||||
* so you'd just be trying to swim upstream like a salmon.
|
||||
* You are not a salmon.
|
||||
*
|
||||
* To update it, run:
|
||||
* ./reskindex.js -h header
|
||||
*/
|
||||
|
||||
module.exports.components = require('matrix-react-sdk/lib/component-index').components;
|
||||
|
||||
import structures$BottomLeftMenu from './components/structures/BottomLeftMenu';
|
||||
module.exports.components['structures.BottomLeftMenu'] = structures$BottomLeftMenu;
|
||||
import structures$CompatibilityPage from './components/structures/CompatibilityPage';
|
||||
module.exports.components['structures.CompatibilityPage'] = structures$CompatibilityPage;
|
||||
import structures$LeftPanel from './components/structures/LeftPanel';
|
||||
module.exports.components['structures.LeftPanel'] = structures$LeftPanel;
|
||||
import structures$RightPanel from './components/structures/RightPanel';
|
||||
module.exports.components['structures.RightPanel'] = structures$RightPanel;
|
||||
import structures$RoomDirectory from './components/structures/RoomDirectory';
|
||||
module.exports.components['structures.RoomDirectory'] = structures$RoomDirectory;
|
||||
import structures$RoomSubList from './components/structures/RoomSubList';
|
||||
module.exports.components['structures.RoomSubList'] = structures$RoomSubList;
|
||||
import structures$SearchBox from './components/structures/SearchBox';
|
||||
module.exports.components['structures.SearchBox'] = structures$SearchBox;
|
||||
import structures$ViewSource from './components/structures/ViewSource';
|
||||
module.exports.components['structures.ViewSource'] = structures$ViewSource;
|
||||
import views$context_menus$MessageContextMenu from './components/views/context_menus/MessageContextMenu';
|
||||
module.exports.components['views.context_menus.MessageContextMenu'] = views$context_menus$MessageContextMenu;
|
||||
import views$context_menus$NotificationStateContextMenu from './components/views/context_menus/NotificationStateContextMenu';
|
||||
module.exports.components['views.context_menus.NotificationStateContextMenu'] = views$context_menus$NotificationStateContextMenu;
|
||||
import views$context_menus$RoomTagContextMenu from './components/views/context_menus/RoomTagContextMenu';
|
||||
module.exports.components['views.context_menus.RoomTagContextMenu'] = views$context_menus$RoomTagContextMenu;
|
||||
import views$dialogs$ChangelogDialog from './components/views/dialogs/ChangelogDialog';
|
||||
module.exports.components['views.dialogs.ChangelogDialog'] = views$dialogs$ChangelogDialog;
|
||||
import views$directory$NetworkDropdown from './components/views/directory/NetworkDropdown';
|
||||
module.exports.components['views.directory.NetworkDropdown'] = views$directory$NetworkDropdown;
|
||||
import views$elements$ImageView from './components/views/elements/ImageView';
|
||||
module.exports.components['views.elements.ImageView'] = views$elements$ImageView;
|
||||
import views$elements$Spinner from './components/views/elements/Spinner';
|
||||
module.exports.components['views.elements.Spinner'] = views$elements$Spinner;
|
||||
import views$globals$GuestWarningBar from './components/views/globals/GuestWarningBar';
|
||||
module.exports.components['views.globals.GuestWarningBar'] = views$globals$GuestWarningBar;
|
||||
import views$globals$MatrixToolbar from './components/views/globals/MatrixToolbar';
|
||||
module.exports.components['views.globals.MatrixToolbar'] = views$globals$MatrixToolbar;
|
||||
import views$globals$NewVersionBar from './components/views/globals/NewVersionBar';
|
||||
module.exports.components['views.globals.NewVersionBar'] = views$globals$NewVersionBar;
|
||||
import views$login$VectorCustomServerDialog from './components/views/login/VectorCustomServerDialog';
|
||||
module.exports.components['views.login.VectorCustomServerDialog'] = views$login$VectorCustomServerDialog;
|
||||
import views$login$VectorLoginFooter from './components/views/login/VectorLoginFooter';
|
||||
module.exports.components['views.login.VectorLoginFooter'] = views$login$VectorLoginFooter;
|
||||
import views$login$VectorLoginHeader from './components/views/login/VectorLoginHeader';
|
||||
module.exports.components['views.login.VectorLoginHeader'] = views$login$VectorLoginHeader;
|
||||
import views$messages$DateSeparator from './components/views/messages/DateSeparator';
|
||||
module.exports.components['views.messages.DateSeparator'] = views$messages$DateSeparator;
|
||||
import views$messages$MessageTimestamp from './components/views/messages/MessageTimestamp';
|
||||
module.exports.components['views.messages.MessageTimestamp'] = views$messages$MessageTimestamp;
|
||||
import views$rooms$DNDRoomTile from './components/views/rooms/DNDRoomTile';
|
||||
module.exports.components['views.rooms.DNDRoomTile'] = views$rooms$DNDRoomTile;
|
||||
import views$rooms$RoomDropTarget from './components/views/rooms/RoomDropTarget';
|
||||
module.exports.components['views.rooms.RoomDropTarget'] = views$rooms$RoomDropTarget;
|
||||
import views$rooms$RoomTooltip from './components/views/rooms/RoomTooltip';
|
||||
module.exports.components['views.rooms.RoomTooltip'] = views$rooms$RoomTooltip;
|
||||
import views$rooms$SearchBar from './components/views/rooms/SearchBar';
|
||||
module.exports.components['views.rooms.SearchBar'] = views$rooms$SearchBar;
|
||||
import views$settings$IntegrationsManager from './components/views/settings/IntegrationsManager';
|
||||
module.exports.components['views.settings.IntegrationsManager'] = views$settings$IntegrationsManager;
|
||||
import views$settings$Notifications from './components/views/settings/Notifications';
|
||||
module.exports.components['views.settings.Notifications'] = views$settings$Notifications;
|
|
@ -1,5 +1,6 @@
|
|||
/*
|
||||
Copyright 2015, 2016 OpenMarket Ltd
|
||||
Copyright 2017 Vector Creations Ltd
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
|
@ -14,12 +15,15 @@ See the License for the specific language governing permissions and
|
|||
limitations under the License.
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
import React from 'react';
|
||||
import ReactDOM from 'react-dom';
|
||||
import sdk from 'matrix-react-sdk';
|
||||
import dis from 'matrix-react-sdk/lib/dispatcher';
|
||||
import Velocity from 'velocity-vector';
|
||||
import 'velocity-vector/velocity.ui';
|
||||
import SettingsStore from "matrix-react-sdk/lib/settings/SettingsStore";
|
||||
|
||||
var React = require('react');
|
||||
var ReactDOM = require('react-dom');
|
||||
var sdk = require('matrix-react-sdk')
|
||||
var dis = require('matrix-react-sdk/lib/dispatcher');
|
||||
const CALLOUT_ANIM_DURATION = 1000;
|
||||
|
||||
module.exports = React.createClass({
|
||||
displayName: 'BottomLeftMenu',
|
||||
|
@ -32,11 +36,24 @@ module.exports = React.createClass({
|
|||
return({
|
||||
directoryHover : false,
|
||||
roomsHover : false,
|
||||
homeHover: false,
|
||||
peopleHover : false,
|
||||
settingsHover : false,
|
||||
});
|
||||
},
|
||||
|
||||
componentWillMount: function() {
|
||||
this._dispatcherRef = dis.register(this.onAction);
|
||||
this._peopleButton = null;
|
||||
this._directoryButton = null;
|
||||
this._createRoomButton = null;
|
||||
this._lastCallouts = {};
|
||||
},
|
||||
|
||||
componentWillUnmount: function() {
|
||||
dis.unregister(this._dispatcherRef);
|
||||
},
|
||||
|
||||
// Room events
|
||||
onDirectoryClick: function() {
|
||||
dis.dispatch({ action: 'view_room_directory' });
|
||||
|
@ -62,6 +79,19 @@ module.exports = React.createClass({
|
|||
this.setState({ roomsHover: false });
|
||||
},
|
||||
|
||||
// Home button events
|
||||
onHomeClick: function() {
|
||||
dis.dispatch({ action: 'view_home_page' });
|
||||
},
|
||||
|
||||
onHomeMouseEnter: function() {
|
||||
this.setState({ homeHover: true });
|
||||
},
|
||||
|
||||
onHomeMouseLeave: function() {
|
||||
this.setState({ homeHover: false });
|
||||
},
|
||||
|
||||
// People events
|
||||
onPeopleClick: function() {
|
||||
dis.dispatch({ action: 'view_create_chat' });
|
||||
|
@ -88,6 +118,30 @@ module.exports = React.createClass({
|
|||
this.setState({ settingsHover: false });
|
||||
},
|
||||
|
||||
onAction: function(payload) {
|
||||
let calloutElement;
|
||||
switch (payload.action) {
|
||||
// Incoming instruction: dance!
|
||||
case 'callout_start_chat':
|
||||
calloutElement = this._peopleButton;
|
||||
break;
|
||||
case 'callout_room_directory':
|
||||
calloutElement = this._directoryButton;
|
||||
break;
|
||||
case 'callout_create_room':
|
||||
calloutElement = this._createRoomButton;
|
||||
break;
|
||||
}
|
||||
if (calloutElement) {
|
||||
const lastCallout = this._lastCallouts[payload.action];
|
||||
const now = Date.now();
|
||||
if (lastCallout == undefined || lastCallout < now - CALLOUT_ANIM_DURATION) {
|
||||
this._lastCallouts[payload.action] = now;
|
||||
Velocity(ReactDOM.findDOMNode(calloutElement), "callout.bounce", CALLOUT_ANIM_DURATION);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
// Get the label/tooltip to show
|
||||
getLabel: function(label, show) {
|
||||
if (show) {
|
||||
|
@ -96,29 +150,45 @@ module.exports = React.createClass({
|
|||
}
|
||||
},
|
||||
|
||||
_collectPeopleButton: function(e) {
|
||||
this._peopleButton = e;
|
||||
},
|
||||
|
||||
_collectDirectoryButton: function(e) {
|
||||
this._directoryButton = e;
|
||||
},
|
||||
|
||||
_collectCreateRoomButton: function(e) {
|
||||
this._createRoomButton = e;
|
||||
},
|
||||
|
||||
render: function() {
|
||||
var TintableSvg = sdk.getComponent('elements.TintableSvg');
|
||||
const HomeButton = sdk.getComponent('elements.HomeButton');
|
||||
const StartChatButton = sdk.getComponent('elements.StartChatButton');
|
||||
const RoomDirectoryButton = sdk.getComponent('elements.RoomDirectoryButton');
|
||||
const CreateRoomButton = sdk.getComponent('elements.CreateRoomButton');
|
||||
const GroupsButton = sdk.getComponent('elements.GroupsButton');
|
||||
const SettingsButton = sdk.getComponent('elements.SettingsButton');
|
||||
|
||||
return (
|
||||
<div className="mx_BottomLeftMenu">
|
||||
<div className="mx_BottomLeftMenu_options">
|
||||
<div className="mx_BottomLeftMenu_people" onClick={ this.onPeopleClick } onMouseEnter={ this.onPeopleMouseEnter } onMouseLeave={ this.onPeopleMouseLeave } >
|
||||
<TintableSvg src="img/icons-people.svg" width="25" height="25" />
|
||||
{ this.getLabel("Start chat", this.state.peopleHover) }
|
||||
<HomeButton tooltip={true} />
|
||||
<div ref={this._collectPeopleButton}>
|
||||
<StartChatButton tooltip={true} />
|
||||
</div>
|
||||
<div className="mx_BottomLeftMenu_directory" onClick={ this.onDirectoryClick } onMouseEnter={ this.onDirectoryMouseEnter } onMouseLeave={ this.onDirectoryMouseLeave } >
|
||||
<TintableSvg src="img/icons-directory.svg" width="25" height="25"/>
|
||||
{ this.getLabel("Room directory", this.state.directoryHover) }
|
||||
<div ref={this._collectDirectoryButton}>
|
||||
<RoomDirectoryButton tooltip={true} />
|
||||
</div>
|
||||
<div className="mx_BottomLeftMenu_createRoom" onClick={ this.onRoomsClick } onMouseEnter={ this.onRoomsMouseEnter } onMouseLeave={ this.onRoomsMouseLeave } >
|
||||
<TintableSvg src="img/icons-create-room.svg" width="25" height="25" />
|
||||
{ this.getLabel("Create new room", this.state.roomsHover) }
|
||||
</div>
|
||||
<div className="mx_BottomLeftMenu_settings" onClick={ this.onSettingsClick } onMouseEnter={ this.onSettingsMouseEnter } onMouseLeave={ this.onSettingsMouseLeave } >
|
||||
<TintableSvg src="img/icons-settings.svg" width="25" height="25" />
|
||||
{ this.getLabel("Settings", this.state.settingsHover) }
|
||||
<div ref={this._collectCreateRoomButton}>
|
||||
<CreateRoomButton tooltip={true} />
|
||||
</div>
|
||||
<GroupsButton tooltip={true} />
|
||||
<span className="mx_BottomLeftMenu_settings">
|
||||
<SettingsButton tooltip={true} />
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
},
|
||||
});
|
||||
|
|
|
@ -17,6 +17,7 @@ limitations under the License.
|
|||
'use strict';
|
||||
|
||||
var React = require('react');
|
||||
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
||||
|
||||
module.exports = React.createClass({
|
||||
displayName: 'CompatibilityPage',
|
||||
|
@ -39,23 +40,31 @@ module.exports = React.createClass({
|
|||
return (
|
||||
<div className="mx_CompatibilityPage">
|
||||
<div className="mx_CompatibilityPage_box">
|
||||
<p>Sorry, your browser is <b>not</b> able to run Riot.</p>
|
||||
<p>{ _t("Sorry, your browser is <b>not</b> able to run Riot.", {}, { 'b': (sub) => <b>{sub}</b> }) } </p>
|
||||
<p>
|
||||
Riot uses many advanced browser features, some of which are not
|
||||
available or experimental in your current browser.
|
||||
{ _t("Riot uses many advanced browser features, some of which are not available or experimental in your current browser.") }
|
||||
</p>
|
||||
<p>
|
||||
Please install <a href="https://www.google.com/chrome">Chrome</a> or <a href="https://getfirefox.com">Firefox</a> for
|
||||
the best experience. <a href="http://apple.com/safari">Safari</a> and <a href="http://opera.com">Opera</a> work too.
|
||||
{ _t('Please install <chromeLink>Chrome</chromeLink> or <firefoxLink>Firefox</firefoxLink> for the best experience.',
|
||||
{},
|
||||
{
|
||||
'chromeLink': (sub) => <a href="https://www.google.com/chrome">{sub}</a>,
|
||||
'firefoxLink': (sub) => <a href="https://getfirefox.com">{sub}</a>,
|
||||
},
|
||||
)}
|
||||
{ _t('<safariLink>Safari</safariLink> and <operaLink>Opera</operaLink> work too.',
|
||||
{},
|
||||
{
|
||||
'safariLink': (sub) => <a href="http://apple.com/safari">{sub}</a>,
|
||||
'operaLink': (sub) => <a href="http://opera.com">{sub}</a>,
|
||||
},
|
||||
)}
|
||||
</p>
|
||||
<p>
|
||||
With your current browser, the look and feel of the application may
|
||||
be completely incorrect, and some or all features may not function.
|
||||
If you want to try it anyway you can continue, but you are on your own
|
||||
in terms of any issues you may encounter!
|
||||
{ _t("With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!") }
|
||||
</p>
|
||||
<button onClick={this.onAccept}>
|
||||
I understand the risks and wish to continue
|
||||
{ _t("I understand the risks and wish to continue") }
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
|
110
src/components/structures/HomePage.js
Normal file
110
src/components/structures/HomePage.js
Normal file
|
@ -0,0 +1,110 @@
|
|||
/*
|
||||
Copyright 2016 OpenMarket Ltd
|
||||
Copyright 2017 Vector Creations Ltd
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import React from 'react';
|
||||
import GeminiScrollbar from 'react-gemini-scrollbar';
|
||||
import request from 'browser-request';
|
||||
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
||||
import sanitizeHtml from 'sanitize-html';
|
||||
|
||||
module.exports = React.createClass({
|
||||
displayName: 'HomePage',
|
||||
|
||||
propTypes: {
|
||||
// URL base of the team server. Optional.
|
||||
teamServerUrl: React.PropTypes.string,
|
||||
// Team token. Optional. If set, used to get the static homepage of the team
|
||||
// associated. If unset, homePageUrl will be used.
|
||||
teamToken: React.PropTypes.string,
|
||||
// URL to use as the iFrame src. Defaults to /home.html.
|
||||
homePageUrl: React.PropTypes.string,
|
||||
},
|
||||
|
||||
getInitialState: function() {
|
||||
return {
|
||||
iframeSrc: '',
|
||||
page: '',
|
||||
};
|
||||
},
|
||||
|
||||
translate: function(s) {
|
||||
s = sanitizeHtml(_t(s));
|
||||
// ugly fix for https://github.com/vector-im/riot-web/issues/4243
|
||||
s = s.replace(/Riot\.im/, '<a href="https://riot.im" target="_blank" rel="noopener">Riot.im</a>');
|
||||
s = s.replace(/\[matrix\]/, '<a href="https://matrix.org" target="_blank" rel="noopener"><img width="79" height="34" alt="[matrix]" style="padding-left: 1px;vertical-align: middle" src="home/images/matrix.svg"/></a>');
|
||||
return s;
|
||||
},
|
||||
|
||||
componentWillMount: function() {
|
||||
this._unmounted = false;
|
||||
|
||||
if (this.props.teamToken && this.props.teamServerUrl) {
|
||||
this.setState({
|
||||
iframeSrc: `${this.props.teamServerUrl}/static/${this.props.teamToken}/home.html`
|
||||
});
|
||||
}
|
||||
else {
|
||||
// we use request() to inline the homepage into the react component
|
||||
// so that it can inherit CSS and theming easily rather than mess around
|
||||
// with iframes and trying to synchronise document.stylesheets.
|
||||
|
||||
let src = this.props.homePageUrl || 'home.html';
|
||||
|
||||
request(
|
||||
{ method: "GET", url: src },
|
||||
(err, response, body) => {
|
||||
if (this._unmounted) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (err || response.status < 200 || response.status >= 300) {
|
||||
console.warn(`Error loading home page: ${err}`);
|
||||
this.setState({ page: _t("Couldn't load home page") });
|
||||
return;
|
||||
}
|
||||
|
||||
body = body.replace(/_t\(['"]([\s\S]*?)['"]\)/mg, (match, g1)=>this.translate(g1));
|
||||
this.setState({ page: body });
|
||||
}
|
||||
);
|
||||
}
|
||||
},
|
||||
|
||||
componentWillUnmount: function() {
|
||||
this._unmounted = true;
|
||||
},
|
||||
|
||||
render: function() {
|
||||
if (this.state.iframeSrc) {
|
||||
return (
|
||||
<div className="mx_HomePage">
|
||||
<iframe src={ this.state.iframeSrc } />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
else {
|
||||
return (
|
||||
<GeminiScrollbar autoshow={true} className="mx_HomePage">
|
||||
<div className="mx_HomePage_body" dangerouslySetInnerHTML={{ __html: this.state.page }}>
|
||||
</div>
|
||||
</GeminiScrollbar>
|
||||
);
|
||||
}
|
||||
}
|
||||
});
|
|
@ -16,57 +16,139 @@ limitations under the License.
|
|||
|
||||
'use strict';
|
||||
|
||||
var React = require('react');
|
||||
var DragDropContext = require('react-dnd').DragDropContext;
|
||||
var HTML5Backend = require('react-dnd-html5-backend');
|
||||
var sdk = require('matrix-react-sdk')
|
||||
var dis = require('matrix-react-sdk/lib/dispatcher');
|
||||
|
||||
var VectorConferenceHandler = require('../../VectorConferenceHandler');
|
||||
var CallHandler = require("matrix-react-sdk/lib/CallHandler");
|
||||
import React from 'react';
|
||||
import classNames from 'classnames';
|
||||
import { KeyCode } from 'matrix-react-sdk/lib/Keyboard';
|
||||
import sdk from 'matrix-react-sdk';
|
||||
import dis from 'matrix-react-sdk/lib/dispatcher';
|
||||
import MatrixClientPeg from 'matrix-react-sdk/lib/MatrixClientPeg';
|
||||
import CallHandler from 'matrix-react-sdk/lib/CallHandler';
|
||||
import AccessibleButton from 'matrix-react-sdk/lib/components/views/elements/AccessibleButton';
|
||||
import VectorConferenceHandler from '../../VectorConferenceHandler';
|
||||
|
||||
var LeftPanel = React.createClass({
|
||||
displayName: 'LeftPanel',
|
||||
|
||||
// NB. If you add props, don't forget to update
|
||||
// shouldComponentUpdate!
|
||||
propTypes: {
|
||||
collapsed: React.PropTypes.bool.isRequired,
|
||||
},
|
||||
|
||||
getInitialState: function() {
|
||||
return {
|
||||
showCallElement: null,
|
||||
searchFilter: '',
|
||||
};
|
||||
},
|
||||
|
||||
componentDidMount: function() {
|
||||
this.dispatcherRef = dis.register(this.onAction);
|
||||
componentWillMount: function() {
|
||||
this.focusedElement = null;
|
||||
},
|
||||
|
||||
componentWillReceiveProps: function(newProps) {
|
||||
this._recheckCallElement(newProps.selectedRoom);
|
||||
shouldComponentUpdate: function(nextProps, nextState) {
|
||||
// MatrixChat will update whenever the user switches
|
||||
// rooms, but propagating this change all the way down
|
||||
// the react tree is quite slow, so we cut this off
|
||||
// here. The RoomTiles listen for the room change
|
||||
// events themselves to know when to update.
|
||||
// We just need to update if any of these things change.
|
||||
if (
|
||||
this.props.collapsed !== nextProps.collapsed ||
|
||||
this.props.disabled !== nextProps.disabled
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (this.state.searchFilter !== nextState.searchFilter) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
},
|
||||
|
||||
componentWillUnmount: function() {
|
||||
dis.unregister(this.dispatcherRef);
|
||||
_onFocus: function(ev) {
|
||||
this.focusedElement = ev.target;
|
||||
},
|
||||
|
||||
onAction: function(payload) {
|
||||
switch (payload.action) {
|
||||
// listen for call state changes to prod the render method, which
|
||||
// may hide the global CallView if the call it is tracking is dead
|
||||
case 'call_state':
|
||||
this._recheckCallElement(this.props.selectedRoom);
|
||||
_onBlur: function(ev) {
|
||||
this.focusedElement = null;
|
||||
},
|
||||
|
||||
_onKeyDown: function(ev) {
|
||||
if (!this.focusedElement) return;
|
||||
let handled = false;
|
||||
|
||||
switch (ev.keyCode) {
|
||||
case KeyCode.UP:
|
||||
this._onMoveFocus(true);
|
||||
handled = true;
|
||||
break;
|
||||
case KeyCode.DOWN:
|
||||
this._onMoveFocus(false);
|
||||
handled = true;
|
||||
break;
|
||||
}
|
||||
|
||||
if (handled) {
|
||||
ev.stopPropagation();
|
||||
ev.preventDefault();
|
||||
}
|
||||
},
|
||||
|
||||
_recheckCallElement: function(selectedRoomId) {
|
||||
// if we aren't viewing a room with an ongoing call, but there is an
|
||||
// active call, show the call element - we need to do this to make
|
||||
// audio/video not crap out
|
||||
var activeCall = CallHandler.getAnyActiveCall();
|
||||
var callForRoom = CallHandler.getCallForRoom(selectedRoomId);
|
||||
var showCall = (activeCall && activeCall.call_state === 'connected' && !callForRoom);
|
||||
this.setState({
|
||||
showCallElement: showCall
|
||||
});
|
||||
_onMoveFocus: function(up) {
|
||||
var element = this.focusedElement;
|
||||
|
||||
// unclear why this isn't needed
|
||||
// var descending = (up == this.focusDirection) ? this.focusDescending : !this.focusDescending;
|
||||
// this.focusDirection = up;
|
||||
|
||||
var descending = false; // are we currently descending or ascending through the DOM tree?
|
||||
var classes;
|
||||
|
||||
do {
|
||||
var child = up ? element.lastElementChild : element.firstElementChild;
|
||||
var sibling = up ? element.previousElementSibling : element.nextElementSibling;
|
||||
|
||||
if (descending) {
|
||||
if (child) {
|
||||
element = child;
|
||||
}
|
||||
else if (sibling) {
|
||||
element = sibling;
|
||||
}
|
||||
else {
|
||||
descending = false;
|
||||
element = element.parentElement;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (sibling) {
|
||||
element = sibling;
|
||||
descending = true;
|
||||
}
|
||||
else {
|
||||
element = element.parentElement;
|
||||
}
|
||||
}
|
||||
|
||||
if (element) {
|
||||
classes = element.classList;
|
||||
if (classes.contains("mx_LeftPanel")) { // we hit the top
|
||||
element = up ? element.lastElementChild : element.firstElementChild;
|
||||
descending = true;
|
||||
}
|
||||
}
|
||||
|
||||
} while(element && !(
|
||||
classes.contains("mx_RoomTile") ||
|
||||
classes.contains("mx_SearchBox_search") ||
|
||||
classes.contains("mx_RoomSubList_ellipsis")));
|
||||
|
||||
if (element) {
|
||||
element.focus();
|
||||
this.focusedElement = element;
|
||||
this.focusedDescending = descending;
|
||||
}
|
||||
},
|
||||
|
||||
onHideClick: function() {
|
||||
|
@ -75,52 +157,37 @@ var LeftPanel = React.createClass({
|
|||
});
|
||||
},
|
||||
|
||||
onCallViewClick: function() {
|
||||
var call = CallHandler.getAnyActiveCall();
|
||||
if (call) {
|
||||
dis.dispatch({
|
||||
action: 'view_room',
|
||||
room_id: call.groupRoomId || call.roomId,
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
onSearch: function(term) {
|
||||
this.setState({ searchFilter: term });
|
||||
},
|
||||
|
||||
render: function() {
|
||||
var RoomList = sdk.getComponent('rooms.RoomList');
|
||||
var BottomLeftMenu = sdk.getComponent('structures.BottomLeftMenu');
|
||||
var SearchBox = sdk.getComponent('structures.SearchBox');
|
||||
const RoomList = sdk.getComponent('rooms.RoomList');
|
||||
const BottomLeftMenu = sdk.getComponent('structures.BottomLeftMenu');
|
||||
const CallPreview = sdk.getComponent('voip.CallPreview');
|
||||
|
||||
var collapseButton;
|
||||
var classes = "mx_LeftPanel mx_fadable";
|
||||
if (this.props.collapsed) {
|
||||
classes += " collapsed";
|
||||
}
|
||||
else {
|
||||
// Hide the collapse button until we work out how to display it in the new skin
|
||||
// collapseButton = <img className="mx_LeftPanel_hideButton" onClick={ this.onHideClick } src="img/hide.png" width="12" height="20" alt="<"/>
|
||||
let topBox;
|
||||
if (MatrixClientPeg.get().isGuest()) {
|
||||
const LoginBox = sdk.getComponent('structures.LoginBox');
|
||||
topBox = <LoginBox collapsed={ this.props.collapsed }/>;
|
||||
} else {
|
||||
const SearchBox = sdk.getComponent('structures.SearchBox');
|
||||
topBox = <SearchBox collapsed={ this.props.collapsed } onSearch={ this.onSearch } />;
|
||||
}
|
||||
|
||||
var callPreview;
|
||||
if (this.state.showCallElement && !this.props.collapsed) {
|
||||
var CallView = sdk.getComponent('voip.CallView');
|
||||
callPreview = (
|
||||
<CallView
|
||||
className="mx_LeftPanel_callView" showVoice={true} onClick={this.onCallViewClick}
|
||||
ConferenceHandler={VectorConferenceHandler} />
|
||||
);
|
||||
}
|
||||
let classes = classNames(
|
||||
"mx_LeftPanel", "mx_fadable",
|
||||
{
|
||||
"collapsed": this.props.collapsed,
|
||||
"mx_fadable_faded": this.props.disabled,
|
||||
}
|
||||
);
|
||||
|
||||
return (
|
||||
<aside className={classes} style={{ opacity: this.props.opacity }}>
|
||||
<SearchBox collapsed={ this.props.collapsed } onSearch={ this.onSearch } />
|
||||
{ collapseButton }
|
||||
{ callPreview }
|
||||
<aside className={classes} onKeyDown={ this._onKeyDown } onFocus={ this._onFocus } onBlur={ this._onBlur }>
|
||||
{ topBox }
|
||||
<CallPreview ConferenceHandler={VectorConferenceHandler} />
|
||||
<RoomList
|
||||
selectedRoom={this.props.selectedRoom}
|
||||
collapsed={this.props.collapsed}
|
||||
searchFilter={this.state.searchFilter}
|
||||
ConferenceHandler={VectorConferenceHandler} />
|
||||
|
@ -130,4 +197,4 @@ var LeftPanel = React.createClass({
|
|||
}
|
||||
});
|
||||
|
||||
module.exports = DragDropContext(HTML5Backend)(LeftPanel);
|
||||
module.exports = LeftPanel;
|
||||
|
|
93
src/components/structures/LoginBox.js
Normal file
93
src/components/structures/LoginBox.js
Normal file
|
@ -0,0 +1,93 @@
|
|||
/*
|
||||
Copyright 2017 Vector Creations Ltd
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
var React = require('react');
|
||||
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
||||
var sdk = require('matrix-react-sdk')
|
||||
var dis = require('matrix-react-sdk/lib/dispatcher');
|
||||
var rate_limited_func = require('matrix-react-sdk/lib/ratelimitedfunc');
|
||||
var AccessibleButton = require('matrix-react-sdk/lib/components/views/elements/AccessibleButton');
|
||||
|
||||
module.exports = React.createClass({
|
||||
displayName: 'LoginBox',
|
||||
|
||||
propTypes: {
|
||||
collapsed: React.PropTypes.bool,
|
||||
},
|
||||
|
||||
onToggleCollapse: function(show) {
|
||||
if (show) {
|
||||
dis.dispatch({
|
||||
action: 'show_left_panel',
|
||||
});
|
||||
}
|
||||
else {
|
||||
dis.dispatch({
|
||||
action: 'hide_left_panel',
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
onLoginClick: function() {
|
||||
dis.dispatch({ action: 'start_login' });
|
||||
},
|
||||
|
||||
onRegisterClick: function() {
|
||||
dis.dispatch({ action: 'start_registration' });
|
||||
},
|
||||
|
||||
render: function() {
|
||||
var TintableSvg = sdk.getComponent('elements.TintableSvg');
|
||||
|
||||
var toggleCollapse;
|
||||
if (this.props.collapsed) {
|
||||
toggleCollapse =
|
||||
<AccessibleButton className="mx_SearchBox_maximise" onClick={ this.onToggleCollapse.bind(this, true) }>
|
||||
<TintableSvg src="img/maximise.svg" width="10" height="16" alt="Expand panel"/>
|
||||
</AccessibleButton>
|
||||
}
|
||||
else {
|
||||
toggleCollapse =
|
||||
<AccessibleButton className="mx_SearchBox_minimise" onClick={ this.onToggleCollapse.bind(this, false) }>
|
||||
<TintableSvg src="img/minimise.svg" width="10" height="16" alt="Collapse panel"/>
|
||||
</AccessibleButton>
|
||||
}
|
||||
|
||||
var loginButton;
|
||||
if (!this.props.collapsed) {
|
||||
loginButton = (
|
||||
<div className="mx_LoginBox_loginButton_wrapper">
|
||||
<AccessibleButton className="mx_LoginBox_loginButton" element="button" onClick={this.onLoginClick}>
|
||||
{ _t("Login") }
|
||||
</AccessibleButton>
|
||||
<AccessibleButton className="mx_LoginBox_registerButton" element="button" onClick={this.onRegisterClick}>
|
||||
{ _t("Register") }
|
||||
</AccessibleButton>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
var self = this;
|
||||
return (
|
||||
<div className="mx_SearchBox mx_LoginBox">
|
||||
{ loginButton }
|
||||
{ toggleCollapse }
|
||||
</div>
|
||||
);
|
||||
}
|
||||
});
|
|
@ -1,5 +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,125 +16,178 @@ 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 classNames from 'classnames';
|
||||
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
||||
import sdk from 'matrix-react-sdk';
|
||||
import dis from 'matrix-react-sdk/lib/dispatcher';
|
||||
import { MatrixClient } from 'matrix-js-sdk';
|
||||
import Analytics from 'matrix-react-sdk/lib/Analytics';
|
||||
import rate_limited_func from 'matrix-react-sdk/lib/ratelimitedfunc';
|
||||
import AccessibleButton from 'matrix-react-sdk/lib/components/views/elements/AccessibleButton';
|
||||
import { showGroupInviteDialog, showGroupAddRoomDialog } from 'matrix-react-sdk/lib/GroupAddressPicker';
|
||||
import GroupStoreCache from 'matrix-react-sdk/lib/stores/GroupStoreCache';
|
||||
|
||||
var React = require('react');
|
||||
var sdk = require('matrix-react-sdk');
|
||||
var Matrix = require("matrix-js-sdk");
|
||||
var dis = require('matrix-react-sdk/lib/dispatcher');
|
||||
var MatrixClientPeg = require("matrix-react-sdk/lib/MatrixClientPeg");
|
||||
var rate_limited_func = require('matrix-react-sdk/lib/ratelimitedfunc');
|
||||
var Modal = require('matrix-react-sdk/lib/Modal');
|
||||
import { formatCount } from 'matrix-react-sdk/lib/utils/FormattingUtils';
|
||||
|
||||
class HeaderButton extends React.Component {
|
||||
constructor() {
|
||||
super();
|
||||
this.onClick = this.onClick.bind(this);
|
||||
}
|
||||
|
||||
onClick(ev) {
|
||||
Analytics.trackEvent(...this.props.analytics);
|
||||
dis.dispatch({
|
||||
action: 'view_right_panel_phase',
|
||||
phase: this.props.clickPhase,
|
||||
});
|
||||
}
|
||||
|
||||
render() {
|
||||
const TintableSvg = sdk.getComponent("elements.TintableSvg");
|
||||
const AccessibleButton = sdk.getComponent("elements.AccessibleButton");
|
||||
|
||||
return <AccessibleButton
|
||||
aria-label={this.props.title}
|
||||
title={this.props.title}
|
||||
className="mx_RightPanel_headerButton"
|
||||
onClick={this.onClick} >
|
||||
|
||||
<div className="mx_RightPanel_headerButton_badge">
|
||||
{ this.props.badge ? this.props.badge : <span> </span> }
|
||||
</div>
|
||||
<TintableSvg src={this.props.iconSrc} width="25" height="25"/>
|
||||
{ this.props.isHighlighted ? <div className="mx_RightPanel_headerButton_highlight"></div> : <div/> }
|
||||
|
||||
</AccessibleButton>;
|
||||
}
|
||||
}
|
||||
|
||||
HeaderButton.propTypes = {
|
||||
// Whether this button is highlighted
|
||||
isHighlighted: PropTypes.bool.isRequired,
|
||||
// The phase to swap to when the button is clicked
|
||||
clickPhase: PropTypes.string.isRequired,
|
||||
// The source file of the icon to display
|
||||
iconSrc: PropTypes.string.isRequired,
|
||||
|
||||
// The badge to display above the icon
|
||||
badge: PropTypes.node,
|
||||
// The parameters to track the click event
|
||||
analytics: PropTypes.arrayOf(PropTypes.string).isRequired,
|
||||
|
||||
// Button title
|
||||
title: PropTypes.string.isRequired,
|
||||
};
|
||||
|
||||
module.exports = React.createClass({
|
||||
displayName: 'RightPanel',
|
||||
|
||||
propTypes: {
|
||||
userId: React.PropTypes.string, // if showing an orphaned MemberInfo page, this is set
|
||||
// TODO: We're trying to move away from these being props, but we need to know
|
||||
// whether we should be displaying a room or group member list
|
||||
roomId: React.PropTypes.string, // if showing panels for a given room, this is set
|
||||
groupId: React.PropTypes.string, // if showing panels for a given group, this is set
|
||||
collapsed: React.PropTypes.bool, // currently unused property to request for a minimized view of the panel
|
||||
},
|
||||
|
||||
Phase : {
|
||||
MemberList: 'MemberList',
|
||||
contextTypes: {
|
||||
matrixClient: PropTypes.instanceOf(MatrixClient),
|
||||
},
|
||||
|
||||
Phase: {
|
||||
RoomMemberList: 'RoomMemberList',
|
||||
GroupMemberList: 'GroupMemberList',
|
||||
GroupRoomList: 'GroupRoomList',
|
||||
GroupRoomInfo: 'GroupRoomInfo',
|
||||
FilePanel: 'FilePanel',
|
||||
NotificationPanel: 'NotificationPanel',
|
||||
MemberInfo: 'MemberInfo',
|
||||
RoomMemberInfo: 'RoomMemberInfo',
|
||||
GroupMemberInfo: 'GroupMemberInfo',
|
||||
},
|
||||
|
||||
componentWillMount: function() {
|
||||
this.dispatcherRef = dis.register(this.onAction);
|
||||
var cli = MatrixClientPeg.get();
|
||||
const cli = this.context.matrixClient;
|
||||
cli.on("RoomState.members", this.onRoomStateMember);
|
||||
this._initGroupStore(this.props.groupId);
|
||||
},
|
||||
|
||||
componentWillUnmount: function() {
|
||||
dis.unregister(this.dispatcherRef);
|
||||
if (MatrixClientPeg.get()) {
|
||||
MatrixClientPeg.get().removeListener("RoomState.members", this.onRoomStateMember);
|
||||
if (this.context.matrixClient) {
|
||||
this.context.matrixClient.removeListener("RoomState.members", this.onRoomStateMember);
|
||||
}
|
||||
this._unregisterGroupStore();
|
||||
},
|
||||
|
||||
getInitialState: function() {
|
||||
if (this.props.userId) {
|
||||
var member = new Matrix.RoomMember(null, this.props.userId);
|
||||
return {
|
||||
phase: this.Phase.MemberInfo,
|
||||
member: member,
|
||||
}
|
||||
}
|
||||
else {
|
||||
return {
|
||||
phase: this.Phase.MemberList
|
||||
}
|
||||
return {
|
||||
phase: this.props.groupId ? this.Phase.GroupMemberList : this.Phase.RoomMemberList,
|
||||
isUserPrivilegedInGroup: null,
|
||||
};
|
||||
},
|
||||
|
||||
componentWillReceiveProps(newProps) {
|
||||
if (newProps.groupId !== this.props.groupId) {
|
||||
this._unregisterGroupStore();
|
||||
this._initGroupStore(newProps.groupId);
|
||||
}
|
||||
},
|
||||
|
||||
onMemberListButtonClick: function() {
|
||||
if (this.props.collapsed || this.state.phase !== this.Phase.MemberList) {
|
||||
this.setState({ phase: this.Phase.MemberList });
|
||||
dis.dispatch({
|
||||
action: 'show_right_panel',
|
||||
});
|
||||
}
|
||||
else {
|
||||
dis.dispatch({
|
||||
action: 'hide_right_panel',
|
||||
});
|
||||
_initGroupStore(groupId) {
|
||||
if (!groupId) return;
|
||||
this._groupStore = GroupStoreCache.getGroupStore(groupId);
|
||||
this._groupStore.registerListener(this.onGroupStoreUpdated);
|
||||
},
|
||||
|
||||
_unregisterGroupStore() {
|
||||
if (this._groupStore) {
|
||||
this._groupStore.unregisterListener(this.onGroupStoreUpdated);
|
||||
}
|
||||
},
|
||||
|
||||
onFileListButtonClick: function() {
|
||||
if (this.props.collapsed || this.state.phase !== this.Phase.FilePanel) {
|
||||
this.setState({ phase: this.Phase.FilePanel });
|
||||
dis.dispatch({
|
||||
action: 'show_right_panel',
|
||||
});
|
||||
}
|
||||
else {
|
||||
dis.dispatch({
|
||||
action: 'hide_right_panel',
|
||||
});
|
||||
}
|
||||
onGroupStoreUpdated: function() {
|
||||
this.setState({
|
||||
isUserPrivilegedInGroup: this._groupStore.isUserPrivileged(),
|
||||
});
|
||||
},
|
||||
|
||||
onNotificationListButtonClick: function() {
|
||||
if (this.props.collapsed || this.state.phase !== this.Phase.NotificationPanel) {
|
||||
this.setState({ phase: this.Phase.NotificationPanel });
|
||||
dis.dispatch({
|
||||
action: 'show_right_panel',
|
||||
});
|
||||
}
|
||||
else {
|
||||
dis.dispatch({
|
||||
action: 'hide_right_panel',
|
||||
});
|
||||
}
|
||||
onCollapseClick: function() {
|
||||
dis.dispatch({
|
||||
action: 'hide_right_panel',
|
||||
});
|
||||
},
|
||||
|
||||
onInviteButtonClick: function() {
|
||||
if (MatrixClientPeg.get().isGuest()) {
|
||||
var NeedToRegisterDialog = sdk.getComponent("dialogs.NeedToRegisterDialog");
|
||||
Modal.createDialog(NeedToRegisterDialog, {
|
||||
title: "Please Register",
|
||||
description: "Guest users can't invite users. Please register to invite."
|
||||
});
|
||||
if (this.context.matrixClient.isGuest()) {
|
||||
dis.dispatch({action: 'view_set_mxid'});
|
||||
return;
|
||||
}
|
||||
|
||||
// call ChatInviteDialog
|
||||
dis.dispatch({
|
||||
action: 'view_invite',
|
||||
roomId: this.props.roomId,
|
||||
});
|
||||
if (this.state.phase === this.Phase.GroupMemberList) {
|
||||
showGroupInviteDialog(this.props.groupId);
|
||||
} else if (this.state.phase === this.Phase.GroupRoomList) {
|
||||
showGroupAddRoomDialog(this.props.groupId).then(() => {
|
||||
this.forceUpdate();
|
||||
});
|
||||
} else {
|
||||
// call AddressPickerDialog
|
||||
dis.dispatch({
|
||||
action: 'view_invite',
|
||||
roomId: this.props.roomId,
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
onRoomStateMember: function(ev, state, member) {
|
||||
// redraw the badge on the membership list
|
||||
if (this.state.phase == this.Phase.MemberList && member.roomId === this.props.roomId) {
|
||||
if (this.state.phase == this.Phase.RoomMemberList && member.roomId === this.props.roomId) {
|
||||
this._delayedUpdate();
|
||||
}
|
||||
else if (this.state.phase === this.Phase.MemberInfo && member.roomId === this.props.roomId &&
|
||||
else if (this.state.phase === this.Phase.RoomMemberInfo && member.roomId === this.props.roomId &&
|
||||
member.userId === this.state.member.userId) {
|
||||
// refresh the member info (e.g. new power level)
|
||||
this._delayedUpdate();
|
||||
|
@ -150,107 +205,168 @@ module.exports = React.createClass({
|
|||
});
|
||||
if (payload.member) {
|
||||
this.setState({
|
||||
phase: this.Phase.MemberInfo,
|
||||
phase: this.Phase.RoomMemberInfo,
|
||||
member: payload.member,
|
||||
});
|
||||
} else {
|
||||
if (this.props.roomId) {
|
||||
this.setState({
|
||||
phase: this.Phase.RoomMemberList,
|
||||
});
|
||||
} else if (this.props.groupId) {
|
||||
this.setState({
|
||||
phase: this.Phase.GroupMemberList,
|
||||
member: payload.member,
|
||||
});
|
||||
}
|
||||
}
|
||||
else {
|
||||
this.setState({
|
||||
phase: this.Phase.MemberList
|
||||
});
|
||||
}
|
||||
}
|
||||
else if (payload.action === "view_room") {
|
||||
if (this.state.phase === this.Phase.MemberInfo) {
|
||||
this.setState({
|
||||
phase: this.Phase.MemberList
|
||||
});
|
||||
}
|
||||
} else if (payload.action === "view_group") {
|
||||
this.setState({
|
||||
phase: this.Phase.GroupMemberList,
|
||||
member: null,
|
||||
});
|
||||
} else if (payload.action === "view_group_room") {
|
||||
this.setState({
|
||||
phase: this.Phase.GroupRoomInfo,
|
||||
groupRoomId: payload.groupRoomId,
|
||||
});
|
||||
} else if (payload.action === "view_group_room_list") {
|
||||
this.setState({
|
||||
phase: this.Phase.GroupRoomList,
|
||||
});
|
||||
} else if (payload.action === "view_group_user") {
|
||||
this.setState({
|
||||
phase: this.Phase.GroupMemberInfo,
|
||||
member: payload.member,
|
||||
});
|
||||
} else if (payload.action === "view_room") {
|
||||
this.setState({
|
||||
phase: this.Phase.RoomMemberList,
|
||||
});
|
||||
} else if (payload.action === "view_right_panel_phase") {
|
||||
this.setState({
|
||||
phase: payload.phase,
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
render: function() {
|
||||
var MemberList = sdk.getComponent('rooms.MemberList');
|
||||
var NotificationPanel = sdk.getComponent('structures.NotificationPanel');
|
||||
var FilePanel = sdk.getComponent('structures.FilePanel');
|
||||
var TintableSvg = sdk.getComponent("elements.TintableSvg");
|
||||
var buttonGroup;
|
||||
var inviteGroup;
|
||||
var panel;
|
||||
const MemberList = sdk.getComponent('rooms.MemberList');
|
||||
const MemberInfo = sdk.getComponent('rooms.MemberInfo');
|
||||
const NotificationPanel = sdk.getComponent('structures.NotificationPanel');
|
||||
const FilePanel = sdk.getComponent('structures.FilePanel');
|
||||
|
||||
var filesHighlight;
|
||||
var membersHighlight;
|
||||
var notificationsHighlight;
|
||||
if (!this.props.collapsed) {
|
||||
if (this.state.phase == this.Phase.MemberList || this.state.phase === this.Phase.MemberInfo) {
|
||||
membersHighlight = <div className="mx_RightPanel_headerButton_highlight"></div>;
|
||||
}
|
||||
else if (this.state.phase == this.Phase.FilePanel) {
|
||||
filesHighlight = <div className="mx_RightPanel_headerButton_highlight"></div>;
|
||||
}
|
||||
else if (this.state.phase == this.Phase.NotificationPanel) {
|
||||
notificationsHighlight = <div className="mx_RightPanel_headerButton_highlight"></div>;
|
||||
}
|
||||
}
|
||||
const GroupMemberList = sdk.getComponent('groups.GroupMemberList');
|
||||
const GroupMemberInfo = sdk.getComponent('groups.GroupMemberInfo');
|
||||
const GroupRoomList = sdk.getComponent('groups.GroupRoomList');
|
||||
const GroupRoomInfo = sdk.getComponent('groups.GroupRoomInfo');
|
||||
|
||||
var membersBadge;
|
||||
if ((this.state.phase == this.Phase.MemberList || this.state.phase === this.Phase.MemberInfo) && this.props.roomId) {
|
||||
var cli = MatrixClientPeg.get();
|
||||
var room = cli.getRoom(this.props.roomId);
|
||||
var user_is_in_room;
|
||||
const TintableSvg = sdk.getComponent("elements.TintableSvg");
|
||||
|
||||
let inviteGroup;
|
||||
|
||||
let membersBadge;
|
||||
if ((this.state.phase == this.Phase.RoomMemberList || this.state.phase === this.Phase.RoomMemberInfo)
|
||||
&& this.props.roomId
|
||||
) {
|
||||
const cli = this.context.matrixClient;
|
||||
const room = cli.getRoom(this.props.roomId);
|
||||
let userIsInRoom;
|
||||
if (room) {
|
||||
membersBadge = room.getJoinedMembers().length;
|
||||
user_is_in_room = room.hasMembershipState(
|
||||
MatrixClientPeg.get().credentials.userId, 'join'
|
||||
membersBadge = formatCount(room.getJoinedMembers().length);
|
||||
userIsInRoom = room.hasMembershipState(
|
||||
this.context.matrixClient.credentials.userId, 'join',
|
||||
);
|
||||
}
|
||||
|
||||
if (user_is_in_room) {
|
||||
if (userIsInRoom) {
|
||||
inviteGroup =
|
||||
<div className="mx_RightPanel_invite" onClick={ this.onInviteButtonClick } >
|
||||
<AccessibleButton className="mx_RightPanel_invite" onClick={ this.onInviteButtonClick } >
|
||||
<div className="mx_RightPanel_icon" >
|
||||
<TintableSvg src="img/icon-invite-people.svg" width="35" height="35" />
|
||||
</div>
|
||||
<div className="mx_RightPanel_message">Invite to this room</div>
|
||||
</div>;
|
||||
<div className="mx_RightPanel_message">{ _t('Invite to this room') }</div>
|
||||
</AccessibleButton>;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
const isPhaseGroup = [
|
||||
this.Phase.GroupMemberInfo,
|
||||
this.Phase.GroupMemberList
|
||||
].includes(this.state.phase);
|
||||
|
||||
let headerButtons = [];
|
||||
if (this.props.roomId) {
|
||||
buttonGroup =
|
||||
<div className="mx_RightPanel_headerButtonGroup">
|
||||
<div className="mx_RightPanel_headerButton" title="Members" onClick={ this.onMemberListButtonClick }>
|
||||
<div className="mx_RightPanel_headerButton_badge">{ membersBadge ? membersBadge : <span> </span>}</div>
|
||||
<TintableSvg src="img/icons-people.svg" width="25" height="25"/>
|
||||
{ membersHighlight }
|
||||
</div>
|
||||
<div className="mx_RightPanel_headerButton mx_RightPanel_filebutton" title="Files" onClick={ this.onFileListButtonClick }>
|
||||
<div className="mx_RightPanel_headerButton_badge"> </div>
|
||||
<TintableSvg src="img/icons-files.svg" width="25" height="25"/>
|
||||
{ filesHighlight }
|
||||
</div>
|
||||
<div className="mx_RightPanel_headerButton mx_RightPanel_notificationbutton" title="Notifications" onClick={ this.onNotificationListButtonClick }>
|
||||
<div className="mx_RightPanel_headerButton_badge"> </div>
|
||||
<TintableSvg src="img/icons-notifications.svg" width="25" height="25"/>
|
||||
{ notificationsHighlight }
|
||||
</div>
|
||||
</div>;
|
||||
headerButtons = [
|
||||
<HeaderButton key="_membersButton" title={_t('Members')} iconSrc="img/icons-people.svg"
|
||||
isHighlighted={[this.Phase.RoomMemberList, this.Phase.RoomMemberInfo].includes(this.state.phase)}
|
||||
clickPhase={this.Phase.RoomMemberList}
|
||||
badge={membersBadge}
|
||||
analytics={['Right Panel', 'Member List Button', 'click']}
|
||||
/>,
|
||||
<HeaderButton key="_filesButton" title={_t('Files')} iconSrc="img/icons-files.svg"
|
||||
isHighlighted={this.state.phase === this.Phase.FilePanel}
|
||||
clickPhase={this.Phase.FilePanel}
|
||||
analytics={['Right Panel', 'File List Button', 'click']}
|
||||
/>,
|
||||
<HeaderButton key="_notifsButton" title={_t('Notifications')} iconSrc="img/icons-notifications.svg"
|
||||
isHighlighted={this.state.phase === this.Phase.NotificationPanel}
|
||||
clickPhase={this.Phase.NotificationPanel}
|
||||
analytics={['Right Panel', 'Notification List Button', 'click']}
|
||||
/>,
|
||||
];
|
||||
} else if (this.props.groupId) {
|
||||
headerButtons = [
|
||||
<HeaderButton key="_groupMembersButton" title={_t('Members')} iconSrc="img/icons-people.svg"
|
||||
isHighlighted={isPhaseGroup}
|
||||
clickPhase={this.Phase.GroupMemberList}
|
||||
analytics={['Right Panel', 'Group Member List Button', 'click']}
|
||||
/>,
|
||||
<HeaderButton key="_roomsButton" title={_t('Rooms')} iconSrc="img/icons-room.svg"
|
||||
isHighlighted={[this.Phase.GroupRoomList, this.Phase.GroupRoomInfo].includes(this.state.phase)}
|
||||
clickPhase={this.Phase.GroupRoomList}
|
||||
analytics={['Right Panel', 'Group Room List Button', 'click']}
|
||||
/>,
|
||||
];
|
||||
}
|
||||
|
||||
if (this.props.roomId || this.props.groupId) {
|
||||
// Hiding the right panel hides it completely and relies on an 'expand' button
|
||||
// being put in the RoomHeader or GroupView header, so only show the minimise
|
||||
// button on these 2 screens or you won't be able to re-expand the panel.
|
||||
headerButtons.push(
|
||||
<div className="mx_RightPanel_headerButton mx_RightPanel_collapsebutton" key="_minimizeButton"
|
||||
title={ _t("Hide panel") } aria-label={ _t("Hide panel") } onClick={ this.onCollapseClick }
|
||||
>
|
||||
<TintableSvg src="img/minimise.svg" width="10" height="16"/>
|
||||
</div>,
|
||||
);
|
||||
}
|
||||
|
||||
let panel = <div />;
|
||||
if (!this.props.collapsed) {
|
||||
if(this.props.roomId && this.state.phase == this.Phase.MemberList) {
|
||||
panel = <MemberList roomId={this.props.roomId} key={this.props.roomId} />
|
||||
}
|
||||
else if(this.state.phase == this.Phase.MemberInfo) {
|
||||
var MemberInfo = sdk.getComponent('rooms.MemberInfo');
|
||||
panel = <MemberInfo member={this.state.member} key={this.props.roomId || this.props.userId} />
|
||||
}
|
||||
else if (this.state.phase == this.Phase.NotificationPanel) {
|
||||
panel = <NotificationPanel />
|
||||
}
|
||||
else if (this.state.phase == this.Phase.FilePanel) {
|
||||
panel = <FilePanel roomId={this.props.roomId} />
|
||||
if (this.props.roomId && this.state.phase == this.Phase.RoomMemberList) {
|
||||
panel = <MemberList roomId={this.props.roomId} key={this.props.roomId} />;
|
||||
} else if (this.props.groupId && this.state.phase == this.Phase.GroupMemberList) {
|
||||
panel = <GroupMemberList groupId={this.props.groupId} key={this.props.groupId} />;
|
||||
} else if (this.state.phase === this.Phase.GroupRoomList) {
|
||||
panel = <GroupRoomList groupId={this.props.groupId} key={this.props.groupId} />;
|
||||
} else if (this.state.phase == this.Phase.RoomMemberInfo) {
|
||||
panel = <MemberInfo member={this.state.member} key={this.props.roomId || this.state.member.userId} />;
|
||||
} else if (this.state.phase == this.Phase.GroupMemberInfo) {
|
||||
panel = <GroupMemberInfo
|
||||
groupMember={this.state.member}
|
||||
groupId={this.props.groupId}
|
||||
key={this.state.member.user_id} />;
|
||||
} else if (this.state.phase == this.Phase.GroupRoomInfo) {
|
||||
panel = <GroupRoomInfo
|
||||
groupRoomId={this.state.groupRoomId}
|
||||
groupId={this.props.groupId}
|
||||
key={this.state.groupRoomId} />;
|
||||
} else if (this.state.phase == this.Phase.NotificationPanel) {
|
||||
panel = <NotificationPanel />;
|
||||
} else if (this.state.phase == this.Phase.FilePanel) {
|
||||
panel = <FilePanel roomId={this.props.roomId} />;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -258,15 +374,38 @@ module.exports = React.createClass({
|
|||
panel = <div className="mx_RightPanel_blank"></div>;
|
||||
}
|
||||
|
||||
var classes = "mx_RightPanel mx_fadable";
|
||||
if (this.props.collapsed) {
|
||||
classes += " collapsed";
|
||||
if (this.props.groupId && this.state.isUserPrivilegedInGroup) {
|
||||
inviteGroup = isPhaseGroup ? (
|
||||
<AccessibleButton className="mx_RightPanel_invite" onClick={ this.onInviteButtonClick } >
|
||||
<div className="mx_RightPanel_icon" >
|
||||
<TintableSvg src="img/icon-invite-people.svg" width="35" height="35" />
|
||||
</div>
|
||||
<div className="mx_RightPanel_message">{ _t('Invite to this community') }</div>
|
||||
</AccessibleButton>
|
||||
) : (
|
||||
<AccessibleButton className="mx_RightPanel_invite" onClick={ this.onInviteButtonClick } >
|
||||
<div className="mx_RightPanel_icon" >
|
||||
<TintableSvg src="img/icons-room-add.svg" width="35" height="35" />
|
||||
</div>
|
||||
<div className="mx_RightPanel_message">{ _t('Add rooms to this community') }</div>
|
||||
</AccessibleButton>
|
||||
);
|
||||
}
|
||||
|
||||
let classes = classNames(
|
||||
"mx_RightPanel", "mx_fadable",
|
||||
{
|
||||
"collapsed": this.props.collapsed,
|
||||
"mx_fadable_faded": this.props.disabled,
|
||||
}
|
||||
);
|
||||
|
||||
return (
|
||||
<aside className={classes} style={{ opacity: this.props.opacity }}>
|
||||
<aside className={classes}>
|
||||
<div className="mx_RightPanel_header">
|
||||
{ buttonGroup }
|
||||
<div className="mx_RightPanel_headerButtonGroup">
|
||||
{headerButtons}
|
||||
</div>
|
||||
</div>
|
||||
{ panel }
|
||||
<div className="mx_RightPanel_footer">
|
||||
|
@ -274,6 +413,5 @@ module.exports = React.createClass({
|
|||
</div>
|
||||
</aside>
|
||||
);
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
|
|
|
@ -23,13 +23,14 @@ var ContentRepo = require("matrix-js-sdk").ContentRepo;
|
|||
var Modal = require('matrix-react-sdk/lib/Modal');
|
||||
var sdk = require('matrix-react-sdk');
|
||||
var dis = require('matrix-react-sdk/lib/dispatcher');
|
||||
var GeminiScrollbar = require('react-gemini-scrollbar');
|
||||
|
||||
var linkify = require('linkifyjs');
|
||||
var linkifyString = require('linkifyjs/string');
|
||||
var linkifyMatrix = require('matrix-react-sdk/lib/linkify-matrix');
|
||||
var sanitizeHtml = require('sanitize-html');
|
||||
var q = require('q');
|
||||
import Promise from 'bluebird';
|
||||
|
||||
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
||||
|
||||
import {instanceForInstanceId, protocolNameForInstanceId} from '../../utils/DirectoryUtils';
|
||||
|
||||
|
@ -61,6 +62,7 @@ module.exports = React.createClass({
|
|||
},
|
||||
|
||||
componentWillMount: function() {
|
||||
this._unmounted = false;
|
||||
this.nextBatch = null;
|
||||
this.filterTimeout = null;
|
||||
this.scrollPanel = null;
|
||||
|
@ -71,6 +73,7 @@ module.exports = React.createClass({
|
|||
this.protocols = response;
|
||||
this.setState({protocolsLoading: false});
|
||||
}, (err) => {
|
||||
console.warn(`error loading thirdparty protocols: ${err}`);
|
||||
this.setState({protocolsLoading: false});
|
||||
if (MatrixClientPeg.get().isGuest()) {
|
||||
// Guests currently aren't allowed to use this API, so
|
||||
|
@ -79,25 +82,29 @@ module.exports = React.createClass({
|
|||
return;
|
||||
}
|
||||
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
Modal.createDialog(ErrorDialog, {
|
||||
title: "Failed to get protocol list from Home Server",
|
||||
description: "The Home Server may be too old to support third party networks",
|
||||
Modal.createTrackedDialog('Failed to get protocol list from Home Server', '', ErrorDialog, {
|
||||
title: _t('Failed to get protocol list from Home Server'),
|
||||
description: _t('The Home Server may be too old to support third party networks'),
|
||||
});
|
||||
});
|
||||
|
||||
// dis.dispatch({
|
||||
// action: 'ui_opacity',
|
||||
// sideOpacity: 0.3,
|
||||
// middleOpacity: 0.3,
|
||||
// action: 'panel_disable',
|
||||
// sideDisabled: true,
|
||||
// middleDisabled: true,
|
||||
// });
|
||||
},
|
||||
|
||||
componentWillUnmount: function() {
|
||||
// dis.dispatch({
|
||||
// action: 'ui_opacity',
|
||||
// sideOpacity: 1.0,
|
||||
// middleOpacity: 1.0,
|
||||
// action: 'panel_disable',
|
||||
// sideDisabled: false,
|
||||
// middleDisabled: false,
|
||||
// });
|
||||
if (this.filterTimeout) {
|
||||
clearTimeout(this.filterTimeout);
|
||||
}
|
||||
this._unmounted = true;
|
||||
},
|
||||
|
||||
refreshRoomList: function() {
|
||||
|
@ -110,7 +117,7 @@ module.exports = React.createClass({
|
|||
},
|
||||
|
||||
getMoreRooms: function() {
|
||||
if (!MatrixClientPeg.get()) return q();
|
||||
if (!MatrixClientPeg.get()) return Promise.resolve();
|
||||
|
||||
const my_filter_string = this.state.filterString;
|
||||
const my_server = this.state.roomServer;
|
||||
|
@ -140,6 +147,11 @@ module.exports = React.createClass({
|
|||
return;
|
||||
}
|
||||
|
||||
if (this._unmounted) {
|
||||
// if we've been unmounted, we don't care either.
|
||||
return;
|
||||
}
|
||||
|
||||
this.nextBatch = data.next_batch;
|
||||
this.setState((s) => {
|
||||
s.publicRooms.push(...data.chunk);
|
||||
|
@ -157,12 +169,18 @@ module.exports = React.createClass({
|
|||
// requests either
|
||||
return;
|
||||
}
|
||||
|
||||
if (this._unmounted) {
|
||||
// if we've been unmounted, we don't care either.
|
||||
return;
|
||||
}
|
||||
|
||||
this.setState({ loading: false });
|
||||
console.error("Failed to get publicRooms: %s", JSON.stringify(err));
|
||||
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
Modal.createDialog(ErrorDialog, {
|
||||
title: "Failed to get public room list",
|
||||
description: err.message
|
||||
Modal.createTrackedDialog('Failed to get public room list', '', ErrorDialog, {
|
||||
title: _t('Failed to get public room list'),
|
||||
description: ((err && err.message) ? err.message : _t('The server may be unavailable or overloaded'))
|
||||
});
|
||||
});
|
||||
},
|
||||
|
@ -176,41 +194,42 @@ module.exports = React.createClass({
|
|||
*/
|
||||
removeFromDirectory: function(room) {
|
||||
var alias = get_display_alias_for_room(room);
|
||||
var name = room.name || alias || "Unnamed room";
|
||||
var name = room.name || alias || _t('Unnamed room');
|
||||
|
||||
var QuestionDialog = sdk.getComponent("dialogs.QuestionDialog");
|
||||
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
|
||||
var desc;
|
||||
if (alias) {
|
||||
desc = `Delete the room alias '${alias}' and remove '${name}' from the directory?`;
|
||||
desc = _t('Delete the room alias %(alias)s and remove %(name)s from the directory?', {alias: alias, name: name});
|
||||
} else {
|
||||
desc = `Remove '${name}' from the directory?`;
|
||||
desc = _t('Remove %(name)s from the directory?', {name: name});
|
||||
}
|
||||
|
||||
Modal.createDialog(QuestionDialog, {
|
||||
title: "Remove from Directory",
|
||||
Modal.createTrackedDialog('Remove from Directory', '', QuestionDialog, {
|
||||
title: _t('Remove from Directory'),
|
||||
description: desc,
|
||||
onFinished: (should_delete) => {
|
||||
if (!should_delete) return;
|
||||
|
||||
var Loader = sdk.getComponent("elements.Spinner");
|
||||
var modal = Modal.createDialog(Loader);
|
||||
var step = `remove '${name}' from the directory.`;
|
||||
var step = _t('remove %(name)s from the directory.', {name: name});
|
||||
|
||||
MatrixClientPeg.get().setRoomDirectoryVisibility(room.room_id, 'private').then(() => {
|
||||
if (!alias) return;
|
||||
step = 'delete the alias.';
|
||||
step = _t('delete the alias.');
|
||||
return MatrixClientPeg.get().deleteAlias(alias);
|
||||
}).done(() => {
|
||||
modal.close();
|
||||
this.refreshRoomList();
|
||||
}, function(err) {
|
||||
}, (err) => {
|
||||
modal.close();
|
||||
this.refreshRoomList();
|
||||
Modal.createDialog(ErrorDialog, {
|
||||
title: "Failed to "+step,
|
||||
description: err.toString()
|
||||
console.error("Failed to " + step + ": " + err);
|
||||
Modal.createTrackedDialog('Remove from Directory Error', '', ErrorDialog, {
|
||||
title: _t('Error'),
|
||||
description: ((err && err.message) ? err.message : _t('The server may be unavailable or overloaded'))
|
||||
});
|
||||
});
|
||||
}
|
||||
|
@ -247,7 +266,7 @@ module.exports = React.createClass({
|
|||
},
|
||||
|
||||
onFillRequest: function(backwards) {
|
||||
if (backwards || !this.nextBatch) return q(false);
|
||||
if (backwards || !this.nextBatch) return Promise.resolve(false);
|
||||
|
||||
return this.getMoreRooms();
|
||||
},
|
||||
|
@ -297,9 +316,9 @@ module.exports = React.createClass({
|
|||
const fields = protocolName ? this._getFieldsForThirdPartyLocation(alias, this.protocols[protocolName], instance) : null;
|
||||
if (!fields) {
|
||||
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
Modal.createDialog(ErrorDialog, {
|
||||
title: "Unable to join network",
|
||||
description: "Riot does not know how to join a room on this network",
|
||||
Modal.createTrackedDialog('Unable to join network', '', ErrorDialog, {
|
||||
title: _t('Unable to join network'),
|
||||
description: _t('Riot does not know how to join a room on this network'),
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
@ -308,16 +327,16 @@ module.exports = React.createClass({
|
|||
this.showRoomAlias(resp[0].alias);
|
||||
} else {
|
||||
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
Modal.createDialog(ErrorDialog, {
|
||||
title: "Room not found",
|
||||
description: "Couldn't find a matching Matrix room",
|
||||
Modal.createTrackedDialog('Room not found', '', ErrorDialog, {
|
||||
title: _t('Room not found'),
|
||||
description: _t('Couldn\'t find a matching Matrix room'),
|
||||
});
|
||||
}
|
||||
}, (e) => {
|
||||
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
Modal.createDialog(ErrorDialog, {
|
||||
title: "Fetching third party location failed",
|
||||
description: "Unable to look up room ID from server",
|
||||
Modal.createTrackedDialog('Fetching third party location failed', '', ErrorDialog, {
|
||||
title: _t('Fetching third party location failed'),
|
||||
description: _t('Unable to look up room ID from server'),
|
||||
});
|
||||
});
|
||||
}
|
||||
|
@ -335,11 +354,7 @@ module.exports = React.createClass({
|
|||
// to the directory.
|
||||
if (MatrixClientPeg.get().isGuest()) {
|
||||
if (!room.world_readable && !room.guest_can_join) {
|
||||
var NeedToRegisterDialog = sdk.getComponent("dialogs.NeedToRegisterDialog");
|
||||
Modal.createDialog(NeedToRegisterDialog, {
|
||||
title: "Failed to join the room",
|
||||
description: "This room is inaccessible to guests. You may be able to join if you register."
|
||||
});
|
||||
dis.dispatch({action: 'view_set_mxid'});
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -352,7 +367,7 @@ module.exports = React.createClass({
|
|||
avatarUrl: room.avatar_url,
|
||||
// XXX: This logic is duplicated from the JS SDK which
|
||||
// would normally decide what the name is.
|
||||
name: room.name || room_alias || "Unnamed room",
|
||||
name: room.name || room_alias || _t('Unnamed room'),
|
||||
};
|
||||
}
|
||||
// It's not really possible to join Matrix rooms by ID because the HS has no way to know
|
||||
|
@ -377,24 +392,24 @@ module.exports = React.createClass({
|
|||
var self = this;
|
||||
var guestRead, guestJoin, perms;
|
||||
for (var i = 0; i < rooms.length; i++) {
|
||||
var name = rooms[i].name || get_display_alias_for_room(rooms[i]) || "Unnamed room";
|
||||
var name = rooms[i].name || get_display_alias_for_room(rooms[i]) || _t('Unnamed room');
|
||||
guestRead = null;
|
||||
guestJoin = null;
|
||||
|
||||
if (rooms[i].world_readable) {
|
||||
guestRead = (
|
||||
<div className="mx_RoomDirectory_perm">World readable</div>
|
||||
<div className="mx_RoomDirectory_perm">{ _t('World readable') }</div>
|
||||
);
|
||||
}
|
||||
if (rooms[i].guest_can_join) {
|
||||
guestJoin = (
|
||||
<div className="mx_RoomDirectory_perm">Guests can join</div>
|
||||
<div className="mx_RoomDirectory_perm">{ _t('Guests can join') }</div>
|
||||
);
|
||||
}
|
||||
|
||||
perms = null;
|
||||
if (guestRead || guestJoin) {
|
||||
perms = <div className="mx_RoomDirectory_perms">{guestRead} {guestJoin}</div>;
|
||||
perms = <div className="mx_RoomDirectory_perms">{guestRead}{guestJoin}</div>;
|
||||
}
|
||||
|
||||
var topic = rooms[i].topic || '';
|
||||
|
@ -459,6 +474,17 @@ module.exports = React.createClass({
|
|||
return fields;
|
||||
},
|
||||
|
||||
/**
|
||||
* called by the parent component when PageUp/Down/etc is pressed.
|
||||
*
|
||||
* We pass it down to the scroll panel.
|
||||
*/
|
||||
handleScrollKey: function(ev) {
|
||||
if (this.scrollPanel) {
|
||||
this.scrollPanel.handleScrollKey(ev);
|
||||
}
|
||||
},
|
||||
|
||||
render: function() {
|
||||
const SimpleRoomHeader = sdk.getComponent('rooms.SimpleRoomHeader');
|
||||
const Loader = sdk.getComponent("elements.Spinner");
|
||||
|
@ -466,7 +492,7 @@ module.exports = React.createClass({
|
|||
if (this.state.protocolsLoading) {
|
||||
return (
|
||||
<div className="mx_RoomDirectory">
|
||||
<SimpleRoomHeader title="Directory" />
|
||||
<SimpleRoomHeader title={ _t('Directory') } />
|
||||
<Loader />
|
||||
</div>
|
||||
);
|
||||
|
@ -484,7 +510,7 @@ module.exports = React.createClass({
|
|||
// request from the scrollpanel because there isn't one
|
||||
let scrollpanel_content;
|
||||
if (rows.length == 0) {
|
||||
scrollpanel_content = <i>No rooms to show</i>;
|
||||
scrollpanel_content = <i>{ _t('No rooms to show') }</i>;
|
||||
} else {
|
||||
scrollpanel_content = <table ref="directory_table" className="mx_RoomDirectory_table">
|
||||
<tbody>
|
||||
|
@ -518,9 +544,9 @@ module.exports = React.createClass({
|
|||
}
|
||||
|
||||
|
||||
let placeholder = 'Search for a room';
|
||||
let placeholder = _t('Search for a room');
|
||||
if (!this.state.instanceId) {
|
||||
placeholder = '#example:' + this.state.roomServer;
|
||||
placeholder = _t('#example') + ':' + this.state.roomServer;
|
||||
} else if (instance_expected_field_type) {
|
||||
placeholder = instance_expected_field_type.placeholder;
|
||||
}
|
||||
|
@ -537,7 +563,7 @@ module.exports = React.createClass({
|
|||
const DirectorySearchBox = sdk.getComponent('elements.DirectorySearchBox');
|
||||
return (
|
||||
<div className="mx_RoomDirectory">
|
||||
<SimpleRoomHeader title="Directory" />
|
||||
<SimpleRoomHeader title={ _t('Directory') } icon="img/icons-directory.svg" />
|
||||
<div className="mx_RoomDirectory_list">
|
||||
<div className="mx_RoomDirectory_listheader">
|
||||
<DirectorySearchBox
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
/*
|
||||
Copyright 2017 Vector Creations Ltd
|
||||
Copyright 2015, 2016 OpenMarket Ltd
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
|
@ -20,12 +21,16 @@ var React = require('react');
|
|||
var ReactDOM = require('react-dom');
|
||||
var classNames = require('classnames');
|
||||
var DropTarget = require('react-dnd').DropTarget;
|
||||
var sdk = require('matrix-react-sdk')
|
||||
var sdk = require('matrix-react-sdk');
|
||||
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
||||
var dis = require('matrix-react-sdk/lib/dispatcher');
|
||||
var Unread = require('matrix-react-sdk/lib/Unread');
|
||||
var MatrixClientPeg = require('matrix-react-sdk/lib/MatrixClientPeg');
|
||||
var RoomNotifs = require('matrix-react-sdk/lib/RoomNotifs');
|
||||
var FormattingUtils = require('matrix-react-sdk/lib/utils/FormattingUtils');
|
||||
var AccessibleButton = require('matrix-react-sdk/lib/components/views/elements/AccessibleButton');
|
||||
import Modal from 'matrix-react-sdk/lib/Modal';
|
||||
import { KeyCode } from 'matrix-react-sdk/lib/Keyboard';
|
||||
|
||||
// turn this on for drop & drag console debugging galore
|
||||
var debug = false;
|
||||
|
@ -70,8 +75,8 @@ var RoomSubList = React.createClass({
|
|||
|
||||
order: React.PropTypes.string.isRequired,
|
||||
|
||||
// undefined if no room is selected (eg we are showing settings)
|
||||
selectedRoom: React.PropTypes.string,
|
||||
// passed through to RoomTile and used to highlight room with `!` regardless of notifications count
|
||||
isInvite: React.PropTypes.bool,
|
||||
|
||||
startAsHidden: React.PropTypes.bool,
|
||||
showSpinner: React.PropTypes.bool, // true to show a spinner if 0 elements when expanded
|
||||
|
@ -81,6 +86,9 @@ var RoomSubList = React.createClass({
|
|||
incomingCall: React.PropTypes.object,
|
||||
onShowMoreRooms: React.PropTypes.func,
|
||||
searchFilter: React.PropTypes.string,
|
||||
emptyContent: React.PropTypes.node, // content shown if the list is empty
|
||||
headerItems: React.PropTypes.node, // content shown in the sublist header
|
||||
extraTiles: React.PropTypes.arrayOf(React.PropTypes.node), // extra elements added beneath tiles
|
||||
},
|
||||
|
||||
getInitialState: function() {
|
||||
|
@ -94,7 +102,9 @@ var RoomSubList = React.createClass({
|
|||
getDefaultProps: function() {
|
||||
return {
|
||||
onHeaderClick: function() {}, // NOP
|
||||
onShowMoreRooms: function() {} // NOP
|
||||
onShowMoreRooms: function() {}, // NOP
|
||||
extraTiles: [],
|
||||
isInvite: false,
|
||||
};
|
||||
},
|
||||
|
||||
|
@ -145,12 +155,21 @@ var RoomSubList = React.createClass({
|
|||
}
|
||||
},
|
||||
|
||||
onRoomTileClick(roomId, ev) {
|
||||
dis.dispatch({
|
||||
action: 'view_room',
|
||||
room_id: roomId,
|
||||
clear_search: (ev && (ev.keyCode == KeyCode.ENTER || ev.keyCode == KeyCode.SPACE)),
|
||||
});
|
||||
},
|
||||
|
||||
tsOfNewestEvent: function(room) {
|
||||
for (var i = room.timeline.length - 1; i >= 0; --i) {
|
||||
var ev = room.timeline[i];
|
||||
if (Unread.eventTriggersUnreadCount(ev) ||
|
||||
(ev.sender && ev.sender.userId === MatrixClientPeg.get().credentials.userId))
|
||||
{
|
||||
if (ev.getTs() &&
|
||||
(Unread.eventTriggersUnreadCount(ev) ||
|
||||
(ev.getSender() === MatrixClientPeg.get().credentials.userId))
|
||||
) {
|
||||
return ev.getTs();
|
||||
}
|
||||
}
|
||||
|
@ -158,7 +177,7 @@ var RoomSubList = React.createClass({
|
|||
// we might only have events that don't trigger the unread indicator,
|
||||
// in which case use the oldest event even if normally it wouldn't count.
|
||||
// This is better than just assuming the last event was forever ago.
|
||||
if (room.timeline.length) {
|
||||
if (room.timeline.length && room.timeline[0].getTs()) {
|
||||
return room.timeline[0].getTs();
|
||||
} else {
|
||||
return Number.MAX_SAFE_INTEGER;
|
||||
|
@ -227,10 +246,14 @@ var RoomSubList = React.createClass({
|
|||
roomNotificationCount: function(truncateAt) {
|
||||
var self = this;
|
||||
|
||||
if (this.props.isInvite) {
|
||||
return [0, true];
|
||||
}
|
||||
|
||||
return this.props.list.reduce(function(result, room, index) {
|
||||
if (truncateAt === undefined || index >= truncateAt) {
|
||||
var roomNotifState = RoomNotifs.getRoomNotifsState(room.roomId);
|
||||
var highlight = room.getUnreadNotificationCount('highlight') > 0 || self.props.label === 'Invites';
|
||||
var highlight = room.getUnreadNotificationCount('highlight') > 0;
|
||||
var notificationCount = room.getUnreadNotificationCount();
|
||||
|
||||
const notifBadges = notificationCount > 0 && self._shouldShowNotifBadge(roomNotifState);
|
||||
|
@ -304,43 +327,46 @@ var RoomSubList = React.createClass({
|
|||
},
|
||||
|
||||
calcManualOrderTagData: function(room) {
|
||||
var index = this.state.sortedList.indexOf(room);
|
||||
const index = this.state.sortedList.indexOf(room);
|
||||
|
||||
// we sort rooms by the lexicographic ordering of the 'order' metadata on their tags.
|
||||
// for convenience, we calculate this for now a floating point number between 0.0 and 1.0.
|
||||
|
||||
var orderA = 0.0; // by default we're next to the beginning of the list
|
||||
let orderA = 0.0; // by default we're next to the beginning of the list
|
||||
if (index > 0) {
|
||||
var prevTag = this.state.sortedList[index - 1].tags[this.props.tagName];
|
||||
const prevTag = this.state.sortedList[index - 1].tags[this.props.tagName];
|
||||
if (!prevTag) {
|
||||
console.error("Previous room in sublist is not tagged to be in this list. This should never happen.")
|
||||
}
|
||||
else if (prevTag.order === undefined) {
|
||||
console.error("Previous room in sublist is not tagged to be in this list. This should never happen.");
|
||||
} else if (prevTag.order === undefined) {
|
||||
console.error("Previous room in sublist has no ordering metadata. This should never happen.");
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
orderA = prevTag.order;
|
||||
}
|
||||
}
|
||||
|
||||
var orderB = 1.0; // by default we're next to the end of the list too
|
||||
let orderB = 1.0; // by default we're next to the end of the list too
|
||||
if (index < this.state.sortedList.length - 1) {
|
||||
var nextTag = this.state.sortedList[index + 1].tags[this.props.tagName];
|
||||
const nextTag = this.state.sortedList[index + 1].tags[this.props.tagName];
|
||||
if (!nextTag) {
|
||||
console.error("Next room in sublist is not tagged to be in this list. This should never happen.")
|
||||
}
|
||||
else if (nextTag.order === undefined) {
|
||||
console.error("Next room in sublist is not tagged to be in this list. This should never happen.");
|
||||
} else if (nextTag.order === undefined) {
|
||||
console.error("Next room in sublist has no ordering metadata. This should never happen.");
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
orderB = nextTag.order;
|
||||
}
|
||||
}
|
||||
|
||||
var order = (orderA + orderB) / 2.0;
|
||||
const order = (orderA + orderB) / 2.0;
|
||||
|
||||
if (order === orderA || order === orderB) {
|
||||
console.error("Cannot describe new list position. This should be incredibly unlikely.");
|
||||
// TODO: renumber the list
|
||||
this.state.sortedList.forEach((room, index) => {
|
||||
MatrixClientPeg.get().setRoomTag(
|
||||
room.roomId, this.props.tagName,
|
||||
{order: index / this.state.sortedList.length},
|
||||
);
|
||||
});
|
||||
return index / this.state.sortedList.length;
|
||||
}
|
||||
|
||||
return order;
|
||||
|
@ -350,7 +376,6 @@ var RoomSubList = React.createClass({
|
|||
var self = this;
|
||||
var DNDRoomTile = sdk.getComponent("rooms.DNDRoomTile");
|
||||
return this.state.sortedList.map(function(room) {
|
||||
var selected = room.roomId == self.props.selectedRoom;
|
||||
// XXX: is it evil to pass in self as a prop to RoomTile?
|
||||
return (
|
||||
<DNDRoomTile
|
||||
|
@ -358,12 +383,13 @@ var RoomSubList = React.createClass({
|
|||
roomSubList={ self }
|
||||
key={ room.roomId }
|
||||
collapsed={ self.props.collapsed || false}
|
||||
selected={ selected }
|
||||
unread={ Unread.doesRoomHaveUnreadMessages(room) }
|
||||
highlight={ room.getUnreadNotificationCount('highlight') > 0 || self.props.label === 'Invites' }
|
||||
isInvite={ self.props.label === 'Invites' }
|
||||
highlight={ room.getUnreadNotificationCount('highlight') > 0 || self.props.isInvite }
|
||||
isInvite={ self.props.isInvite }
|
||||
refreshSubList={ self._updateSubListCount }
|
||||
incomingCall={ null } />
|
||||
incomingCall={ null }
|
||||
onClick={ self.onRoomTileClick }
|
||||
/>
|
||||
);
|
||||
});
|
||||
},
|
||||
|
@ -375,7 +401,8 @@ var RoomSubList = React.createClass({
|
|||
var subListNotifCount = subListNotifications[0];
|
||||
var subListNotifHighlight = subListNotifications[1];
|
||||
|
||||
var roomCount = this.props.list.length > 0 ? this.props.list.length : '';
|
||||
var totalTiles = this.props.list.length + (this.props.extraTiles || []).length;
|
||||
var roomCount = totalTiles > 0 ? totalTiles : '';
|
||||
|
||||
var chevronClasses = classNames({
|
||||
'mx_RoomSubList_chevron': true,
|
||||
|
@ -391,6 +418,9 @@ var RoomSubList = React.createClass({
|
|||
var badge;
|
||||
if (subListNotifCount > 0) {
|
||||
badge = <div className={badgeClasses}>{ FormattingUtils.formatCount(subListNotifCount) }</div>;
|
||||
} else if (this.props.isInvite) {
|
||||
// no notifications but highlight anyway because this is an invite badge
|
||||
badge = <div className={badgeClasses}>!</div>;
|
||||
}
|
||||
|
||||
// When collapsed, allow a long hover on the header to show user
|
||||
|
@ -407,7 +437,7 @@ var RoomSubList = React.createClass({
|
|||
if (this.props.incomingCall) {
|
||||
var self = this;
|
||||
// Check if the incoming call is for this section
|
||||
var incomingCallRoom = this.state.sortedList.filter(function(room) {
|
||||
var incomingCallRoom = this.props.list.filter(function(room) {
|
||||
return self.props.incomingCall.roomId === room.roomId;
|
||||
});
|
||||
|
||||
|
@ -417,15 +447,17 @@ var RoomSubList = React.createClass({
|
|||
}
|
||||
}
|
||||
|
||||
var tabindex = this.props.searchFilter === "" ? "0" : "-1";
|
||||
|
||||
return (
|
||||
<div className="mx_RoomSubList_labelContainer" title={ title } ref="header">
|
||||
<div onClick={ this.onClick } className="mx_RoomSubList_label">
|
||||
<AccessibleButton onClick={ this.onClick } className="mx_RoomSubList_label" tabIndex={tabindex}>
|
||||
{ this.props.collapsed ? '' : this.props.label }
|
||||
<div className="mx_RoomSubList_roomCount">{ roomCount }</div>
|
||||
<div className={chevronClasses}></div>
|
||||
{ badge }
|
||||
{ incomingCall }
|
||||
</div>
|
||||
</AccessibleButton>
|
||||
</div>
|
||||
);
|
||||
},
|
||||
|
@ -447,11 +479,11 @@ var RoomSubList = React.createClass({
|
|||
});
|
||||
|
||||
return (
|
||||
<div className="mx_RoomSubList_ellipsis" onClick={this._showFullMemberList}>
|
||||
<AccessibleButton className="mx_RoomSubList_ellipsis" onClick={this._showFullMemberList}>
|
||||
<div className="mx_RoomSubList_line"></div>
|
||||
<div className="mx_RoomSubList_more">more</div>
|
||||
<div className={ badgeClasses }>{ content }</div>
|
||||
</div>
|
||||
<div className="mx_RoomSubList_more">{ _t("more") }</div>
|
||||
<div className={ badgeClasses }>{ content }</div>
|
||||
</AccessibleButton>
|
||||
);
|
||||
},
|
||||
|
||||
|
@ -491,11 +523,12 @@ var RoomSubList = React.createClass({
|
|||
if (list[i].tags[self.props.tagName] && list[i].tags[self.props.tagName].order === undefined) {
|
||||
MatrixClientPeg.get().setRoomTag(list[i].roomId, self.props.tagName, {order: (order + 1.0) / 2.0}).finally(function() {
|
||||
// Do any final stuff here
|
||||
}).fail(function(err) {
|
||||
}).catch(function(err) {
|
||||
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
Modal.createDialog(ErrorDialog, {
|
||||
title: "Failed to add tag " + self.props.tagName + " to room",
|
||||
description: err.toString()
|
||||
console.error("Failed to add tag " + self.props.tagName + " to room" + err);
|
||||
Modal.createTrackedDialog('Failed to add tag to room', '', ErrorDialog, {
|
||||
title: _t('Failed to add tag %(tagName)s to room', {tagName: self.props.tagName}),
|
||||
description: ((err && err.message) ? err.message : _t('Operation failed')),
|
||||
});
|
||||
});
|
||||
break;
|
||||
|
@ -506,27 +539,26 @@ var RoomSubList = React.createClass({
|
|||
|
||||
render: function() {
|
||||
var connectDropTarget = this.props.connectDropTarget;
|
||||
var RoomDropTarget = sdk.getComponent('rooms.RoomDropTarget');
|
||||
var TruncatedList = sdk.getComponent('elements.TruncatedList');
|
||||
|
||||
var label = this.props.collapsed ? null : this.props.label;
|
||||
|
||||
//console.log("render: " + JSON.stringify(this.state.sortedList));
|
||||
|
||||
var target;
|
||||
if (this.state.sortedList.length == 0 && this.props.editable) {
|
||||
target = <RoomDropTarget label={ 'Drop here to ' + this.props.verb }/>;
|
||||
let content;
|
||||
if (this.state.sortedList.length === 0 && !this.props.searchFilter && this.props.extraTiles.length === 0) {
|
||||
content = this.props.emptyContent;
|
||||
} else {
|
||||
content = this.makeRoomTiles();
|
||||
content.push(...this.props.extraTiles);
|
||||
}
|
||||
|
||||
if (this.state.sortedList.length > 0 || this.props.editable) {
|
||||
if (this.state.sortedList.length > 0 || this.props.extraTiles.length > 0 || this.props.editable) {
|
||||
var subList;
|
||||
var classes = "mx_RoomSubList";
|
||||
|
||||
if (!this.state.hidden) {
|
||||
subList = <TruncatedList className={ classes } truncateAt={this.state.truncateAt}
|
||||
createOverflowElement={this._createOverflowTile} >
|
||||
{ target }
|
||||
{ this.makeRoomTiles() }
|
||||
{ content }
|
||||
</TruncatedList>;
|
||||
}
|
||||
else {
|
||||
|
|
|
@ -16,10 +16,13 @@ limitations under the License.
|
|||
|
||||
'use strict';
|
||||
|
||||
var React = require('react');
|
||||
var sdk = require('matrix-react-sdk')
|
||||
var dis = require('matrix-react-sdk/lib/dispatcher');
|
||||
var rate_limited_func = require('matrix-react-sdk/lib/ratelimitedfunc');
|
||||
import React from 'react';
|
||||
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
||||
import { KeyCode } from 'matrix-react-sdk/lib/Keyboard';
|
||||
import sdk from 'matrix-react-sdk';
|
||||
import dis from 'matrix-react-sdk/lib/dispatcher';
|
||||
import rate_limited_func from 'matrix-react-sdk/lib/ratelimitedfunc';
|
||||
import AccessibleButton from 'matrix-react-sdk/lib/components/views/elements/AccessibleButton';
|
||||
|
||||
module.exports = React.createClass({
|
||||
displayName: 'SearchBox',
|
||||
|
@ -35,6 +38,30 @@ module.exports = React.createClass({
|
|||
};
|
||||
},
|
||||
|
||||
componentDidMount: function() {
|
||||
this.dispatcherRef = dis.register(this.onAction);
|
||||
},
|
||||
|
||||
componentWillUnmount: function() {
|
||||
dis.unregister(this.dispatcherRef);
|
||||
},
|
||||
|
||||
onAction: function(payload) {
|
||||
switch (payload.action) {
|
||||
case 'view_room':
|
||||
if (this.refs.search && payload.clear_search) {
|
||||
this._clearSearch();
|
||||
}
|
||||
break;
|
||||
case 'focus_room_filter':
|
||||
if (this.refs.search) {
|
||||
this.refs.search.focus();
|
||||
this.refs.search.select();
|
||||
}
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
||||
onChange: function() {
|
||||
if (!this.refs.search) return;
|
||||
this.setState({ searchTerm: this.refs.search.value });
|
||||
|
@ -61,35 +88,51 @@ module.exports = React.createClass({
|
|||
}
|
||||
},
|
||||
|
||||
_onKeyDown: function(ev) {
|
||||
switch (ev.keyCode) {
|
||||
case KeyCode.ESCAPE:
|
||||
this._clearSearch();
|
||||
dis.dispatch({action: 'focus_composer'});
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
||||
_clearSearch: function() {
|
||||
this.refs.search.value = "";
|
||||
this.onChange();
|
||||
},
|
||||
|
||||
render: function() {
|
||||
var TintableSvg = sdk.getComponent('elements.TintableSvg');
|
||||
|
||||
var collapseTabIndex = this.refs.search && this.refs.search.value !== "" ? "-1" : "0";
|
||||
|
||||
var toggleCollapse;
|
||||
if (this.props.collapsed) {
|
||||
toggleCollapse =
|
||||
<div className="mx_SearchBox_maximise" onClick={ this.onToggleCollapse.bind(this, true) }>
|
||||
<TintableSvg src="img/maximise.svg" width="10" height="16" alt="<"/>
|
||||
</div>
|
||||
<AccessibleButton className="mx_SearchBox_maximise" tabIndex={collapseTabIndex} onClick={ this.onToggleCollapse.bind(this, true) }>
|
||||
<TintableSvg src="img/maximise.svg" width="10" height="16" alt={ _t("Expand panel") }/>
|
||||
</AccessibleButton>
|
||||
}
|
||||
else {
|
||||
toggleCollapse =
|
||||
<div className="mx_SearchBox_minimise" onClick={ this.onToggleCollapse.bind(this, false) }>
|
||||
<TintableSvg src="img/minimise.svg" width="10" height="16" alt="<"/>
|
||||
</div>
|
||||
<AccessibleButton className="mx_SearchBox_minimise" tabIndex={collapseTabIndex} onClick={ this.onToggleCollapse.bind(this, false) }>
|
||||
<TintableSvg src="img/minimise.svg" width="10" height="16" alt={ _t("Collapse panel") }/>
|
||||
</AccessibleButton>
|
||||
}
|
||||
|
||||
var searchControls;
|
||||
if (!this.props.collapsed) {
|
||||
searchControls = [
|
||||
this.state.searchTerm.length > 0 ?
|
||||
<div key="button"
|
||||
className="mx_SearchBox_closeButton"
|
||||
onClick={ ()=>{ this.refs.search.value = ""; this.onChange(); } }>
|
||||
<AccessibleButton key="button"
|
||||
className="mx_SearchBox_closeButton"
|
||||
onClick={ ()=>{ this._clearSearch(); } }>
|
||||
<TintableSvg
|
||||
className="mx_SearchBox_searchButton"
|
||||
src="img/icons-close.svg" width="24" height="24"
|
||||
/>
|
||||
</div>
|
||||
</AccessibleButton>
|
||||
:
|
||||
<TintableSvg
|
||||
key="button"
|
||||
|
@ -103,7 +146,8 @@ module.exports = React.createClass({
|
|||
className="mx_SearchBox_search"
|
||||
value={ this.state.searchTerm }
|
||||
onChange={ this.onChange }
|
||||
placeholder="Filter room names"
|
||||
onKeyDown={ this._onKeyDown }
|
||||
placeholder={ _t('Filter room names') }
|
||||
/>
|
||||
];
|
||||
}
|
||||
|
|
30
src/components/views/context_menus/GenericTextContextMenu.js
Normal file
30
src/components/views/context_menus/GenericTextContextMenu.js
Normal file
|
@ -0,0 +1,30 @@
|
|||
/*
|
||||
Copyright 2017 Michael Telatynski <7t3chguy@gmail.com>
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
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';
|
||||
|
||||
export default class GenericTextContextMenu extends React.Component {
|
||||
static PropTypes = {
|
||||
message: PropTypes.string.isRequired,
|
||||
};
|
||||
|
||||
render() {
|
||||
return <div>{ this.props.message }</div>;
|
||||
}
|
||||
}
|
|
@ -16,14 +16,15 @@ limitations under the License.
|
|||
|
||||
'use strict';
|
||||
|
||||
var React = require('react');
|
||||
const React = require('react');
|
||||
|
||||
var MatrixClientPeg = require('matrix-react-sdk/lib/MatrixClientPeg');
|
||||
var dis = require('matrix-react-sdk/lib/dispatcher');
|
||||
var sdk = require('matrix-react-sdk');
|
||||
var Modal = require('matrix-react-sdk/lib/Modal');
|
||||
var Resend = require("matrix-react-sdk/lib/Resend");
|
||||
import * as UserSettingsStore from 'matrix-react-sdk/lib/UserSettingsStore';
|
||||
const MatrixClientPeg = require('matrix-react-sdk/lib/MatrixClientPeg');
|
||||
const dis = require('matrix-react-sdk/lib/dispatcher');
|
||||
const sdk = require('matrix-react-sdk');
|
||||
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
||||
const Modal = require('matrix-react-sdk/lib/Modal');
|
||||
const Resend = require("matrix-react-sdk/lib/Resend");
|
||||
import SettingsStore from "matrix-react-sdk/lib/settings/SettingsStore";
|
||||
|
||||
module.exports = React.createClass({
|
||||
displayName: 'MessageContextMenu',
|
||||
|
@ -39,48 +40,122 @@ module.exports = React.createClass({
|
|||
onFinished: React.PropTypes.func,
|
||||
},
|
||||
|
||||
getInitialState: function() {
|
||||
return {
|
||||
canRedact: false,
|
||||
canPin: false,
|
||||
};
|
||||
},
|
||||
|
||||
componentWillMount: function() {
|
||||
MatrixClientPeg.get().on('RoomMember.powerLevel', this._checkPermissions);
|
||||
this._checkPermissions();
|
||||
},
|
||||
|
||||
componentWillUnmount: function() {
|
||||
const cli = MatrixClientPeg.get();
|
||||
if (cli) {
|
||||
cli.removeListener('RoomMember.powerLevel', this._checkPermissions);
|
||||
}
|
||||
},
|
||||
|
||||
_checkPermissions: function() {
|
||||
const cli = MatrixClientPeg.get();
|
||||
const room = cli.getRoom(this.props.mxEvent.getRoomId());
|
||||
|
||||
const canRedact = room.currentState.maySendRedactionForEvent(this.props.mxEvent, cli.credentials.userId);
|
||||
let canPin = room.currentState.mayClientSendStateEvent('m.room.pinned_events', cli);
|
||||
|
||||
// HACK: Intentionally say we can't pin if the user doesn't want to use the functionality
|
||||
if (!SettingsStore.isFeatureEnabled("feature_pinning")) canPin = false;
|
||||
|
||||
this.setState({canRedact, canPin});
|
||||
},
|
||||
|
||||
_isPinned: function() {
|
||||
const room = MatrixClientPeg.get().getRoom(this.props.mxEvent.getRoomId());
|
||||
const pinnedEvent = room.currentState.getStateEvents('m.room.pinned_events', '');
|
||||
if (!pinnedEvent) return false;
|
||||
return pinnedEvent.getContent().pinned.includes(this.props.mxEvent.getId());
|
||||
},
|
||||
|
||||
onResendClick: function() {
|
||||
Resend.resend(this.props.mxEvent);
|
||||
if (this.props.onFinished) this.props.onFinished();
|
||||
this.closeMenu();
|
||||
},
|
||||
|
||||
onViewSourceClick: function() {
|
||||
var ViewSource = sdk.getComponent('structures.ViewSource');
|
||||
Modal.createDialog(ViewSource, {
|
||||
const ViewSource = sdk.getComponent('structures.ViewSource');
|
||||
Modal.createTrackedDialog('View Event Source', '', ViewSource, {
|
||||
content: this.props.mxEvent.event,
|
||||
}, 'mx_Dialog_viewsource');
|
||||
if (this.props.onFinished) this.props.onFinished();
|
||||
this.closeMenu();
|
||||
},
|
||||
|
||||
onViewClearSourceClick: function() {
|
||||
const ViewSource = sdk.getComponent('structures.ViewSource');
|
||||
Modal.createDialog(ViewSource, {
|
||||
Modal.createTrackedDialog('View Clear Event Source', '', ViewSource, {
|
||||
// FIXME: _clearEvent is private
|
||||
content: this.props.mxEvent._clearEvent,
|
||||
}, 'mx_Dialog_viewsource');
|
||||
if (this.props.onFinished) this.props.onFinished();
|
||||
this.closeMenu();
|
||||
},
|
||||
|
||||
onRedactClick: function() {
|
||||
MatrixClientPeg.get().redactEvent(
|
||||
this.props.mxEvent.getRoomId(), this.props.mxEvent.getId()
|
||||
).done(function() {
|
||||
// message should disappear by itself
|
||||
}, function(e) {
|
||||
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
// display error message stating you couldn't delete this.
|
||||
var code = e.errcode || e.statusCode;
|
||||
Modal.createDialog(ErrorDialog, {
|
||||
title: "Error",
|
||||
description: "You cannot delete this message. (" + code + ")"
|
||||
});
|
||||
});
|
||||
if (this.props.onFinished) this.props.onFinished();
|
||||
const ConfirmRedactDialog = sdk.getComponent("dialogs.ConfirmRedactDialog");
|
||||
Modal.createTrackedDialog('Confirm Redact Dialog', '', ConfirmRedactDialog, {
|
||||
onFinished: (proceed) => {
|
||||
if (!proceed) return;
|
||||
|
||||
MatrixClientPeg.get().redactEvent(
|
||||
this.props.mxEvent.getRoomId(), this.props.mxEvent.getId()
|
||||
).catch(function(e) {
|
||||
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
// display error message stating you couldn't delete this.
|
||||
const code = e.errcode || e.statusCode;
|
||||
Modal.createTrackedDialog('You cannot delete this message', '', ErrorDialog, {
|
||||
title: _t('Error'),
|
||||
description: _t('You cannot delete this message. (%(code)s)', {code: code})
|
||||
});
|
||||
}).done();
|
||||
},
|
||||
}, 'mx_Dialog_confirmredact');
|
||||
this.closeMenu();
|
||||
},
|
||||
|
||||
onCancelSendClick: function() {
|
||||
Resend.removeFromQueue(this.props.mxEvent);
|
||||
if (this.props.onFinished) this.props.onFinished();
|
||||
this.closeMenu();
|
||||
},
|
||||
|
||||
onForwardClick: function() {
|
||||
dis.dispatch({
|
||||
action: 'forward_event',
|
||||
event: this.props.mxEvent,
|
||||
});
|
||||
this.closeMenu();
|
||||
},
|
||||
|
||||
onPinClick: function() {
|
||||
MatrixClientPeg.get().getStateEvent(this.props.mxEvent.getRoomId(), 'm.room.pinned_events', '')
|
||||
.catch(e => {
|
||||
// Intercept the Event Not Found error and fall through the promise chain with no event.
|
||||
if (e.errcode === "M_NOT_FOUND") return null;
|
||||
throw e;
|
||||
})
|
||||
.then(event => {
|
||||
const eventIds = (event ? event.pinned : []) || [];
|
||||
if (!eventIds.includes(this.props.mxEvent.getId())) {
|
||||
// Not pinned - add
|
||||
eventIds.push(this.props.mxEvent.getId());
|
||||
} else {
|
||||
// Pinned - remove
|
||||
eventIds.splice(eventIds.indexOf(this.props.mxEvent.getId()), 1);
|
||||
}
|
||||
|
||||
MatrixClientPeg.get().sendStateEvent(this.props.mxEvent.getRoomId(), 'm.room.pinned_events', {pinned: eventIds}, '');
|
||||
});
|
||||
this.closeMenu();
|
||||
},
|
||||
|
||||
closeMenu: function() {
|
||||
|
@ -91,40 +166,43 @@ module.exports = React.createClass({
|
|||
if (this.props.eventTileOps) {
|
||||
this.props.eventTileOps.unhideWidget();
|
||||
}
|
||||
if (this.props.onFinished) this.props.onFinished();
|
||||
this.closeMenu();
|
||||
},
|
||||
|
||||
onQuoteClick: function () {
|
||||
console.log(this.props.mxEvent);
|
||||
onQuoteClick: function() {
|
||||
dis.dispatch({
|
||||
action: 'quote',
|
||||
event: this.props.mxEvent,
|
||||
text: this.props.eventTileOps.getInnerText(),
|
||||
});
|
||||
this.closeMenu();
|
||||
},
|
||||
|
||||
render: function() {
|
||||
var eventStatus = this.props.mxEvent.status;
|
||||
var resendButton;
|
||||
var viewSourceButton;
|
||||
var viewClearSourceButton;
|
||||
var redactButton;
|
||||
var cancelButton;
|
||||
var permalinkButton;
|
||||
var unhidePreviewButton;
|
||||
var externalURLButton;
|
||||
const eventStatus = this.props.mxEvent.status;
|
||||
let resendButton;
|
||||
let redactButton;
|
||||
let cancelButton;
|
||||
let forwardButton;
|
||||
let pinButton;
|
||||
let viewSourceButton;
|
||||
let viewClearSourceButton;
|
||||
let unhidePreviewButton;
|
||||
let permalinkButton;
|
||||
let externalURLButton;
|
||||
let quoteButton;
|
||||
|
||||
if (eventStatus === 'not_sent') {
|
||||
resendButton = (
|
||||
<div className="mx_MessageContextMenu_field" onClick={this.onResendClick}>
|
||||
Resend
|
||||
{ _t('Resend') }
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
if (!eventStatus) { // sent
|
||||
if (!eventStatus && this.state.canRedact) {
|
||||
redactButton = (
|
||||
<div className="mx_MessageContextMenu_field" onClick={this.onRedactClick}>
|
||||
Redact
|
||||
{ _t('Remove') }
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
@ -132,21 +210,40 @@ module.exports = React.createClass({
|
|||
if (eventStatus === "queued" || eventStatus === "not_sent") {
|
||||
cancelButton = (
|
||||
<div className="mx_MessageContextMenu_field" onClick={this.onCancelSendClick}>
|
||||
Cancel Sending
|
||||
{ _t('Cancel Sending') }
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
if (!eventStatus && this.props.mxEvent.getType() === 'm.room.message') {
|
||||
const content = this.props.mxEvent.getContent();
|
||||
if (content.msgtype && content.msgtype !== 'm.bad.encrypted' && content.hasOwnProperty('body')) {
|
||||
forwardButton = (
|
||||
<div className="mx_MessageContextMenu_field" onClick={this.onForwardClick}>
|
||||
{ _t('Forward Message') }
|
||||
</div>
|
||||
);
|
||||
|
||||
if (this.state.canPin) {
|
||||
pinButton = (
|
||||
<div className="mx_MessageContextMenu_field" onClick={this.onPinClick}>
|
||||
{this._isPinned() ? _t('Unpin Message') : _t('Pin Message')}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
viewSourceButton = (
|
||||
<div className="mx_MessageContextMenu_field" onClick={this.onViewSourceClick}>
|
||||
View Source
|
||||
{ _t('View Source') }
|
||||
</div>
|
||||
);
|
||||
|
||||
if (this.props.mxEvent.getType() !== this.props.mxEvent.getWireType()) {
|
||||
viewClearSourceButton = (
|
||||
<div className="mx_MessageContextMenu_field" onClick={this.onViewClearSourceClick}>
|
||||
View Decrypted Source
|
||||
{ _t('View Decrypted Source') }
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
@ -155,9 +252,9 @@ module.exports = React.createClass({
|
|||
if (this.props.eventTileOps.isWidgetHidden()) {
|
||||
unhidePreviewButton = (
|
||||
<div className="mx_MessageContextMenu_field" onClick={this.onUnhidePreviewClick}>
|
||||
Unhide Preview
|
||||
{ _t('Unhide Preview') }
|
||||
</div>
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -165,22 +262,24 @@ module.exports = React.createClass({
|
|||
permalinkButton = (
|
||||
<div className="mx_MessageContextMenu_field">
|
||||
<a href={ "https://matrix.to/#/" + this.props.mxEvent.getRoomId() +"/"+ this.props.mxEvent.getId() }
|
||||
target="_blank" rel="noopener" onClick={ this.closeMenu }>Permalink</a>
|
||||
target="_blank" rel="noopener" onClick={ this.closeMenu }>{ _t('Permalink') }</a>
|
||||
</div>
|
||||
);
|
||||
|
||||
const quoteButton = (
|
||||
<div className="mx_MessageContextMenu_field" onClick={this.onQuoteClick}>
|
||||
Quote
|
||||
</div>
|
||||
);
|
||||
if (this.props.eventTileOps && this.props.eventTileOps.getInnerText) {
|
||||
quoteButton = (
|
||||
<div className="mx_MessageContextMenu_field" onClick={this.onQuoteClick}>
|
||||
{ _t('Quote') }
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
// Bridges can provide a 'external_url' to link back to the source.
|
||||
if( typeof(this.props.mxEvent.event.content.external_url) === "string") {
|
||||
externalURLButton = (
|
||||
<div className="mx_MessageContextMenu_field">
|
||||
<a href={ this.props.mxEvent.event.content.external_url }
|
||||
rel="noopener" target="_blank" onClick={ this.closeMenu }>Source URL</a>
|
||||
rel="noopener" target="_blank" onClick={ this.closeMenu }>{ _t('Source URL') }</a>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
@ -191,13 +290,15 @@ module.exports = React.createClass({
|
|||
{resendButton}
|
||||
{redactButton}
|
||||
{cancelButton}
|
||||
{forwardButton}
|
||||
{pinButton}
|
||||
{viewSourceButton}
|
||||
{viewClearSourceButton}
|
||||
{unhidePreviewButton}
|
||||
{permalinkButton}
|
||||
{UserSettingsStore.isFeatureEnabled('rich_text_editor') ? quoteButton : null}
|
||||
{quoteButton}
|
||||
{externalURLButton}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
},
|
||||
});
|
||||
|
|
|
@ -1,144 +0,0 @@
|
|||
/*
|
||||
Copyright 2015, 2016 OpenMarket 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';
|
||||
|
||||
var q = require("q");
|
||||
var React = require('react');
|
||||
var classNames = require('classnames');
|
||||
var RoomNotifs = require('matrix-react-sdk/lib/RoomNotifs');
|
||||
var MatrixClientPeg = require('matrix-react-sdk/lib/MatrixClientPeg');
|
||||
|
||||
module.exports = React.createClass({
|
||||
displayName: 'NotificationStateContextMenu',
|
||||
|
||||
propTypes: {
|
||||
room: React.PropTypes.object.isRequired,
|
||||
/* callback called when the menu is dismissed */
|
||||
onFinished: React.PropTypes.func,
|
||||
},
|
||||
|
||||
getInitialState() {
|
||||
return {
|
||||
roomNotifState: RoomNotifs.getRoomNotifsState(this.props.room.roomId),
|
||||
}
|
||||
},
|
||||
|
||||
componentWillMount: function() {
|
||||
this._unmounted = false;
|
||||
},
|
||||
|
||||
componentWillUnmount: function() {
|
||||
this._unmounted = true;
|
||||
},
|
||||
|
||||
_save: function(newState) {
|
||||
const oldState = this.state.roomNotifState;
|
||||
const roomId = this.props.room.roomId;
|
||||
var cli = MatrixClientPeg.get();
|
||||
|
||||
if (cli.isGuest()) return;
|
||||
|
||||
this.setState({
|
||||
roomNotifState: newState,
|
||||
});
|
||||
RoomNotifs.setRoomNotifsState(this.props.room.roomId, newState).done(() => {
|
||||
// delay slightly so that the user can see their state change
|
||||
// before closing the menu
|
||||
return q.delay(500).then(() => {
|
||||
if (this._unmounted) return;
|
||||
// Close the context menu
|
||||
if (this.props.onFinished) {
|
||||
this.props.onFinished();
|
||||
};
|
||||
});
|
||||
}, (error) => {
|
||||
// TODO: some form of error notification to the user
|
||||
// to inform them that their state change failed.
|
||||
// For now we at least set the state back
|
||||
if (this._unmounted) return;
|
||||
this.setState({
|
||||
roomNotifState: oldState,
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
_onClickAlertMe: function() {
|
||||
this._save(RoomNotifs.ALL_MESSAGES_LOUD);
|
||||
},
|
||||
|
||||
_onClickAllNotifs: function() {
|
||||
this._save(RoomNotifs.ALL_MESSAGES);
|
||||
},
|
||||
|
||||
_onClickMentions: function() {
|
||||
this._save(RoomNotifs.MENTIONS_ONLY);
|
||||
},
|
||||
|
||||
_onClickMute: function() {
|
||||
this._save(RoomNotifs.MUTE);
|
||||
},
|
||||
|
||||
render: function() {
|
||||
var alertMeClasses = classNames({
|
||||
'mx_NotificationStateContextMenu_field': true,
|
||||
'mx_NotificationStateContextMenu_fieldSet': this.state.roomNotifState == RoomNotifs.ALL_MESSAGES_LOUD,
|
||||
});
|
||||
|
||||
var allNotifsClasses = classNames({
|
||||
'mx_NotificationStateContextMenu_field': true,
|
||||
'mx_NotificationStateContextMenu_fieldSet': this.state.roomNotifState == RoomNotifs.ALL_MESSAGES,
|
||||
});
|
||||
|
||||
var mentionsClasses = classNames({
|
||||
'mx_NotificationStateContextMenu_field': true,
|
||||
'mx_NotificationStateContextMenu_fieldSet': this.state.roomNotifState == RoomNotifs.MENTIONS_ONLY,
|
||||
});
|
||||
|
||||
var muteNotifsClasses = classNames({
|
||||
'mx_NotificationStateContextMenu_field': true,
|
||||
'mx_NotificationStateContextMenu_fieldSet': this.state.roomNotifState == RoomNotifs.MUTE,
|
||||
});
|
||||
|
||||
return (
|
||||
<div>
|
||||
<div className="mx_NotificationStateContextMenu_picker" >
|
||||
<img src="img/notif-slider.svg" width="20" height="107" />
|
||||
</div>
|
||||
<div className={ alertMeClasses } onClick={this._onClickAlertMe} >
|
||||
<img className="mx_NotificationStateContextMenu_activeIcon" src="img/notif-active.svg" width="12" height="12" />
|
||||
<img className="mx_NotificationStateContextMenu_icon" src="img/icon-context-mute-off-copy.svg" width="16" height="12" />
|
||||
All messages (loud)
|
||||
</div>
|
||||
<div className={ allNotifsClasses } onClick={this._onClickAllNotifs} >
|
||||
<img className="mx_NotificationStateContextMenu_activeIcon" src="img/notif-active.svg" width="12" height="12" />
|
||||
<img className="mx_NotificationStateContextMenu_icon" src="img/icon-context-mute-off.svg" width="16" height="12" />
|
||||
All messages
|
||||
</div>
|
||||
<div className={ mentionsClasses } onClick={this._onClickMentions} >
|
||||
<img className="mx_NotificationStateContextMenu_activeIcon" src="img/notif-active.svg" width="12" height="12" />
|
||||
<img className="mx_NotificationStateContextMenu_icon" src="img/icon-context-mute-mentions.svg" width="16" height="12" />
|
||||
Mentions only
|
||||
</div>
|
||||
<div className={ muteNotifsClasses } onClick={this._onClickMute} >
|
||||
<img className="mx_NotificationStateContextMenu_activeIcon" src="img/notif-active.svg" width="12" height="12" />
|
||||
<img className="mx_NotificationStateContextMenu_icon" src="img/icon-context-mute.svg" width="16" height="12" />
|
||||
Mute
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
});
|
101
src/components/views/context_menus/PresenceContextMenu.js
Normal file
101
src/components/views/context_menus/PresenceContextMenu.js
Normal file
|
@ -0,0 +1,101 @@
|
|||
/*
|
||||
Copyright 2017 Travis Ralston
|
||||
|
||||
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, _td } from 'matrix-react-sdk/lib/languageHandler';
|
||||
import sdk from 'matrix-react-sdk';
|
||||
|
||||
const STATUS_LABELS = {
|
||||
"online": _td("Online"),
|
||||
"unavailable": _td("Away"),
|
||||
"offline": _td("Appear Offline"),
|
||||
};
|
||||
|
||||
const PresenceContextMenuOption = React.createClass({
|
||||
displayName: 'PresenceContextMenuOption',
|
||||
|
||||
propTypes: {
|
||||
forStatus: React.PropTypes.string.isRequired,
|
||||
isCurrent: React.PropTypes.bool,
|
||||
onChange: React.PropTypes.func.isRequired,
|
||||
},
|
||||
|
||||
onClick: function() {
|
||||
if (this.isCurrent) return;
|
||||
this.props.onChange(this.props.forStatus);
|
||||
},
|
||||
|
||||
render: function() {
|
||||
const AccessibleButton = sdk.getComponent("elements.AccessibleButton");
|
||||
|
||||
const indicatorClasses = "mx_PresenceContextMenuOption_indicator "
|
||||
+ "mx_PresenceContextMenuOption_indicator_" + this.props.forStatus;
|
||||
|
||||
let classNames = "mx_PresenceContextMenuOption";
|
||||
if (this.props.isCurrent) classNames += " mx_PresenceContextMenuOption_current";
|
||||
|
||||
return (
|
||||
<AccessibleButton className={classNames} element="div" onClick={this.onClick}>
|
||||
<div className={indicatorClasses}></div>
|
||||
{ _t(STATUS_LABELS[this.props.forStatus]) }
|
||||
</AccessibleButton>
|
||||
);
|
||||
},
|
||||
});
|
||||
|
||||
module.exports = React.createClass({
|
||||
displayName: 'PresenceContextMenu',
|
||||
|
||||
propTypes: {
|
||||
// "online", "unavailable", or "offline"
|
||||
currentStatus: React.PropTypes.string.isRequired,
|
||||
|
||||
// Called when the user wants to change their status.
|
||||
// Args: (newStatus:string)
|
||||
onChange: React.PropTypes.func.isRequired,
|
||||
|
||||
// callback called when the menu is dismissed
|
||||
onFinished: React.PropTypes.func,
|
||||
},
|
||||
|
||||
getInitialState() {
|
||||
return {
|
||||
currentStatus: this.props.currentStatus,
|
||||
};
|
||||
},
|
||||
|
||||
onChange: function(newStatus) {
|
||||
this.props.onChange(newStatus);
|
||||
this.setState({currentStatus: newStatus});
|
||||
},
|
||||
|
||||
render: function() {
|
||||
const statusElements = [];
|
||||
for (let status of Object.keys(STATUS_LABELS)) {
|
||||
statusElements.push((
|
||||
<PresenceContextMenuOption forStatus={status} key={status}
|
||||
onChange={this.onChange}
|
||||
isCurrent={status === this.state.currentStatus} />
|
||||
));
|
||||
}
|
||||
|
||||
return (
|
||||
<div>
|
||||
{ statusElements }
|
||||
</div>
|
||||
);
|
||||
},
|
||||
});
|
|
@ -1,253 +0,0 @@
|
|||
/*
|
||||
Copyright 2015, 2016 OpenMarket 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';
|
||||
|
||||
var q = require("q");
|
||||
var React = require('react');
|
||||
var classNames = require('classnames');
|
||||
var MatrixClientPeg = require('matrix-react-sdk/lib/MatrixClientPeg');
|
||||
var dis = require('matrix-react-sdk/lib/dispatcher');
|
||||
var DMRoomMap = require('matrix-react-sdk/lib/utils/DMRoomMap');
|
||||
var Rooms = require('matrix-react-sdk/lib/Rooms');
|
||||
|
||||
module.exports = React.createClass({
|
||||
displayName: 'RoomTagContextMenu',
|
||||
|
||||
propTypes: {
|
||||
room: React.PropTypes.object.isRequired,
|
||||
/* callback called when the menu is dismissed */
|
||||
onFinished: React.PropTypes.func,
|
||||
},
|
||||
|
||||
getInitialState: function() {
|
||||
const dmRoomMap = new DMRoomMap(MatrixClientPeg.get());
|
||||
return {
|
||||
isFavourite: this.props.room.tags.hasOwnProperty("m.favourite"),
|
||||
isLowPriority: this.props.room.tags.hasOwnProperty("m.lowpriority"),
|
||||
isDirectMessage: Boolean(dmRoomMap.getUserIdForRoomId(this.props.room.roomId)),
|
||||
};
|
||||
},
|
||||
|
||||
_toggleTag: function(tagNameOn, tagNameOff) {
|
||||
var self = this;
|
||||
const roomId = this.props.room.roomId;
|
||||
var cli = MatrixClientPeg.get();
|
||||
if (!cli.isGuest()) {
|
||||
q.delay(500).then(function() {
|
||||
if (tagNameOff !== null && tagNameOff !== undefined) {
|
||||
cli.deleteRoomTag(roomId, tagNameOff).finally(function() {
|
||||
// Close the context menu
|
||||
if (self.props.onFinished) {
|
||||
self.props.onFinished();
|
||||
};
|
||||
}).fail(function(err) {
|
||||
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
Modal.createDialog(ErrorDialog, {
|
||||
title: "Failed to remove tag " + tagNameOff + " from room",
|
||||
description: err.toString()
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
if (tagNameOn !== null && tagNameOn !== undefined) {
|
||||
// If the tag ordering meta data is required, it is added by
|
||||
// the RoomSubList when it sorts its rooms
|
||||
cli.setRoomTag(roomId, tagNameOn, {}).finally(function() {
|
||||
// Close the context menu
|
||||
if (self.props.onFinished) {
|
||||
self.props.onFinished();
|
||||
};
|
||||
}).fail(function(err) {
|
||||
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
Modal.createDialog(ErrorDialog, {
|
||||
title: "Failed to add tag " + tagNameOn + " to room",
|
||||
description: err.toString()
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
_onClickFavourite: function() {
|
||||
// Tag room as 'Favourite'
|
||||
if (!this.state.isFavourite && this.state.isLowPriority) {
|
||||
this.setState({
|
||||
isFavourite: true,
|
||||
isLowPriority: false,
|
||||
});
|
||||
this._toggleTag("m.favourite", "m.lowpriority");
|
||||
} else if (this.state.isFavourite) {
|
||||
this.setState({isFavourite: false});
|
||||
this._toggleTag(null, "m.favourite");
|
||||
} else if (!this.state.isFavourite) {
|
||||
this.setState({isFavourite: true});
|
||||
this._toggleTag("m.favourite");
|
||||
}
|
||||
},
|
||||
|
||||
_onClickLowPriority: function() {
|
||||
// Tag room as 'Low Priority'
|
||||
if (!this.state.isLowPriority && this.state.isFavourite) {
|
||||
this.setState({
|
||||
isFavourite: false,
|
||||
isLowPriority: true,
|
||||
});
|
||||
this._toggleTag("m.lowpriority", "m.favourite");
|
||||
} else if (this.state.isLowPriority) {
|
||||
this.setState({isLowPriority: false});
|
||||
this._toggleTag(null, "m.lowpriority");
|
||||
} else if (!this.state.isLowPriority) {
|
||||
this.setState({isLowPriority: true});
|
||||
this._toggleTag("m.lowpriority");
|
||||
}
|
||||
},
|
||||
|
||||
_onClickDM: function() {
|
||||
const newIsDirectMessage = !this.state.isDirectMessage;
|
||||
this.setState({
|
||||
isDirectMessage: newIsDirectMessage,
|
||||
});
|
||||
|
||||
if (MatrixClientPeg.get().isGuest()) return;
|
||||
|
||||
let newTarget;
|
||||
if (newIsDirectMessage) {
|
||||
const guessedTarget = Rooms.guessDMRoomTarget(
|
||||
this.props.room,
|
||||
this.props.room.getMember(MatrixClientPeg.get().credentials.userId),
|
||||
);
|
||||
newTarget = guessedTarget.userId;
|
||||
} else {
|
||||
newTarget = null;
|
||||
}
|
||||
|
||||
// give some time for the user to see the icon change first, since
|
||||
// this will hide the context menu once it completes
|
||||
q.delay(500).done(() => {
|
||||
return Rooms.setDMRoom(this.props.room.roomId, newTarget).finally(() => {
|
||||
// Close the context menu
|
||||
if (this.props.onFinished) {
|
||||
this.props.onFinished();
|
||||
};
|
||||
}, (err) => {
|
||||
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
Modal.createDialog(ErrorDialog, {
|
||||
title: "Failed to set Direct Message status of room",
|
||||
description: err.toString()
|
||||
});
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
_onClickLeave: function() {
|
||||
// Leave room
|
||||
dis.dispatch({
|
||||
action: 'leave_room',
|
||||
room_id: this.props.room.roomId,
|
||||
});
|
||||
|
||||
// Close the context menu
|
||||
if (this.props.onFinished) {
|
||||
this.props.onFinished();
|
||||
};
|
||||
},
|
||||
|
||||
_onClickForget: function() {
|
||||
// FIXME: duplicated with RoomSettings (and dead code in RoomView)
|
||||
MatrixClientPeg.get().forget(this.props.room.roomId).done(function() {
|
||||
dis.dispatch({ action: 'view_next_room' });
|
||||
}, function(err) {
|
||||
var errCode = err.errcode || "unknown error code";
|
||||
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
Modal.createDialog(ErrorDialog, {
|
||||
title: "Error",
|
||||
description: `Failed to forget room (${errCode})`
|
||||
});
|
||||
});
|
||||
|
||||
// Close the context menu
|
||||
if (this.props.onFinished) {
|
||||
this.props.onFinished();
|
||||
};
|
||||
},
|
||||
|
||||
render: function() {
|
||||
const myUserId = MatrixClientPeg.get().credentials.userId;
|
||||
const myMember = this.props.room.getMember(myUserId);
|
||||
|
||||
const favouriteClasses = classNames({
|
||||
'mx_RoomTagContextMenu_field': true,
|
||||
'mx_RoomTagContextMenu_fieldSet': this.state.isFavourite,
|
||||
'mx_RoomTagContextMenu_fieldDisabled': false,
|
||||
});
|
||||
|
||||
const lowPriorityClasses = classNames({
|
||||
'mx_RoomTagContextMenu_field': true,
|
||||
'mx_RoomTagContextMenu_fieldSet': this.state.isLowPriority,
|
||||
'mx_RoomTagContextMenu_fieldDisabled': false,
|
||||
});
|
||||
|
||||
const leaveClasses = classNames({
|
||||
'mx_RoomTagContextMenu_field': true,
|
||||
'mx_RoomTagContextMenu_fieldSet': false,
|
||||
'mx_RoomTagContextMenu_fieldDisabled': false,
|
||||
});
|
||||
|
||||
const dmClasses = classNames({
|
||||
'mx_RoomTagContextMenu_field': true,
|
||||
'mx_RoomTagContextMenu_fieldSet': this.state.isDirectMessage,
|
||||
'mx_RoomTagContextMenu_fieldDisabled': false,
|
||||
});
|
||||
|
||||
if (myMember && myMember.membership === "leave") {
|
||||
return (
|
||||
<div>
|
||||
<div className={ leaveClasses } onClick={ this._onClickForget } >
|
||||
<img className="mx_RoomTagContextMenu_icon" src="img/icon_context_delete.svg" width="15" height="15" />
|
||||
Forget
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<div>
|
||||
<div className={ favouriteClasses } onClick={this._onClickFavourite} >
|
||||
<img className="mx_RoomTagContextMenu_icon" src="img/icon_context_fave.svg" width="15" height="15" />
|
||||
<img className="mx_RoomTagContextMenu_icon_set" src="img/icon_context_fave_on.svg" width="15" height="15" />
|
||||
Favourite
|
||||
</div>
|
||||
<div className={ lowPriorityClasses } onClick={this._onClickLowPriority} >
|
||||
<img className="mx_RoomTagContextMenu_icon" src="img/icon_context_low.svg" width="15" height="15" />
|
||||
<img className="mx_RoomTagContextMenu_icon_set" src="img/icon_context_low_on.svg" width="15" height="15" />
|
||||
Low Priority
|
||||
</div>
|
||||
<div className={ dmClasses } onClick={this._onClickDM} >
|
||||
<img className="mx_RoomTagContextMenu_icon" src="img/icon_context_person.svg" width="15" height="15" />
|
||||
<img className="mx_RoomTagContextMenu_icon_set" src="img/icon_context_person_on.svg" width="15" height="15" />
|
||||
Direct Chat
|
||||
</div>
|
||||
<hr className="mx_RoomTagContextMenu_separator" />
|
||||
<div className={ leaveClasses } onClick={(myMember && myMember.membership === "join") ? this._onClickLeave : null} >
|
||||
<img className="mx_RoomTagContextMenu_icon" src="img/icon_context_delete.svg" width="15" height="15" />
|
||||
Leave
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
});
|
393
src/components/views/context_menus/RoomTileContextMenu.js
Normal file
393
src/components/views/context_menus/RoomTileContextMenu.js
Normal file
|
@ -0,0 +1,393 @@
|
|||
/*
|
||||
Copyright 2015, 2016 OpenMarket Ltd
|
||||
Copyright 2017 Vector Creations Ltd
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import Promise from 'bluebird';
|
||||
import React from 'react';
|
||||
import classNames from 'classnames';
|
||||
import sdk from 'matrix-react-sdk';
|
||||
import { _t, _td } from 'matrix-react-sdk/lib/languageHandler';
|
||||
import MatrixClientPeg from 'matrix-react-sdk/lib/MatrixClientPeg';
|
||||
import dis from 'matrix-react-sdk/lib/dispatcher';
|
||||
import DMRoomMap from 'matrix-react-sdk/lib/utils/DMRoomMap';
|
||||
import * as Rooms from 'matrix-react-sdk/lib/Rooms';
|
||||
import * as RoomNotifs from 'matrix-react-sdk/lib/RoomNotifs';
|
||||
import Modal from 'matrix-react-sdk/lib/Modal';
|
||||
|
||||
module.exports = React.createClass({
|
||||
displayName: 'RoomTileContextMenu',
|
||||
|
||||
propTypes: {
|
||||
room: React.PropTypes.object.isRequired,
|
||||
/* callback called when the menu is dismissed */
|
||||
onFinished: React.PropTypes.func,
|
||||
},
|
||||
|
||||
getInitialState() {
|
||||
const dmRoomMap = new DMRoomMap(MatrixClientPeg.get());
|
||||
return {
|
||||
roomNotifState: RoomNotifs.getRoomNotifsState(this.props.room.roomId),
|
||||
isFavourite: this.props.room.tags.hasOwnProperty("m.favourite"),
|
||||
isLowPriority: this.props.room.tags.hasOwnProperty("m.lowpriority"),
|
||||
isDirectMessage: Boolean(dmRoomMap.getUserIdForRoomId(this.props.room.roomId)),
|
||||
}
|
||||
},
|
||||
|
||||
componentWillMount: function() {
|
||||
this._unmounted = false;
|
||||
},
|
||||
|
||||
componentWillUnmount: function() {
|
||||
this._unmounted = true;
|
||||
},
|
||||
|
||||
_toggleTag: function(tagNameOn, tagNameOff) {
|
||||
var self = this;
|
||||
const roomId = this.props.room.roomId;
|
||||
var cli = MatrixClientPeg.get();
|
||||
if (!cli.isGuest()) {
|
||||
Promise.delay(500).then(function() {
|
||||
if (tagNameOff !== null && tagNameOff !== undefined) {
|
||||
cli.deleteRoomTag(roomId, tagNameOff).finally(function() {
|
||||
// Close the context menu
|
||||
if (self.props.onFinished) {
|
||||
self.props.onFinished();
|
||||
};
|
||||
}).catch(function(err) {
|
||||
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
Modal.createTrackedDialog('Failed to remove tag from room 1', '', ErrorDialog, {
|
||||
title: _t('Failed to remove tag %(tagName)s from room', {tagName: tagNameOff}),
|
||||
description: ((err && err.message) ? err.message : _t('Operation failed')),
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
if (tagNameOn !== null && tagNameOn !== undefined) {
|
||||
// If the tag ordering meta data is required, it is added by
|
||||
// the RoomSubList when it sorts its rooms
|
||||
cli.setRoomTag(roomId, tagNameOn, {}).finally(function() {
|
||||
// Close the context menu
|
||||
if (self.props.onFinished) {
|
||||
self.props.onFinished();
|
||||
};
|
||||
}).catch(function(err) {
|
||||
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
Modal.createTrackedDialog('Failed to remove tag from room 2', '', ErrorDialog, {
|
||||
title: _t('Failed to remove tag %(tagName)s from room', {tagName: tagNameOn}),
|
||||
description: ((err && err.message) ? err.message : _t('Operation failed')),
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
_onClickFavourite: function() {
|
||||
// Tag room as 'Favourite'
|
||||
if (!this.state.isFavourite && this.state.isLowPriority) {
|
||||
this.setState({
|
||||
isFavourite: true,
|
||||
isLowPriority: false,
|
||||
});
|
||||
this._toggleTag("m.favourite", "m.lowpriority");
|
||||
} else if (this.state.isFavourite) {
|
||||
this.setState({isFavourite: false});
|
||||
this._toggleTag(null, "m.favourite");
|
||||
} else if (!this.state.isFavourite) {
|
||||
this.setState({isFavourite: true});
|
||||
this._toggleTag("m.favourite");
|
||||
}
|
||||
},
|
||||
|
||||
_onClickLowPriority: function() {
|
||||
// Tag room as 'Low Priority'
|
||||
if (!this.state.isLowPriority && this.state.isFavourite) {
|
||||
this.setState({
|
||||
isFavourite: false,
|
||||
isLowPriority: true,
|
||||
});
|
||||
this._toggleTag("m.lowpriority", "m.favourite");
|
||||
} else if (this.state.isLowPriority) {
|
||||
this.setState({isLowPriority: false});
|
||||
this._toggleTag(null, "m.lowpriority");
|
||||
} else if (!this.state.isLowPriority) {
|
||||
this.setState({isLowPriority: true});
|
||||
this._toggleTag("m.lowpriority");
|
||||
}
|
||||
},
|
||||
|
||||
_onClickDM: function() {
|
||||
const newIsDirectMessage = !this.state.isDirectMessage;
|
||||
this.setState({
|
||||
isDirectMessage: newIsDirectMessage,
|
||||
});
|
||||
|
||||
if (MatrixClientPeg.get().isGuest()) return;
|
||||
|
||||
Rooms.guessAndSetDMRoom(
|
||||
this.props.room, newIsDirectMessage
|
||||
).delay(500).finally(() => {
|
||||
// Close the context menu
|
||||
if (this.props.onFinished) {
|
||||
this.props.onFinished();
|
||||
};
|
||||
}, (err) => {
|
||||
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
Modal.createTrackedDialog('Failed to set Direct Message status of room', '', ErrorDialog, {
|
||||
title: _t('Failed to set Direct Message status of room'),
|
||||
description: ((err && err.message) ? err.message : _t('Operation failed')),
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
_onClickLeave: function() {
|
||||
// Leave room
|
||||
dis.dispatch({
|
||||
action: 'leave_room',
|
||||
room_id: this.props.room.roomId,
|
||||
});
|
||||
|
||||
// Close the context menu
|
||||
if (this.props.onFinished) {
|
||||
this.props.onFinished();
|
||||
};
|
||||
},
|
||||
|
||||
_onClickReject: function() {
|
||||
dis.dispatch({
|
||||
action: 'reject_invite',
|
||||
room_id: this.props.room.roomId,
|
||||
});
|
||||
|
||||
// Close the context menu
|
||||
if (this.props.onFinished) {
|
||||
this.props.onFinished();
|
||||
};
|
||||
},
|
||||
|
||||
_onClickForget: function() {
|
||||
// FIXME: duplicated with RoomSettings (and dead code in RoomView)
|
||||
MatrixClientPeg.get().forget(this.props.room.roomId).done(function() {
|
||||
dis.dispatch({ action: 'view_next_room' });
|
||||
}, function(err) {
|
||||
var errCode = err.errcode || _td("unknown error code");
|
||||
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
Modal.createTrackedDialog('Failed to forget room', '', ErrorDialog, {
|
||||
title: _t('Failed to forget room %(errCode)s', {errCode: errCode}),
|
||||
description: ((err && err.message) ? err.message : _t('Operation failed')),
|
||||
});
|
||||
});
|
||||
|
||||
// Close the context menu
|
||||
if (this.props.onFinished) {
|
||||
this.props.onFinished();
|
||||
};
|
||||
},
|
||||
|
||||
_saveNotifState: function(newState) {
|
||||
const oldState = this.state.roomNotifState;
|
||||
const roomId = this.props.room.roomId;
|
||||
var cli = MatrixClientPeg.get();
|
||||
|
||||
if (cli.isGuest()) return;
|
||||
|
||||
this.setState({
|
||||
roomNotifState: newState,
|
||||
});
|
||||
RoomNotifs.setRoomNotifsState(this.props.room.roomId, newState).done(() => {
|
||||
// delay slightly so that the user can see their state change
|
||||
// before closing the menu
|
||||
return Promise.delay(500).then(() => {
|
||||
if (this._unmounted) return;
|
||||
// Close the context menu
|
||||
if (this.props.onFinished) {
|
||||
this.props.onFinished();
|
||||
};
|
||||
});
|
||||
}, (error) => {
|
||||
// TODO: some form of error notification to the user
|
||||
// to inform them that their state change failed.
|
||||
// For now we at least set the state back
|
||||
if (this._unmounted) return;
|
||||
this.setState({
|
||||
roomNotifState: oldState,
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
_onClickAlertMe: function() {
|
||||
this._saveNotifState(RoomNotifs.ALL_MESSAGES_LOUD);
|
||||
},
|
||||
|
||||
_onClickAllNotifs: function() {
|
||||
this._saveNotifState(RoomNotifs.ALL_MESSAGES);
|
||||
},
|
||||
|
||||
_onClickMentions: function() {
|
||||
this._saveNotifState(RoomNotifs.MENTIONS_ONLY);
|
||||
},
|
||||
|
||||
_onClickMute: function() {
|
||||
this._saveNotifState(RoomNotifs.MUTE);
|
||||
},
|
||||
|
||||
_renderNotifMenu: function() {
|
||||
var alertMeClasses = classNames({
|
||||
'mx_RoomTileContextMenu_notif_field': true,
|
||||
'mx_RoomTileContextMenu_notif_fieldSet': this.state.roomNotifState == RoomNotifs.ALL_MESSAGES_LOUD,
|
||||
});
|
||||
|
||||
var allNotifsClasses = classNames({
|
||||
'mx_RoomTileContextMenu_notif_field': true,
|
||||
'mx_RoomTileContextMenu_notif_fieldSet': this.state.roomNotifState == RoomNotifs.ALL_MESSAGES,
|
||||
});
|
||||
|
||||
var mentionsClasses = classNames({
|
||||
'mx_RoomTileContextMenu_notif_field': true,
|
||||
'mx_RoomTileContextMenu_notif_fieldSet': this.state.roomNotifState == RoomNotifs.MENTIONS_ONLY,
|
||||
});
|
||||
|
||||
var muteNotifsClasses = classNames({
|
||||
'mx_RoomTileContextMenu_notif_field': true,
|
||||
'mx_RoomTileContextMenu_notif_fieldSet': this.state.roomNotifState == RoomNotifs.MUTE,
|
||||
});
|
||||
|
||||
return (
|
||||
<div>
|
||||
<div className="mx_RoomTileContextMenu_notif_picker" >
|
||||
<img src="img/notif-slider.svg" width="20" height="107" />
|
||||
</div>
|
||||
<div className={ alertMeClasses } onClick={this._onClickAlertMe} >
|
||||
<img className="mx_RoomTileContextMenu_notif_activeIcon" src="img/notif-active.svg" width="12" height="12" />
|
||||
<img className="mx_RoomTileContextMenu_notif_icon mx_filterFlipColor" src="img/icon-context-mute-off-copy.svg" width="16" height="12" />
|
||||
{ _t('All messages (loud)') }
|
||||
</div>
|
||||
<div className={ allNotifsClasses } onClick={this._onClickAllNotifs} >
|
||||
<img className="mx_RoomTileContextMenu_notif_activeIcon" src="img/notif-active.svg" width="12" height="12" />
|
||||
<img className="mx_RoomTileContextMenu_notif_icon mx_filterFlipColor" src="img/icon-context-mute-off.svg" width="16" height="12" />
|
||||
{ _t('All messages') }
|
||||
</div>
|
||||
<div className={ mentionsClasses } onClick={this._onClickMentions} >
|
||||
<img className="mx_RoomTileContextMenu_notif_activeIcon" src="img/notif-active.svg" width="12" height="12" />
|
||||
<img className="mx_RoomTileContextMenu_notif_icon mx_filterFlipColor" src="img/icon-context-mute-mentions.svg" width="16" height="12" />
|
||||
{ _t('Mentions only') }
|
||||
</div>
|
||||
<div className={ muteNotifsClasses } onClick={this._onClickMute} >
|
||||
<img className="mx_RoomTileContextMenu_notif_activeIcon" src="img/notif-active.svg" width="12" height="12" />
|
||||
<img className="mx_RoomTileContextMenu_notif_icon mx_filterFlipColor" src="img/icon-context-mute.svg" width="16" height="12" />
|
||||
{ _t('Mute') }
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
},
|
||||
|
||||
_renderLeaveMenu: function(membership) {
|
||||
if (!membership) {
|
||||
return null;
|
||||
}
|
||||
|
||||
let leaveClickHandler = null;
|
||||
let leaveText = null;
|
||||
|
||||
switch (membership) {
|
||||
case "join":
|
||||
leaveClickHandler = this._onClickLeave;
|
||||
leaveText = _t('Leave');
|
||||
break;
|
||||
case "leave":
|
||||
case "ban":
|
||||
leaveClickHandler = this._onClickForget;
|
||||
leaveText = _t('Forget');
|
||||
break;
|
||||
case "invite":
|
||||
leaveClickHandler = this._onClickReject;
|
||||
leaveText = _t('Reject');
|
||||
break;
|
||||
}
|
||||
|
||||
return (
|
||||
<div>
|
||||
<div className="mx_RoomTileContextMenu_leave" onClick={ leaveClickHandler } >
|
||||
<img className="mx_RoomTileContextMenu_tag_icon" src="img/icon_context_delete.svg" width="15" height="15" />
|
||||
{ leaveText }
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
},
|
||||
|
||||
_renderRoomTagMenu: function() {
|
||||
const favouriteClasses = classNames({
|
||||
'mx_RoomTileContextMenu_tag_field': true,
|
||||
'mx_RoomTileContextMenu_tag_fieldSet': this.state.isFavourite,
|
||||
'mx_RoomTileContextMenu_tag_fieldDisabled': false,
|
||||
});
|
||||
|
||||
const lowPriorityClasses = classNames({
|
||||
'mx_RoomTileContextMenu_tag_field': true,
|
||||
'mx_RoomTileContextMenu_tag_fieldSet': this.state.isLowPriority,
|
||||
'mx_RoomTileContextMenu_tag_fieldDisabled': false,
|
||||
});
|
||||
|
||||
const dmClasses = classNames({
|
||||
'mx_RoomTileContextMenu_tag_field': true,
|
||||
'mx_RoomTileContextMenu_tag_fieldSet': this.state.isDirectMessage,
|
||||
'mx_RoomTileContextMenu_tag_fieldDisabled': false,
|
||||
});
|
||||
|
||||
return (
|
||||
<div>
|
||||
<div className={ favouriteClasses } onClick={this._onClickFavourite} >
|
||||
<img className="mx_RoomTileContextMenu_tag_icon" src="img/icon_context_fave.svg" width="15" height="15" />
|
||||
<img className="mx_RoomTileContextMenu_tag_icon_set" src="img/icon_context_fave_on.svg" width="15" height="15" />
|
||||
{ _t('Favourite') }
|
||||
</div>
|
||||
<div className={ lowPriorityClasses } onClick={this._onClickLowPriority} >
|
||||
<img className="mx_RoomTileContextMenu_tag_icon" src="img/icon_context_low.svg" width="15" height="15" />
|
||||
<img className="mx_RoomTileContextMenu_tag_icon_set" src="img/icon_context_low_on.svg" width="15" height="15" />
|
||||
{ _t('Low Priority') }
|
||||
</div>
|
||||
<div className={ dmClasses } onClick={this._onClickDM} >
|
||||
<img className="mx_RoomTileContextMenu_tag_icon" src="img/icon_context_person.svg" width="15" height="15" />
|
||||
<img className="mx_RoomTileContextMenu_tag_icon_set" src="img/icon_context_person_on.svg" width="15" height="15" />
|
||||
{ _t('Direct Chat') }
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
},
|
||||
|
||||
render: function() {
|
||||
const myMember = this.props.room.getMember(
|
||||
MatrixClientPeg.get().credentials.userId
|
||||
);
|
||||
|
||||
// Can't set notif level or tags on non-join rooms
|
||||
if (myMember.membership !== 'join') {
|
||||
return this._renderLeaveMenu(myMember.membership);
|
||||
}
|
||||
|
||||
return (
|
||||
<div>
|
||||
{ this._renderNotifMenu() }
|
||||
<hr className="mx_RoomTileContextMenu_separator" />
|
||||
{ this._renderLeaveMenu(myMember.membership) }
|
||||
<hr className="mx_RoomTileContextMenu_separator" />
|
||||
{ this._renderRoomTagMenu() }
|
||||
</div>
|
||||
);
|
||||
}
|
||||
});
|
176
src/components/views/dialogs/BugReportDialog.js
Normal file
176
src/components/views/dialogs/BugReportDialog.js
Normal file
|
@ -0,0 +1,176 @@
|
|||
/*
|
||||
Copyright 2017 OpenMarket 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 sdk from 'matrix-react-sdk';
|
||||
import SdkConfig from 'matrix-react-sdk/lib/SdkConfig';
|
||||
import Modal from 'matrix-react-sdk/lib/Modal';
|
||||
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
||||
|
||||
export default class BugReportDialog extends React.Component {
|
||||
constructor(props, context) {
|
||||
super(props, context);
|
||||
this.state = {
|
||||
sendLogs: true,
|
||||
busy: false,
|
||||
err: null,
|
||||
text: "",
|
||||
progress: null,
|
||||
};
|
||||
this._unmounted = false;
|
||||
this._onSubmit = this._onSubmit.bind(this);
|
||||
this._onCancel = this._onCancel.bind(this);
|
||||
this._onTextChange = this._onTextChange.bind(this);
|
||||
this._onSendLogsChange = this._onSendLogsChange.bind(this);
|
||||
this._sendProgressCallback = this._sendProgressCallback.bind(this);
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
this._unmounted = true;
|
||||
}
|
||||
|
||||
_onCancel(ev) {
|
||||
this.props.onFinished(false);
|
||||
}
|
||||
|
||||
_onSubmit(ev) {
|
||||
const sendLogs = this.state.sendLogs;
|
||||
const userText = this.state.text;
|
||||
if (!sendLogs && userText.trim().length === 0) {
|
||||
this.setState({
|
||||
err: _t("Please describe the bug and/or send logs."),
|
||||
});
|
||||
return;
|
||||
}
|
||||
this.setState({ busy: true, progress: null, err: null });
|
||||
this._sendProgressCallback(_t("Loading bug report module"));
|
||||
|
||||
require(['../../../vector/submit-rageshake'], (s) => {
|
||||
s(SdkConfig.get().bug_report_endpoint_url, {
|
||||
userText: userText,
|
||||
sendLogs: sendLogs,
|
||||
progressCallback: this._sendProgressCallback,
|
||||
}).then(() => {
|
||||
if (!this._unmounted) {
|
||||
this.props.onFinished(false);
|
||||
const QuestionDialog = sdk.getComponent("dialogs.QuestionDialog");
|
||||
Modal.createTrackedDialog('Bug report sent', '', QuestionDialog, {
|
||||
title: _t('Bug report sent'),
|
||||
description: _t('Thank you!'),
|
||||
hasCancelButton: false,
|
||||
});
|
||||
}
|
||||
}, (err) => {
|
||||
if (!this._unmounted) {
|
||||
this.setState({
|
||||
busy: false,
|
||||
progress: null,
|
||||
err: _t("Failed to send report: ") + `${err.message}`,
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
_onTextChange(ev) {
|
||||
this.setState({ text: ev.target.value });
|
||||
}
|
||||
|
||||
_onSendLogsChange(ev) {
|
||||
this.setState({ sendLogs: ev.target.checked });
|
||||
}
|
||||
|
||||
_sendProgressCallback(progress) {
|
||||
if (this._unmounted) {
|
||||
return;
|
||||
}
|
||||
this.setState({progress: progress});
|
||||
}
|
||||
|
||||
render() {
|
||||
const Loader = sdk.getComponent("elements.Spinner");
|
||||
|
||||
let error = null;
|
||||
if (this.state.err) {
|
||||
error = <div className="error">
|
||||
{this.state.err}
|
||||
</div>;
|
||||
}
|
||||
|
||||
let cancelButton = null;
|
||||
if (!this.state.busy) {
|
||||
cancelButton = <button onClick={this._onCancel}>
|
||||
{ _t("Cancel") }
|
||||
</button>;
|
||||
}
|
||||
|
||||
let progress = null;
|
||||
if (this.state.busy) {
|
||||
progress = (
|
||||
<div className="progress">
|
||||
<Loader />
|
||||
{this.state.progress} ...
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="mx_BugReportDialog">
|
||||
<div className="mx_Dialog_title">
|
||||
{ _t("Report a bug") }
|
||||
</div>
|
||||
<div className="mx_Dialog_content">
|
||||
<p>
|
||||
{ _t("Please describe the bug. What did you do? What did you expect to happen? What actually happened?") }
|
||||
</p>
|
||||
<textarea
|
||||
className="mx_BugReportDialog_input"
|
||||
rows={5}
|
||||
onChange={this._onTextChange}
|
||||
value={this.state.text}
|
||||
placeholder={_t("Describe your problem here.")}
|
||||
/>
|
||||
<p>
|
||||
{ _t("In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:") }
|
||||
</p>
|
||||
<input type="checkbox" checked={this.state.sendLogs}
|
||||
onChange={this._onSendLogsChange} id="mx_BugReportDialog_logs"/>
|
||||
<label htmlFor="mx_BugReportDialog_logs">
|
||||
{ _t("Send logs") }
|
||||
</label>
|
||||
{progress}
|
||||
{error}
|
||||
</div>
|
||||
<div className="mx_Dialog_buttons">
|
||||
<button
|
||||
className="mx_Dialog_primary danger"
|
||||
onClick={this._onSubmit}
|
||||
autoFocus={true}
|
||||
disabled={this.state.busy}
|
||||
>
|
||||
{ _t("Send") }
|
||||
</button>
|
||||
|
||||
{cancelButton}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
BugReportDialog.propTypes = {
|
||||
onFinished: React.PropTypes.func.isRequired,
|
||||
};
|
|
@ -17,6 +17,7 @@
|
|||
import React from 'react';
|
||||
import sdk from 'matrix-react-sdk';
|
||||
import request from 'browser-request';
|
||||
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
||||
|
||||
const REPOS = ['vector-im/vector-web', 'matrix-org/matrix-react-sdk', 'matrix-org/matrix-js-sdk'];
|
||||
|
||||
|
@ -70,16 +71,16 @@ export default class ChangelogDialog extends React.Component {
|
|||
|
||||
const content = (
|
||||
<div className="mx_ChangelogDialog_content">
|
||||
{this.props.version == null || this.props.newVersion == null ? <h2>Unavailable</h2> : logs}
|
||||
{this.props.version == null || this.props.newVersion == null ? <h2>{_t("Unavailable")}</h2> : logs}
|
||||
</div>
|
||||
);
|
||||
|
||||
|
||||
return (
|
||||
<QuestionDialog
|
||||
title="Changelog"
|
||||
title={_t("Changelog")}
|
||||
description={content}
|
||||
button="Update"
|
||||
button={_t("Update")}
|
||||
onFinished={this.props.onFinished}
|
||||
/>
|
||||
)
|
||||
|
|
594
src/components/views/dialogs/DevtoolsDialog.js
Normal file
594
src/components/views/dialogs/DevtoolsDialog.js
Normal file
|
@ -0,0 +1,594 @@
|
|||
/*
|
||||
Copyright 2017 Michael Telatynski <7t3chguy@gmail.com>
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
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 'matrix-react-sdk';
|
||||
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
||||
import MatrixClientPeg from 'matrix-react-sdk/lib/MatrixClientPeg';
|
||||
|
||||
class DevtoolsComponent extends React.Component {
|
||||
static contextTypes = {
|
||||
roomId: PropTypes.string.isRequired,
|
||||
};
|
||||
}
|
||||
|
||||
class GenericEditor extends DevtoolsComponent {
|
||||
// static propTypes = {onBack: PropTypes.func.isRequired};
|
||||
|
||||
constructor(props, context) {
|
||||
super(props, context);
|
||||
this._onChange = this._onChange.bind(this);
|
||||
this.onBack = this.onBack.bind(this);
|
||||
}
|
||||
|
||||
onBack() {
|
||||
if (this.state.message) {
|
||||
this.setState({ message: null });
|
||||
} else {
|
||||
this.props.onBack();
|
||||
}
|
||||
}
|
||||
|
||||
_onChange(e) {
|
||||
this.setState({[e.target.id]: e.target.type === 'checkbox' ? e.target.checked : e.target.value});
|
||||
}
|
||||
|
||||
_buttons() {
|
||||
return <div className="mx_Dialog_buttons">
|
||||
<button onClick={this.onBack}>{ _t('Back') }</button>
|
||||
{ !this.state.message && <button onClick={this._send}>{ _t('Send') }</button> }
|
||||
</div>;
|
||||
}
|
||||
|
||||
textInput(id, label) {
|
||||
return <div className="mx_DevTools_inputRow">
|
||||
<div className="mx_DevTools_inputLabelCell">
|
||||
<label htmlFor={id}>{ label }</label>
|
||||
</div>
|
||||
<div className="mx_DevTools_inputCell">
|
||||
<input id={id} className="mx_TextInputDialog_input" onChange={this._onChange} value={this.state[id]} size="32" />
|
||||
</div>
|
||||
</div>;
|
||||
}
|
||||
}
|
||||
|
||||
class SendCustomEvent extends GenericEditor {
|
||||
static getLabel() { return _t('Send Custom Event'); }
|
||||
|
||||
static propTypes = {
|
||||
onBack: PropTypes.func.isRequired,
|
||||
forceStateEvent: PropTypes.bool,
|
||||
inputs: PropTypes.object,
|
||||
};
|
||||
|
||||
constructor(props, context) {
|
||||
super(props, context);
|
||||
this._send = this._send.bind(this);
|
||||
|
||||
const {eventType, stateKey, evContent} = Object.assign({
|
||||
eventType: '',
|
||||
stateKey: '',
|
||||
evContent: '{\n\n}',
|
||||
}, this.props.inputs);
|
||||
|
||||
this.state = {
|
||||
isStateEvent: Boolean(this.props.forceStateEvent),
|
||||
|
||||
eventType,
|
||||
stateKey,
|
||||
evContent,
|
||||
};
|
||||
}
|
||||
|
||||
send(content) {
|
||||
const cli = MatrixClientPeg.get();
|
||||
if (this.state.isStateEvent) {
|
||||
return cli.sendStateEvent(this.context.roomId, this.state.eventType, content, this.state.stateKey);
|
||||
} else {
|
||||
return cli.sendEvent(this.context.roomId, this.state.eventType, content);
|
||||
}
|
||||
}
|
||||
|
||||
async _send() {
|
||||
if (this.state.eventType === '') {
|
||||
this.setState({ message: _t('You must specify an event type!') });
|
||||
return;
|
||||
}
|
||||
|
||||
let message;
|
||||
try {
|
||||
const content = JSON.parse(this.state.evContent);
|
||||
await this.send(content);
|
||||
message = _t('Event sent!');
|
||||
} catch (e) {
|
||||
message = _t('Failed to send custom event.') + ' (' + e.toString() + ')';
|
||||
}
|
||||
this.setState({ message });
|
||||
}
|
||||
|
||||
render() {
|
||||
if (this.state.message) {
|
||||
return <div>
|
||||
<div className="mx_Dialog_content">
|
||||
{ this.state.message }
|
||||
</div>
|
||||
{ this._buttons() }
|
||||
</div>;
|
||||
}
|
||||
|
||||
return <div>
|
||||
<div className="mx_Dialog_content">
|
||||
{ this.textInput('eventType', _t('Event Type')) }
|
||||
{ this.state.isStateEvent && this.textInput('stateKey', _t('State Key')) }
|
||||
|
||||
<br />
|
||||
|
||||
<div className="mx_UserSettings_profileLabelCell">
|
||||
<label htmlFor="evContent"> { _t('Event Content') } </label>
|
||||
</div>
|
||||
<div>
|
||||
<textarea id="evContent" onChange={this._onChange} value={this.state.evContent} className="mx_TextInputDialog_input" cols="63" rows="5" />
|
||||
</div>
|
||||
</div>
|
||||
<div className="mx_Dialog_buttons">
|
||||
<button onClick={this.onBack}>{ _t('Back') }</button>
|
||||
{ !this.state.message && <button onClick={this._send}>{ _t('Send') }</button> }
|
||||
{ !this.state.message && !this.props.forceStateEvent && <div style={{float: "right"}}>
|
||||
<input id="isStateEvent" className="mx_DevTools_tgl mx_DevTools_tgl-flip" type="checkbox" onChange={this._onChange} checked={this.state.isStateEvent} />
|
||||
<label className="mx_DevTools_tgl-btn" data-tg-off="Event" data-tg-on="State Event" htmlFor="isStateEvent" />
|
||||
</div> }
|
||||
</div>
|
||||
</div>;
|
||||
}
|
||||
}
|
||||
|
||||
class SendAccountData extends GenericEditor {
|
||||
static getLabel() { return _t('Send Account Data'); }
|
||||
|
||||
static propTypes = {
|
||||
isRoomAccountData: PropTypes.bool,
|
||||
forceMode: PropTypes.bool,
|
||||
inputs: PropTypes.object,
|
||||
};
|
||||
|
||||
constructor(props, context) {
|
||||
super(props, context);
|
||||
this._send = this._send.bind(this);
|
||||
|
||||
const {eventType, evContent} = Object.assign({
|
||||
eventType: '',
|
||||
evContent: '{\n\n}',
|
||||
}, this.props.inputs);
|
||||
|
||||
this.state = {
|
||||
isRoomAccountData: Boolean(this.props.isRoomAccountData),
|
||||
|
||||
eventType,
|
||||
evContent,
|
||||
};
|
||||
}
|
||||
|
||||
send(content) {
|
||||
const cli = MatrixClientPeg.get();
|
||||
if (this.state.isRoomAccountData) {
|
||||
return cli.setRoomAccountData(this.context.roomId, this.state.eventType, content);
|
||||
}
|
||||
return cli.setAccountData(this.state.eventType, content);
|
||||
}
|
||||
|
||||
async _send() {
|
||||
if (this.state.eventType === '') {
|
||||
this.setState({ message: _t('You must specify an event type!') });
|
||||
return;
|
||||
}
|
||||
|
||||
let message;
|
||||
try {
|
||||
const content = JSON.parse(this.state.evContent);
|
||||
await this.send(content);
|
||||
message = _t('Event sent!');
|
||||
} catch (e) {
|
||||
message = _t('Failed to send custom event.') + ' (' + e.toString() + ')';
|
||||
}
|
||||
this.setState({ message });
|
||||
}
|
||||
|
||||
render() {
|
||||
if (this.state.message) {
|
||||
return <div>
|
||||
<div className="mx_Dialog_content">
|
||||
{ this.state.message }
|
||||
</div>
|
||||
{ this._buttons() }
|
||||
</div>;
|
||||
}
|
||||
|
||||
return <div>
|
||||
<div className="mx_Dialog_content">
|
||||
{ this.textInput('eventType', _t('Event Type')) }
|
||||
<br />
|
||||
|
||||
<div className="mx_UserSettings_profileLabelCell">
|
||||
<label htmlFor="evContent"> { _t('Event Content') } </label>
|
||||
</div>
|
||||
<div>
|
||||
<textarea id="evContent" onChange={this._onChange} value={this.state.evContent} className="mx_TextInputDialog_input" cols="63" rows="5" />
|
||||
</div>
|
||||
</div>
|
||||
<div className="mx_Dialog_buttons">
|
||||
<button onClick={this.onBack}>{ _t('Back') }</button>
|
||||
{ !this.state.message && <button onClick={this._send}>{ _t('Send') }</button> }
|
||||
{ !this.state.message && <div style={{float: "right"}}>
|
||||
<input id="isRoomAccountData" className="mx_DevTools_tgl mx_DevTools_tgl-flip" type="checkbox" onChange={this._onChange} checked={this.state.isRoomAccountData} disabled={this.props.forceMode} />
|
||||
<label className="mx_DevTools_tgl-btn" data-tg-off="Account Data" data-tg-on="Room Data" htmlFor="isRoomAccountData" />
|
||||
</div> }
|
||||
</div>
|
||||
</div>;
|
||||
}
|
||||
}
|
||||
|
||||
class FilteredList extends React.Component {
|
||||
static propTypes = {
|
||||
children: PropTypes.any,
|
||||
};
|
||||
|
||||
constructor(props, context) {
|
||||
super(props, context);
|
||||
this.onQuery = this.onQuery.bind(this);
|
||||
|
||||
this.state = {
|
||||
query: '',
|
||||
};
|
||||
}
|
||||
|
||||
onQuery(ev) {
|
||||
this.setState({ query: ev.target.value });
|
||||
}
|
||||
|
||||
filterChildren() {
|
||||
if (this.state.query) {
|
||||
const lowerQuery = this.state.query.toLowerCase();
|
||||
return this.props.children.filter((child) => child.key.toLowerCase().includes(lowerQuery));
|
||||
}
|
||||
return this.props.children;
|
||||
}
|
||||
|
||||
render() {
|
||||
return <div>
|
||||
<input size="64"
|
||||
onChange={this.onQuery}
|
||||
value={this.state.query}
|
||||
placeholder={_t('Filter results')}
|
||||
className="mx_TextInputDialog_input mx_DevTools_RoomStateExplorer_query" />
|
||||
{ this.filterChildren() }
|
||||
</div>;
|
||||
}
|
||||
}
|
||||
|
||||
class RoomStateExplorer extends DevtoolsComponent {
|
||||
static getLabel() { return _t('Explore Room State'); }
|
||||
|
||||
|
||||
static propTypes = {
|
||||
onBack: PropTypes.func.isRequired,
|
||||
};
|
||||
|
||||
constructor(props, context) {
|
||||
super(props, context);
|
||||
|
||||
const room = MatrixClientPeg.get().getRoom(this.context.roomId);
|
||||
this.roomStateEvents = room.currentState.events;
|
||||
|
||||
this.onBack = this.onBack.bind(this);
|
||||
this.editEv = this.editEv.bind(this);
|
||||
|
||||
this.state = {
|
||||
eventType: null,
|
||||
event: null,
|
||||
editing: false,
|
||||
};
|
||||
}
|
||||
|
||||
browseEventType(eventType) {
|
||||
return () => {
|
||||
this.setState({ eventType });
|
||||
};
|
||||
}
|
||||
|
||||
onViewSourceClick(event) {
|
||||
return () => {
|
||||
this.setState({ event });
|
||||
};
|
||||
}
|
||||
|
||||
onBack() {
|
||||
if (this.state.editing) {
|
||||
this.setState({ editing: false });
|
||||
} else if (this.state.event) {
|
||||
this.setState({ event: null });
|
||||
} else if (this.state.eventType) {
|
||||
this.setState({ eventType: null });
|
||||
} else {
|
||||
this.props.onBack();
|
||||
}
|
||||
}
|
||||
|
||||
editEv() {
|
||||
this.setState({ editing: true });
|
||||
}
|
||||
|
||||
render() {
|
||||
if (this.state.event) {
|
||||
if (this.state.editing) {
|
||||
return <SendCustomEvent forceStateEvent={true} onBack={this.onBack} inputs={{
|
||||
eventType: this.state.event.getType(),
|
||||
evContent: JSON.stringify(this.state.event.getContent(), null, '\t'),
|
||||
stateKey: this.state.event.getStateKey(),
|
||||
}} />;
|
||||
}
|
||||
|
||||
return <div className="mx_ViewSource">
|
||||
<div className="mx_Dialog_content">
|
||||
<pre>{ JSON.stringify(this.state.event.event, null, 2) }</pre>
|
||||
</div>
|
||||
<div className="mx_Dialog_buttons">
|
||||
<button onClick={this.onBack}>{ _t('Back') }</button>
|
||||
<button onClick={this.editEv}>{ _t('Edit') }</button>
|
||||
</div>
|
||||
</div>;
|
||||
}
|
||||
|
||||
const rows = [];
|
||||
|
||||
const classes = 'mx_DevTools_RoomStateExplorer_button';
|
||||
if (this.state.eventType === null) {
|
||||
Object.keys(this.roomStateEvents).forEach((evType) => {
|
||||
const stateGroup = this.roomStateEvents[evType];
|
||||
const stateKeys = Object.keys(stateGroup);
|
||||
|
||||
let onClickFn;
|
||||
if (stateKeys.length > 1) {
|
||||
onClickFn = this.browseEventType(evType);
|
||||
} else if (stateKeys.length === 1) {
|
||||
onClickFn = this.onViewSourceClick(stateGroup[stateKeys[0]]);
|
||||
}
|
||||
|
||||
rows.push(<button className={classes} key={evType} onClick={onClickFn}>
|
||||
{ evType }
|
||||
</button>);
|
||||
});
|
||||
} else {
|
||||
const evType = this.state.eventType;
|
||||
const stateGroup = this.roomStateEvents[evType];
|
||||
Object.keys(stateGroup).forEach((stateKey) => {
|
||||
const ev = stateGroup[stateKey];
|
||||
rows.push(<button className={classes} key={stateKey} onClick={this.onViewSourceClick(ev)}>
|
||||
{ stateKey }
|
||||
</button>);
|
||||
});
|
||||
}
|
||||
|
||||
return <div>
|
||||
<div className="mx_Dialog_content">
|
||||
<FilteredList>
|
||||
{ rows }
|
||||
</FilteredList>
|
||||
</div>
|
||||
<div className="mx_Dialog_buttons">
|
||||
<button onClick={this.onBack}>{ _t('Back') }</button>
|
||||
</div>
|
||||
</div>;
|
||||
}
|
||||
}
|
||||
|
||||
class AccountDataExplorer extends DevtoolsComponent {
|
||||
static getLabel() { return _t('Explore Account Data'); }
|
||||
|
||||
static propTypes = {
|
||||
onBack: PropTypes.func.isRequired,
|
||||
};
|
||||
|
||||
constructor(props, context) {
|
||||
super(props, context);
|
||||
|
||||
this.onBack = this.onBack.bind(this);
|
||||
this.editEv = this.editEv.bind(this);
|
||||
this._onChange = this._onChange.bind(this);
|
||||
|
||||
this.state = {
|
||||
isRoomAccountData: false,
|
||||
event: null,
|
||||
editing: false,
|
||||
};
|
||||
}
|
||||
|
||||
getData() {
|
||||
const cli = MatrixClientPeg.get();
|
||||
if (this.state.isRoomAccountData) {
|
||||
return cli.getRoom(this.context.roomId).accountData;
|
||||
}
|
||||
return cli.store.accountData;
|
||||
}
|
||||
|
||||
onViewSourceClick(event) {
|
||||
return () => {
|
||||
this.setState({ event });
|
||||
};
|
||||
}
|
||||
|
||||
onBack() {
|
||||
if (this.state.editing) {
|
||||
this.setState({ editing: false });
|
||||
} else if (this.state.event) {
|
||||
this.setState({ event: null });
|
||||
} else {
|
||||
this.props.onBack();
|
||||
}
|
||||
}
|
||||
|
||||
_onChange(e) {
|
||||
this.setState({[e.target.id]: e.target.type === 'checkbox' ? e.target.checked : e.target.value});
|
||||
}
|
||||
|
||||
editEv() {
|
||||
this.setState({ editing: true });
|
||||
}
|
||||
|
||||
render() {
|
||||
if (this.state.event) {
|
||||
if (this.state.editing) {
|
||||
return <SendAccountData isRoomAccountData={this.state.isRoomAccountData} onBack={this.onBack} inputs={{
|
||||
eventType: this.state.event.getType(),
|
||||
evContent: JSON.stringify(this.state.event.getContent(), null, '\t'),
|
||||
}} forceMode={true} />;
|
||||
}
|
||||
|
||||
return <div className="mx_ViewSource">
|
||||
<div className="mx_Dialog_content">
|
||||
<pre>{ JSON.stringify(this.state.event.event, null, 2) }</pre>
|
||||
</div>
|
||||
<div className="mx_Dialog_buttons">
|
||||
<button onClick={this.onBack}>{ _t('Back') }</button>
|
||||
<button onClick={this.editEv}>{ _t('Edit') }</button>
|
||||
</div>
|
||||
</div>;
|
||||
}
|
||||
|
||||
const rows = [];
|
||||
|
||||
const classes = 'mx_DevTools_RoomStateExplorer_button';
|
||||
|
||||
const data = this.getData();
|
||||
Object.keys(data).forEach((evType) => {
|
||||
const ev = data[evType];
|
||||
rows.push(<button className={classes} key={evType} onClick={this.onViewSourceClick(ev)}>
|
||||
{ evType }
|
||||
</button>);
|
||||
});
|
||||
|
||||
return <div>
|
||||
<div className="mx_Dialog_content">
|
||||
<FilteredList>
|
||||
{ rows }
|
||||
</FilteredList>
|
||||
</div>
|
||||
<div className="mx_Dialog_buttons">
|
||||
<button onClick={this.onBack}>{ _t('Back') }</button>
|
||||
{ !this.state.message && <div style={{float: "right"}}>
|
||||
<input id="isRoomAccountData" className="mx_DevTools_tgl mx_DevTools_tgl-flip" type="checkbox" onChange={this._onChange} checked={this.state.isRoomAccountData} />
|
||||
<label className="mx_DevTools_tgl-btn" data-tg-off="Account Data" data-tg-on="Room Data" htmlFor="isRoomAccountData" />
|
||||
</div> }
|
||||
</div>
|
||||
</div>;
|
||||
}
|
||||
}
|
||||
|
||||
const Entries = [
|
||||
SendCustomEvent,
|
||||
RoomStateExplorer,
|
||||
SendAccountData,
|
||||
AccountDataExplorer,
|
||||
];
|
||||
|
||||
export default class DevtoolsDialog extends React.Component {
|
||||
static childContextTypes = {
|
||||
roomId: PropTypes.string.isRequired,
|
||||
// client: PropTypes.instanceOf(MatixClient),
|
||||
};
|
||||
|
||||
static propTypes = {
|
||||
roomId: PropTypes.string.isRequired,
|
||||
onFinished: PropTypes.func.isRequired,
|
||||
};
|
||||
|
||||
constructor(props, context) {
|
||||
super(props, context);
|
||||
this.onBack = this.onBack.bind(this);
|
||||
this.onCancel = this.onCancel.bind(this);
|
||||
|
||||
this.state = {
|
||||
mode: null,
|
||||
};
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
this._unmounted = true;
|
||||
}
|
||||
|
||||
getChildContext() {
|
||||
return { roomId: this.props.roomId };
|
||||
}
|
||||
|
||||
_setMode(mode) {
|
||||
return () => {
|
||||
this.setState({ mode });
|
||||
};
|
||||
}
|
||||
|
||||
onBack() {
|
||||
if (this.prevMode) {
|
||||
this.setState({ mode: this.prevMode });
|
||||
this.prevMode = null;
|
||||
} else {
|
||||
this.setState({ mode: null });
|
||||
}
|
||||
}
|
||||
|
||||
onCancel() {
|
||||
this.props.onFinished(false);
|
||||
}
|
||||
|
||||
render() {
|
||||
let body;
|
||||
|
||||
if (this.state.mode) {
|
||||
body = <div>
|
||||
<div className="mx_DevTools_label_left">{ this.state.mode.getLabel() }</div>
|
||||
<div className="mx_DevTools_label_right">Room ID: { this.props.roomId }</div>
|
||||
<div className="mx_DevTools_label_bottom" />
|
||||
<this.state.mode onBack={this.onBack} />
|
||||
</div>;
|
||||
} else {
|
||||
const classes = "mx_DevTools_RoomStateExplorer_button";
|
||||
body = <div>
|
||||
<div>
|
||||
<div className="mx_DevTools_label_left">{ _t('Toolbox') }</div>
|
||||
<div className="mx_DevTools_label_right">Room ID: { this.props.roomId }</div>
|
||||
<div className="mx_DevTools_label_bottom" />
|
||||
|
||||
<div className="mx_Dialog_content">
|
||||
{ Entries.map((Entry) => {
|
||||
const label = Entry.getLabel();
|
||||
const onClick = this._setMode(Entry);
|
||||
return <button className={classes} key={label} onClick={onClick}>{ label }</button>;
|
||||
}) }
|
||||
</div>
|
||||
</div>
|
||||
<div className="mx_Dialog_buttons">
|
||||
<button onClick={this.onCancel}>{ _t('Cancel') }</button>
|
||||
</div>
|
||||
</div>;
|
||||
}
|
||||
|
||||
const BaseDialog = sdk.getComponent('views.dialogs.BaseDialog');
|
||||
return (
|
||||
<BaseDialog className="mx_QuestionDialog" onFinished={this.props.onFinished} title={_t('Developer Tools')}>
|
||||
{ body }
|
||||
</BaseDialog>
|
||||
);
|
||||
}
|
||||
}
|
137
src/components/views/dialogs/SetPasswordDialog.js
Normal file
137
src/components/views/dialogs/SetPasswordDialog.js
Normal file
|
@ -0,0 +1,137 @@
|
|||
/*
|
||||
Copyright 2017 Vector Creations Ltd
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
import React from 'react';
|
||||
import sdk from 'matrix-react-sdk';
|
||||
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
||||
import Modal from 'matrix-react-sdk/lib/Modal';
|
||||
|
||||
const WarmFuzzy = function(props) {
|
||||
const BaseDialog = sdk.getComponent('views.dialogs.BaseDialog');
|
||||
let title = _t('You have successfully set a password!');
|
||||
if (props.didSetEmail) {
|
||||
title = _t('You have successfully set a password and an email address!');
|
||||
}
|
||||
const advice = _t('You can now return to your account after signing out, and sign in on other devices.');
|
||||
let extraAdvice = null;
|
||||
if (!props.didSetEmail) {
|
||||
extraAdvice = _t('Remember, you can always set an email address in user settings if you change your mind.');
|
||||
}
|
||||
|
||||
return <BaseDialog className="mx_SetPasswordDialog"
|
||||
onFinished={props.onFinished}
|
||||
title={ title }
|
||||
>
|
||||
<div className="mx_Dialog_content">
|
||||
<p>
|
||||
{ advice }
|
||||
</p>
|
||||
<p>
|
||||
{ extraAdvice }
|
||||
</p>
|
||||
</div>
|
||||
<div className="mx_Dialog_buttons">
|
||||
<button
|
||||
className="mx_Dialog_primary"
|
||||
autoFocus={true}
|
||||
onClick={props.onFinished}>
|
||||
{ _t('Continue') }
|
||||
</button>
|
||||
</div>
|
||||
</BaseDialog>;
|
||||
};
|
||||
|
||||
/**
|
||||
* Prompt the user to set a password
|
||||
*
|
||||
* On success, `onFinished()` when finished
|
||||
*/
|
||||
export default React.createClass({
|
||||
displayName: 'SetPasswordDialog',
|
||||
propTypes: {
|
||||
onFinished: React.PropTypes.func.isRequired,
|
||||
},
|
||||
|
||||
getInitialState: function() {
|
||||
return {
|
||||
error: null,
|
||||
};
|
||||
},
|
||||
|
||||
componentWillMount: function() {
|
||||
console.info('SetPasswordDialog component will mount');
|
||||
},
|
||||
|
||||
_onPasswordChanged: function(res) {
|
||||
Modal.createDialog(WarmFuzzy, {
|
||||
didSetEmail: res.didSetEmail,
|
||||
onFinished: () => {
|
||||
this._onContinueClicked();
|
||||
},
|
||||
});
|
||||
},
|
||||
|
||||
_onContinueClicked: function() {
|
||||
this.props.onFinished(true);
|
||||
},
|
||||
|
||||
_onPasswordChangeError: function(err) {
|
||||
let errMsg = err.error || "";
|
||||
if (err.httpStatus === 403) {
|
||||
errMsg = _t('Failed to change password. Is your password correct?');
|
||||
} else if (err.httpStatus) {
|
||||
errMsg += ' ' + _t(
|
||||
'(HTTP status %(httpStatus)s)',
|
||||
{ httpStatus: err.httpStatus },
|
||||
);
|
||||
}
|
||||
this.setState({
|
||||
error: errMsg,
|
||||
});
|
||||
},
|
||||
|
||||
render: function() {
|
||||
const BaseDialog = sdk.getComponent('views.dialogs.BaseDialog');
|
||||
const ChangePassword = sdk.getComponent('views.settings.ChangePassword');
|
||||
|
||||
return (
|
||||
<BaseDialog className="mx_SetPasswordDialog"
|
||||
onFinished={this.props.onFinished}
|
||||
title={ _t('Please set a password!') }
|
||||
>
|
||||
<div className="mx_Dialog_content">
|
||||
<p>
|
||||
{ _t('This will allow you to return to your account after signing out, and sign in on other devices.') }
|
||||
</p>
|
||||
<ChangePassword
|
||||
className="mx_SetPasswordDialog_change_password"
|
||||
rowClassName=""
|
||||
rowLabelClassName=""
|
||||
rowInputClassName=""
|
||||
buttonClassName="mx_Dialog_primary mx_SetPasswordDialog_change_password_button"
|
||||
confirm={false}
|
||||
autoFocusNewPasswordInput={true}
|
||||
shouldAskForEmail={true}
|
||||
onError={this._onPasswordChangeError}
|
||||
onFinished={this._onPasswordChanged} />
|
||||
<div className="error">
|
||||
{ this.state.error }
|
||||
</div>
|
||||
</div>
|
||||
</BaseDialog>
|
||||
);
|
||||
},
|
||||
});
|
|
@ -150,7 +150,21 @@ export default class NetworkDropdown extends React.Component {
|
|||
if (this.props.protocols) {
|
||||
for (const proto of Object.keys(this.props.protocols)) {
|
||||
if (!this.props.protocols[proto].instances) continue;
|
||||
for (const instance of this.props.protocols[proto].instances) {
|
||||
|
||||
const sortedInstances = this.props.protocols[proto].instances;
|
||||
sortedInstances.sort(function(x, y) {
|
||||
const a = x.desc
|
||||
const b = y.desc
|
||||
if (a < b) {
|
||||
return -1;
|
||||
} else if (a > b) {
|
||||
return 1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
});
|
||||
|
||||
for (const instance of sortedInstances) {
|
||||
if (!instance.instance_id) continue;
|
||||
options.push(this._makeMenuOption(server, instance, false));
|
||||
}
|
||||
|
@ -181,7 +195,10 @@ export default class NetworkDropdown extends React.Component {
|
|||
span_class = 'mx_NetworkDropdown_menu_network';
|
||||
} else {
|
||||
key = server + '_inst_' + instance.instance_id;
|
||||
icon = <img src={instance.icon || DEFAULT_ICON_URL} />;
|
||||
const imgUrl = instance.icon ?
|
||||
MatrixClientPeg.get().mxcUrlToHttp(instance.icon, 25, 25, 'crop', true) :
|
||||
DEFAULT_ICON_URL;
|
||||
icon = <img src={imgUrl} />;
|
||||
name = instance.desc;
|
||||
span_class = 'mx_NetworkDropdown_menu_network';
|
||||
}
|
||||
|
|
|
@ -22,6 +22,10 @@ var MatrixClientPeg = require('matrix-react-sdk/lib/MatrixClientPeg');
|
|||
|
||||
var DateUtils = require('matrix-react-sdk/lib/DateUtils');
|
||||
var filesize = require('filesize');
|
||||
var AccessibleButton = require('matrix-react-sdk/lib/components/views/elements/AccessibleButton');
|
||||
const Modal = require('matrix-react-sdk/lib/Modal');
|
||||
const sdk = require('matrix-react-sdk');
|
||||
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
||||
|
||||
module.exports = React.createClass({
|
||||
displayName: 'ImageView',
|
||||
|
@ -61,19 +65,23 @@ module.exports = React.createClass({
|
|||
},
|
||||
|
||||
onRedactClick: function() {
|
||||
var self = this;
|
||||
MatrixClientPeg.get().redactEvent(
|
||||
this.props.mxEvent.getRoomId(), this.props.mxEvent.getId()
|
||||
).done(function() {
|
||||
if (self.props.onFinished) self.props.onFinished();
|
||||
}, function(e) {
|
||||
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
// display error message stating you couldn't delete this.
|
||||
var code = e.errcode || e.statusCode;
|
||||
Modal.createDialog(ErrorDialog, {
|
||||
title: "Error",
|
||||
description: "You cannot delete this image. (" + code + ")"
|
||||
});
|
||||
const ConfirmRedactDialog = sdk.getComponent("dialogs.ConfirmRedactDialog");
|
||||
Modal.createTrackedDialog('Confirm Redact Dialog', 'Image View', ConfirmRedactDialog, {
|
||||
onFinished: (proceed) => {
|
||||
if (!proceed) return;
|
||||
var self = this;
|
||||
MatrixClientPeg.get().redactEvent(
|
||||
this.props.mxEvent.getRoomId(), this.props.mxEvent.getId()
|
||||
).catch(function(e) {
|
||||
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
// display error message stating you couldn't delete this.
|
||||
var code = e.errcode || e.statusCode;
|
||||
Modal.createTrackedDialog('You cannot delete this image.', '', ErrorDialog, {
|
||||
title: _t('Error'),
|
||||
description: _t('You cannot delete this image. (%(code)s)', {code: code})
|
||||
});
|
||||
}).done();
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
|
@ -142,15 +150,23 @@ module.exports = React.createClass({
|
|||
|
||||
var eventMeta;
|
||||
if(showEventMeta) {
|
||||
// Figure out the sender, defaulting to mxid
|
||||
let sender = this.props.mxEvent.getSender();
|
||||
const room = MatrixClientPeg.get().getRoom(this.props.mxEvent.getRoomId());
|
||||
if (room) {
|
||||
const member = room.getMember(sender);
|
||||
if (member) sender = member.name;
|
||||
}
|
||||
|
||||
eventMeta = (<div className="mx_ImageView_metadata">
|
||||
Uploaded on { DateUtils.formatDate(new Date(this.props.mxEvent.getTs())) } by { this.props.mxEvent.getSender() }
|
||||
{ _t('Uploaded on %(date)s by %(user)s', {date: DateUtils.formatDate(new Date(this.props.mxEvent.getTs())), user: sender}) }
|
||||
</div>);
|
||||
}
|
||||
|
||||
var eventRedact;
|
||||
if(showEventMeta) {
|
||||
eventRedact = (<div className="mx_ImageView_button" onClick={this.onRedactClick}>
|
||||
Redact
|
||||
{ _t('Remove') }
|
||||
</div>);
|
||||
}
|
||||
|
||||
|
@ -162,16 +178,16 @@ module.exports = React.createClass({
|
|||
<img src={this.props.src} style={style}/>
|
||||
<div className="mx_ImageView_labelWrapper">
|
||||
<div className="mx_ImageView_label">
|
||||
<img className="mx_ImageView_cancel" src="img/cancel-white.svg" width="18" height="18" alt="Close" onClick={ this.props.onFinished }/>
|
||||
<AccessibleButton className="mx_ImageView_cancel" onClick={ this.props.onFinished }><img src="img/cancel-white.svg" width="18" height="18" alt={ _t('Close') }/></AccessibleButton>
|
||||
<div className="mx_ImageView_shim">
|
||||
</div>
|
||||
<div className="mx_ImageView_name">
|
||||
{ this.getName() }
|
||||
</div>
|
||||
{ eventMeta }
|
||||
<a className="mx_ImageView_link" href={ this.props.src } target="_blank" rel="noopener">
|
||||
<a className="mx_ImageView_link" href={ this.props.src } download={ this.props.name } target="_blank" rel="noopener">
|
||||
<div className="mx_ImageView_download">
|
||||
Download this file<br/>
|
||||
{ _t('Download this file') }<br/>
|
||||
<span className="mx_ImageView_size">{ size_res }</span>
|
||||
</div>
|
||||
</a>
|
||||
|
|
33
src/components/views/elements/InlineSpinner.js
Normal file
33
src/components/views/elements/InlineSpinner.js
Normal file
|
@ -0,0 +1,33 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
const React = require('react');
|
||||
|
||||
module.exports = React.createClass({
|
||||
displayName: 'InlineSpinner',
|
||||
|
||||
render: function() {
|
||||
var w = this.props.w || 16;
|
||||
var h = this.props.h || 16;
|
||||
var imgClass = this.props.imgClassName || "";
|
||||
|
||||
return (
|
||||
<div className="mx_InlineSpinner">
|
||||
<img src="img/spinner.gif" width={w} height={h} className={imgClass}/>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
});
|
|
@ -1,43 +0,0 @@
|
|||
/*
|
||||
Copyright 2016 OpenMarket 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.
|
||||
*/
|
||||
|
||||
var React = require('react');
|
||||
var dis = require('matrix-react-sdk/lib/dispatcher')
|
||||
|
||||
module.exports = React.createClass({
|
||||
displayName: 'GuestWarningBar',
|
||||
|
||||
onRegisterClicked: function() {
|
||||
dis.dispatch({'action': 'start_upgrade_registration'});
|
||||
},
|
||||
|
||||
onLoginClicked: function() {
|
||||
dis.dispatch({'action': 'logout'});
|
||||
dis.dispatch({'action': 'start_login'});
|
||||
},
|
||||
|
||||
render: function() {
|
||||
return (
|
||||
<div className="mx_GuestWarningBar">
|
||||
<img className="mx_GuestWarningBar_warning" src="img/warning.svg" width="24" height="23" alt="/!\"/>
|
||||
<div>
|
||||
You are Rioting as a guest. <a onClick={this.onRegisterClicked}>Register</a> or <a onClick={this.onLoginClicked}>sign in</a> to access more rooms and features.
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
});
|
||||
|
|
@ -16,9 +16,10 @@ limitations under the License.
|
|||
|
||||
'use strict';
|
||||
|
||||
var React = require('react');
|
||||
var Notifier = require("matrix-react-sdk/lib/Notifier");
|
||||
var sdk = require('matrix-react-sdk')
|
||||
import React from 'react';
|
||||
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
||||
import Notifier from 'matrix-react-sdk/lib/Notifier';
|
||||
import AccessibleButton from 'matrix-react-sdk/lib/components/views/elements/AccessibleButton';
|
||||
|
||||
module.exports = React.createClass({
|
||||
displayName: 'MatrixToolbar',
|
||||
|
@ -34,12 +35,12 @@ module.exports = React.createClass({
|
|||
render: function() {
|
||||
return (
|
||||
<div className="mx_MatrixToolbar">
|
||||
<img className="mx_MatrixToolbar_warning" src="img/warning.svg" width="24" height="23" alt="/!\"/>
|
||||
<img className="mx_MatrixToolbar_warning" src="img/warning.svg" width="24" height="23" alt="Warning"/>
|
||||
<div className="mx_MatrixToolbar_content">
|
||||
You are not receiving desktop notifications. <a className="mx_MatrixToolbar_link" onClick={ this.onClick }>Enable them now</a>
|
||||
{ _t('You are not receiving desktop notifications') } <a className="mx_MatrixToolbar_link" onClick={ this.onClick }> { _t('Enable them now') }</a>
|
||||
</div>
|
||||
<div className="mx_MatrixToolbar_close"><img src="img/cancel.svg" width="18" height="18" onClick={ this.hideToolbar } /></div>
|
||||
<AccessibleButton className="mx_MatrixToolbar_close" onClick={ this.hideToolbar } ><img src="img/cancel.svg" width="18" height="18" /></AccessibleButton>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
},
|
||||
});
|
||||
|
|
|
@ -20,6 +20,7 @@ import React from 'react';
|
|||
import sdk from 'matrix-react-sdk';
|
||||
import Modal from 'matrix-react-sdk/lib/Modal';
|
||||
import PlatformPeg from 'matrix-react-sdk/lib/PlatformPeg';
|
||||
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
||||
|
||||
/**
|
||||
* Check a version string is compatible with the Changelog
|
||||
|
@ -39,10 +40,10 @@ export default React.createClass({
|
|||
|
||||
displayReleaseNotes: function(releaseNotes) {
|
||||
const QuestionDialog = sdk.getComponent('dialogs.QuestionDialog');
|
||||
Modal.createDialog(QuestionDialog, {
|
||||
title: "What's New",
|
||||
description: <pre className="changelog_text">{releaseNotes}</pre>,
|
||||
button: "Update",
|
||||
Modal.createTrackedDialog('Display release notes', '', QuestionDialog, {
|
||||
title: _t("What's New"),
|
||||
description: <div className="mx_MatrixToolbar_changelog">{releaseNotes}</div>,
|
||||
button: _t("Update"),
|
||||
onFinished: (update) => {
|
||||
if(update && PlatformPeg.get()) {
|
||||
PlatformPeg.get().installUpdate();
|
||||
|
@ -53,7 +54,7 @@ export default React.createClass({
|
|||
|
||||
displayChangelog: function() {
|
||||
const ChangelogDialog = sdk.getComponent('dialogs.ChangelogDialog');
|
||||
Modal.createDialog(ChangelogDialog, {
|
||||
Modal.createTrackedDialog('Display Changelog', '', ChangelogDialog, {
|
||||
version: this.props.version,
|
||||
newVersion: this.props.newVersion,
|
||||
onFinished: (update) => {
|
||||
|
@ -75,17 +76,29 @@ export default React.createClass({
|
|||
// automatically tells you what's changed (provided the versions
|
||||
// are in the right format)
|
||||
if (this.props.releaseNotes) {
|
||||
action_button = <button className="mx_MatrixToolbar_action" onClick={this.displayReleaseNotes}>What's new?</button>;
|
||||
action_button = (
|
||||
<button className="mx_MatrixToolbar_action" onClick={this.displayReleaseNotes}>
|
||||
{ _t("What's new?") }
|
||||
</button>
|
||||
);
|
||||
} else if (checkVersion(this.props.version) && checkVersion(this.props.newVersion)) {
|
||||
action_button = <button className="mx_MatrixToolbar_action" onClick={this.displayChangelog}>What's new?</button>;
|
||||
action_button = (
|
||||
<button className="mx_MatrixToolbar_action" onClick={this.displayChangelog}>
|
||||
{ _t("What's new?") }
|
||||
</button>
|
||||
);
|
||||
} else if (PlatformPeg.get()) {
|
||||
action_button = <button className="mx_MatrixToolbar_action" onClick={this.onUpdateClicked}>Update</button>;
|
||||
action_button = (
|
||||
<button className="mx_MatrixToolbar_action" onClick={this.onUpdateClicked}>
|
||||
{ _t("Update") }
|
||||
</button>
|
||||
);
|
||||
}
|
||||
return (
|
||||
<div className="mx_MatrixToolbar">
|
||||
<img className="mx_MatrixToolbar_warning" src="img/warning.svg" width="24" height="23" alt="/!\"/>
|
||||
<img className="mx_MatrixToolbar_warning" src="img/warning.svg" width="24" height="23" alt="Warning"/>
|
||||
<div className="mx_MatrixToolbar_content">
|
||||
A new version of Riot is available.
|
||||
{_t("A new version of Riot is available.")}
|
||||
</div>
|
||||
{action_button}
|
||||
</div>
|
||||
|
|
64
src/components/views/globals/PasswordNagBar.js
Normal file
64
src/components/views/globals/PasswordNagBar.js
Normal file
|
@ -0,0 +1,64 @@
|
|||
/*
|
||||
Copyright 2017 Vector Creations Ltd
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import React from 'react';
|
||||
import sdk from 'matrix-react-sdk';
|
||||
import Modal from 'matrix-react-sdk/lib/Modal';
|
||||
import dis from 'matrix-react-sdk/lib/dispatcher';
|
||||
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
||||
|
||||
export default React.createClass({
|
||||
onUpdateClicked: function() {
|
||||
const SetPasswordDialog = sdk.getComponent('dialogs.SetPasswordDialog');
|
||||
Modal.createTrackedDialog('Set Password Dialog', 'Password Nag Bar', SetPasswordDialog, {
|
||||
onFinished: (passwordChanged) => {
|
||||
if (!passwordChanged) {
|
||||
return;
|
||||
}
|
||||
// Notify SessionStore that the user's password was changed
|
||||
dis.dispatch({
|
||||
action: 'password_changed',
|
||||
});
|
||||
},
|
||||
});
|
||||
},
|
||||
|
||||
render: function() {
|
||||
const toolbarClasses = "mx_MatrixToolbar mx_MatrixToolbar_clickable";
|
||||
return (
|
||||
<div className={toolbarClasses} onClick={this.onUpdateClicked}>
|
||||
<img className="mx_MatrixToolbar_warning"
|
||||
src="img/warning.svg"
|
||||
width="24"
|
||||
height="23"
|
||||
alt="Warning"
|
||||
/>
|
||||
<div className="mx_MatrixToolbar_content">
|
||||
{ _t(
|
||||
"To return to your account in future you need to <u>set a password</u>",
|
||||
{},
|
||||
{ 'u': (sub) => <u>{ sub }</u> },
|
||||
) }
|
||||
</div>
|
||||
<button className="mx_MatrixToolbar_action">
|
||||
{ _t("Set Password") }
|
||||
</button>
|
||||
</div>
|
||||
);
|
||||
},
|
||||
});
|
85
src/components/views/globals/UpdateCheckBar.js
Normal file
85
src/components/views/globals/UpdateCheckBar.js
Normal file
|
@ -0,0 +1,85 @@
|
|||
/*
|
||||
Copyright 2017 Michael Telatynski <7t3chguy@gmail.com>
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
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 { _t } from 'matrix-react-sdk/lib/languageHandler';
|
||||
import PlatformPeg from 'matrix-react-sdk/lib/PlatformPeg';
|
||||
import {updateCheckStatusEnum} from '../../../vector/platform/VectorBasePlatform';
|
||||
import AccessibleButton from 'matrix-react-sdk/lib/components/views/elements/AccessibleButton';
|
||||
|
||||
const doneStatuses = [
|
||||
updateCheckStatusEnum.ERROR,
|
||||
updateCheckStatusEnum.NOTAVAILABLE,
|
||||
];
|
||||
|
||||
export default React.createClass({
|
||||
propTypes: {
|
||||
status: React.PropTypes.oneOf(Object.values(updateCheckStatusEnum)).isRequired,
|
||||
// Currently for error detail but will be usable for download progress
|
||||
// once that is a thing that squirrel passes through electron.
|
||||
detail: React.PropTypes.string,
|
||||
},
|
||||
|
||||
getDefaultProps: function() {
|
||||
return {
|
||||
detail: '',
|
||||
}
|
||||
},
|
||||
|
||||
getStatusText: function() {
|
||||
switch(this.props.status) {
|
||||
case updateCheckStatusEnum.ERROR:
|
||||
return _t('Error encountered (%(errorDetail)s).', { errorDetail: this.props.detail });
|
||||
case updateCheckStatusEnum.CHECKING:
|
||||
return _t('Checking for an update...');
|
||||
case updateCheckStatusEnum.NOTAVAILABLE:
|
||||
return _t('No update available.');
|
||||
case updateCheckStatusEnum.DOWNLOADING:
|
||||
return _t('Downloading update...');
|
||||
}
|
||||
}
|
||||
,
|
||||
|
||||
hideToolbar: function() {
|
||||
PlatformPeg.get().stopUpdateCheck();
|
||||
},
|
||||
|
||||
render: function() {
|
||||
const message = this.getStatusText();
|
||||
const warning = _t('Warning');
|
||||
|
||||
let image;
|
||||
if (doneStatuses.includes(this.props.status)) {
|
||||
image = <img className="mx_MatrixToolbar_warning" src="img/warning.svg" width="24" height="23" alt={warning}/>;
|
||||
} else {
|
||||
image = <img className="mx_MatrixToolbar_warning" src="img/spinner.gif" width="24" height="23" alt={message}/>;
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="mx_MatrixToolbar">
|
||||
{image}
|
||||
<div className="mx_MatrixToolbar_content">
|
||||
{message}
|
||||
</div>
|
||||
<AccessibleButton className="mx_MatrixToolbar_close" onClick={this.hideToolbar}>
|
||||
<img src="img/cancel.svg" width="18" height="18" />
|
||||
</AccessibleButton>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
});
|
|
@ -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.
|
||||
|
@ -15,6 +16,8 @@ limitations under the License.
|
|||
*/
|
||||
|
||||
var React = require("react");
|
||||
var sanitizeHtml = require("sanitize-html");
|
||||
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
||||
|
||||
module.exports = React.createClass({
|
||||
displayName: 'VectorCustomServerDialog',
|
||||
|
@ -26,24 +29,20 @@ module.exports = React.createClass({
|
|||
return (
|
||||
<div className="mx_ErrorDialog">
|
||||
<div className="mx_Dialog_title">
|
||||
Custom Server Options
|
||||
{ _t('Custom Server Options') }
|
||||
</div>
|
||||
<div className="mx_Dialog_content">
|
||||
<span>
|
||||
You can use the custom server options to sign into other Matrix
|
||||
servers by specifying a different Home server URL.
|
||||
<br/>
|
||||
This allows you to use Riot with an existing Matrix account on
|
||||
a different home server.
|
||||
<br/>
|
||||
<br/>
|
||||
You can also set a custom identity server but you won't be able to
|
||||
invite users by email address, or be invited by email address yourself.
|
||||
</span>
|
||||
<span dangerouslySetInnerHTML={{__html: sanitizeHtml(_t(
|
||||
"You can use the custom server options to sign into other Matrix "+
|
||||
"servers by specifying a different Home server URL.<br/>This allows "+
|
||||
"you to use Riot with an existing Matrix account on a different home "+
|
||||
"server.<br/><br/>You can also set a custom identity server but you won't "+
|
||||
"be able to invite users by email address, or be invited by email address yourself.",
|
||||
))}} />
|
||||
</div>
|
||||
<div className="mx_Dialog_buttons">
|
||||
<button onClick={this.props.onFinished} autoFocus={true}>
|
||||
Dismiss
|
||||
{ _t('Dismiss') }
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -17,6 +17,8 @@ limitations under the License.
|
|||
'use strict';
|
||||
|
||||
var React = require('react');
|
||||
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
||||
import SettingsStore from 'matrix-react-sdk/lib/settings/SettingsStore';
|
||||
|
||||
module.exports = React.createClass({
|
||||
displayName: 'VectorLoginFooter',
|
||||
|
@ -25,12 +27,15 @@ module.exports = React.createClass({
|
|||
},
|
||||
|
||||
render: function() {
|
||||
// FIXME: replace this with a proper Status skin
|
||||
if (SettingsStore.getValue("theme") === 'status') return <div/>;
|
||||
|
||||
return (
|
||||
<div className="mx_Login_links">
|
||||
<a href="https://medium.com/@RiotChat">blog</a> ·
|
||||
<a href="https://twitter.com/@RiotChat">twitter</a> ·
|
||||
<a href="https://github.com/vector-im/vector-web">github</a> ·
|
||||
<a href="https://matrix.org">powered by Matrix</a>
|
||||
<a href="https://github.com/vector-im/riot-web">github</a> ·
|
||||
<a href="https://matrix.org">{ _t('powered by Matrix') }</a>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -16,18 +16,27 @@ limitations under the License.
|
|||
|
||||
'use strict';
|
||||
|
||||
var React = require('react');
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
|
||||
const i = [1, 2, 3, 4, 5][Math.floor(Math.random() * 5)];
|
||||
const DEFAULT_LOGO_URI = "img/logos/riot-im-logo-" + i + ".svg";
|
||||
|
||||
module.exports = React.createClass({
|
||||
displayName: 'VectorLoginHeader',
|
||||
statics: {
|
||||
replaces: 'LoginHeader',
|
||||
},
|
||||
propTypes: {
|
||||
icon: PropTypes.string,
|
||||
},
|
||||
|
||||
render: function() {
|
||||
return (
|
||||
<div className="mx_Login_logo">
|
||||
<img src="img/logo.png" width="195" height="195" alt="Riot"/>
|
||||
<div className="mx_Login_header">
|
||||
<div className="mx_Login_logo">
|
||||
<img src={this.props.icon || DEFAULT_LOGO_URI} alt="Riot"/>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -14,19 +14,21 @@ See the License for the specific language governing permissions and
|
|||
limitations under the License.
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
import React from 'react';
|
||||
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
||||
import DateUtils from 'matrix-react-sdk/lib/DateUtils';
|
||||
|
||||
var React = require('react');
|
||||
|
||||
var days = [
|
||||
"Sunday",
|
||||
"Monday",
|
||||
"Tuesday",
|
||||
"Wednesday",
|
||||
"Thursday",
|
||||
"Friday",
|
||||
"Saturday"
|
||||
];
|
||||
function getdaysArray() {
|
||||
return [
|
||||
_t('Sunday'),
|
||||
_t('Monday'),
|
||||
_t('Tuesday'),
|
||||
_t('Wednesday'),
|
||||
_t('Thursday'),
|
||||
_t('Friday'),
|
||||
_t('Saturday'),
|
||||
];
|
||||
}
|
||||
|
||||
module.exports = React.createClass({
|
||||
displayName: 'DateSeparator',
|
||||
|
@ -34,23 +36,24 @@ module.exports = React.createClass({
|
|||
var date = new Date(this.props.ts);
|
||||
var today = new Date();
|
||||
var yesterday = new Date();
|
||||
var days = getdaysArray();
|
||||
yesterday.setDate(today.getDate() - 1);
|
||||
var label;
|
||||
if (date.toDateString() === today.toDateString()) {
|
||||
label = "Today";
|
||||
label = _t('Today');
|
||||
}
|
||||
else if (date.toDateString() === yesterday.toDateString()) {
|
||||
label = "Yesterday";
|
||||
label = _t('Yesterday');
|
||||
}
|
||||
else if (today.getTime() - date.getTime() < 6 * 24 * 60 * 60 * 1000) {
|
||||
label = days[date.getDay()];
|
||||
}
|
||||
else {
|
||||
label = date.toDateString();
|
||||
label = DateUtils.formatFullDate(date, this.props.showTwelveHour);
|
||||
}
|
||||
|
||||
return (
|
||||
<h2>{ label }</h2>
|
||||
<h2 className="mx_DateSeparator">{ label }</h2>
|
||||
);
|
||||
}
|
||||
});
|
||||
|
|
|
@ -16,17 +16,23 @@ limitations under the License.
|
|||
|
||||
'use strict';
|
||||
|
||||
var React = require('react');
|
||||
var DateUtils = require('matrix-react-sdk/lib/DateUtils');
|
||||
import React from 'react';
|
||||
import DateUtils from 'matrix-react-sdk/lib/DateUtils';
|
||||
|
||||
module.exports = React.createClass({
|
||||
displayName: 'MessageTimestamp',
|
||||
|
||||
propTypes: {
|
||||
showTwelveHour: React.PropTypes.bool,
|
||||
},
|
||||
|
||||
render: function() {
|
||||
var date = new Date(this.props.ts);
|
||||
const date = new Date(this.props.ts);
|
||||
return (
|
||||
<span className="mx_MessageTimestamp">
|
||||
{ DateUtils.formatTime(date)+' ' }
|
||||
<span className="mx_MessageTimestamp" title={ DateUtils.formatFullDate(date, this.props.showTwelveHour) }>
|
||||
{ DateUtils.formatTime(date, this.props.showTwelveHour) + ' ' }
|
||||
</span>
|
||||
);
|
||||
},
|
||||
|
|
|
@ -16,14 +16,16 @@ limitations under the License.
|
|||
|
||||
'use strict';
|
||||
|
||||
var React = require('react');
|
||||
var DragSource = require('react-dnd').DragSource;
|
||||
var DropTarget = require('react-dnd').DropTarget;
|
||||
import React from 'react';
|
||||
import {DragSource} from 'react-dnd';
|
||||
import {DropTarget} from 'react-dnd';
|
||||
|
||||
var dis = require("matrix-react-sdk/lib/dispatcher");
|
||||
var MatrixClientPeg = require('matrix-react-sdk/lib/MatrixClientPeg');
|
||||
var sdk = require('matrix-react-sdk');
|
||||
var RoomTile = require('matrix-react-sdk/lib/components/views/rooms/RoomTile');
|
||||
import MatrixClientPeg from 'matrix-react-sdk/lib/MatrixClientPeg';
|
||||
import sdk from 'matrix-react-sdk';
|
||||
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
||||
import RoomTile from 'matrix-react-sdk/lib/components/views/rooms/RoomTile';
|
||||
import * as Rooms from 'matrix-react-sdk/lib/Rooms';
|
||||
import Modal from 'matrix-react-sdk/lib/Modal';
|
||||
|
||||
/**
|
||||
* Defines a new Component, DNDRoomTile that wraps RoomTile, making it draggable.
|
||||
|
@ -72,21 +74,49 @@ var roomTileSource = {
|
|||
item.targetList.forceUpdate(); // as we're not using state
|
||||
}
|
||||
|
||||
const prevTag = item.originalList.props.tagName;
|
||||
const newTag = item.targetList.props.tagName;
|
||||
|
||||
if (monitor.didDrop() && item.targetList.props.editable) {
|
||||
// Evil hack to get DMs behaving
|
||||
if ((prevTag === undefined && newTag === 'im.vector.fake.direct') ||
|
||||
(prevTag === 'im.vector.fake.direct' && newTag === undefined)
|
||||
) {
|
||||
Rooms.guessAndSetDMRoom(
|
||||
item.room, newTag === 'im.vector.fake.direct',
|
||||
).done(() => {
|
||||
item.originalList.removeRoomTile(item.room);
|
||||
}, (err) => {
|
||||
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
console.error("Failed to set direct chat tag " + err);
|
||||
Modal.createTrackedDialog('Failed to set direct chat tag', '', ErrorDialog, {
|
||||
title: _t('Failed to set direct chat tag'),
|
||||
description: ((err && err.message) ? err.message : _t('Operation failed')),
|
||||
});
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
// More evilness: We will still be dealing with moving to favourites/low prio,
|
||||
// but we avoid ever doing a request with 'im.vector.fake.direct`.
|
||||
|
||||
// if we moved lists, remove the old tag
|
||||
if (item.targetList !== item.originalList && item.originalList.props.tagName) {
|
||||
if (prevTag && prevTag !== 'im.vector.fake.direct' &&
|
||||
item.targetList !== item.originalList
|
||||
) {
|
||||
// commented out attempts to set a spinner on our target component as component is actually
|
||||
// the original source component being dragged, not our target. To fix we just need to
|
||||
// move all of this to endDrop in the target instead. FIXME later.
|
||||
|
||||
//component.state.set({ spinner: component.state.spinner ? component.state.spinner++ : 1 });
|
||||
MatrixClientPeg.get().deleteRoomTag(item.room.roomId, item.originalList.props.tagName).finally(function() {
|
||||
MatrixClientPeg.get().deleteRoomTag(item.room.roomId, prevTag).finally(function() {
|
||||
//component.state.set({ spinner: component.state.spinner-- });
|
||||
}).fail(function(err) {
|
||||
}).catch(function(err) {
|
||||
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
Modal.createDialog(ErrorDialog, {
|
||||
title: "Failed to remove tag " + item.originalList.props.tagName + " from room",
|
||||
description: err.toString()
|
||||
console.error("Failed to remove tag " + prevTag + " from room: " + err);
|
||||
Modal.createTrackedDialog('Failed to remove tag from room', '', ErrorDialog, {
|
||||
title: _t('Failed to remove tag %(tagName)s from room', {tagName: prevTag}),
|
||||
description: ((err && err.message) ? err.message : _t('Operation failed')),
|
||||
});
|
||||
});
|
||||
}
|
||||
|
@ -97,15 +127,15 @@ var roomTileSource = {
|
|||
}
|
||||
|
||||
// if we moved lists or the ordering changed, add the new tag
|
||||
if (item.targetList.props.tagName && (item.targetList !== item.originalList || newOrder)) {
|
||||
//component.state.set({ spinner: component.state.spinner ? component.state.spinner++ : 1 });
|
||||
MatrixClientPeg.get().setRoomTag(item.room.roomId, item.targetList.props.tagName, newOrder).finally(function() {
|
||||
//component.state.set({ spinner: component.state.spinner-- });
|
||||
}).fail(function(err) {
|
||||
if (newTag && newTag !== 'im.vector.fake.direct' &&
|
||||
(item.targetList !== item.originalList || newOrder)
|
||||
) {
|
||||
MatrixClientPeg.get().setRoomTag(item.room.roomId, newTag, newOrder).catch(function(err) {
|
||||
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
Modal.createDialog(ErrorDialog, {
|
||||
title: "Failed to add tag " + item.targetList.props.tagName + " to room",
|
||||
description: err.toString()
|
||||
console.error("Failed to add tag " + newTag + " to room: " + err);
|
||||
Modal.createTrackedDialog('Failed to add tag to room', '', ErrorDialog, {
|
||||
title: _t('Failed to add tag %(tagName)s to room', {tagName: newTag}),
|
||||
description: ((err && err.message) ? err.message : _t('Operation failed')),
|
||||
});
|
||||
});
|
||||
}
|
||||
|
@ -208,4 +238,3 @@ DragSource('RoomTile', roomTileSource, function(connect, monitor) {
|
|||
isDragging: monitor.isDragging()
|
||||
};
|
||||
})(RoomTile));
|
||||
|
||||
|
|
|
@ -22,21 +22,12 @@ module.exports = React.createClass({
|
|||
displayName: 'RoomDropTarget',
|
||||
|
||||
render: function() {
|
||||
if (this.props.placeholder) {
|
||||
return (
|
||||
<div className="mx_RoomDropTarget mx_RoomDropTarget_placeholder">
|
||||
return (
|
||||
<div className="mx_RoomDropTarget">
|
||||
<div className="mx_RoomDropTarget_label">
|
||||
{ this.props.label }
|
||||
</div>
|
||||
);
|
||||
}
|
||||
else {
|
||||
return (
|
||||
<div className="mx_RoomDropTarget">
|
||||
<div className="mx_RoomDropTarget_avatar"></div>
|
||||
<div className="mx_RoomDropTarget_label">
|
||||
{ this.props.label }
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
});
|
||||
|
|
|
@ -19,13 +19,16 @@ limitations under the License.
|
|||
var React = require('react');
|
||||
var ReactDOM = require('react-dom');
|
||||
var dis = require('matrix-react-sdk/lib/dispatcher');
|
||||
import classNames from 'classnames';
|
||||
|
||||
module.exports = React.createClass({
|
||||
displayName: 'RoomTooltip',
|
||||
|
||||
propTypes: {
|
||||
// Alllow the tooltip to be styled by the parent element
|
||||
// Class applied to the element used to position the tooltip
|
||||
className: React.PropTypes.string.isRequired,
|
||||
// Class applied to the tooltip itself
|
||||
tooltipClassName: React.PropTypes.string,
|
||||
// The tooltip is derived from either the room name or a label
|
||||
room: React.PropTypes.object,
|
||||
label: React.PropTypes.string,
|
||||
|
@ -69,8 +72,12 @@ module.exports = React.createClass({
|
|||
style.left = 6 + parent.getBoundingClientRect().right + window.pageXOffset;
|
||||
style.display = "block";
|
||||
|
||||
const tooltipClasses = classNames(
|
||||
"mx_RoomTooltip", this.props.tooltipClassName,
|
||||
);
|
||||
|
||||
var tooltip = (
|
||||
<div className="mx_RoomTooltip" style={style} >
|
||||
<div className={tooltipClasses} style={style} >
|
||||
<div className="mx_RoomTooltip_chevron"></div>
|
||||
{ label }
|
||||
</div>
|
||||
|
|
|
@ -20,6 +20,8 @@ var React = require('react');
|
|||
var MatrixClientPeg = require('matrix-react-sdk/lib/MatrixClientPeg');
|
||||
var sdk = require('matrix-react-sdk');
|
||||
var classNames = require('classnames');
|
||||
var AccessibleButton = require('matrix-react-sdk/lib/components/views/elements/AccessibleButton');
|
||||
import { _t } from "matrix-react-sdk/lib/languageHandler";
|
||||
|
||||
module.exports = React.createClass({
|
||||
displayName: 'SearchBar',
|
||||
|
@ -57,12 +59,12 @@ module.exports = React.createClass({
|
|||
var allRoomsClasses = classNames({ mx_SearchBar_button : true, mx_SearchBar_unselected : this.state.scope !== 'All' });
|
||||
|
||||
return (
|
||||
<div className="mx_SearchBar">
|
||||
<input ref="search_term" className="mx_SearchBar_input" type="text" autoFocus={true} placeholder="Search..." onKeyDown={this.onSearchChange}/>
|
||||
<div className={ searchButtonClasses } onClick={this.onSearch}><img src="img/search-button.svg" width="37" height="37" alt="Search"/></div>
|
||||
<div className={ thisRoomClasses } onClick={this.onThisRoomClick}>This Room</div>
|
||||
<div className={ allRoomsClasses } onClick={this.onAllRoomsClick}>All Rooms</div>
|
||||
<img className="mx_SearchBar_cancel" src="img/cancel.svg" width="18" height="18" onClick={this.props.onCancelClick} />
|
||||
<div className="mx_SearchBar">
|
||||
<input ref="search_term" className="mx_SearchBar_input" type="text" autoFocus={true} placeholder={_t("Search…")} onKeyDown={this.onSearchChange}/>
|
||||
<AccessibleButton className={ searchButtonClasses } onClick={this.onSearch}><img src="img/search-button.svg" width="37" height="37" alt={_t("Search")}/></AccessibleButton>
|
||||
<AccessibleButton className={ thisRoomClasses } onClick={this.onThisRoomClick}>{_t("This Room")}</AccessibleButton>
|
||||
<AccessibleButton className={ allRoomsClasses } onClick={this.onAllRoomsClick}>{_t("All Rooms")}</AccessibleButton>
|
||||
<AccessibleButton className="mx_SearchBar_cancel" onClick={this.props.onCancelClick}><img src="img/cancel.svg" width="18" height="18" /></AccessibleButton>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -14,15 +14,20 @@ See the License for the specific language governing permissions and
|
|||
limitations under the License.
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
var React = require('react');
|
||||
var q = require("q");
|
||||
var sdk = require('matrix-react-sdk');
|
||||
var MatrixClientPeg = require('matrix-react-sdk/lib/MatrixClientPeg');
|
||||
var UserSettingsStore = require('matrix-react-sdk/lib/UserSettingsStore');
|
||||
var Modal = require('matrix-react-sdk/lib/Modal');
|
||||
|
||||
var notifications = require('../../../notifications');
|
||||
import React from 'react';
|
||||
import Promise from 'bluebird';
|
||||
import sdk from 'matrix-react-sdk';
|
||||
import { _t } from 'matrix-react-sdk/lib/languageHandler';
|
||||
import MatrixClientPeg from 'matrix-react-sdk/lib/MatrixClientPeg';
|
||||
import UserSettingsStore from 'matrix-react-sdk/lib/UserSettingsStore';
|
||||
import SettingsStore, {SettingLevel} from "matrix-react-sdk/lib/settings/SettingsStore";
|
||||
import Modal from 'matrix-react-sdk/lib/Modal';
|
||||
import {
|
||||
NotificationUtils,
|
||||
VectorPushRulesDefinitions,
|
||||
PushRuleVectorState,
|
||||
ContentRules
|
||||
} from '../../../notifications';
|
||||
|
||||
// TODO: this "view" component still has far too much application logic in it,
|
||||
// which should be factored out to other files.
|
||||
|
@ -30,17 +35,13 @@ var notifications = require('../../../notifications');
|
|||
// TODO: this component also does a lot of direct poking into this.state, which
|
||||
// is VERY NAUGHTY.
|
||||
|
||||
var NotificationUtils = notifications.NotificationUtils;
|
||||
var VectorPushRulesDefinitions = notifications.VectorPushRulesDefinitions;
|
||||
var PushRuleVectorState = notifications.PushRuleVectorState;
|
||||
var ContentRules = notifications.ContentRules;
|
||||
|
||||
/**
|
||||
* Rules that Vector used to set in order to override the actions of default rules.
|
||||
* These are used to port peoples existing overrides to match the current API.
|
||||
* These can be removed and forgotten once everyone has moved to the new client.
|
||||
*/
|
||||
var LEGACY_RULES = {
|
||||
const LEGACY_RULES = {
|
||||
"im.vector.rule.contains_display_name": ".m.rule.contains_display_name",
|
||||
"im.vector.rule.room_one_to_one": ".m.rule.room_one_to_one",
|
||||
"im.vector.rule.room_message": ".m.rule.message",
|
||||
|
@ -50,7 +51,7 @@ var LEGACY_RULES = {
|
|||
};
|
||||
|
||||
function portLegacyActions(actions) {
|
||||
var decoded = NotificationUtils.decodeActions(actions);
|
||||
const decoded = NotificationUtils.decodeActions(actions);
|
||||
if (decoded !== null) {
|
||||
return NotificationUtils.encodeActions(decoded);
|
||||
} else {
|
||||
|
@ -61,7 +62,7 @@ function portLegacyActions(actions) {
|
|||
}
|
||||
|
||||
module.exports = React.createClass({
|
||||
displayName: 'Notififications',
|
||||
displayName: 'Notifications',
|
||||
|
||||
phases: {
|
||||
LOADING: "LOADING", // The component is loading or sending data to the hs
|
||||
|
@ -101,7 +102,7 @@ module.exports = React.createClass({
|
|||
},
|
||||
|
||||
onEnableNotificationsChange: function(event) {
|
||||
var self = this;
|
||||
const self = this;
|
||||
this.setState({
|
||||
phase: this.phases.LOADING
|
||||
});
|
||||
|
@ -112,41 +113,67 @@ module.exports = React.createClass({
|
|||
},
|
||||
|
||||
onEnableDesktopNotificationsChange: function(event) {
|
||||
UserSettingsStore.setEnableNotifications(event.target.checked);
|
||||
SettingsStore.setValue(
|
||||
"notificationsEnabled", null,
|
||||
SettingLevel.DEVICE,
|
||||
event.target.checked,
|
||||
).finally(() => {
|
||||
this.forceUpdate();
|
||||
});
|
||||
},
|
||||
|
||||
onEnableDesktopNotificationBodyChange: function(event) {
|
||||
SettingsStore.setValue(
|
||||
"notificationBodyEnabled", null,
|
||||
SettingLevel.DEVICE,
|
||||
event.target.checked,
|
||||
).finally(() => {
|
||||
this.forceUpdate();
|
||||
});
|
||||
},
|
||||
|
||||
onEnableAudioNotificationsChange: function(event) {
|
||||
SettingsStore.setValue(
|
||||
"audioNotificationsEnabled", null,
|
||||
SettingLevel.DEVICE,
|
||||
event.target.checked,
|
||||
).finally(() => {
|
||||
this.forceUpdate();
|
||||
});
|
||||
},
|
||||
|
||||
onEnableEmailNotificationsChange: function(address, event) {
|
||||
var emailPusherPromise;
|
||||
let emailPusherPromise;
|
||||
if (event.target.checked) {
|
||||
var data = {}
|
||||
const data = {}
|
||||
data['brand'] = this.props.brand || 'Riot';
|
||||
emailPusherPromise = UserSettingsStore.addEmailPusher(address, data);
|
||||
} else {
|
||||
var emailPusher = UserSettingsStore.getEmailPusher(this.state.pushers, address);
|
||||
const emailPusher = UserSettingsStore.getEmailPusher(this.state.pushers, address);
|
||||
emailPusher.kind = null;
|
||||
emailPusherPromise = MatrixClientPeg.get().setPusher(emailPusher);
|
||||
}
|
||||
emailPusherPromise.done(() => {
|
||||
this._refreshFromServer();
|
||||
}, (error) => {
|
||||
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
Modal.createDialog(ErrorDialog, {
|
||||
title: "Error saving email notification preferences",
|
||||
description: "An error occurred whilst saving your email notification preferences.",
|
||||
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
Modal.createTrackedDialog('Error saving email notification preferences', '', ErrorDialog, {
|
||||
title: _t('Error saving email notification preferences'),
|
||||
description: _t('An error occurred whilst saving your email notification preferences.'),
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
onNotifStateButtonClicked: function(event) {
|
||||
// FIXME: use .bind() rather than className metadata here surely
|
||||
var vectorRuleId = event.target.className.split("-")[0];
|
||||
var newPushRuleVectorState = event.target.className.split("-")[1];
|
||||
const vectorRuleId = event.target.className.split("-")[0];
|
||||
const newPushRuleVectorState = event.target.className.split("-")[1];
|
||||
|
||||
if ("_keywords" === vectorRuleId) {
|
||||
this._setKeywordsPushRuleVectorState(newPushRuleVectorState)
|
||||
}
|
||||
else {
|
||||
var rule = this.getRule(vectorRuleId);
|
||||
const rule = this.getRule(vectorRuleId);
|
||||
if (rule) {
|
||||
this._setPushRuleVectorState(rule, newPushRuleVectorState);
|
||||
}
|
||||
|
@ -154,12 +181,12 @@ module.exports = React.createClass({
|
|||
},
|
||||
|
||||
onKeywordsClicked: function(event) {
|
||||
var self = this;
|
||||
const self = this;
|
||||
|
||||
// Compute the keywords list to display
|
||||
var keywords = [];
|
||||
for (var i in this.state.vectorContentRules.rules) {
|
||||
var rule = this.state.vectorContentRules.rules[i];
|
||||
let keywords = [];
|
||||
for (let i in this.state.vectorContentRules.rules) {
|
||||
const rule = this.state.vectorContentRules.rules[i];
|
||||
keywords.push(rule.pattern);
|
||||
}
|
||||
if (keywords.length) {
|
||||
|
@ -173,16 +200,17 @@ module.exports = React.createClass({
|
|||
keywords = "";
|
||||
}
|
||||
|
||||
var TextInputDialog = sdk.getComponent("dialogs.TextInputDialog");
|
||||
Modal.createDialog(TextInputDialog, {
|
||||
title: "Keywords",
|
||||
description: "Enter keywords separated by a comma:",
|
||||
const TextInputDialog = sdk.getComponent("dialogs.TextInputDialog");
|
||||
Modal.createTrackedDialog('Keywords Dialog', '', TextInputDialog, {
|
||||
title: _t('Keywords'),
|
||||
description: _t('Enter keywords separated by a comma:'),
|
||||
button: _t('OK'),
|
||||
value: keywords,
|
||||
onFinished: function onFinished(should_leave, newValue) {
|
||||
|
||||
if (should_leave && newValue !== keywords) {
|
||||
var newKeywords = newValue.split(',');
|
||||
for (var i in newKeywords) {
|
||||
let newKeywords = newValue.split(',');
|
||||
for (let i in newKeywords) {
|
||||
newKeywords[i] = newKeywords[i].trim();
|
||||
}
|
||||
|
||||
|
@ -201,8 +229,8 @@ module.exports = React.createClass({
|
|||
},
|
||||
|
||||
getRule: function(vectorRuleId) {
|
||||
for (var i in this.state.vectorPushRules) {
|
||||
var rule = this.state.vectorPushRules[i];
|
||||
for (let i in this.state.vectorPushRules) {
|
||||
const rule = this.state.vectorPushRules[i];
|
||||
if (rule.vectorRuleId === vectorRuleId) {
|
||||
return rule;
|
||||
}
|
||||
|
@ -216,13 +244,13 @@ module.exports = React.createClass({
|
|||
phase: this.phases.LOADING
|
||||
});
|
||||
|
||||
var self = this;
|
||||
var cli = MatrixClientPeg.get();
|
||||
var deferreds = [];
|
||||
var ruleDefinition = VectorPushRulesDefinitions[rule.vectorRuleId];
|
||||
const self = this;
|
||||
const cli = MatrixClientPeg.get();
|
||||
const deferreds = [];
|
||||
const ruleDefinition = VectorPushRulesDefinitions[rule.vectorRuleId];
|
||||
|
||||
if (rule.rule) {
|
||||
var actions = ruleDefinition.vectorStateToActions[newPushRuleVectorState];
|
||||
const actions = ruleDefinition.vectorStateToActions[newPushRuleVectorState];
|
||||
|
||||
if (!actions) {
|
||||
// The new state corresponds to disabling the rule.
|
||||
|
@ -234,13 +262,14 @@ module.exports = React.createClass({
|
|||
}
|
||||
}
|
||||
|
||||
q.all(deferreds).done(function() {
|
||||
Promise.all(deferreds).done(function() {
|
||||
self._refreshFromServer();
|
||||
}, function(error) {
|
||||
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
Modal.createDialog(ErrorDialog, {
|
||||
title: "Can't change settings",
|
||||
description: error.toString(),
|
||||
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
console.error("Failed to change settings: " + error);
|
||||
Modal.createTrackedDialog('Failed to change settings', '', ErrorDialog, {
|
||||
title: _t('Failed to change settings'),
|
||||
description: ((error && error.message) ? error.message : _t('Operation failed')),
|
||||
onFinished: self._refreshFromServer
|
||||
});
|
||||
});
|
||||
|
@ -254,19 +283,19 @@ module.exports = React.createClass({
|
|||
return;
|
||||
}
|
||||
|
||||
var self = this;
|
||||
var cli = MatrixClientPeg.get();
|
||||
const self = this;
|
||||
const cli = MatrixClientPeg.get();
|
||||
|
||||
this.setState({
|
||||
phase: this.phases.LOADING
|
||||
});
|
||||
|
||||
// Update all rules in self.state.vectorContentRules
|
||||
var deferreds = [];
|
||||
for (var i in this.state.vectorContentRules.rules) {
|
||||
var rule = this.state.vectorContentRules.rules[i];
|
||||
const deferreds = [];
|
||||
for (let i in this.state.vectorContentRules.rules) {
|
||||
const rule = this.state.vectorContentRules.rules[i];
|
||||
|
||||
var enabled, actions;
|
||||
let enabled, actions;
|
||||
switch (newPushRuleVectorState) {
|
||||
case PushRuleVectorState.ON:
|
||||
if (rule.actions.length !== 1) {
|
||||
|
@ -303,13 +332,14 @@ module.exports = React.createClass({
|
|||
}
|
||||
}
|
||||
|
||||
q.all(deferreds).done(function(resps) {
|
||||
Promise.all(deferreds).done(function(resps) {
|
||||
self._refreshFromServer();
|
||||
}, function(error) {
|
||||
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
Modal.createDialog(ErrorDialog, {
|
||||
title: "Can't update user notification settings",
|
||||
description: error.toString(),
|
||||
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
console.error("Can't update user notification settings: " + error);
|
||||
Modal.createTrackedDialog('Can\'t update user notifcation settings', '', ErrorDialog, {
|
||||
title: _t('Can\'t update user notification settings'),
|
||||
description: ((error && error.message) ? error.message : _t('Operation failed')),
|
||||
onFinished: self._refreshFromServer
|
||||
});
|
||||
});
|
||||
|
@ -320,14 +350,14 @@ module.exports = React.createClass({
|
|||
phase: this.phases.LOADING
|
||||
});
|
||||
|
||||
var self = this;
|
||||
var cli = MatrixClientPeg.get();
|
||||
var removeDeferreds = [];
|
||||
const self = this;
|
||||
const cli = MatrixClientPeg.get();
|
||||
const removeDeferreds = [];
|
||||
|
||||
// Remove per-word push rules of keywords that are no more in the list
|
||||
var vectorContentRulesPatterns = [];
|
||||
for (var i in self.state.vectorContentRules.rules) {
|
||||
var rule = self.state.vectorContentRules.rules[i];
|
||||
const vectorContentRulesPatterns = [];
|
||||
for (let i in self.state.vectorContentRules.rules) {
|
||||
const rule = self.state.vectorContentRules.rules[i];
|
||||
|
||||
vectorContentRulesPatterns.push(rule.pattern);
|
||||
|
||||
|
@ -338,28 +368,29 @@ module.exports = React.createClass({
|
|||
|
||||
// If the keyword is part of `externalContentRules`, remove the rule
|
||||
// before recreating it in the right Vector path
|
||||
for (var i in self.state.externalContentRules) {
|
||||
var rule = self.state.externalContentRules[i];
|
||||
for (let i in self.state.externalContentRules) {
|
||||
const rule = self.state.externalContentRules[i];
|
||||
|
||||
if (newKeywords.indexOf(rule.pattern) >= 0) {
|
||||
removeDeferreds.push(cli.deletePushRule('global', rule.kind, rule.rule_id));
|
||||
}
|
||||
}
|
||||
|
||||
var onError = function(error) {
|
||||
var ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
Modal.createDialog(ErrorDialog, {
|
||||
title: "Can't update keywords",
|
||||
description: error.toString(),
|
||||
const onError = function(error) {
|
||||
const ErrorDialog = sdk.getComponent("dialogs.ErrorDialog");
|
||||
console.error("Failed to update keywords: " + error);
|
||||
Modal.createTrackedDialog('Failed to update keywords', '', ErrorDialog, {
|
||||
title: _t('Failed to update keywords'),
|
||||
description: ((error && error.message) ? error.message : _t('Operation failed')),
|
||||
onFinished: self._refreshFromServer
|
||||
});
|
||||
}
|
||||
|
||||
// Then, add the new ones
|
||||
q.all(removeDeferreds).done(function(resps) {
|
||||
var deferreds = [];
|
||||
Promise.all(removeDeferreds).done(function(resps) {
|
||||
const deferreds = [];
|
||||
|
||||
var pushRuleVectorStateKind = self.state.vectorContentRules.vectorState;
|
||||
let pushRuleVectorStateKind = self.state.vectorContentRules.vectorState;
|
||||
if (pushRuleVectorStateKind === PushRuleVectorState.OFF) {
|
||||
// When the current global keywords rule is OFF, we need to look at
|
||||
// the flavor of rules in 'vectorContentRules' to apply the same actions
|
||||
|
@ -374,8 +405,8 @@ module.exports = React.createClass({
|
|||
}
|
||||
}
|
||||
|
||||
for (var i in newKeywords) {
|
||||
var keyword = newKeywords[i];
|
||||
for (let i in newKeywords) {
|
||||
const keyword = newKeywords[i];
|
||||
|
||||
if (vectorContentRulesPatterns.indexOf(keyword) < 0) {
|
||||
if (self.state.vectorContentRules.vectorState !== PushRuleVectorState.OFF) {
|
||||
|
@ -394,7 +425,7 @@ module.exports = React.createClass({
|
|||
}
|
||||
}
|
||||
|
||||
q.all(deferreds).done(function(resps) {
|
||||
Promise.all(deferreds).done(function(resps) {
|
||||
self._refreshFromServer();
|
||||
}, onError);
|
||||
}, onError);
|
||||
|
@ -402,31 +433,33 @@ module.exports = React.createClass({
|
|||
|
||||
// Create a push rule but disabled
|
||||
_addDisabledPushRule: function(scope, kind, ruleId, body) {
|
||||
var cli = MatrixClientPeg.get();
|
||||
return cli.addPushRule(scope, kind, ruleId, body).then(function() {
|
||||
return cli.setPushRuleEnabled(scope, kind, ruleId, false);
|
||||
});
|
||||
const cli = MatrixClientPeg.get();
|
||||
return cli.addPushRule(scope, kind, ruleId, body).then(() =>
|
||||
cli.setPushRuleEnabled(scope, kind, ruleId, false)
|
||||
);
|
||||
},
|
||||
|
||||
// Check if any legacy im.vector rules need to be ported to the new API
|
||||
// for overriding the actions of default rules.
|
||||
_portRulesToNewAPI: function(rulesets) {
|
||||
var self = this;
|
||||
var needsUpdate = [];
|
||||
var cli = MatrixClientPeg.get();
|
||||
const self = this;
|
||||
const needsUpdate = [];
|
||||
const cli = MatrixClientPeg.get();
|
||||
|
||||
for (var kind in rulesets.global) {
|
||||
var ruleset = rulesets.global[kind];
|
||||
for (var i = 0; i < ruleset.length; ++i) {
|
||||
var rule = ruleset[i];
|
||||
for (let kind in rulesets.global) {
|
||||
const ruleset = rulesets.global[kind];
|
||||
for (let i = 0; i < ruleset.length; ++i) {
|
||||
const rule = ruleset[i];
|
||||
if (rule.rule_id in LEGACY_RULES) {
|
||||
console.log("Porting legacy rule", rule);
|
||||
needsUpdate.push( function(kind, rule) {
|
||||
return cli.setPushRuleActions(
|
||||
'global', kind, LEGACY_RULES[rule.rule_id], portLegacyActions(rule.actions)
|
||||
).then( function() {
|
||||
return cli.deletePushRule('global', kind, rule.rule_id);
|
||||
})
|
||||
).then(() =>
|
||||
cli.deletePushRule('global', kind, rule.rule_id)
|
||||
).catch( (e) => {
|
||||
console.warn(`Error when porting legacy rule: ${e}`);
|
||||
});
|
||||
}(kind, rule));
|
||||
}
|
||||
}
|
||||
|
@ -435,9 +468,9 @@ module.exports = React.createClass({
|
|||
if (needsUpdate.length > 0) {
|
||||
// If some of the rules need to be ported then wait for the porting
|
||||
// to happen and then fetch the rules again.
|
||||
return q.allSettled(needsUpdate).then( function() {
|
||||
return cli.getPushRules();
|
||||
});
|
||||
return Promise.all(needsUpdate).then(() =>
|
||||
cli.getPushRules()
|
||||
);
|
||||
} else {
|
||||
// Otherwise return the rules that we already have.
|
||||
return rulesets;
|
||||
|
@ -445,21 +478,20 @@ module.exports = React.createClass({
|
|||
},
|
||||
|
||||
_refreshFromServer: function() {
|
||||
var self = this;
|
||||
var pushRulesPromise = MatrixClientPeg.get().getPushRules().then(self._portRulesToNewAPI).then(function(rulesets) {
|
||||
//console.log("resolving pushRulesPromise");
|
||||
const self = this;
|
||||
const pushRulesPromise = MatrixClientPeg.get().getPushRules().then(self._portRulesToNewAPI).then(function(rulesets) {
|
||||
|
||||
/// XXX seriously? wtf is this?
|
||||
MatrixClientPeg.get().pushRules = rulesets;
|
||||
|
||||
// Get homeserver default rules and triage them by categories
|
||||
var rule_categories = {
|
||||
const rule_categories = {
|
||||
// The master rule (all notifications disabling)
|
||||
'.m.rule.master': 'master',
|
||||
|
||||
// The default push rules displayed by Vector UI
|
||||
// XXX: .m.rule.contains_user_name is not managed (not a fancy rule for Vector?)
|
||||
'.m.rule.contains_display_name': 'vector',
|
||||
'.m.rule.contains_user_name': 'vector',
|
||||
'.m.rule.room_one_to_one': 'vector',
|
||||
'.m.rule.message': 'vector',
|
||||
'.m.rule.invite_for_me': 'vector',
|
||||
|
@ -471,12 +503,12 @@ module.exports = React.createClass({
|
|||
};
|
||||
|
||||
// HS default rules
|
||||
var defaultRules = {master: [], vector: {}, others: []};
|
||||
const defaultRules = {master: [], vector: {}, others: []};
|
||||
|
||||
for (var kind in rulesets.global) {
|
||||
for (var i = 0; i < Object.keys(rulesets.global[kind]).length; ++i) {
|
||||
var r = rulesets.global[kind][i];
|
||||
var cat = rule_categories[r.rule_id];
|
||||
for (let kind in rulesets.global) {
|
||||
for (let i = 0; i < Object.keys(rulesets.global[kind]).length; ++i) {
|
||||
const r = rulesets.global[kind][i];
|
||||
const cat = rule_categories[r.rule_id];
|
||||
r.kind = kind;
|
||||
|
||||
if (r.rule_id[0] === '.') {
|
||||
|
@ -499,7 +531,7 @@ module.exports = React.createClass({
|
|||
}
|
||||
|
||||
// parse the keyword rules into our state
|
||||
var contentRules = ContentRules.parseContentRules(rulesets);
|
||||
const contentRules = ContentRules.parseContentRules(rulesets);
|
||||
self.state.vectorContentRules = {
|
||||
vectorState: contentRules.vectorState,
|
||||
rules: contentRules.rules,
|
||||
|
@ -510,8 +542,9 @@ module.exports = React.createClass({
|
|||
self.state.vectorPushRules = [];
|
||||
self.state.externalPushRules = [];
|
||||
|
||||
var vectorRuleIds = [
|
||||
const vectorRuleIds = [
|
||||
'.m.rule.contains_display_name',
|
||||
'.m.rule.contains_user_name',
|
||||
'_keywords',
|
||||
'.m.rule.room_one_to_one',
|
||||
'.m.rule.message',
|
||||
|
@ -520,8 +553,8 @@ module.exports = React.createClass({
|
|||
'.m.rule.call',
|
||||
'.m.rule.suppress_notices'
|
||||
];
|
||||
for (var i in vectorRuleIds) {
|
||||
var vectorRuleId = vectorRuleIds[i];
|
||||
for (let i in vectorRuleIds) {
|
||||
const vectorRuleId = vectorRuleIds[i];
|
||||
|
||||
if (vectorRuleId === '_keywords') {
|
||||
// keywords needs a special handling
|
||||
|
@ -529,21 +562,30 @@ module.exports = React.createClass({
|
|||
// it corresponds to all content push rules (stored in self.state.vectorContentRule)
|
||||
self.state.vectorPushRules.push({
|
||||
"vectorRuleId": "_keywords",
|
||||
"description" : (<span>Messages containing <span className="mx_UserNotifSettings_keywords" onClick={ self.onKeywordsClicked }>keywords</span></span>),
|
||||
"description" : (
|
||||
<span>
|
||||
{ _t('Messages containing <span>keywords</span>',
|
||||
{},
|
||||
{ 'span': (sub) =>
|
||||
<span className="mx_UserNotifSettings_keywords" onClick={ self.onKeywordsClicked }>{sub}</span>
|
||||
},
|
||||
)}
|
||||
</span>
|
||||
),
|
||||
"vectorState": self.state.vectorContentRules.vectorState
|
||||
});
|
||||
}
|
||||
else {
|
||||
var ruleDefinition = VectorPushRulesDefinitions[vectorRuleId];
|
||||
var rule = defaultRules.vector[vectorRuleId];
|
||||
const ruleDefinition = VectorPushRulesDefinitions[vectorRuleId];
|
||||
const rule = defaultRules.vector[vectorRuleId];
|
||||
|
||||
var vectorState = ruleDefinition.ruleToVectorState(rule);
|
||||
const vectorState = ruleDefinition.ruleToVectorState(rule);
|
||||
|
||||
//console.log("Refreshing vectorPushRules for " + vectorRuleId +", "+ ruleDefinition.description +", " + rule +", " + vectorState);
|
||||
|
||||
self.state.vectorPushRules.push({
|
||||
"vectorRuleId": vectorRuleId,
|
||||
"description" : ruleDefinition.description,
|
||||
"description" : _t(ruleDefinition.description), // Text from VectorPushRulesDefinitions.js
|
||||
"rule": rule,
|
||||
"vectorState": vectorState,
|
||||
});
|
||||
|
@ -557,14 +599,14 @@ module.exports = React.createClass({
|
|||
}
|
||||
|
||||
// Build the rules not managed by Vector UI
|
||||
var otherRulesDescriptions = {
|
||||
'.m.rule.message': "Notify for all other messages/rooms",
|
||||
'.m.rule.fallback': "Notify me for anything else"
|
||||
const otherRulesDescriptions = {
|
||||
'.m.rule.message': _t('Notify for all other messages/rooms'),
|
||||
'.m.rule.fallback': _t('Notify me for anything else'),
|
||||
};
|
||||
|
||||
for (var i in defaultRules.others) {
|
||||
var rule = defaultRules.others[i];
|
||||
var ruleDescription = otherRulesDescriptions[rule.rule_id];
|
||||
for (let i in defaultRules.others) {
|
||||
const rule = defaultRules.others[i];
|
||||
const ruleDescription = otherRulesDescriptions[rule.rule_id];
|
||||
|
||||
// Show enabled default rules that was modified by the user
|
||||
if (ruleDescription && rule.enabled && !rule.default) {
|
||||
|
@ -574,16 +616,16 @@ module.exports = React.createClass({
|
|||
}
|
||||
});
|
||||
|
||||
var pushersPromise = MatrixClientPeg.get().getPushers().then(function(resp) {
|
||||
//console.log("resolving pushersPromise");
|
||||
const pushersPromise = MatrixClientPeg.get().getPushers().then(function(resp) {
|
||||
self.setState({pushers: resp.pushers});
|
||||
});
|
||||
|
||||
q.all([pushRulesPromise, pushersPromise]).then(function() {
|
||||
Promise.all([pushRulesPromise, pushersPromise]).then(function() {
|
||||
self.setState({
|
||||
phase: self.phases.DISPLAY
|
||||
});
|
||||
}, function(error) {
|
||||
console.error(error);
|
||||
self.setState({
|
||||
phase: self.phases.ERROR
|
||||
});
|
||||
|
@ -600,7 +642,7 @@ module.exports = React.createClass({
|
|||
},
|
||||
|
||||
_updatePushRuleActions: function(rule, actions, enabled) {
|
||||
var cli = MatrixClientPeg.get();
|
||||
const cli = MatrixClientPeg.get();
|
||||
|
||||
return cli.setPushRuleActions(
|
||||
'global', rule.kind, rule.rule_id, actions
|
||||
|
@ -618,7 +660,7 @@ module.exports = React.createClass({
|
|||
return (
|
||||
<tr key={ className }>
|
||||
<th>
|
||||
{title}
|
||||
{ title }
|
||||
</th>
|
||||
|
||||
<th>
|
||||
|
@ -646,9 +688,9 @@ module.exports = React.createClass({
|
|||
},
|
||||
|
||||
renderNotifRulesTableRows: function() {
|
||||
var rows = [];
|
||||
for (var i in this.state.vectorPushRules) {
|
||||
var rule = this.state.vectorPushRules[i];
|
||||
const rows = [];
|
||||
for (let i in this.state.vectorPushRules) {
|
||||
const rule = this.state.vectorPushRules[i];
|
||||
//console.log("rendering: " + rule.description + ", " + rule.vectorRuleId + ", " + rule.vectorState);
|
||||
rows.push(this.renderNotifRulesTableRow(rule.description, rule.vectorRuleId, rule.vectorState));
|
||||
}
|
||||
|
@ -674,30 +716,32 @@ module.exports = React.createClass({
|
|||
},
|
||||
|
||||
render: function() {
|
||||
var self = this;
|
||||
const self = this;
|
||||
|
||||
var spinner;
|
||||
let spinner;
|
||||
if (this.state.phase === this.phases.LOADING) {
|
||||
var Loader = sdk.getComponent("elements.Spinner");
|
||||
const Loader = sdk.getComponent("elements.Spinner");
|
||||
spinner = <Loader />;
|
||||
}
|
||||
|
||||
let masterPushRuleDiv;
|
||||
if (this.state.masterPushRule) {
|
||||
var masterPushRuleDiv = (
|
||||
masterPushRuleDiv = (
|
||||
<div className="mx_UserNotifSettings_tableRow">
|
||||
<div className="mx_UserNotifSettings_inputCell">
|
||||
<input id="enableNotifications"
|
||||
ref="enableNotifications"
|
||||
type="checkbox"
|
||||
checked={ !this.state.masterPushRule.enabled }
|
||||
onChange={ this.onEnableNotificationsChange } />
|
||||
</div>
|
||||
<div className="mx_UserNotifSettings_labelCell">
|
||||
<label htmlFor="enableNotifications">
|
||||
Enable notifications for this account
|
||||
</label>
|
||||
</div>
|
||||
<div className="mx_UserNotifSettings_inputCell">
|
||||
<input id="enableNotifications"
|
||||
ref="enableNotifications"
|
||||
type="checkbox"
|
||||
checked={ !this.state.masterPushRule.enabled }
|
||||
onChange={ this.onEnableNotificationsChange }
|
||||
/>
|
||||
</div>
|
||||
<div className="mx_UserNotifSettings_labelCell">
|
||||
<label htmlFor="enableNotifications">
|
||||
{ _t('Enable notifications for this account') }
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -709,57 +753,54 @@ module.exports = React.createClass({
|
|||
{masterPushRuleDiv}
|
||||
|
||||
<div className="mx_UserSettings_notifTable">
|
||||
All notifications are currently disabled for all targets.
|
||||
{ _t('All notifications are currently disabled for all targets.') }.
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
var emailNotificationsRow;
|
||||
if (this.props.threepids.filter(function(tp) {
|
||||
if (tp.medium == "email") {
|
||||
return true;
|
||||
}
|
||||
}).length == 0) {
|
||||
const emailThreepids = this.props.threepids.filter((tp) => tp.medium === "email");
|
||||
let emailNotificationsRow;
|
||||
if (emailThreepids.length === 0) {
|
||||
emailNotificationsRow = <div>
|
||||
Add an email address above to configure email notifications
|
||||
{ _t('Add an email address above to configure email notifications') }
|
||||
</div>;
|
||||
} else {
|
||||
// This only supports the first email address in your profile for now
|
||||
emailNotificationsRow = this.emailNotificationsRow(
|
||||
this.props.threepids[0].address,
|
||||
"Enable email notifications ("+this.props.threepids[0].address+")"
|
||||
emailThreepids[0].address,
|
||||
`${_t('Enable email notifications')} (${emailThreepids[0].address})`
|
||||
);
|
||||
}
|
||||
|
||||
// Build external push rules
|
||||
var externalRules = [];
|
||||
for (var i in this.state.externalPushRules) {
|
||||
var rule = this.state.externalPushRules[i];
|
||||
externalRules.push(<li>{ rule.description }</li>);
|
||||
const externalRules = [];
|
||||
for (let i in this.state.externalPushRules) {
|
||||
const rule = this.state.externalPushRules[i];
|
||||
externalRules.push(<li>{ _t(rule.description) }</li>);
|
||||
}
|
||||
|
||||
// Show keywords not displayed by the vector UI as a single external push rule
|
||||
var externalKeyWords = [];
|
||||
for (var i in this.state.externalContentRules) {
|
||||
var rule = this.state.externalContentRules[i];
|
||||
externalKeyWords.push(rule.pattern);
|
||||
let externalKeywords = [];
|
||||
for (let i in this.state.externalContentRules) {
|
||||
const rule = this.state.externalContentRules[i];
|
||||
externalKeywords.push(rule.pattern);
|
||||
}
|
||||
if (externalKeyWords.length) {
|
||||
externalKeyWords = externalKeyWords.join(", ");
|
||||
externalRules.push(<li>Notifications on the following keywords follow rules which can’t be displayed here: { externalKeyWords }</li>);
|
||||
if (externalKeywords.length) {
|
||||
externalKeywords = externalKeywords.join(", ");
|
||||
externalRules.push(<li>{ _t('Notifications on the following keywords follow rules which can’t be displayed here:') } { externalKeywords }</li>);
|
||||
}
|
||||
|
||||
var devicesSection;
|
||||
let devicesSection;
|
||||
if (this.state.pushers === undefined) {
|
||||
devicesSection = <div className="error">Unable to fetch notification target list</div>
|
||||
devicesSection = <div className="error">{ _t('Unable to fetch notification target list') }</div>
|
||||
} else if (this.state.pushers.length == 0) {
|
||||
devicesSection = null;
|
||||
} else {
|
||||
// TODO: It would be great to be able to delete pushers from here too,
|
||||
// and this wouldn't be hard to add.
|
||||
var rows = [];
|
||||
for (var i = 0; i < this.state.pushers.length; ++i) {
|
||||
const rows = [];
|
||||
for (let i = 0; i < this.state.pushers.length; ++i) {
|
||||
rows.push(<tr key={ i }>
|
||||
<td>{this.state.pushers[i].app_display_name}</td>
|
||||
<td>{this.state.pushers[i].device_display_name}</td>
|
||||
|
@ -773,18 +814,18 @@ module.exports = React.createClass({
|
|||
}
|
||||
if (devicesSection) {
|
||||
devicesSection = (<div>
|
||||
<h3>Notification targets</h3>
|
||||
<h3>{ _t('Notification targets') }</h3>
|
||||
{ devicesSection }
|
||||
</div>);
|
||||
}
|
||||
|
||||
var advancedSettings;
|
||||
let advancedSettings;
|
||||
if (externalRules.length) {
|
||||
advancedSettings = (
|
||||
<div>
|
||||
<h3>Advanced notifications settings</h3>
|
||||
There are advanced notifications which are not shown here.<br/>
|
||||
You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply.
|
||||
<h3>{ _t('Advanced notification settings') }</h3>
|
||||
{ _t('There are advanced notifications which are not shown here') }.<br/>
|
||||
{ _t('You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply') }.
|
||||
<ul>
|
||||
{ externalRules }
|
||||
</ul>
|
||||
|
@ -806,12 +847,27 @@ module.exports = React.createClass({
|
|||
<input id="enableDesktopNotifications"
|
||||
ref="enableDesktopNotifications"
|
||||
type="checkbox"
|
||||
checked={ UserSettingsStore.getEnableNotifications() }
|
||||
checked={ SettingsStore.getValue("notificationsEnabled") }
|
||||
onChange={ this.onEnableDesktopNotificationsChange } />
|
||||
</div>
|
||||
<div className="mx_UserNotifSettings_labelCell">
|
||||
<label htmlFor="enableDesktopNotifications">
|
||||
Enable desktop notifications
|
||||
{ _t('Enable desktop notifications') }
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="mx_UserNotifSettings_tableRow">
|
||||
<div className="mx_UserNotifSettings_inputCell">
|
||||
<input id="enableDesktopNotificationBody"
|
||||
ref="enableDesktopNotificationBody"
|
||||
type="checkbox"
|
||||
checked={ SettingsStore.getValue("notificationBodyEnabled") }
|
||||
onChange={ this.onEnableDesktopNotificationBodyChange } />
|
||||
</div>
|
||||
<div className="mx_UserNotifSettings_labelCell">
|
||||
<label htmlFor="enableDesktopNotificationBody">
|
||||
{ _t('Show message in desktop notification') }
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -821,15 +877,12 @@ module.exports = React.createClass({
|
|||
<input id="enableDesktopAudioNotifications"
|
||||
ref="enableDesktopAudioNotifications"
|
||||
type="checkbox"
|
||||
checked={ UserSettingsStore.getEnableAudioNotifications() }
|
||||
onChange={ (e) => {
|
||||
UserSettingsStore.setEnableAudioNotifications(e.target.checked);
|
||||
this.forceUpdate();
|
||||
}} />
|
||||
checked={ SettingsStore.getValue("audioNotificationsEnabled") }
|
||||
onChange={ this.onEnableAudioNotificationsChange } />
|
||||
</div>
|
||||
<div className="mx_UserNotifSettings_labelCell">
|
||||
<label htmlFor="enableDesktopAudioNotifications">
|
||||
Enable audible notifications in web client
|
||||
{ _t('Enable audible notifications in web client') }
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -841,9 +894,9 @@ module.exports = React.createClass({
|
|||
<thead>
|
||||
<tr>
|
||||
<th width="55%"></th>
|
||||
<th width="15%">Off</th>
|
||||
<th width="15%">On</th>
|
||||
<th width="15%">Noisy</th>
|
||||
<th width="15%">{ _t('Off') }</th>
|
||||
<th width="15%">{ _t('On') }</th>
|
||||
<th width="15%">{ _t('Noisy') }</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
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.
|
||||
|
|
32
src/i18n/strings/ar.json
Normal file
32
src/i18n/strings/ar.json
Normal file
|
@ -0,0 +1,32 @@
|
|||
{
|
||||
"All messages": "كل الرسائل",
|
||||
"Continue": "استمر",
|
||||
"Please set a password!": "يرجى تعيين كلمة مرور!",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "سيسمح لك هذا بالعودة إلى حسابك بعد الخروج، وتسجيل الدخول على الأجهزة الأخرى.",
|
||||
"Advanced notification settings": "إعدادات متقدمة للرسائل",
|
||||
"A new version of Riot is available.": "نسخة جديدة من رايوت متوفرة.",
|
||||
"All Rooms": "كل الغُرف",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">متصفح سافاري</a> و <a href=\"http://opera.com\">متصفح أوبرا</a> يعملان أيضاً.",
|
||||
"Add an email address above to configure email notifications": "أضف بريداً إلكترونياً أعلاه من أجل تعديل إعدادت تنبيهات البريد الإلكتروني",
|
||||
"All messages (loud)": "كل الرسائل (صوت مرتفع)",
|
||||
"All notifications are currently disabled for all targets.": "كل التنبيهات غير مفعلة حالياً للجميع.",
|
||||
"An error occurred whilst saving your email notification preferences.": "حدث خطأ ما خلال حفظ إعدادات التنبيهات للبريد الإلكتروني.",
|
||||
"Call invitation": "دعوة لمحادثة",
|
||||
"Cancel": "إلغاء",
|
||||
"Cancel Sending": "إلغاء الإرسال",
|
||||
"Can't update user notification settings": "لا يمكن تحديث إعدادات التنبيهات للمستخدم",
|
||||
"Changelog": "سِجل التغييرات",
|
||||
"Close": "إغلاق",
|
||||
"Collapse panel": "طي الجدول",
|
||||
"Collecting app version information": "إستعادة معلومات النسخة للتطبيق",
|
||||
"Collecting logs": "إستعادة السجلات",
|
||||
"Couldn't find a matching Matrix room": "لا يمكن إيجاد غرفة مايتركس متطابقة",
|
||||
"Custom Server Options": "إعدادات السيرفر خاصة",
|
||||
"delete the alias.": "إلغاء المُعرف.",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "إلغاء مُعرف الغرفة %(alias)s وحذف %(name)s من الدليل؟",
|
||||
"Describe your problem here.": "صِف مشكلتك هنا.",
|
||||
"Direct Chat": "دردشة مباشرة",
|
||||
"Directory": "دليل",
|
||||
"Dismiss": "صرف النظر",
|
||||
"Download this file": "تحميل هذا الملف"
|
||||
}
|
1
src/i18n/strings/basefile.json
Normal file
1
src/i18n/strings/basefile.json
Normal file
|
@ -0,0 +1 @@
|
|||
{}
|
75
src/i18n/strings/be.json
Normal file
75
src/i18n/strings/be.json
Normal file
|
@ -0,0 +1,75 @@
|
|||
{
|
||||
"Add an email address above to configure email notifications": "Дадайце адрас электроннай пошты вышэй, каб наладзіць апавяшчэнні",
|
||||
"All messages": "Усе паведамленні",
|
||||
"All messages (loud)": "Усе паведамленні (гучна)",
|
||||
"All notifications are currently disabled for all targets.": "Усе апавяшчэнні ў цяперашні час адключаныя для ўсіх мэтаў.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Адбылася памылка падчас захавання налады апавяшчэнняў па электроннай пошце.",
|
||||
"Cancel Sending": "Адмяніць адпраўку",
|
||||
"Can't update user notification settings": "Немагчыма абнавіць налады апавяшчэнняў карыстальніка",
|
||||
"Close": "Зачыніць",
|
||||
"Couldn't find a matching Matrix room": "Не атрымалася знайсці адпаведны пакой Matrix",
|
||||
"Custom Server Options": "Карыстальніцкія параметры сервера",
|
||||
"delete the alias.": "выдаліць псеўданім.",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Выдаліць псеўданім пакоя %(alias)s і выдаліць %(name)s з каталога?",
|
||||
"Direct Chat": "Прамы чат",
|
||||
"Directory": "Каталог",
|
||||
"Dismiss": "Aдхіліць",
|
||||
"Download this file": "Спампаваць гэты файл",
|
||||
"Enable audible notifications in web client": "Ўключыць гукавыя апавяшчэнні ў вэб-кліенце",
|
||||
"Enable desktop notifications": "Ўключыць апавяшчэнні на працоўным стале",
|
||||
"Enable email notifications": "Ўключыць паведамлення па электроннай пошце",
|
||||
"Enable notifications for this account": "Ўключыць апавяшчэнні для гэтага ўліковага запісу",
|
||||
"Enable them now": "Уключыць іх зараз",
|
||||
"Enter keywords separated by a comma:": "Калі ласка, увядзіце ключавыя словы, падзеленыя коскамі:",
|
||||
"Error": "Памылка",
|
||||
"Error saving email notification preferences": "Памылка захавання налад апавяшчэнняў па электроннай пошце",
|
||||
"#example": "#прыклад",
|
||||
"Failed to add tag %(tagName)s to room": "Не атрымалася дадаць %(tagName)s ў пакоі",
|
||||
"Failed to change settings": "Не атрымалася змяніць налады",
|
||||
"Failed to forget room %(errCode)s": "Не атрымалася забыць пакой %(errCode)s",
|
||||
"Failed to update keywords": "Не атрымалася абнавіць ключавыя словы",
|
||||
"Failed to get protocol list from Home Server": "Не ўдалося атрымаць спіс пратаколаў ад хатняга сервера",
|
||||
"Failed to get public room list": "Не ўдалося атрымаць спіс агульных пакояў",
|
||||
"Failed to remove tag %(tagName)s from room": "Не ўдалося выдаліць %(tagName)s з пакоя",
|
||||
"Failed to set direct chat tag": "Не ўдалося ўсталяваць тэг прамога чата",
|
||||
"Failed to set Direct Message status of room": "Не ўдалося ўсталяваць статут прамога паведамлення пакою",
|
||||
"Favourite": "Улюбёнае",
|
||||
"Fetching third party location failed": "Не ўдалося атрымаць месцазнаходжанне трэцяга боку",
|
||||
"Files": "Файлы",
|
||||
"Filter room names": "Фільтр iмёнаў пакояў",
|
||||
"Forget": "Забыць",
|
||||
"Guests can join": "Госці могуць далучыцца",
|
||||
"Invite to this room": "Запрасіць у гэты пакой",
|
||||
"Keywords": "Ключавыя словы",
|
||||
"Leave": "Пакінуць",
|
||||
"Low Priority": "Нізкі прыярытэт",
|
||||
"Members": "Удзельнікі",
|
||||
"Mentions only": "Толькі згадкі",
|
||||
"Mute": "Без гуку",
|
||||
"No rooms to show": "Няма пакояў для паказу",
|
||||
"Noisy": "Шумна",
|
||||
"Notification targets": "Мэты апавяшчэння",
|
||||
"Notifications": "Апавяшчэнні",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "Апавяшчэнні па наступных ключавых словах прытрымліваюцца правілаў, якія не могуць быць адлюстраваны тут",
|
||||
"Notify for all other messages/rooms": "Апавяшчаць для ўсіх іншых паведамленняў/пакояў",
|
||||
"Notify me for anything else": "Паведаміць мне што-небудзь яшчэ",
|
||||
"Off": "Выключыць",
|
||||
"On": "Уключыць",
|
||||
"Operation failed": "Не атрымалася выканаць аперацыю",
|
||||
"Permalink": "Пастаянная спасылка",
|
||||
"powered by Matrix": "працуе на Matrix",
|
||||
"Quote": "Цытата",
|
||||
"Reject": "Адхіліць",
|
||||
"Remove %(name)s from the directory?": "Выдаліць %(name)s з каталога?",
|
||||
"Remove": "Выдалiць",
|
||||
"remove %(name)s from the directory.": "выдаліць %(name)s з каталога.",
|
||||
"Remove from Directory": "Выдалiць з каталога",
|
||||
"Resend": "Паўторна",
|
||||
"Riot does not know how to join a room on this network": "Riot не ведае, як увайсці ў пакой у гэтай сетке",
|
||||
"Room not found": "Пакой не знойдзены",
|
||||
"Search for a room": "Пошук па пакоі",
|
||||
"Source URL": "URL-адрас крыніцы",
|
||||
"The Home Server may be too old to support third party networks": "Хатні сервер можа быць занадта стары для падтрымкі іншых сетак",
|
||||
"There are advanced notifications which are not shown here": "Ёсць пашыраныя апавяшчэння, якія не паказаныя тут",
|
||||
"The server may be unavailable or overloaded": "Сервер можа быць недаступны ці перагружаны"
|
||||
}
|
1
src/i18n/strings/bn_BD.json
Normal file
1
src/i18n/strings/bn_BD.json
Normal file
|
@ -0,0 +1 @@
|
|||
{}
|
1
src/i18n/strings/bn_IN.json
Normal file
1
src/i18n/strings/bn_IN.json
Normal file
|
@ -0,0 +1 @@
|
|||
{}
|
113
src/i18n/strings/ca.json
Normal file
113
src/i18n/strings/ca.json
Normal file
|
@ -0,0 +1,113 @@
|
|||
{
|
||||
"A new version of Riot is available.": "Hi ha una nova versió del Riot disponible.",
|
||||
"All messages": "Tots els missatges",
|
||||
"Cancel": "Cancel·la",
|
||||
"Close": "Tanca",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s a %(osName)s",
|
||||
"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",
|
||||
"All Rooms": "Totes les sales",
|
||||
"Couldn't find a matching Matrix room": "No s'ha pogut trobar una sala de Matrix que coincideixi",
|
||||
"Failed to add tag %(tagName)s to room": "No s'ha pogut afegir l'etiqueta %(tagName)s a la sala",
|
||||
"Failed to forget room %(errCode)s": "No s'ha pogut oblidar la sala %(errCode)s",
|
||||
"Failed to get public room list": "No s'ha pogut obtenir el llistat de sales públiques",
|
||||
"Failed to remove tag %(tagName)s from room": "No s'ha pogut esborrar l'etiqueta %(tagName)s de la sala",
|
||||
"Filter room names": "Filtra els noms de les sales",
|
||||
"Couldn't load home page": "No s'ha pogut carregar la pàgina d'inici",
|
||||
"All messages (loud)": "Tots els missatges (sorollós)",
|
||||
"Mentions only": "Només mencions",
|
||||
"Mute": "Silenciat",
|
||||
"Direct Chat": "Xat directe",
|
||||
"Directory": "Directori",
|
||||
"Failed to set direct chat tag": "No s'ha pogut establir l'etiqueta del xat directe",
|
||||
"Invite to this room": "Convida a aquesta sala",
|
||||
"No rooms to show": "No hi ha sales a mostrar",
|
||||
"Riot does not know how to join a room on this network": "El Riot no sap com unir-se a una sala en aquesta xarxa",
|
||||
"Room not found": "No s'ha trobat la sala",
|
||||
"Unnamed room": "Sala sense nom",
|
||||
"#example": "#exemple",
|
||||
"Failed to change settings": "No s'han pogut modificar els paràmetres",
|
||||
"Enable audible notifications in web client": "Habilita les notificacions d'àudio al client web",
|
||||
"Enable desktop notifications": "Habilita les notificacions d'escriptori",
|
||||
"Enable email notifications": "Habilita les notificacions per correu electrònic",
|
||||
"Enable notifications for this account": "Habilita les notificacions per aquest compte",
|
||||
"Low Priority": "Baixa prioritat",
|
||||
"Members": "Membres",
|
||||
"Changelog": "Registre de canvis",
|
||||
"Describe your problem here.": "Descriu aquí el teu problema.",
|
||||
"Download this file": "Descarrega aquest fitxer",
|
||||
"Enable them now": "Habilita-ho ara",
|
||||
"Error": "Error",
|
||||
"Favourite": "Favorit",
|
||||
"Files": "Fitxers",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "També funcionen el <a href=\"http://apple.com/safari\">Safari</a> i l'<a href=\"http://opera.com\">Opera</a>.",
|
||||
"Add an email address above to configure email notifications": "Afegiu una adreça de correu electrònic més amunt per configurar les notificacions",
|
||||
"Advanced notification settings": "Paràmetres avançats de notificacions",
|
||||
"All notifications are currently disabled for all targets.": "Actualment totes les notificacions estan inhabilitades per a tots els objectius.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Hi ha hagut un error al desar les vostres preferències de notificació per correu electrònic.",
|
||||
"Bug report sent": "S'ha enviat l'informe d'error",
|
||||
"Call invitation": "Invitació a la trucada",
|
||||
"Can't update user notification settings": "No es poden actualitzar els paràmetres de notificació de l'usuari",
|
||||
"Collecting app version information": "Recol·lectant la informació de la versió de l'aplicació",
|
||||
"Collecting logs": "Recol·lectant els registres",
|
||||
"Custom Server Options": "Opcions de servidor personalitzat",
|
||||
"Dismiss": "Omet",
|
||||
"Enter keywords separated by a comma:": "Introdueix paraules clau separades per una coma:",
|
||||
"Login": "Inicia sessió",
|
||||
"Leave": "Abandona",
|
||||
"Messages containing <span>keywords</span>": "Missatges que contenen <span>paraules clau</span>",
|
||||
"Messages containing my user name": "Missatges que contenen el meu nom d'usuari",
|
||||
"Messages in group chats": "Missatges a xats de grup",
|
||||
"Messages containing my display name": "Missatges que contenen el meu nom",
|
||||
"Messages in one-to-one chats": "Missatges en xats un a un",
|
||||
"Messages sent by bot": "Missatges enviats pel bot",
|
||||
"more": "més",
|
||||
"Noisy": "Sorollós",
|
||||
"Notification targets": "Objectius de notificació",
|
||||
"Notifications": "Notificacions",
|
||||
"Notify me for anything else": "Notifica'm per qualsevol altra cosa",
|
||||
"Notify for all other messages/rooms": "Notifica per a tots els altres missatges/sales",
|
||||
"Off": "Apagat",
|
||||
"On": "Engegat",
|
||||
"Permalink": "Enllaç permanent",
|
||||
"Remove": "Elimina",
|
||||
"remove %(name)s from the directory.": "elimina %(name)s del directori.",
|
||||
"Remove from Directory": "Elimina del directori",
|
||||
"Report a bug": "Informa d'una errada",
|
||||
"Resend": "Reenvia",
|
||||
"Search…": "Cerca…",
|
||||
"Send": "Envia",
|
||||
"Source URL": "URL origen",
|
||||
"The server may be unavailable or overloaded": "El servidor pot no estar disponible o sobrecarregat",
|
||||
"This Room": "Aquesta sala",
|
||||
"Unavailable": "No disponible",
|
||||
"Unknown device": "Dispositiu desconegut",
|
||||
"unknown error code": "codi d'error desconegut",
|
||||
"What's New": "Novetats",
|
||||
"What's new?": "Què hi ha de nou?",
|
||||
"Waiting for response from server": "Esperant una resposta del servidor",
|
||||
"You cannot delete this image. (%(code)s)": "No podeu eliminar aquesta imatge. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "No podeu eliminar aquest missatge. (%(code)s)",
|
||||
"You are not receiving desktop notifications": "No esteu rebent notificacions d'escriptori",
|
||||
"Thank you!": "Gràcies!",
|
||||
"Sunday": "Diumenge",
|
||||
"Monday": "Dilluns",
|
||||
"Tuesday": "Dimarts",
|
||||
"Wednesday": "Dimecres",
|
||||
"Thursday": "Dijous",
|
||||
"Friday": "Divendres",
|
||||
"Saturday": "Dissabte",
|
||||
"Today": "Avui",
|
||||
"Yesterday": "Ahir",
|
||||
"OK": "D'acord",
|
||||
"Warning": "Advertència",
|
||||
"Checking for an update...": "Comprovant si hi ha actualitzacions...",
|
||||
"No update available.": "No hi ha cap actualització disponible.",
|
||||
"Downloading update...": "Descarregant l'actualització...",
|
||||
"Welcome to Riot.im": "Benvingut a Riot.im",
|
||||
"Chat with Riot Bot": "Conversa amb el Bot de Riot",
|
||||
"Back": "Enrere",
|
||||
"Cancel Sending": "Cancel·la l'enviament",
|
||||
"Collapse panel": "Col·lapsa el tauler",
|
||||
"Developer Tools": "Eines de desenvolupador"
|
||||
}
|
221
src/i18n/strings/cs.json
Normal file
221
src/i18n/strings/cs.json
Normal file
|
@ -0,0 +1,221 @@
|
|||
{
|
||||
"Close": "Zavřít",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">Safari</a> a <a href=\"http://opera.com\">Opera</a> fungují také.",
|
||||
"A new version of Riot is available.": "Je dostupná nová verze Riotu.",
|
||||
"Notifications": "Upozornění",
|
||||
"Search": "Hledání",
|
||||
"All Rooms": "Všechny místnosti",
|
||||
"Files": "Soubory",
|
||||
"Filter room names": "Filtrovat místnosti dle názvu",
|
||||
"Forward Message": "Přeposlat zprávu",
|
||||
"Invite to this room": "Pozvat do této místnosti",
|
||||
"Members": "Členové",
|
||||
"Permalink": "Trvalý odkaz",
|
||||
"Search…": "Vyhledat…",
|
||||
"This Room": "Tato místnost",
|
||||
"View Source": "Zobrazit zdroj",
|
||||
"Login": "Přihlásit",
|
||||
"Advanced notification settings": "Pokročilé nastavení upozornění",
|
||||
"All messages": "Všechny zprávy",
|
||||
"Cancel": "Storno",
|
||||
"Changelog": "Seznam změn",
|
||||
"Describe your problem here.": "Popište zde svůj problém.",
|
||||
"Direct Chat": "Přímý chat",
|
||||
"Directory": "Adresář",
|
||||
"Download this file": "Stáhnout tento soubor",
|
||||
"Error": "Chyba",
|
||||
"Failed to change settings": "Nepodařilo se změnit nastavení",
|
||||
"Failed to get public room list": "Nepodařilo se získat seznam veřejných místností",
|
||||
"Favourite": "V oblíbených",
|
||||
"Guests can join": "Hosté mohou vstoupit",
|
||||
"Hide panel": "Skrýt panel",
|
||||
"I understand the risks and wish to continue": "Rozumím rizikům a přeji si pokračovat",
|
||||
"Keywords": "Klíčová slova",
|
||||
"Leave": "Odejít",
|
||||
"Loading bug report module": "Nahrává se modul nahlašování chyb",
|
||||
"Low Priority": "Nízká priorita",
|
||||
"Mentions only": "Pouze zmínky",
|
||||
"Messages containing my display name": "Zprávy obsahující mé zobrazované jméno",
|
||||
"Messages containing <span>keywords</span>": "Zprávy obsahující <span>klíčová slova</span>",
|
||||
"Messages containing my user name": "Zprávy obsahující mé uživatelské jméno",
|
||||
"Messages in group chats": "Zprávy ve skupinových chatech",
|
||||
"Messages sent by bot": "Zprávy poslané robotem",
|
||||
"more": "více",
|
||||
"Mute": "Ztlumit",
|
||||
"All messages (loud)": "Všechny zprávy (hlasitě)",
|
||||
"Couldn't load home page": "Nepodařilo se nahrát úvodní stránku",
|
||||
"All notifications are currently disabled for all targets.": "Veškeré notifikace jsou aktuálně pro všechny cíle vypnuty.",
|
||||
"Cancel Sending": "Zrušit odesílání",
|
||||
"Can't update user notification settings": "Nelze aktualizovat uživatelské nastavení upozornění",
|
||||
"delete the alias.": "smazat alias.",
|
||||
"Set Password": "Nastavit heslo",
|
||||
"You have successfully set a password and an email address!": "Úspěšně jste si nastavili heslo a e-mailovou adresu!",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Vězte, že kdybyste si to rozmysleli, e-mailovou adresu můžete kdykoliv doplnit v uživatelském nastavení.",
|
||||
"Continue": "Pokračovat",
|
||||
"Please set a password!": "Prosím nastavte si heslo!",
|
||||
"You have successfully set a password!": "Úspěšně jste si nastavili heslo!",
|
||||
"Failed to change password. Is your password correct?": "Nepodařilo se změnit heslo. Zadáváte své heslo správně?",
|
||||
"No update available.": "Není dostupná žádná aktualizace.",
|
||||
"Downloading update...": "Stahování aktualizace...",
|
||||
"Welcome to Riot.im": "Vítá vás Riot.im",
|
||||
"Enable desktop notifications": "Zapnout upozornění na ploše",
|
||||
"Enable email notifications": "Zapnout upozornění přes e-mail",
|
||||
"Enable notifications for this account": "Zapnout upozornění na tomto účtu",
|
||||
"#example": "#příklad",
|
||||
"Off": "Vypnout",
|
||||
"On": "Zapnout",
|
||||
"Operation failed": "Operace se nezdařila",
|
||||
"Remove %(name)s from the directory?": "Odebrat %(name)s z adresáře?",
|
||||
"Remove": "Odebrat",
|
||||
"remove %(name)s from the directory.": "odebrat %(name)s z adresáře.",
|
||||
"Remove from Directory": "Odebrat z adresáře",
|
||||
"Report a bug": "Nahlásit chybu",
|
||||
"Resend": "Poslat znovu",
|
||||
"Room not found": "Místnost nenalezena",
|
||||
"Search for a room": "Hledat místnost",
|
||||
"Send": "Odeslat",
|
||||
"Send logs": "Odeslat záznamy",
|
||||
"Source URL": "Zdrojová URL",
|
||||
"The server may be unavailable or overloaded": "Server může být nedostupný nebo přetížený",
|
||||
"Unable to join network": "Nelze se připojit k síti",
|
||||
"Unable to look up room ID from server": "Nelze získat ID místnosti ze serveru",
|
||||
"Unavailable": "Nedostupné",
|
||||
"Unknown device": "Neznámé zařízení",
|
||||
"unknown error code": "neznámý kód chyby",
|
||||
"Unnamed room": "Nepojmenovaná místnost",
|
||||
"Update": "Aktualizace",
|
||||
"What's New": "Co je nového",
|
||||
"What's new?": "Co je nového?",
|
||||
"Waiting for response from server": "Čekám na odezvu ze serveru",
|
||||
"You cannot delete this image. (%(code)s)": "Tento obrázek nemůžete smazat. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "Tuto zprávu nemůžete smazat. (%(code)s)",
|
||||
"You are not receiving desktop notifications": "Nedostáváte upozornění na desktopu",
|
||||
"Sunday": "Neděle",
|
||||
"Monday": "Pondělí",
|
||||
"Tuesday": "Úterý",
|
||||
"Wednesday": "Středa",
|
||||
"Thursday": "Čtvrtek",
|
||||
"Friday": "Pátek",
|
||||
"Saturday": "Sobota",
|
||||
"Today": "Dnes",
|
||||
"Yesterday": "Včera",
|
||||
"OK": "OK",
|
||||
"Warning": "Varování",
|
||||
"Checking for an update...": "Kontrola aktualizací...",
|
||||
"An error occurred whilst saving your email notification preferences.": "Při ukládání nastavení e-mailových upozornění nastala chyba.",
|
||||
"Collecting app version information": "Sbírání informací o verzi aplikace",
|
||||
"Collecting logs": "Sbírání logů",
|
||||
"Couldn't find a matching Matrix room": "Odpovídající Matrix místost nenalezena",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Smazat alias místnosti %(alias)s a odstranit %(name)s z adresáře?",
|
||||
"Enable audible notifications in web client": "Povolit zvuková upozornění ve webové aplikaci",
|
||||
"Enable them now": "Povolit nyní",
|
||||
"Enter keywords separated by a comma:": "Vložte klíčová slova oddělená čárkou:",
|
||||
"Error saving email notification preferences": "Chyba při ukládání nastavení e-mailových upozornění",
|
||||
"Failed to add tag %(tagName)s to room": "Nepodařilo se přidat štítek %(tagName)s k místnosti",
|
||||
"Failed to forget room %(errCode)s": "Nepodařilo se zapomenout místnost %(errCode)s",
|
||||
"Failed to update keywords": "Nepodařilo se aktualizovat klíčová slova",
|
||||
"Failed to get protocol list from Home Server": "Z domovského serveru se nepodařilo získat seznam protokolů",
|
||||
"Failed to remove tag %(tagName)s from room": "Nepodařilo se odstranit štítek %(tagName)s z místnosti",
|
||||
"Failed to send report: ": "Nepodařilo se odeslat hlášení: ",
|
||||
"Forget": "Zapomenout",
|
||||
"(HTTP status %(httpStatus)s)": "(HTTP status %(httpStatus)s)",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Kvůli diagnostice budou spolu s tímto hlášením o chybě odeslány i záznamy z klienta. Chcete-li odeslat pouze text výše, prosím odškrtněte:",
|
||||
"No rooms to show": "Žádné místnosti k zobrazení",
|
||||
"Notify for all other messages/rooms": "Upozorni na všechny ostatní zprávy/místnosti",
|
||||
"Notify me for anything else": "Upozorni mě na cokoliv jiného",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Prosím popište chybu. Co jste dělal/a? Co jste čekal/a, že se stane? Co se stalo?",
|
||||
"Please describe the bug and/or send logs.": "Prosím popište chybu a/nebo pošlete záznamy.",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Prosím nainstalujte si <a href=\"https://www.google.com/chrome\">Chrome</a> nebo <a href=\"https://getfirefox.com\">Firefox</a> pro nejlepší zážitek.",
|
||||
"Quote": "Citace",
|
||||
"Reject": "Odmítnout",
|
||||
"Riot does not know how to join a room on this network": "Riot neví, jak vstoupit do místosti na této síti",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot není podporovaný na mobilním webu. Nainstalovat aplikaci?",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot používá mnoho pokročilých funkcí, z nichž některé jsou ve vašem současném prohlížeči nedostupné nebo experimentální.",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Omlouváme se, váš prohlížeč <b>není</b> schopný spustit Riot.",
|
||||
"There are advanced notifications which are not shown here": "Jsou k dispozici pokročilá upozornění, která zde nejsou zobrazena",
|
||||
"Unhide Preview": "Zobrazit náhled",
|
||||
"Uploaded on %(date)s by %(user)s": "Nahráno %(date)s uživatelem %(user)s",
|
||||
"Uploading report": "Nahrávám hlášení",
|
||||
"View Decrypted Source": "Zobrazit dešifrovaný zdroj",
|
||||
"When I'm invited to a room": "Pokud jsem pozván do místnosti",
|
||||
"World readable": "Světu čitelné",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Snad jste je nastavili v jiném klientu než Riot. V Riotu je nemůžete upravit, ale přesto platí",
|
||||
"Error encountered (%(errorDetail)s).": "Nastala chyba (%(errorDetail)s).",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Pro uskutečnění hovoru se sdílením obrazovky musíte používat HTTPS.",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Vzhled a chování aplikace může být ve vašem aktuální prohlížeči nesprávné a některé nebo všechny funkce mohou být chybné. Chcete-li i přes to pokračovat, nebudeme vám bránit, ale se všemi problémy, na které narazíte, si musíte poradit sami!",
|
||||
"Search the room directory": "Prohledat adresář místností",
|
||||
"Chat with Riot Bot": "Chatujte s Riot Botem",
|
||||
"Get started with some tips from Riot Bot!": "Začněte s radami od Riot Bota!",
|
||||
"General discussion about Matrix and Riot": "Obecná diskuse o Matrixu a Riotu",
|
||||
"Discussion of all things Matrix!": "Diskuse o všem okolo Matrixu!",
|
||||
"Matrix technical discussions": "Technické diskuse o Matrixu",
|
||||
"Running Matrix services": "Provozování Matrix služeb",
|
||||
"Community-run support for Synapse": "Komunitou řízená podpora pro Synapse",
|
||||
"Announcements about Synapse releases": "Oznámení o vydáních Synapse",
|
||||
"Support for those using and running matrix-appservice-irc": "Podpora pro používání matrix-appservice-irc",
|
||||
"Building services on Matrix": "Stavění služeb na Matrixu",
|
||||
"Add an email address above to configure email notifications": "Abyste mohli nastavovat e-mailová upozornění, musíte uvést svoji e-mailovou adresu v kolonce výše",
|
||||
"Call invitation": "Pozvánka k hovoru",
|
||||
"Collapse panel": "Sbalit panel",
|
||||
"Dismiss": "Zahodit",
|
||||
"Expand panel": "Rozbalit panel",
|
||||
"Failed to set direct chat tag": "Nepodařilo se nastavit štítek přímého chatu",
|
||||
"Failed to set Direct Message status of room": "Nepodařilo se přiřadit místnosti status Přímé zprávy",
|
||||
"powered by Matrix": "poháněno Matrixem",
|
||||
"Riot Desktop on %(platformName)s": "Riot Desktop na %(platformName)s",
|
||||
"The Home Server may be too old to support third party networks": "Tento domovský server může být příliš zastaralý na to, aby podporoval sítě třetích stran",
|
||||
"Admin support for Dendrite": "Správcovská podpora pro Dendrite",
|
||||
"Support for those using the Matrix spec": "Podpora pro uživatele Matrix specifikace",
|
||||
"Design and implementation of E2E in Matrix": "Návrh a implementace E2E v Matrixu",
|
||||
"Implementing VR services with Matrix": "Implementace VR služeb v Matrixu",
|
||||
"Implementing VoIP services with Matrix": "Implementace VoIP služeb v Matrixu",
|
||||
"Support for those using, running and writing other bridges": "Podpora pro ty, kteří používají, provozují nebo vyvíjejí ostatní můstky",
|
||||
"Contributing code to Matrix and Riot": "Přispívaní kódem do Matrixu a Riotu",
|
||||
"Dev chat for the Riot/Web dev team": "Chat vývojového týmu Riot/Web",
|
||||
"Dev chat for the Dendrite dev team": "Chat vývojového týmu Dendrite",
|
||||
"Co-ordination for Riot/Web translators": "Součinnost překladatelů Riot/Web",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "V Matrixu je spousta samostatných, nebo s jinými sítěmi (Slack, IRC, Gitter aj.) propojených místností. Prohlédněte si jejich adresář!",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s přes %(browserName)s na %(osName)s",
|
||||
"customServer_text": "Ve vlastních serverových volbách se můžete přihlásit na ostatní Matrix servery, a to tak, že určíte URL jiného domovského serveru.<br/>To znamená, že můžete používat Riot s již existujícím Matrix účtem na jiném domovském serveru.<br/><br/>Taky můžete nastavit vlastní server identity, pak ale nebudete moci zvát ostatní nebo naopak být ostatními zván prostřednictvím e-mailové adresy.",
|
||||
"Custom Server Options": "Vlastní serverové volby",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizovaný, šifrovaný chat a spolupráce na platformě [matrix]",
|
||||
"Riot/Web & Desktop chat": "Riot/Web a Desktop chat",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS a matrix-ios-sdk chat",
|
||||
"Riot/Android & matrix-android-sdk chat": "Riot/Android a matrix-android-sdk chat",
|
||||
"To return to your account in future you need to <u>set a password</u>": "Abyste se mohli ke svému účtu v budoucnu vrátit, musíte si <u>nastavit heslo</u>",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "Toto vám umožní vrátit se po odhlášení ke svému účtu a používat jej na ostatních zařízeních.",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "Nyní se můžete ke svému účtu vrátit i po odhlášení a používat jej na ostatních zařízeních.",
|
||||
"Fetching third party location failed": "Nepodařilo se zjistit umístění třetí strany",
|
||||
"Messages in one-to-one chats": "Zprávy v individuálních chatech",
|
||||
"Notification targets": "Cíle upozornění",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "Upozornění na následující klíčová slova se řídí pravidly, která zde nelze zobrazit:",
|
||||
"Unable to fetch notification target list": "Nepodařilo se získat seznam cílů upozornění",
|
||||
"Discussion of the Identity Service API": "Diskuze o API služby identity",
|
||||
"Noisy": "Hlučný",
|
||||
"Bug report sent": "Hlášení o chybě bylo odesláno",
|
||||
"Thank you!": "Děkujeme vám!",
|
||||
"Back": "Zpět",
|
||||
"Event Type": "Typ události",
|
||||
"Event Content": "Obsah události",
|
||||
"Developer Tools": "Nástroje pro vývojáře",
|
||||
"Filter results": "Filtrovat výsledky",
|
||||
"You must specify an event type!": "Musíte určit typ události!",
|
||||
"Event sent!": "Událost odeslána!",
|
||||
"Failed to send custom event.": "Nepodařilo se odeslat vlastní událost.",
|
||||
"Send Custom Event": "Odeslat vlastní událost",
|
||||
"Show message in desktop notification": "Zobrazovat zprávu v upozornění na ploše",
|
||||
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Přes vlastní serverové volby se můžete přihlásit k dalším Matrix serverům tak, že zadáte jinou adresu domovského serveru.<br/>Díky tomu můžete v Riotu používat Matrix účet z jiného domovského serveru.<br/><br/>Můžete nastavit i vlastní server identity, ale pak už nebudete moci zvát ani být zván/a skrze e-mailovou adresu.",
|
||||
"Edit": "Upravit",
|
||||
"Pin Message": "Připíchnout zprávu",
|
||||
"Register": "Zaregistrovat",
|
||||
"Rooms": "Místnosti",
|
||||
"Invite to this community": "Pozvat do této komunity",
|
||||
"Add rooms to this community": "Přidat místnosti do této komunity",
|
||||
"State Key": "Stavový klíč",
|
||||
"Send Custom State Event": "Poslat vlastní stavovou událost",
|
||||
"Explore Room State": "Prohlížet stav místnosti",
|
||||
"Unpin Message": "Odepnout zprávu",
|
||||
"Toolbox": "Sada nástrojů",
|
||||
"Send Account Data": "Poslat data o účtu",
|
||||
"Explore Account Data": "Prozkoumat data o účtu"
|
||||
}
|
66
src/i18n/strings/da.json
Normal file
66
src/i18n/strings/da.json
Normal file
|
@ -0,0 +1,66 @@
|
|||
{
|
||||
"Add an email address above to configure email notifications": "Tilføj en emailadresse ovenfor for at konfigurere e-mail-underretninger",
|
||||
"All notifications are currently disabled for all targets.": "Alle meddelelser er for øjeblikket deaktiveret for alle mål.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Der opstod en fejl under opbevaring af dine e-mail-underretningsindstillinger.",
|
||||
"Can't update user notification settings": "Kan ikke opdatere brugermeddelelsesindstillinger",
|
||||
"Couldn't find a matching Matrix room": "Kunne ikke finde et matchende Matrix-rum",
|
||||
"Custom Server Options": "Brugerdefinerede serverindstillinger",
|
||||
"delete the alias.": "Slet aliaset.",
|
||||
"Direct Chat": "Personligt Chat",
|
||||
"Directory": "Rum fortegnelse",
|
||||
"Dismiss": "Afskedige",
|
||||
"Enable audible notifications in web client": "Aktivér hørbare underretninger i webklienten",
|
||||
"Enable desktop notifications": "Aktivér desktop meddelelser",
|
||||
"Enable email notifications": "Aktivér e-mail-underretninger",
|
||||
"Enable notifications for this account": "Aktivér underretninger for dette brugernavn",
|
||||
"Enable them now": "Aktivér dem nu",
|
||||
"Enter keywords separated by a comma:": "Indtast søgeord adskilt af et komma:",
|
||||
"Error": "Fejl",
|
||||
"Error saving email notification preferences": "Fejl ved at gemme e-mail-underretningsindstillinger",
|
||||
"#example": "#eksempel",
|
||||
"Failed to change settings": "Kunne ikke ændre indstillinger",
|
||||
"Failed to update keywords": "Kunne ikke opdatere søgeord",
|
||||
"Failed to get protocol list from Home Server": "Kunne ikke få protokolliste fra Home Server",
|
||||
"Failed to get public room list": "Kunne ikke få offentlig rumliste",
|
||||
"Failed to set Direct Message status of room": "Kunne ikke indstille direkte beskedstatus for rumet",
|
||||
"Favourite": "Favorit",
|
||||
"Fetching third party location failed": "Hentning af tredjeparts placering mislykkedes",
|
||||
"Files": "Filer",
|
||||
"Filter room names": "Filtrer rumnavne",
|
||||
"Forget": "Glem",
|
||||
"Guests can join": "Gæster kan deltage",
|
||||
"Invite to this room": "Inviter til dette rum",
|
||||
"Keywords": "Søgeord",
|
||||
"Leave": "Forlade",
|
||||
"Low Priority": "Lav prioritet",
|
||||
"Members": "Medlemmer",
|
||||
"No rooms to show": "Ingen rum at vise",
|
||||
"Noisy": "Støjende",
|
||||
"Notification targets": "Meddelelsesmål",
|
||||
"Notifications": "Meddelser",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "Meddelelser om følgende søgeord følger regler, der ikke kan vises her:",
|
||||
"Notify for all other messages/rooms": "Underret om alle andre meddelelser / rum",
|
||||
"Notify me for anything else": "Underret mig om noget andet",
|
||||
"Off": "Slukket",
|
||||
"On": "Tændt",
|
||||
"Operation failed": "Operation mislykkedes",
|
||||
"powered by Matrix": "Drevet af Matrix",
|
||||
"Reject": "Afvise",
|
||||
"Remove": "Fjerne",
|
||||
"Remove from Directory": "Fjern fra fortegnelse",
|
||||
"Riot does not know how to join a room on this network": "Riot ved ikke, hvordan man kan deltage i et rum på dette netværk",
|
||||
"Room not found": "Rumet ikke fundet",
|
||||
"Search for a room": "Søg efter et rum",
|
||||
"The Home Server may be too old to support third party networks": "Hjemmeserveren kan være for gammel til at understøtte tredjepartsnetværk",
|
||||
"There are advanced notifications which are not shown here": "Der er avancerede meddelelser, som ikke vises her",
|
||||
"The server may be unavailable or overloaded": "Serveren kan være utilgængelig eller overbelastet",
|
||||
"Unable to fetch notification target list": "Kan ikke hente meddelelsesmålliste",
|
||||
"Unable to join network": "Kan ikke deltage i netværket",
|
||||
"Unable to look up room ID from server": "Kunne ikke slå op på rum-id fra server",
|
||||
"unknown error code": "Ukendt fejlkode",
|
||||
"Unnamed room": "Unnamed rum",
|
||||
"World readable": "Læselig til alle",
|
||||
"You are not receiving desktop notifications": "Du modtager ikke desktop meddelelser",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Du har muligvis konfigureret dem i en anden klient end Riot. Du kan ikke tune dem i Riot, men de gælder stadig",
|
||||
"Close": "Luk"
|
||||
}
|
221
src/i18n/strings/de_DE.json
Normal file
221
src/i18n/strings/de_DE.json
Normal file
|
@ -0,0 +1,221 @@
|
|||
{
|
||||
"Members": "Mitglieder",
|
||||
"Files": "Dateien",
|
||||
"Notifications": "Benachrichtigungen",
|
||||
"Invite to this room": "In diesen Raum einladen",
|
||||
"Filter room names": "Raum-Namen filtern",
|
||||
"powered by Matrix": "betrieben mit Matrix",
|
||||
"Custom Server Options": "Benutzerdefinierte Server-Optionen",
|
||||
"Dismiss": "Ablehnen",
|
||||
"Failed to get protocol list from Home Server": "Fehler beim Abrufen der Protokoll-Liste vom Home-Server",
|
||||
"The Home Server may be too old to support third party networks": "Der Home-Server ist eventuell zu alt, um Drittanbieter-Netzwerke zu unterstützen",
|
||||
"Directory": "Raum-Verzeichnis",
|
||||
"Search for a room": "Nach einem Raum suchen",
|
||||
"No rooms to show": "Keine anzeigbaren Räume",
|
||||
"World readable": "Lesbar für alle",
|
||||
"Guests can join": "Gäste können beitreten",
|
||||
"You are not receiving desktop notifications": "Du erhältst keine Desktop-Benachrichtigungen",
|
||||
"Enable them now": "Aktiviere diese jetzt",
|
||||
"Add an email address above to configure email notifications": "Füge oben eine E-Mail-Adresse hinzu, um die E-Mail-Benachrichtigungseinstellungen zu konfigurieren",
|
||||
"All notifications are currently disabled for all targets.": "Aktuell sind alle Benachrichtigungen für alle Ziele deaktiviert.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Beim Speichern deiner E-Mail-Benachrichtigungseinstellungen ist ein Fehler aufgetreten.",
|
||||
"Can't update user notification settings": "Benachrichtigungs-Einstellungen des Benutzers konnten nicht aktualisiert werden",
|
||||
"Couldn't find a matching Matrix room": "Konnte keinen entsprechenden Matrix-Raum finden",
|
||||
"delete the alias.": "Lösche den Alias.",
|
||||
"Direct Chat": "Direkt-Chat",
|
||||
"Enable audible notifications in web client": "Audio-Benachrichtigungen im Web-Client aktivieren",
|
||||
"Enable desktop notifications": "Desktop-Benachrichtigungen aktivieren",
|
||||
"Enable email notifications": "E-Mail-Benachrichtigungen aktivieren",
|
||||
"Enable notifications for this account": "Benachrichtigungen für dieses Benutzerkonto aktivieren",
|
||||
"Enter keywords separated by a comma:": "Schlüsselwörter kommagetrennt eingeben:",
|
||||
"Error": "Fehler",
|
||||
"Error saving email notification preferences": "Fehler beim Speichern der E-Mail-Benachrichtigungseinstellungen",
|
||||
"#example": "#Beispiel",
|
||||
"Failed to change settings": "Einstellungen konnten nicht geändert werden",
|
||||
"Failed to update keywords": "Schlüsselwörter konnten nicht aktualisiert werden",
|
||||
"Failed to get public room list": "Die Liste der öffentlichen Räume konnte nicht geladen werden",
|
||||
"Failed to set Direct Message status of room": "Konnte den direkten Benachrichtigungsstatus nicht setzen",
|
||||
"Favourite": "Favorit",
|
||||
"Fetching third party location failed": "Das Abrufen des Drittanbieterstandorts ist fehlgeschlagen",
|
||||
"Forget": "Entfernen",
|
||||
"Keywords": "Schlüsselwörter",
|
||||
"Leave": "Verlassen",
|
||||
"Low Priority": "Niedrige Priorität",
|
||||
"Noisy": "Laut",
|
||||
"Notification targets": "Benachrichtigungsziele",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "Die Benachrichtigungen zu den folgenden Schlüsselwörtern folgen Regeln, die hier nicht angezeigt werden können:",
|
||||
"Notify for all other messages/rooms": "Benachrichtigungen für alle anderen Mitteilungen/Räume aktivieren",
|
||||
"Operation failed": "Aktion fehlgeschlagen",
|
||||
"Reject": "Ablehnen",
|
||||
"Remove": "Entfernen",
|
||||
"Remove from Directory": "Aus dem Raum-Verzeichnis entfernen",
|
||||
"Riot does not know how to join a room on this network": "Riot weiß nicht, wie es einem Raum auf diesem Netzwerk beitreten soll",
|
||||
"Room not found": "Raum nicht gefunden",
|
||||
"There are advanced notifications which are not shown here": "Es existieren erweiterte Benachrichtigungen, welche hier nicht angezeigt werden",
|
||||
"The server may be unavailable or overloaded": "Der Server ist vermutlich nicht erreichbar oder überlastet",
|
||||
"Unable to fetch notification target list": "Liste der Benachrichtigungsempfänger konnte nicht abgerufen werden",
|
||||
"Unable to join network": "Es ist nicht möglich, dem Netzwerk beizutreten",
|
||||
"unknown error code": "Unbekannter Fehlercode",
|
||||
"Unnamed room": "Unbenannter Raum",
|
||||
"Notify me for anything else": "Über alles andere benachrichtigen",
|
||||
"Off": "Aus",
|
||||
"On": "An",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Du hast sie eventuell auf einem anderen Matrix-Client und nicht in Riot konfiguriert. Sie können in Riot nicht verändert werden, gelten aber trotzdem",
|
||||
"All messages": "Alle Nachrichten",
|
||||
"All messages (loud)": "Alle Nachrichten (laut)",
|
||||
"Cancel Sending": "Senden abbrechen",
|
||||
"Close": "Schließen",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Soll der Raum-Alias %(alias)s gelöscht und der %(name)s aus dem Verzeichnis entfernt werden?",
|
||||
"Download this file": "Datei herunterladen",
|
||||
"Failed to add tag %(tagName)s to room": "Das Hinzufügen des Tags %(tagName)s für den Raum ist fehlgeschlagen",
|
||||
"Failed to forget room %(errCode)s": "Das Entfernen des Raums ist fehlgeschlagen %(errCode)s",
|
||||
"Failed to remove tag %(tagName)s from room": "Das Entfernen des Tags %(tagName)s für den Raum ist fehlgeschlagen",
|
||||
"Failed to set direct chat tag": "Fehler beim Setzen der \"Direkter Chat\"-Kennzeichnung",
|
||||
"Mentions only": "Nur, wenn du erwähnt wirst",
|
||||
"Mute": "Stummschalten",
|
||||
"Permalink": "Permanenter Link",
|
||||
"Quote": "Zitieren",
|
||||
"Remove %(name)s from the directory?": "Soll der Raum %(name)s aus dem Verzeichnis entfernt werden?",
|
||||
"remove %(name)s from the directory.": "entferne %(name)s aus dem Verzeichnis.",
|
||||
"Resend": "Erneut senden",
|
||||
"Source URL": "Quell-URL",
|
||||
"Unable to look up room ID from server": "Es ist nicht möglich, die Raum-ID auf dem Server nachzuschlagen",
|
||||
"Unhide Preview": "Vorschau wieder anzeigen",
|
||||
"Uploaded on %(date)s by %(user)s": "Hochgeladen: %(date)s von %(user)s",
|
||||
"View Decrypted Source": "Entschlüsselten Quellcode ansehen",
|
||||
"View Source": "Quellcode ansehen",
|
||||
"You cannot delete this image. (%(code)s)": "Das Bild kann nicht gelöscht werden. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "Diese Nachricht kann nicht gelöscht werden. (%(code)s)",
|
||||
"Today": "Heute",
|
||||
"Wednesday": "Mittwoch",
|
||||
"Thursday": "Donnerstag",
|
||||
"Friday": "Freitag",
|
||||
"Saturday": "Samstag",
|
||||
"Tuesday": "Dienstag",
|
||||
"Sunday": "Sonntag",
|
||||
"Monday": "Montag",
|
||||
"Yesterday": "Gestern",
|
||||
"Advanced notification settings": "Erweiterte Benachrichtigungs-Einstellungen",
|
||||
"Call invitation": "Anruf-Einladung",
|
||||
"Messages containing my display name": "Nachrichten, die meinen Anzeigenamen enthalten",
|
||||
"Messages containing my user name": "Nachrichten, die meinen Benutzernamen enthalten",
|
||||
"Messages in group chats": "Nachrichten in Gruppen-Chats",
|
||||
"Messages in one-to-one chats": "Nachrichten in Einzel-Chats",
|
||||
"Messages sent by bot": "Nachrichten von Bots",
|
||||
"more": "mehr",
|
||||
"When I'm invited to a room": "Wenn ich in einen Raum eingeladen werde",
|
||||
"customServer_text": "Du kannst die erweiterten Server-Optionen nutzen, um dich auf anderen Matrix-Servern anzumelden, indem du eine andere Heimserver-URL eingibst. <br/>Dies ermöglicht es dir, Riot mit einem bereits existierenden Matrix-Konto auf einem anderen Heimserver zu nutzen.<br/><br/>Du kannst auch einen benutzerdefinierten Identitäts-Server eingeben, allerdings wirst du dann nicht in der Lage sein, andere Benutzer per E-Mail-Adresse einzuladen oder selbst Einladungen per E-Mail-Adresse zu erhalten.",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">Safari</a> und <a href=\"http://opera.com\">Opera</a> funktionieren ebenfalls.",
|
||||
"I understand the risks and wish to continue": "Ich verstehe das Risiko und möchte fortfahren",
|
||||
"Messages containing <span>keywords</span>": "Nachrichten, die <span>Schlüsselwörter</span> enthalten",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Bitte installiere <a href=\"https://www.google.com/chrome\">Chrome</a> oder <a href=\"https://getfirefox.com\">Firefox</a> für die beste Erfahrung.",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot nutzt zahlreiche fortgeschrittene Browser-Funktionen, die teilweise in deinem aktuell verwendeten Browser noch nicht verfügbar sind oder sich noch im experimentellen Status befinden.",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Es tut uns leid, aber dein Browser kann Riot <b>nicht</b> ausführen.",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "In deinem aktuell verwendeten Browser können Aussehen und Handhabung der Anwendung unter Umständen noch komplett fehlerhaft sein, so dass einige bzw. im Extremfall alle Funktionen nicht zur Verfügung stehen. Du kannst es trotzdem versuchen und fortfahren, bist dabei aber bezüglich aller auftretenden Probleme auf dich allein gestellt!",
|
||||
"Expand panel": "Panel ausklappen",
|
||||
"Collapse panel": "Panel einklappen",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s auf %(osName)s",
|
||||
"A new version of Riot is available.": "Eine neue Version von Riot ist verfügbar.",
|
||||
"All Rooms": "In allen Räumen",
|
||||
"Cancel": "Abbrechen",
|
||||
"Changelog": "Änderungsprotokoll",
|
||||
"Collecting app version information": "App-Versionsinformationen werden abgerufen",
|
||||
"Collecting logs": "Protokolle werden abgerufen",
|
||||
"Describe your problem here.": "Beschreibe dein Problem hier.",
|
||||
"Failed to send report: ": "Senden des Reports fehlgeschlagen: ",
|
||||
"Forward Message": "Nachricht weiterleiten",
|
||||
"Hide panel": "Panel verbergen",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Zur Diagnose von Softwareproblemen werden mit diesem Fehlerbericht auch Log-Dateien übermittelt. Wenn nur der oben eingegebene Text übermittelt werden soll, bitte die nachfolgende Auswahl entsprechend abwählen:",
|
||||
"Loading bug report module": "Lade Fehlerbericht-Modul",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Bitte den Softwarefehler (vorzugsweise auf Englisch) beschreiben. Was hast du gemacht? Was sollte passieren? Was ist tatsächlich passiert?",
|
||||
"Please describe the bug and/or send logs.": "Bitte den Fehler beschreiben und/oder Log-Dateien übermitteln.",
|
||||
"Report a bug": "Einen Softwarefehler melden",
|
||||
"Riot Desktop on %(platformName)s": "Riot Desktop auf %(platformName)s",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot wird im mobilen Web nicht unterstützt. App installieren?",
|
||||
"Search": "Suchen",
|
||||
"Search…": "Suchen…",
|
||||
"Send": "Senden",
|
||||
"Send logs": "Logdateien übermitteln",
|
||||
"This Room": "In diesem Raum",
|
||||
"Unavailable": "Nicht verfügbar",
|
||||
"Unknown device": "Unbekanntes Gerät",
|
||||
"Update": "Aktualisieren",
|
||||
"Uploading report": "Lade Bericht hoch",
|
||||
"What's New": "Was ist neu",
|
||||
"What's new?": "Was ist neu?",
|
||||
"Waiting for response from server": "Auf Antwort vom Server warten",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Du musst HTTPS nutzen um einen Anruf mit Bildschirmfreigabe durchzuführen.",
|
||||
"OK": "OK",
|
||||
"Login": "Anmeldung",
|
||||
"Welcome to Riot.im": "Willkommen bei Riot.im",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Dezentrale, verschlüsselte Chat- & Kollaborationslösung unterstützt von [matrix]",
|
||||
"Search the room directory": "Raum-Verzeichnis durchsuchen",
|
||||
"Chat with Riot Bot": "Mit dem Riot-Bot chatten",
|
||||
"Get started with some tips from Riot Bot!": "Lass Dir vom Riot-Bot eine Einführung geben!",
|
||||
"Discussion of all things Matrix!": "\"Diskussion über alle Dinge\"-Matrix!",
|
||||
"Riot/Web & Desktop chat": "Riot/Web & Desktop-Chat",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Riot-iOS & \"matrix-ios-sdk\"-Chat",
|
||||
"Riot/Android & matrix-android-sdk chat": "Riot-Android & matrix-android-sdk-Chat",
|
||||
"Matrix technical discussions": "Technische Diskussion über Matrix",
|
||||
"Running Matrix services": "Matrix-Dienste betreiben",
|
||||
"Community-run support for Synapse": "Support für Synapse von der Community",
|
||||
"Admin support for Dendrite": "Admin-Unterstützung für Dendrite",
|
||||
"Announcements about Synapse releases": "Ankündigungen über Synapse-Versionen",
|
||||
"Support for those using and running matrix-appservice-irc": "Unterstützung für die, die \"matrix-appservice-irc\" betreiben und nutzen",
|
||||
"Building services on Matrix": "Dienste für Matrix entwickeln",
|
||||
"Support for those using the Matrix spec": "Unterstützung für die Nutzer der Matrix-Spezification",
|
||||
"Design and implementation of E2E in Matrix": "Design und Implementierung von Ende-zu-Ende-Verschlüsselung in Matrix",
|
||||
"Implementing VR services with Matrix": "Implementierung von VR-Diensten mit Matrix",
|
||||
"Implementing VoIP services with Matrix": "Implementierung von VoIP-Diensten mit Matrix",
|
||||
"Discussion of the Identity Service API": "Diskussion der Identitätsdienst-API",
|
||||
"Support for those using, running and writing other bridges": "Unterstützung für die, die andere Matrix-Bridges nutzen, betreiben oder entwickeln",
|
||||
"Contributing code to Matrix and Riot": "Code zu Matrix und Riot beitragen",
|
||||
"Dev chat for the Riot/Web dev team": "Entwickler-Chat für das Riot/Web-Entwickler-Team",
|
||||
"Co-ordination for Riot/Web translators": "Koordination für Riot/Web-Übersetzer",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Im Matrix-Netzwerk existieren bereits jetzt zahlreiche Räume, die entweder mit bekannten Netzwerken wie Slack, IRC, Gitter, usw. verknüpft sind oder auch komplett eigenständig betrieben werden. Einen genauen Überblick erhältst du im Raum-Verzeichnis!",
|
||||
"Failed to change password. Is your password correct?": "Passwortänderung fehlgeschlagen. Ist dein Passwort richtig?",
|
||||
"You have successfully set a password!": "Du hast erfolgreich ein Passwort gesetzt!",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "Du kannst nun zu deinem Benutzerkonto zurückkehren, nachdem du dich abgemeldet hast. Anschließend kannst du dich an anderen Geräten anmelden.",
|
||||
"Continue": "Fortfahren",
|
||||
"Please set a password!": "Bitte setze ein Passwort!",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "Dies erlaubt dir, dich wieder an deinem Konto anzumelden, nachdem du dich abgemeldet hast.",
|
||||
"Dev chat for the Dendrite dev team": "Entwickler-Chat für das Dendrite-Entwickler-Team",
|
||||
"General discussion about Matrix and Riot": "Allgemeine Diskussion über Matrix und Riot",
|
||||
"(HTTP status %(httpStatus)s)": "(HTTP-Status %(httpStatus)s)",
|
||||
"You have successfully set a password and an email address!": "Du hast erfolgreich ein Passwort und eine E-Mail-Adresse gesetzt!",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Vergiss nicht, dass du in den Benutzereinstellungen jederzeit eine E-Mail-Adresse setzen kannst, wenn du deine Meinung änderst.",
|
||||
"To return to your account in future you need to <u>set a password</u>": "Um in Zukunft auf dein Benutzerkonto zugreifen zu können, musst du <u>ein Passwort setzen</u>",
|
||||
"Set Password": "Passwort einrichten",
|
||||
"Warning": "Warnung",
|
||||
"Checking for an update...": "Nach Updates suchen...",
|
||||
"Error encountered (%(errorDetail)s).": "Es ist ein Fehler aufgetreten (%(errorDetail)s).",
|
||||
"No update available.": "Kein Update verfügbar.",
|
||||
"Downloading update...": "Update wird heruntergeladen...",
|
||||
"Couldn't load home page": "Startseite konnte nicht geladen werden",
|
||||
"Bug report sent": "Fehlerbericht wurde gesendet",
|
||||
"Thank you!": "Danke!",
|
||||
"Back": "Zurück",
|
||||
"Developer Tools": "Entwicklerwerkzeuge",
|
||||
"Failed to send custom event.": "Senden des benutzerdefinierten Events fehlgeschlagen.",
|
||||
"Send Custom Event": "Benutzerdefiniertes Event senden",
|
||||
"Send Custom State Event": "Benutzerdefiniertes Status-Event senden",
|
||||
"Explore Room State": "Raum-Status erkunden",
|
||||
"Event sent!": "Event gesendet!",
|
||||
"Event Type": "Event-Typ",
|
||||
"Event Content": "Event-Inhalt",
|
||||
"State Key": "Status-Schlüssel",
|
||||
"Filter results": "Ergebnisse filtern",
|
||||
"You must specify an event type!": "Du musst einen Event-Typ spezifizieren!",
|
||||
"Show message in desktop notification": "Nachricht in der Desktop-Benachrichtigung anzeigen",
|
||||
"Pin Message": "Nachricht anheften",
|
||||
"Unpin Message": "Nachricht nicht mehr anheften",
|
||||
"Add rooms to this community": "Räume zu dieser Community hinzufügen",
|
||||
"Edit": "Editieren",
|
||||
"Register": "Registrieren",
|
||||
"Rooms": "Räume",
|
||||
"Invite to this community": "In diese Community einladen",
|
||||
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Die benutzerdefinierten Server-Einstellungen kannst du verwenden, um dich auf anderen Matrix-Servern anzumelden, indem du eine abweichende Heimserver-URL eingibst.<br/>Somit ist es möglich, Riot mit einem bereits bestehendem Matrix-Benutzerkonto auf einem anderen Heimserver zu verwenden.<br/><br/>Außerdem kannst du einen benutzerdefinierten Identitätsserver eingeben. Allerdings kannst du in diesem Fall Benutzer nicht mehr per E-Mail-Adresse einladen und auch selbst nicht mehr per E-Mail-Adresse eingeladen werden.",
|
||||
"Toolbox": "Werkzeugkasten",
|
||||
"Explore Account Data": "Daten des Benutzerkontos erkunden",
|
||||
"Send Account Data": "Sende Benutzerkonto-Daten"
|
||||
}
|
194
src/i18n/strings/el.json
Normal file
194
src/i18n/strings/el.json
Normal file
|
@ -0,0 +1,194 @@
|
|||
{
|
||||
"A new version of Riot is available.": "Μία νέα έκδοση του Riot είναι διαθέσιμη.",
|
||||
"Advanced notification settings": "Προχωρημένες ρυθμίσεις ειδοποιήσεων",
|
||||
"All messages": "Όλα τα μηνύματα",
|
||||
"All Rooms": "Όλα τα δωμάτια",
|
||||
"All notifications are currently disabled for all targets.": "Όλες οι ειδοποιήσεις είναι προς το παρόν απενεργοποιημένες για όλες τις συσκευές.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Ένα σφάλμα προέκυψε κατά την αποθήκευση των ρυθμίσεων σας.",
|
||||
"Call invitation": "Πρόσκληση σε κλήση",
|
||||
"Cancel": "Ακύρωση",
|
||||
"Cancel Sending": "Ακύρωση αποστολής",
|
||||
"Can't update user notification settings": "Δεν είναι δυνατή η ενημέρωση των ρυθμίσεων ειδοποίησης χρήστη",
|
||||
"Changelog": "Αλλαγές",
|
||||
"Close": "Κλείσιμο",
|
||||
"Collapse panel": "Ελαχιστοποίηση καρτέλας",
|
||||
"Custom Server Options": "Προσαρμοσμένες ρυθμίσεις διακομιστή",
|
||||
"Describe your problem here.": "Περιγράψτε το πρόβλημα σας εδώ.",
|
||||
"Direct Chat": "Απευθείας συνομιλία",
|
||||
"Directory": "Ευρετήριο",
|
||||
"Download this file": "Λήψη αρχείου",
|
||||
"Enable audible notifications in web client": "Ενεργοποίηση ηχητικών ειδοποιήσεων",
|
||||
"Enable email notifications": "Ενεργοποίηση ειδοποιήσεων μέσω μηνυμάτων ηλ. αλληλογραφίας",
|
||||
"Enable notifications for this account": "Ενεργοποίηση ειδοποιήσεων για τον λογαριασμό",
|
||||
"Enter keywords separated by a comma:": "Προσθέστε λέξεις κλειδιά χωρισμένες με κόμμα:",
|
||||
"Error": "Σφάλμα",
|
||||
"#example": "#παράδειγμα",
|
||||
"Expand panel": "Μεγιστοποίηση καρτέλας",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">Safari</a> και <a href=\"http://opera.com\">Opera</a> λειτουργούν επίσης.",
|
||||
"Add an email address above to configure email notifications": "Προσθέστε μια διεύθυνση ηλεκτρονικής αλληλογραφίας στο παραπάνω πεδίο, για να έχετε τη δυνατότητα να λαμβάνετε ειδοποιήσεις",
|
||||
"Collecting app version information": "Συγκέντρωση πληροφοριών σχετικά με την έκδοση της εφαρμογής",
|
||||
"customServer_text": "Μπορείτε να χρησιμοποιήσετε τις προσαρμοσμένες ρυθμίσεις για να εισέλθετε σε άλλους διακομιστές Matrix επιλέγοντας μια διαφορετική διεύθυνση για το διακομιστή.<br/> Αυτό σας επιτρέπει να χρησιμοποιήσετε την εφαρμογή Riot με έναν υπάρχοντα λογαριασμό σε διαφορετικό διακομιστή.<br/><br/>Επίσης μπορείτε να επιλέξετε ένα διαφορετικό διακομιστή ταυτότητας αλλά δεν θα έχετε τη δυνατότητα να προσκαλέσετε άλλους χρήστες ή να σας προσκαλέσουν μέσω μηνυμάτων ηλεκτρονικής αλληλογραφίας.",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s μέσω %(browserName)s σε %(osName)s",
|
||||
"All messages (loud)": "Όλα τα μηνύματα (δυνατά)",
|
||||
"delete the alias.": "διέγραψε το ψευδώνυμο.",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Διαγραφή του ψευδώνυμου %(alias)s και αφαίρεση του %(name)s από το ευρετήριο;",
|
||||
"Dismiss": "Απόρριψη",
|
||||
"Failed to add tag %(tagName)s to room": "Δεν ήταν δυνατή η προσθήκη της ετικέτας %(tagName)s στο δωμάτιο",
|
||||
"Failed to change settings": "Δεν ήταν δυνατή η αλλαγή των ρυθμίσεων",
|
||||
"Favourite": "Αγαπημένο",
|
||||
"Files": "Αρχεία",
|
||||
"Filter room names": "Φιλτράρισμα δωματίων",
|
||||
"Forward Message": "Προώθηση",
|
||||
"Guests can join": "Επισκέπτες μπορούν να συνδεθούν",
|
||||
"Hide panel": "Απόκρυψη καρτέλας",
|
||||
"I understand the risks and wish to continue": "Κατανοώ του κινδύνους και επιθυμώ να συνεχίσω",
|
||||
"Invite to this room": "Πρόσκληση σε αυτό το δωμάτιο",
|
||||
"Keywords": "Λέξεις κλειδιά",
|
||||
"Leave": "Αποχώρηση",
|
||||
"Low Priority": "Χαμηλή προτεραιότητα",
|
||||
"Members": "Μέλη",
|
||||
"Messages containing <span>keywords</span>": "Μηνύματα που περιέχουν <span>λέξεις κλειδιά</span>",
|
||||
"Messages containing my user name": "Μηνύματα που περιέχουν το ψευδώνυμο μου",
|
||||
"Messages in group chats": "Μηνύματα σε ομαδικές συνομιλίες",
|
||||
"Messages in one-to-one chats": "Μηνύματα σε 1-προς-1 συνομιλίες",
|
||||
"Messages sent by bot": "Μηνύματα από bots",
|
||||
"more": "περισσότερα",
|
||||
"Mute": "Σίγαση",
|
||||
"No rooms to show": "Δεν υπάρχουν δωμάτια για εμφάνιση",
|
||||
"Noisy": "Δυνατά",
|
||||
"Notifications": "Ειδοποιήσεις",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "Οι ειδοποιήσεις για τις επόμενες λέξεις κλειδία ακολουθούν κανόνες που δεν είναι δυνατόν να εμφανιστούν εδώ:",
|
||||
"Notify for all other messages/rooms": "Ειδοποίηση για όλα τα υπόλοιπα μηνύματα/δωμάτια",
|
||||
"Notify me for anything else": "Ειδοποίηση για οτιδήποτε άλλο",
|
||||
"Operation failed": "Η λειτουργία απέτυχε",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Παρακαλούμε περιγράψτε το σφάλμα. Τι κάνατε; Τι περιμένατε να συμβεί; Τι έγινε τελικά;",
|
||||
"Reject": "Απόρριψη",
|
||||
"Remove": "Αφαίρεση",
|
||||
"Remove from Directory": "Αφαίρεση από το ευρετήριο",
|
||||
"Resend": "Αποστολή ξανά",
|
||||
"Riot Desktop on %(platformName)s": "Riot Desktop σε %(platformName)s",
|
||||
"Room not found": "Το δωμάτιο δεν βρέθηκε",
|
||||
"Search": "Αναζήτηση",
|
||||
"Search…": "Αναζήτηση…",
|
||||
"Send": "Αποστολή",
|
||||
"This Room": "Στο δωμάτιο",
|
||||
"Unavailable": "Μη διαθέσιμο",
|
||||
"Unknown device": "Άγνωστη συσκευή",
|
||||
"Update": "Ενημέρωση",
|
||||
"Enable desktop notifications": "Ενεργοποίηση ειδοποιήσεων στην επιφάνεια εργασίας",
|
||||
"Error saving email notification preferences": "Σφάλμα κατά την αποθήκευση των προτιμήσεων",
|
||||
"Failed to send report: ": "Δεν ήταν δυνατή η αποστολή της αναφοράς: ",
|
||||
"Loading bug report module": "Φόρτωση μονάδας αναφοράς σφαλμάτων",
|
||||
"Mentions only": "Μόνο αναφορές",
|
||||
"Messages containing my display name": "Μηνύματα που περιέχουν το όνομα μου",
|
||||
"Off": "Ανενεργό",
|
||||
"On": "Ενεργό",
|
||||
"Permalink": "Μόνιμος σύνδεσμος",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Παρακαλούμε εγκαταστήστε έναν από τους περιηγητές <a href=\"https://www.google.com/chrome\">Chrome</a> ή <a href=\"https://getfirefox.com\">Firefox</a> για την καλύτερη δυνατή εμπειρία.",
|
||||
"Report a bug": "Αναφορά σφάλματος",
|
||||
"Riot does not know how to join a room on this network": "To Riot δεν γνωρίζει πως να συνδεθεί σε δωμάτια που ανήκουν σ' αυτό το δίκτυο",
|
||||
"Search for a room": "Αναζήτηση δωματίου",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Λυπούμαστε, αλλά ο περιηγητές σας <b>δεν</b> υποστηρίζεται από το Riot.",
|
||||
"There are advanced notifications which are not shown here": "Υπάρχουν προχωρημένες ειδοποιήσεις οι οποίες δεν εμφανίζονται εδώ",
|
||||
"Unable to join network": "Δεν είναι δυνατή η σύνδεση στο δίκτυο",
|
||||
"unknown error code": "άγνωστος κωδικός σφάλματος",
|
||||
"Unnamed room": "Ανώνυμο δωμάτιο",
|
||||
"Uploaded on %(date)s by %(user)s": "Απεστάλη στις %(date)s από %(user)s",
|
||||
"Uploading report": "Αποστολή αναφοράς",
|
||||
"What's New": "Τι νέο υπάρχει",
|
||||
"What's new?": "Τι νέο υπάρχει;",
|
||||
"When I'm invited to a room": "Όταν με προσκαλούν σ' ένα δωμάτιο",
|
||||
"World readable": "Εμφανές σε όλους",
|
||||
"You cannot delete this image. (%(code)s)": "Δεν μπορείτε να διαγράψετε αυτή την εικόνα. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "Δεν μπορείτε να διαγράψετε αυτό το μήνυμα. (%(code)s)",
|
||||
"You are not receiving desktop notifications": "Δεν λαμβάνετε ειδοποιήσεις στην επιφάνεια εργασίας",
|
||||
"Sunday": "Κυριακή",
|
||||
"Monday": "Δευτέρα",
|
||||
"Tuesday": "Τρίτη",
|
||||
"Wednesday": "Τετάρτη",
|
||||
"Thursday": "Πέμπτη",
|
||||
"Friday": "Παρασκευή",
|
||||
"Saturday": "Σάββατο",
|
||||
"Today": "Σήμερα",
|
||||
"Yesterday": "Χθές",
|
||||
"OK": "Εντάξει",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Απαιτείται η χρήση HTTPS για το διαμοιρασμό της επιφάνειας εργασίας μέσω κλήσης.",
|
||||
"Forget": "Παράλειψη",
|
||||
"Riot is not supported on mobile web. Install the app?": "Το Riot δεν υποστηρίζεται από περιηγητές κινητών. Θέλετε να εγκαταστήσετε την εφαρμογή;",
|
||||
"Unhide Preview": "Προεπισκόπηση",
|
||||
"Waiting for response from server": "Αναμονή απάντησης από τον διακομιστή",
|
||||
"Collecting logs": "Συγκέντρωση πληροφοριών",
|
||||
"Enable them now": "Ενεργοποίηση",
|
||||
"Failed to forget room %(errCode)s": "Δεν ήταν δυνατή η διαγραφή του δωματίου (%(errCode)s)",
|
||||
"Failed to update keywords": "Οι λέξεις κλειδιά δεν ενημερώθηκαν",
|
||||
"Failed to get protocol list from Home Server": "Δεν ήταν δυνατή η εύρεση των διαθέσιμων πρωτοκόλλων από το διακομιστή",
|
||||
"Failed to remove tag %(tagName)s from room": "Δεν ήταν δυνατή η διαγραφή της ετικέτας %(tagName)s από το δωμάτιο",
|
||||
"Notification targets": "Στόχοι ειδοποιήσεων",
|
||||
"Please describe the bug and/or send logs.": "Παρακαλούμε περιγράψτε το σφάλμα και/ή στείλτε πληροφορίες σχετικά με την εφαρμογή.",
|
||||
"Remove %(name)s from the directory?": "Αφαίρεση του %(name)s από το ευρετήριο;",
|
||||
"remove %(name)s from the directory.": "αφαίρεση του %(name)s από το ευρετήριο.",
|
||||
"Send logs": "Αποστολή πληροφοριών",
|
||||
"Source URL": "Πηγαίο URL",
|
||||
"The server may be unavailable or overloaded": "Ο διακομιστής είναι μη διαθέσιμος ή υπερφορτωμένος",
|
||||
"Unable to fetch notification target list": "Δεν ήταν δυνατή η εύρεση στόχων για τις ειδοποιήσεις",
|
||||
"Unable to look up room ID from server": "Δεν είναι δυνατή η εύρεση του ID για το δωμάτιο",
|
||||
"View Decrypted Source": "Προβολή του αποκρυπτογραφημένου κώδικα",
|
||||
"View Source": "Προβολή κώδικα",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Ισως να έχετε κάνει τις ρυθμίσεις σε άλλη εφαρμογή εκτός του Riot. Δεν μπορείτε να τις αλλάξετε μέσω του Riot αλλά ισχύουν κανονικά",
|
||||
"Couldn't find a matching Matrix room": "Δεν βρέθηκε κάποιο δωμάτιο",
|
||||
"Failed to get public room list": "Δεν ήταν δυνατή η λήψη της λίστας με τα δημόσια δωμάτια",
|
||||
"Failed to set direct chat tag": "Δεν ήταν δυνατός ο χαρακτηρισμός της συνομιλίας ως 1-προς-1",
|
||||
"powered by Matrix": "βασισμένο στο πρωτόκολλο Matrix",
|
||||
"Quote": "Παράθεση",
|
||||
"Fetching third party location failed": "Η λήψη τοποθεσίας απέτυχε",
|
||||
"(HTTP status %(httpStatus)s)": "(Κατάσταση HTTP %(httpStatus)s)",
|
||||
"Login": "Σύνδεση",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Το Riot χρησιμοποιεί αρκετά προχωρημένα χαρακτηριστικά των περιηγητών Ιστού, ορισμένα από τα οποία δεν είναι διαθέσιμα ή είναι σε πειραματικό στάδιο στον περιηγητή σας.",
|
||||
"The Home Server may be too old to support third party networks": "Ο διακομιστής μπορεί να είναι αρκετά παλιός για να υποστηρίζει δίκτυα τρίτων",
|
||||
"Welcome to Riot.im": "Καλώς ήλθατε στο Riot.im",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Αποκεντρωμένη, κρυπτογραφημένη συνομιλία & συνεργασία με τη βοήθεια του [matrix]",
|
||||
"Search the room directory": "Αναζήτηση του ευρετηρίου δωματίων",
|
||||
"Chat with Riot Bot": "Συνομιλία με το Riot Bot",
|
||||
"Get started with some tips from Riot Bot!": "Ξεκινήστε με μερικές συμβουλές από το Riot Bot!",
|
||||
"General discussion about Matrix and Riot": "Γενική συζήτηση σχετικά με Matrix και Riot",
|
||||
"Discussion of all things Matrix!": "Συζήτηση για όλα τα πράγματα του Matrix!",
|
||||
"Riot/Web & Desktop chat": "Συζήτηση για το Riot/Web & Desktop",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Συζήτηση για το Riot/iOS & matrix-ios-sdk",
|
||||
"Riot/Android & matrix-android-sdk chat": "Συζήτηση για το Riot/Android & matrix-android-sdk",
|
||||
"Matrix technical discussions": "Τεχνικές συζητήσεις σχετικά με το Matrix",
|
||||
"Running Matrix services": "Χρησιμοποιώντας τις υπηρεσίες του Matrix",
|
||||
"Community-run support for Synapse": "Κοινοτική υποστήριξη για το Synapse",
|
||||
"Admin support for Dendrite": "Υποστήριξη διαχειριστή για το Dendrite",
|
||||
"Announcements about Synapse releases": "Ανακοινώσεις σχετικά με τις εκδόσεις του Synapse",
|
||||
"Support for those using and running matrix-appservice-irc": "Υποστήριξη για τους χρήστες που χρησιμοποιούν το matrix-appservice-irc",
|
||||
"Building services on Matrix": "Ανάπτυξη υπηρεσιών στο Matrix",
|
||||
"Support for those using the Matrix spec": "Υποστήριξη για τους χρήστες που χρησιμοποιούν το Matrix spec",
|
||||
"Design and implementation of E2E in Matrix": "Σχεδιασμός και υλοποίηση του E2E στο Matrix",
|
||||
"Implementing VR services with Matrix": "Υλοποίηση υπηρεσίων VR με το Matrix",
|
||||
"Implementing VoIP services with Matrix": "Υλοποίηση υπηρεσίων VoIP με το Matrix",
|
||||
"Discussion of the Identity Service API": "Συζήτηση σχετικά με το Identity Service API",
|
||||
"Contributing code to Matrix and Riot": "Συνεισφορά κώδικα στο Matrix και Riot",
|
||||
"Dev chat for the Riot/Web dev team": "Συζήτηση με την ομάδα ανάπτυξης του Riot/Web",
|
||||
"Dev chat for the Dendrite dev team": "Συζήτηση με την ομάδα ανάπτυξης του Dendrite",
|
||||
"Co-ordination for Riot/Web translators": "Συντονισμός για μεταφραστές του Riot/Web",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Αρκετά δωμάτια υπάρχουν ήδη στο Matrix, συνδεδεμένα σε υπάρχοντα δίκτυα (Slack, IRC, Gitter κ.λπ) ή αυτόνομα. Ρίξτε μια ματιά στο ευρετήριο!",
|
||||
"Failed to change password. Is your password correct?": "Δεν ήταν δυνατή η αλλαγή του κωδικού πρόσβασης. Είναι σωστός ο κωδικός πρόσβασης;",
|
||||
"You have successfully set a password!": "Ο κωδικός πρόσβασης ορίστηκε επιτυχώς!",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "Μπορείτε να επιστρέψετε στον λογαριασμό σας αφού αποσυνδεθείτε και συνδεθείτε από άλλες συσκευές.",
|
||||
"Continue": "Συνέχεια",
|
||||
"Please set a password!": "Παρακαλούμε ορίστε έναν κωδικό πρόσβασης!",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "Αυτό θα σας επιτρέψει να επιστρέψετε στον λογαριασμό σας αφού αποσυνδεθείτε και συνδεθείτε από άλλες συσκευές.",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Προκειμένου να διαγνωστούν προβλήματα, τα αρχεία καταγραφής από αυτόν τον πελάτη θα σταλούν με αυτήν την αναφορά σφάλματος. Αν προτιμάτε να στείλετε μόνο το παραπάνω κείμενο, απενεργοποιήστε:",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Με τον τρέχον περιηγητή, η εμφάνιση και η αίσθηση της εφαρμογής ενδέχεται να είναι εντελώς εσφαλμένη και ορισμένες ή όλες οι λειτουργίες ενδέχεται να μην λειτουργούν. Εάν θέλετε να το δοκιμάσετε ούτως ή άλλως μπορείτε να συνεχίσετε, αλλά είστε μόνοι σας σε ό, τι αφορά τα προβλήματα που μπορεί να αντιμετωπίσετε!",
|
||||
"Failed to set Direct Message status of room": "Δεν ήταν δυνατός ο ορισμός της κατάστασης Direct Message του δωματίου",
|
||||
"Support for those using, running and writing other bridges": "Υποστήριξη για τους χρήστες που χρησιμοποιούν ή αναπτύσσουν εφαρμογές ενσωμάτωσης για το Matrix",
|
||||
"You have successfully set a password and an email address!": "Ο κωδικός πρόσβασης και η διεύθυνση ηλεκτρονικής αλληλογραφίας ορίστηκαν επιτυχώς!",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Να θυμάστε ότι μπορείτε πάντα να ορίσετε μια διεύθυνση ηλεκτρονικής αλληλογραφίας στις ρυθμίσεις χρήστη αν αλλάξετε γνώμη.",
|
||||
"To return to your account in future you need to <u>set a password</u>": "Για να επιστρέψετε στον λογαριασμό σας μελλοντικα πρέπει να ορίσετε έναν <u>κωδικό πρόσβασης</u>",
|
||||
"Set Password": "Ορισμός κωδικού πρόσβασης",
|
||||
"Warning": "Προειδοποίηση",
|
||||
"Checking for an update...": "Γίνεται έλεγχος για ενημέρωση...",
|
||||
"Error encountered (%(errorDetail)s).": "Παρουσιάστηκε σφάλμα (%(errorDetail)s).",
|
||||
"No update available.": "Δεν υπάρχει διαθέσιμη ενημέρωση.",
|
||||
"Downloading update...": "Γίνεται λήψη της ενημέρωσης..."
|
||||
}
|
221
src/i18n/strings/en_EN.json
Normal file
221
src/i18n/strings/en_EN.json
Normal file
|
@ -0,0 +1,221 @@
|
|||
{
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot is not supported on mobile web. Install the app?",
|
||||
"Collecting app version information": "Collecting app version information",
|
||||
"Collecting logs": "Collecting logs",
|
||||
"Uploading report": "Uploading report",
|
||||
"Waiting for response from server": "Waiting for response from server",
|
||||
"Riot Desktop on %(platformName)s": "Riot Desktop on %(platformName)s",
|
||||
"Unknown device": "Unknown device",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s on %(osName)s",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "You need to be using HTTPS to place a screen-sharing call.",
|
||||
"Messages containing my display name": "Messages containing my display name",
|
||||
"Messages containing my user name": "Messages containing my user name",
|
||||
"Messages in one-to-one chats": "Messages in one-to-one chats",
|
||||
"Messages in group chats": "Messages in group chats",
|
||||
"When I'm invited to a room": "When I'm invited to a room",
|
||||
"Call invitation": "Call invitation",
|
||||
"Messages sent by bot": "Messages sent by bot",
|
||||
"Error saving email notification preferences": "Error saving email notification preferences",
|
||||
"An error occurred whilst saving your email notification preferences.": "An error occurred whilst saving your email notification preferences.",
|
||||
"Keywords": "Keywords",
|
||||
"Enter keywords separated by a comma:": "Enter keywords separated by a comma:",
|
||||
"OK": "OK",
|
||||
"Failed to change settings": "Failed to change settings",
|
||||
"Operation failed": "Operation failed",
|
||||
"Can't update user notification settings": "Can't update user notification settings",
|
||||
"Failed to update keywords": "Failed to update keywords",
|
||||
"Messages containing <span>keywords</span>": "Messages containing <span>keywords</span>",
|
||||
"Notify for all other messages/rooms": "Notify for all other messages/rooms",
|
||||
"Notify me for anything else": "Notify me for anything else",
|
||||
"Enable notifications for this account": "Enable notifications for this account",
|
||||
"All notifications are currently disabled for all targets.": "All notifications are currently disabled for all targets.",
|
||||
"Add an email address above to configure email notifications": "Add an email address above to configure email notifications",
|
||||
"Enable email notifications": "Enable email notifications",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "Notifications on the following keywords follow rules which can’t be displayed here:",
|
||||
"Unable to fetch notification target list": "Unable to fetch notification target list",
|
||||
"Notification targets": "Notification targets",
|
||||
"Advanced notification settings": "Advanced notification settings",
|
||||
"There are advanced notifications which are not shown here": "There are advanced notifications which are not shown here",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply",
|
||||
"Enable desktop notifications": "Enable desktop notifications",
|
||||
"Show message in desktop notification": "Show message in desktop notification",
|
||||
"Enable audible notifications in web client": "Enable audible notifications in web client",
|
||||
"Off": "Off",
|
||||
"On": "On",
|
||||
"Noisy": "Noisy",
|
||||
"Failed to set direct chat tag": "Failed to set direct chat tag",
|
||||
"Failed to remove tag %(tagName)s from room": "Failed to remove tag %(tagName)s from room",
|
||||
"Failed to add tag %(tagName)s to room": "Failed to add tag %(tagName)s to room",
|
||||
"Search…": "Search…",
|
||||
"Search": "Search",
|
||||
"This Room": "This Room",
|
||||
"All Rooms": "All Rooms",
|
||||
"Sunday": "Sunday",
|
||||
"Monday": "Monday",
|
||||
"Tuesday": "Tuesday",
|
||||
"Wednesday": "Wednesday",
|
||||
"Thursday": "Thursday",
|
||||
"Friday": "Friday",
|
||||
"Saturday": "Saturday",
|
||||
"Today": "Today",
|
||||
"Yesterday": "Yesterday",
|
||||
"Custom Server Options": "Custom Server Options",
|
||||
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.",
|
||||
"Dismiss": "Dismiss",
|
||||
"powered by Matrix": "powered by Matrix",
|
||||
"You are not receiving desktop notifications": "You are not receiving desktop notifications",
|
||||
"Enable them now": "Enable them now",
|
||||
"What's New": "What's New",
|
||||
"Update": "Update",
|
||||
"What's new?": "What's new?",
|
||||
"Appear Offline": "Appear Offline",
|
||||
"Away": "Away",
|
||||
"A new version of Riot is available.": "A new version of Riot is available.",
|
||||
"To return to your account in future you need to <u>set a password</u>": "To return to your account in future you need to <u>set a password</u>",
|
||||
"Set Password": "Set Password",
|
||||
"Error encountered (%(errorDetail)s).": "Error encountered (%(errorDetail)s).",
|
||||
"Checking for an update...": "Checking for an update...",
|
||||
"No update available.": "No update available.",
|
||||
"Downloading update...": "Downloading update...",
|
||||
"Warning": "Warning",
|
||||
"Error": "Error",
|
||||
"You cannot delete this image. (%(code)s)": "You cannot delete this image. (%(code)s)",
|
||||
"Uploaded on %(date)s by %(user)s": "Uploaded on %(date)s by %(user)s",
|
||||
"Remove": "Remove",
|
||||
"Close": "Close",
|
||||
"Download this file": "Download this file",
|
||||
"Please describe the bug and/or send logs.": "Please describe the bug and/or send logs.",
|
||||
"Loading bug report module": "Loading bug report module",
|
||||
"Bug report sent": "Bug report sent",
|
||||
"Thank you!": "Thank you!",
|
||||
"Failed to send report: ": "Failed to send report: ",
|
||||
"Cancel": "Cancel",
|
||||
"Report a bug": "Report a bug",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Please describe the bug. What did you do? What did you expect to happen? What actually happened?",
|
||||
"Describe your problem here.": "Describe your problem here.",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:",
|
||||
"Send logs": "Send logs",
|
||||
"Send": "Send",
|
||||
"Unavailable": "Unavailable",
|
||||
"Changelog": "Changelog",
|
||||
"Back": "Back",
|
||||
"Send Custom Event": "Send Custom Event",
|
||||
"You must specify an event type!": "You must specify an event type!",
|
||||
"Event sent!": "Event sent!",
|
||||
"Failed to send custom event.": "Failed to send custom event.",
|
||||
"Event Type": "Event Type",
|
||||
"State Key": "State Key",
|
||||
"Event Content": "Event Content",
|
||||
"Send Account Data": "Send Account Data",
|
||||
"Filter results": "Filter results",
|
||||
"Explore Room State": "Explore Room State",
|
||||
"Edit": "Edit",
|
||||
"Explore Account Data": "Explore Account Data",
|
||||
"Toolbox": "Toolbox",
|
||||
"Developer Tools": "Developer Tools",
|
||||
"You have successfully set a password!": "You have successfully set a password!",
|
||||
"You have successfully set a password and an email address!": "You have successfully set a password and an email address!",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "You can now return to your account after signing out, and sign in on other devices.",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Remember, you can always set an email address in user settings if you change your mind.",
|
||||
"Continue": "Continue",
|
||||
"Failed to change password. Is your password correct?": "Failed to change password. Is your password correct?",
|
||||
"(HTTP status %(httpStatus)s)": "(HTTP status %(httpStatus)s)",
|
||||
"Please set a password!": "Please set a password!",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "This will allow you to return to your account after signing out, and sign in on other devices.",
|
||||
"You cannot delete this message. (%(code)s)": "You cannot delete this message. (%(code)s)",
|
||||
"Resend": "Resend",
|
||||
"Cancel Sending": "Cancel Sending",
|
||||
"Forward Message": "Forward Message",
|
||||
"Unpin Message": "Unpin Message",
|
||||
"Pin Message": "Pin Message",
|
||||
"View Source": "View Source",
|
||||
"View Decrypted Source": "View Decrypted Source",
|
||||
"Unhide Preview": "Unhide Preview",
|
||||
"Permalink": "Permalink",
|
||||
"Quote": "Quote",
|
||||
"Source URL": "Source URL",
|
||||
"Failed to set Direct Message status of room": "Failed to set Direct Message status of room",
|
||||
"unknown error code": "unknown error code",
|
||||
"Failed to forget room %(errCode)s": "Failed to forget room %(errCode)s",
|
||||
"All messages (loud)": "All messages (loud)",
|
||||
"All messages": "All messages",
|
||||
"Mentions only": "Mentions only",
|
||||
"Mute": "Mute",
|
||||
"Leave": "Leave",
|
||||
"Forget": "Forget",
|
||||
"Reject": "Reject",
|
||||
"Favourite": "Favourite",
|
||||
"Low Priority": "Low Priority",
|
||||
"Direct Chat": "Direct Chat",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Sorry, your browser is <b>not</b> able to run Riot.",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.",
|
||||
"Please install <chromeLink>Chrome</chromeLink> or <firefoxLink>Firefox</firefoxLink> for the best experience.": "Please install <chromeLink>Chrome</chromeLink> or <firefoxLink>Firefox</firefoxLink> for the best experience.",
|
||||
"<safariLink>Safari</safariLink> and <operaLink>Opera</operaLink> work too.": "<safariLink>Safari</safariLink> and <operaLink>Opera</operaLink> work too.",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!",
|
||||
"I understand the risks and wish to continue": "I understand the risks and wish to continue",
|
||||
"Couldn't load home page": "Couldn't load home page",
|
||||
"Login": "Login",
|
||||
"Register": "Register",
|
||||
"Invite to this room": "Invite to this room",
|
||||
"Members": "Members",
|
||||
"Files": "Files",
|
||||
"Notifications": "Notifications",
|
||||
"Rooms": "Rooms",
|
||||
"Hide panel": "Hide panel",
|
||||
"Invite to this community": "Invite to this community",
|
||||
"Add rooms to this community": "Add rooms to this community",
|
||||
"Failed to get protocol list from Home Server": "Failed to get protocol list from Home Server",
|
||||
"The Home Server may be too old to support third party networks": "The Home Server may be too old to support third party networks",
|
||||
"Failed to get public room list": "Failed to get public room list",
|
||||
"The server may be unavailable or overloaded": "The server may be unavailable or overloaded",
|
||||
"Unnamed room": "Unnamed room",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Delete the room alias %(alias)s and remove %(name)s from the directory?",
|
||||
"Remove %(name)s from the directory?": "Remove %(name)s from the directory?",
|
||||
"Remove from Directory": "Remove from Directory",
|
||||
"remove %(name)s from the directory.": "remove %(name)s from the directory.",
|
||||
"delete the alias.": "delete the alias.",
|
||||
"Unable to join network": "Unable to join network",
|
||||
"Riot does not know how to join a room on this network": "Riot does not know how to join a room on this network",
|
||||
"Room not found": "Room not found",
|
||||
"Couldn't find a matching Matrix room": "Couldn't find a matching Matrix room",
|
||||
"Fetching third party location failed": "Fetching third party location failed",
|
||||
"Unable to look up room ID from server": "Unable to look up room ID from server",
|
||||
"World readable": "World readable",
|
||||
"Guests can join": "Guests can join",
|
||||
"Directory": "Directory",
|
||||
"No rooms to show": "No rooms to show",
|
||||
"Search for a room": "Search for a room",
|
||||
"#example": "#example",
|
||||
"more": "more",
|
||||
"Expand panel": "Expand panel",
|
||||
"Collapse panel": "Collapse panel",
|
||||
"Filter room names": "Filter room names",
|
||||
"Welcome to Riot.im": "Welcome to Riot.im",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralised, encrypted chat & collaboration powered by [matrix]",
|
||||
"Search the room directory": "Search the room directory",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!",
|
||||
"Chat with Riot Bot": "Chat with Riot Bot",
|
||||
"Get started with some tips from Riot Bot!": "Get started with some tips from Riot Bot!",
|
||||
"General discussion about Matrix and Riot": "General discussion about Matrix and Riot",
|
||||
"Discussion of all things Matrix!": "Discussion of all things Matrix!",
|
||||
"Riot/Web & Desktop chat": "Riot/Web & Desktop chat",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk chat",
|
||||
"Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk chat",
|
||||
"Matrix technical discussions": "Matrix technical discussions",
|
||||
"Running Matrix services": "Running Matrix services",
|
||||
"Community-run support for Synapse": "Community-run support for Synapse",
|
||||
"Admin support for Dendrite": "Admin support for Dendrite",
|
||||
"Announcements about Synapse releases": "Announcements about Synapse releases",
|
||||
"Support for those using and running matrix-appservice-irc": "Support for those using and running matrix-appservice-irc",
|
||||
"Building services on Matrix": "Building services on Matrix",
|
||||
"Support for those using the Matrix spec": "Support for those using the Matrix spec",
|
||||
"Design and implementation of E2E in Matrix": "Design and implementation of E2E in Matrix",
|
||||
"Implementing VR services with Matrix": "Implementing VR services with Matrix",
|
||||
"Implementing VoIP services with Matrix": "Implementing VoIP services with Matrix",
|
||||
"Discussion of the Identity Service API": "Discussion of the Identity Service API",
|
||||
"Support for those using, running and writing other bridges": "Support for those using, running and writing other bridges",
|
||||
"Contributing code to Matrix and Riot": "Contributing code to Matrix and Riot",
|
||||
"Dev chat for the Riot/Web dev team": "Dev chat for the Riot/Web dev team",
|
||||
"Dev chat for the Dendrite dev team": "Dev chat for the Dendrite dev team",
|
||||
"Co-ordination for Riot/Web translators": "Co-ordination for Riot/Web translators"
|
||||
}
|
197
src/i18n/strings/en_US.json
Normal file
197
src/i18n/strings/en_US.json
Normal file
|
@ -0,0 +1,197 @@
|
|||
{
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s on %(osName)s",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.",
|
||||
"A new version of Riot is available.": "A new version of Riot is available.",
|
||||
"Add an email address above to configure email notifications": "Add an email address above to configure email notifications",
|
||||
"Advanced notification settings": "Advanced notification settings",
|
||||
"All messages": "All messages",
|
||||
"All messages (loud)": "All messages (loud)",
|
||||
"All Rooms": "All Rooms",
|
||||
"All notifications are currently disabled for all targets.": "All notifications are currently disabled for all targets.",
|
||||
"An error occurred whilst saving your email notification preferences.": "An error occurred while saving your email notification preferences.",
|
||||
"Call invitation": "Call invitation",
|
||||
"Cancel": "Cancel",
|
||||
"Cancel Sending": "Cancel Sending",
|
||||
"Can't update user notification settings": "Can't update user notification settings",
|
||||
"Changelog": "Changelog",
|
||||
"Close": "Close",
|
||||
"Collapse panel": "Collapse panel",
|
||||
"Collecting app version information": "Collecting app version information",
|
||||
"Collecting logs": "Collecting logs",
|
||||
"Couldn't find a matching Matrix room": "Couldn't find a matching Matrix room",
|
||||
"Custom Server Options": "Custom Server Options",
|
||||
"customServer_text": "You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.",
|
||||
"delete the alias.": "delete the alias.",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Delete the room alias %(alias)s and remove %(name)s from the directory?",
|
||||
"Describe your problem here.": "Describe your problem here.",
|
||||
"Direct Chat": "Direct Chat",
|
||||
"Directory": "Directory",
|
||||
"Dismiss": "Dismiss",
|
||||
"Download this file": "Download this file",
|
||||
"Enable audible notifications in web client": "Enable audible notifications in web client",
|
||||
"Enable desktop notifications": "Enable desktop notifications",
|
||||
"Enable email notifications": "Enable email notifications",
|
||||
"Enable notifications for this account": "Enable notifications for this account",
|
||||
"Enable them now": "Enable them now",
|
||||
"Enter keywords separated by a comma:": "Enter keywords separated by a comma:",
|
||||
"Error": "Error",
|
||||
"Error saving email notification preferences": "Error saving email notification preferences",
|
||||
"#example": "#example",
|
||||
"Expand panel": "Expand panel",
|
||||
"Failed to add tag %(tagName)s to room": "Failed to add tag %(tagName)s to room",
|
||||
"Failed to change settings": "Failed to change settings",
|
||||
"Failed to forget room %(errCode)s": "Failed to forget room %(errCode)s",
|
||||
"Failed to update keywords": "Failed to update keywords",
|
||||
"Failed to get protocol list from Home Server": "Failed to get protocol list from Home Server",
|
||||
"Failed to get public room list": "Failed to get public room list",
|
||||
"Failed to remove tag %(tagName)s from room": "Failed to remove tag %(tagName)s from room",
|
||||
"Failed to send report: ": "Failed to send report: ",
|
||||
"Failed to set direct chat tag": "Failed to set direct chat tag",
|
||||
"Failed to set Direct Message status of room": "Failed to set Direct Message status of room",
|
||||
"Favourite": "Favorite",
|
||||
"Fetching third party location failed": "Fetching third party location failed",
|
||||
"Files": "Files",
|
||||
"Filter room names": "Filter room names",
|
||||
"Forget": "Forget",
|
||||
"Forward Message": "Forward Message",
|
||||
"Guests can join": "Guests can join",
|
||||
"Hide panel": "Hide panel",
|
||||
"I understand the risks and wish to continue": "I understand the risks and wish to continue",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please uncheck:",
|
||||
"Invite to this room": "Invite to this room",
|
||||
"Keywords": "Keywords",
|
||||
"Leave": "Leave",
|
||||
"Loading bug report module": "Loading bug report module",
|
||||
"Low Priority": "Low Priority",
|
||||
"Members": "Members",
|
||||
"Mentions only": "Mentions only",
|
||||
"Messages containing my display name": "Messages containing my display name",
|
||||
"Messages containing <span>keywords</span>": "Messages containing <span>keywords</span>",
|
||||
"Messages containing my user name": "Messages containing my user name",
|
||||
"Messages in group chats": "Messages in group chats",
|
||||
"Messages in one-to-one chats": "Messages in one-to-one chats",
|
||||
"Messages sent by bot": "Messages sent by bot",
|
||||
"more": "more",
|
||||
"Mute": "Mute",
|
||||
"No rooms to show": "No rooms to show",
|
||||
"Noisy": "Noisy",
|
||||
"Notification targets": "Notification targets",
|
||||
"Notifications": "Notifications",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "Notifications on the following keywords follow rules which can’t be displayed here:",
|
||||
"Notify for all other messages/rooms": "Notify for all other messages/rooms",
|
||||
"Notify me for anything else": "Notify me for anything else",
|
||||
"Off": "Off",
|
||||
"On": "On",
|
||||
"Operation failed": "Operation failed",
|
||||
"Permalink": "Permalink",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Please describe the bug. What did you do? What did you expect to happen? What actually happened?",
|
||||
"Please describe the bug and/or send logs.": "Please describe the bug and/or send logs.",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.",
|
||||
"powered by Matrix": "powered by Matrix",
|
||||
"Quote": "Quote",
|
||||
"Reject": "Reject",
|
||||
"Remove %(name)s from the directory?": "Remove %(name)s from the directory?",
|
||||
"Remove": "Remove",
|
||||
"remove %(name)s from the directory.": "remove %(name)s from the directory.",
|
||||
"Remove from Directory": "Remove from Directory",
|
||||
"Report a bug": "Report a bug",
|
||||
"Resend": "Resend",
|
||||
"Riot Desktop on %(platformName)s": "Riot Desktop on %(platformName)s",
|
||||
"Riot does not know how to join a room on this network": "Riot does not know how to join a room on this network",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot is not supported on mobile web. Install the app?",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.",
|
||||
"Room not found": "Room not found",
|
||||
"Search": "Search",
|
||||
"Search…": "Search…",
|
||||
"Search for a room": "Search for a room",
|
||||
"Send": "Send",
|
||||
"Send logs": "Send logs",
|
||||
"Source URL": "Source URL",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Sorry, your browser is <b>not</b> able to run Riot.",
|
||||
"The Home Server may be too old to support third party networks": "The Home Server may be too old to support third party networks",
|
||||
"There are advanced notifications which are not shown here": "There are advanced notifications which are not shown here",
|
||||
"The server may be unavailable or overloaded": "The server may be unavailable or overloaded",
|
||||
"This Room": "This Room",
|
||||
"Unable to fetch notification target list": "Unable to fetch notification target list",
|
||||
"Unable to join network": "Unable to join network",
|
||||
"Unable to look up room ID from server": "Unable to look up room ID from server",
|
||||
"Unavailable": "Unavailable",
|
||||
"Unhide Preview": "Unhide Preview",
|
||||
"Unknown device": "Unknown device",
|
||||
"unknown error code": "unknown error code",
|
||||
"Unnamed room": "Unnamed room",
|
||||
"Update": "Update",
|
||||
"Uploaded on %(date)s by %(user)s": "Uploaded on %(date)s by %(user)s",
|
||||
"Uploading report": "Uploading report",
|
||||
"View Decrypted Source": "View Decrypted Source",
|
||||
"View Source": "View Source",
|
||||
"What's New": "What's New",
|
||||
"What's new?": "What's new?",
|
||||
"Waiting for response from server": "Waiting for response from server",
|
||||
"When I'm invited to a room": "When I'm invited to a room",
|
||||
"World readable": "World readable",
|
||||
"You cannot delete this image. (%(code)s)": "You cannot delete this image. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "You cannot delete this message. (%(code)s)",
|
||||
"You are not receiving desktop notifications": "You are not receiving desktop notifications",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply",
|
||||
"Sunday": "Sunday",
|
||||
"Monday": "Monday",
|
||||
"Tuesday": "Tuesday",
|
||||
"Wednesday": "Wednesday",
|
||||
"Thursday": "Thursday",
|
||||
"Friday": "Friday",
|
||||
"Saturday": "Saturday",
|
||||
"Today": "Today",
|
||||
"Yesterday": "Yesterday",
|
||||
"OK": "OK",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "You need to be using HTTPS to place a screen-sharing call.",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!",
|
||||
"Login": "Login",
|
||||
"Continue": "Continue",
|
||||
"Failed to change password. Is your password correct?": "Failed to change password. Is your password correct?",
|
||||
"(HTTP status %(httpStatus)s)": "(HTTP status %(httpStatus)s)",
|
||||
"Welcome to Riot.im": "Welcome to Riot.im",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralised, encrypted chat & collaboration powered by [matrix]",
|
||||
"Chat with Riot Bot": "Chat with Riot Bot",
|
||||
"Search the room directory": "Search the room directory",
|
||||
"Get started with some tips from Riot Bot!": "Get started with some tips from Riot Bot!",
|
||||
"General discussion about Matrix and Riot": "General discussion about Matrix and Riot",
|
||||
"Discussion of all things Matrix!": "Discussion of all things Matrix!",
|
||||
"Matrix technical discussions": "Matrix technical discussions",
|
||||
"Running Matrix services": "Running Matrix services",
|
||||
"Community-run support for Synapse": "Community-run support for Synapse",
|
||||
"Admin support for Dendrite": "Admin support for Dendrite",
|
||||
"Announcements about Synapse releases": "Announcements about Synapse releases",
|
||||
"Support for those using and running matrix-appservice-irc": "Support for those using and running matrix-appservice-irc",
|
||||
"Building services on Matrix": "Building services on Matrix",
|
||||
"Support for those using the Matrix spec": "Support for those using the Matrix spec",
|
||||
"Design and implementation of E2E in Matrix": "Design and implementation of E2E in Matrix",
|
||||
"Implementing VR services with Matrix": "Implementing VR services with Matrix",
|
||||
"Implementing VoIP services with Matrix": "Implementing VoIP services with Matrix",
|
||||
"Discussion of the Identity Service API": "Discussion of the Identity Service API",
|
||||
"Support for those using, running and writing other bridges": "Support for those using, running and writing other bridges",
|
||||
"Contributing code to Matrix and Riot": "Contributing code to Matrix and Riot",
|
||||
"Dev chat for the Riot/Web dev team": "Dev chat for the Riot/Web dev team",
|
||||
"Dev chat for the Dendrite dev team": "Dev chat for the Dendrite dev team",
|
||||
"Co-ordination for Riot/Web translators": "Co-ordination for Riot/Web translators",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!",
|
||||
"You have successfully set a password!": "You have successfully set a password!",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "You can now return to your account after signing out, and sign in on other devices.",
|
||||
"Please set a password!": "Please set a password!",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "This will allow you to return to your account after signing out, and sign in on other devices.",
|
||||
"Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk chat",
|
||||
"Riot/Web & Desktop chat": "Riot/Web & Desktop chat",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk chat",
|
||||
"You have successfully set a password and an email address!": "You have successfully set a password and an email address!",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Remember, you can always set an email address in user settings if you change your mind.",
|
||||
"Warning": "Warning",
|
||||
"Pin Message": "Pin Message",
|
||||
"Unpin Message": "Unpin Message",
|
||||
"Checking for an update...": "Checking for an update...",
|
||||
"Error encountered (%(errorDetail)s).": "Error encountered (%(errorDetail)s).",
|
||||
"No update available.": "No update available.",
|
||||
"Downloading update...": "Downloading update...",
|
||||
"To return to your account in future you need to <u>set a password</u>": "To return to your account in future you need to <u>set a password</u>",
|
||||
"Set Password": "Set Password",
|
||||
"Couldn't load home page": "Couldn't load home page"
|
||||
}
|
190
src/i18n/strings/eo.json
Normal file
190
src/i18n/strings/eo.json
Normal file
|
@ -0,0 +1,190 @@
|
|||
{
|
||||
"A new version of Riot is available.": "Nova versio de \"Riot\" haveblas.",
|
||||
"All messages": "Ĉiuj mesaĝoj",
|
||||
"All messages (loud)": "Ĉiuj mesaĝoj (lauta)",
|
||||
"All Rooms": "Ĉiuj babilejoj",
|
||||
"Cancel": "Nuligi",
|
||||
"delete the alias.": "Forviŝi la kromnomon.",
|
||||
"Describe your problem here.": "Priskribi vian problemon ĉi tie.",
|
||||
"Direct Chat": "Rekta babilejo",
|
||||
"Directory": "Dosierujo",
|
||||
"Dismiss": "Eksigu",
|
||||
"Download this file": "Elŝutu ĉi-tiun dosieron",
|
||||
"#example": "#ekzemplo",
|
||||
"Files": "Dosieroj",
|
||||
"Forget": "Forgesi",
|
||||
"Guests can join": "Gastoj povas aliĝi",
|
||||
"I understand the risks and wish to continue": "Mi komprenas la riskonj kaj volas daŭrigi",
|
||||
"Invite to this room": "Inviti en ĉi tiun babilejon",
|
||||
"Keywords": "Ŝlosilvortoj",
|
||||
"Leave": "Foriri",
|
||||
"Low Priority": "Malalta prioritato",
|
||||
"Messages containing my display name": "Mesaĝoj enhavantaj mian vidigan nomon",
|
||||
"Messages containing <span>keywords</span>": "Mesaĝoj enhavantaj <span>ŝlosilovortojn</span>",
|
||||
"Messages containing my user name": "Mesaĝoj enhavantaj mian uzantnomon",
|
||||
"Messages in group chats": "Mesaĝoj en grupaj babilejoj",
|
||||
"Mute": "Silentigi",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Bonvolu priskribi la cimon. Kion vi faris? Kion vi atendis okazi? Kion fakte okazis?",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Bonvolu instali <a href=\"https://www.google.com/chrome\">\"Chrome\"</a> aŭ <a href=\"https://getfirefox.com\">\"Firefox\"</a> por la plej bona sperto.",
|
||||
"powered by Matrix": "funkciigata de \"Matrix\"",
|
||||
"Quote": "Citu",
|
||||
"Reject": "Malakcepti",
|
||||
"Resend": "Resendi",
|
||||
"Room not found": "Babilejo ne trovita",
|
||||
"Search": "Serĉi",
|
||||
"Search…": "Serĉi…",
|
||||
"Search for a room": "Serĉi babilejon",
|
||||
"Send": "Sendi",
|
||||
"This Room": "Ĉi tiu Babilejo",
|
||||
"Add an email address above to configure email notifications": "Aldonu retadreson supre por agordi retpoŝtajn sciigojn",
|
||||
"Advanced notification settings": "Agordoj de sciigoj specialaj",
|
||||
"Call invitation": "Invito al voko",
|
||||
"All notifications are currently disabled for all targets.": "Ĉiuj sciigoj estas malvalidigitaj por ĉiu aparato.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Eraro okazis dum konservado de agordoj por retpoŝtaj sciigoj.",
|
||||
"Cancel Sending": "Nuligi sendadon",
|
||||
"Can't update user notification settings": "Ne eblas ĝisdatigi la agordojn de sciigoj al uzanto",
|
||||
"Changelog": "Protokolo de ŝanĝoj",
|
||||
"Close": "Fermi",
|
||||
"Collapse panel": "Kaŝi panelon",
|
||||
"Collecting app version information": "Kolektante informon pri versio de la aplikaĵo",
|
||||
"Collecting logs": "Kolektante protokolon",
|
||||
"Couldn't find a matching Matrix room": "Ne eblis trovi kongruantan ejon Matrix",
|
||||
"Custom Server Options": "Opcioj pri personigo de servilo",
|
||||
"customServer_text": "Vi povas uzi opciojn personigitajn de la servilo por ensaluti en aliajn servilojn Matrix specifante alian adreson URL-an de alia servilo Home.<br/>Tio permesas al vi uzi Riot per ekzistanta konto en alia Home servilo.<br/><br/>Vi povas ankaŭ agordi servilon identecan personigita, sed ne eblos inviti uzantojn pere de retpoŝtadreso, aŭ esti invitita pere de retpoŝtadreso vi mem.",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Forviŝi la kromnomon de la ejo %(alias)s and forigi %(name)s el la dosierujo?",
|
||||
"Enable audible notifications in web client": "Ebligi aŭdeblajn sciigojn en la retkliento",
|
||||
"Enable desktop notifications": "Ebligi labortablajn sciigojn",
|
||||
"Enable email notifications": "Ebligi retpoŝtajn sciigojn",
|
||||
"Enable notifications for this account": "Ebligi sciigojn por tiu ĉi konto",
|
||||
"Enable them now": "Ebligi ilin nun",
|
||||
"Enter keywords separated by a comma:": "Entajpi ŝlosilvortojn apartigitaj per komoj:",
|
||||
"Error": "Eraro",
|
||||
"Error saving email notification preferences": "Eraro konservante agordojn pri retpoŝtaj sciigoj",
|
||||
"Expand panel": "Pli grandigi panelon",
|
||||
"Failed to add tag %(tagName)s to room": "Malsukcesis aldoni etikedon %(tagName)s al la ejo",
|
||||
"Failed to change settings": "Malsukcesis ŝanĝi la agordojn",
|
||||
"Failed to forget room %(errCode)s": "Malsukcesis forgesi la ejon %(errCode)s",
|
||||
"Failed to update keywords": "Malsukcesis ĝisdatigi la ŝlosilvortojn",
|
||||
"Failed to get protocol list from Home Server": "Malsukcesis obteni la liston de protokoloj por la servilo Home",
|
||||
"Failed to get public room list": "Malsukcesis obteni la liston de publikaj ejoj",
|
||||
"Failed to remove tag %(tagName)s from room": "Malsukcesis forigi la etikedon %(tagName)s el la ejo",
|
||||
"Failed to send report: ": "Malsukcesis sendi raporton: ",
|
||||
"Failed to set direct chat tag": "Malsukcesis agordi la etikedon de rekta babilejo",
|
||||
"Failed to set Direct Message status of room": "Malsukcesis agordi la staton de Rekta Mesaĝo de la ejo",
|
||||
"Forward Message": "Plusendi mesaĝon",
|
||||
"Hide panel": "Kaŝi panelon",
|
||||
"(HTTP status %(httpStatus)s)": "(stato HTTP %(httpStatus)s)",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Por diagnozi problemojn, protokoloj el tiu ĉi kliento sendiĝos kune kun tiu ĉi raporto de eraro. Se vi preferas sendi nur la supran tekston, bonvolu malŝalti:",
|
||||
"Login": "Ensaluti",
|
||||
"Loading bug report module": "Ŝarĝante modulon pri eraroraporto",
|
||||
"Members": "Membroj",
|
||||
"Mentions only": "Nur mencioj",
|
||||
"Messages in one-to-one chats": "Mesaĝoj en unu-je-unu babilejoj",
|
||||
"Messages sent by bot": "Mesaĝoj sendita per roboto",
|
||||
"more": "pli",
|
||||
"No rooms to show": "Neniu ejo por montri",
|
||||
"Noisy": "Brua",
|
||||
"Notification targets": "Celo de sciigoj",
|
||||
"Notifications": "Sciigoj",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "La sciigoj de la sekvaj ŝlosilvortoj sekvas regulojn kiuj ne povas esti montrataj ĉi tie:",
|
||||
"Notify for all other messages/rooms": "Sciigu min por ĉiu alia babilejo",
|
||||
"Notify me for anything else": "Sciigu min por ĉio alia",
|
||||
"Off": "Malŝaltita",
|
||||
"On": "Ŝaltita",
|
||||
"Operation failed": "La operacio malsukcesis",
|
||||
"Permalink": "Konstanta ligilo",
|
||||
"Please describe the bug and/or send logs.": "Bonvolu priskribi la cimon kaj/aŭ sendi protokolojn.",
|
||||
"Remove %(name)s from the directory?": "Forigi %(name)s el la dosierujo?",
|
||||
"Remove": "Forigi",
|
||||
"remove %(name)s from the directory.": "forigi %(name)s el la dosierujo.",
|
||||
"Remove from Directory": "Forigi el Dosierujo",
|
||||
"Report a bug": "Raporti cimon",
|
||||
"Riot Desktop on %(platformName)s": "Riot Labortablo sur %(platformName)s",
|
||||
"Riot does not know how to join a room on this network": "Riot ne scias kiel aliĝi al ejo en tiu ĉi reto",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot ne estas subtenita je mobile web. Instali la aplikaĵon?",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot uzas multajn specialajn trajtojn, kelkaj ne estas disponeblaj aŭ estas eksperimentaj en via nuna retumilo.",
|
||||
"Send logs": "Sendi protokolojn",
|
||||
"Source URL": "Fonta URL",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Pardonu, via retumilo <b>ne kapablas</b> funkciigi Riot.",
|
||||
"The Home Server may be too old to support third party networks": "La servilo Home povas esti tro malnova por subteni retoj de ekstera liveranto",
|
||||
"There are advanced notifications which are not shown here": "Estas specialaj sciigoj kiuj ne estas montritaj ĉi tie",
|
||||
"The server may be unavailable or overloaded": "La servilo povas esti maldisponebla aŭ tro ŝarĝita",
|
||||
"Unable to fetch notification target list": "Ne eblis obteni la liston de celoj por sciigoj",
|
||||
"Unable to join network": "Ne eblis kuniĝi kun la reto",
|
||||
"Unable to look up room ID from server": "Ne eblis trovi la identigon el la servilo",
|
||||
"Unavailable": "Maldisponebla",
|
||||
"Unhide Preview": "Malkaŝi antaŭrigardon",
|
||||
"Unknown device": "Nekonata aparato",
|
||||
"unknown error code": "kodo de nekonata eraro",
|
||||
"Unnamed room": "Nekonata ejo",
|
||||
"Update": "Ĝisdatigi",
|
||||
"Uploaded on %(date)s by %(user)s": "Alŝutita je %(date)s per %(user)s",
|
||||
"Uploading report": "Alŝutante raporton",
|
||||
"View Decrypted Source": "Vidi malĉifritan fonton",
|
||||
"View Source": "Vidi fonton",
|
||||
"What's New": "Kio novas",
|
||||
"What's new?": "Kio novas?",
|
||||
"Waiting for response from server": "Atendante respondon el la servilo",
|
||||
"When I'm invited to a room": "Kiam mi estas invitita en ejon",
|
||||
"World readable": "Legebla tutmonde",
|
||||
"You cannot delete this image. (%(code)s)": "Vi ne povas forviŝi tiun ĉi bildon. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "Vi ne povas forviŝi tiun ĉi mesaĝon. (%(code)s)",
|
||||
"You are not receiving desktop notifications": "Vi ne estas ricevante sciigojn labortablan",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Vi eble agordis ilin en kliento kiu ne estis Riot. Vi ne povas agordi ilin en Riot sed ili ankoraŭ validas",
|
||||
"Sunday": "Dimanĉo",
|
||||
"Monday": "Lundo",
|
||||
"Tuesday": "Mardo",
|
||||
"Wednesday": "Merkredo",
|
||||
"Thursday": "Ĵaŭdo",
|
||||
"Friday": "Vendredo",
|
||||
"Saturday": "Sabato",
|
||||
"Today": "Hodiaŭ",
|
||||
"Yesterday": "Hieraŭ",
|
||||
"OK": "Bone",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Vi devas uzi HTTPS por starigi ekranan vokon.",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Kun via nuna retumilo, la aspekto kaj funkciado de la aplikaĵo povas esti tute malĝusta, kaj kelkaj aŭ ĉiu funkcioj eble ne funkcios. Se vi volas provi ĉiuokaze vi rajtas daŭrigi, sed ne estos subteno se vi trafas problemojn!",
|
||||
"Welcome to Riot.im": "Bonvenon al Riot.im",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Malcentra, ĉifrita babilejo & kunlaboro povigita de [matrix]",
|
||||
"Search the room directory": "Serĉi la ejan dosierujon",
|
||||
"Chat with Riot Bot": "Babili kun la roboto Riot Bot",
|
||||
"Get started with some tips from Riot Bot!": "Eki per sugesto de la roboto Riot Bot!",
|
||||
"General discussion about Matrix and Riot": "Ĝenerala diskutado pri Matrix kaj Riot",
|
||||
"Discussion of all things Matrix!": "Diskutado pri ĉio rilate al Matrix!",
|
||||
"Riot/Web & Desktop chat": "Diskudato labortabla pri Riot/Web",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Diskutado pri Riot/iOS & matrix-ios-sdk",
|
||||
"Riot/Android & matrix-android-sdk chat": "Diskutado pri Riot/Android & matrix-android-sdk",
|
||||
"Matrix technical discussions": "Teknikaj diskutoj pri Matrix",
|
||||
"Running Matrix services": "Funkciigado de servoj Matrix",
|
||||
"Community-run support for Synapse": "Komunuma subtenado de Synapse",
|
||||
"Admin support for Dendrite": "Administra subtenado por Dendrite",
|
||||
"Announcements about Synapse releases": "Anoncoj pri eldonoj Synapse",
|
||||
"Support for those using and running matrix-appservice-irc": "Subteno por tiuj, kiuj uzas kaj funkciigas matrix-appservice-irc",
|
||||
"Building services on Matrix": "Konstruante servojn per Matrix",
|
||||
"Support for those using the Matrix spec": "Subteno por tiuj, kiuj uzas la specifon Matrix",
|
||||
"Design and implementation of E2E in Matrix": "Dizajno kaj realigo de E2E en Matrix",
|
||||
"Implementing VR services with Matrix": "Realigi VR-servojn per Matrix",
|
||||
"Implementing VoIP services with Matrix": "Realigi VoIP-servojn per Matrix",
|
||||
"Discussion of the Identity Service API": "Diskutado pri la API de Identiga Servo",
|
||||
"Support for those using, running and writing other bridges": "Subteno por tiuj, kiuj uzas, funkciigas kaj skribas aliajn pontojn",
|
||||
"Contributing code to Matrix and Riot": "Kontribui kodon al Matrix kaj Riot",
|
||||
"Dev chat for the Riot/Web dev team": "Programista babilado por la programteamo de Riot/Web",
|
||||
"Dev chat for the Dendrite dev team": "Programista babilado por la programteamo de Dendrite",
|
||||
"Co-ordination for Riot/Web translators": "Kunordigado por tradukistoj de Riot/Web",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Multaj ejoj jam ekzistas en Matrix, ligitaj al ekzistantaj retoj (Slock, IRC, Gitter, ktp) aŭ sendependaj. Kontrolu la dosierujon!",
|
||||
"Failed to change password. Is your password correct?": "Malsukcesis ŝanĝi la pasvorton. Ĉu via pasvorto pravas?",
|
||||
"You have successfully set a password!": "Vi sukcese agordis pasvorton!",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "Vi nun rajtas reiri al via konto post elsaluto, kaj ensaluti per aliaj aparatoj.",
|
||||
"Continue": "Daŭrigi",
|
||||
"Please set a password!": "Bonvolu agordi pasvorton!",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "Tio ĉi permesos vin reiri al via konto post elsaluto, kaj ensaluti per alia aparato.",
|
||||
"You have successfully set a password and an email address!": "Vi sukcese agordis pasvorton kaj retpoŝtadreson!",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Memoru, vi ĉiam povas agordi retpoŝtadreson en via uzanta agordo se vi decidas ŝanĝi ĝin poste.",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s per %(browserName)s je %(osName)s",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">Safari</a> kaj <a href=\"http://opera.com\">Opera</a> ankaŭ funkcias.",
|
||||
"Favourite": "Plej ŝatata",
|
||||
"Fetching third party location failed": "Venigado de ekstere liverita loko malsukcesis",
|
||||
"Filter room names": "Filtri nomojn de ejoj",
|
||||
"Warning": "Averto",
|
||||
"Checking for an update...": "Kontrolanta por ĝisdatigo...",
|
||||
"No update available.": "Ĝisdatigo ne estas disponata."
|
||||
}
|
197
src/i18n/strings/es.json
Normal file
197
src/i18n/strings/es.json
Normal file
|
@ -0,0 +1,197 @@
|
|||
{
|
||||
"Add an email address above to configure email notifications": "Añade una dirección de correo arriba para configurar las notificaciones por correo",
|
||||
"Advanced notification settings": "Configuración avanzada de notificaciones",
|
||||
"All messages": "Todos los mensajes",
|
||||
"An error occurred whilst saving your email notification preferences.": "Se ha producido un error al guardar las preferencias de notificación por email.",
|
||||
"Call invitation": "Invitación a la llamada",
|
||||
"Cancel Sending": "Cancelar envío",
|
||||
"Can't update user notification settings": "No se puede actualizar la configuración de notificaciones del usuario",
|
||||
"Close": "Cerrar",
|
||||
"Couldn't find a matching Matrix room": "No se encontró una sala Matrix que coincidiera",
|
||||
"Custom Server Options": "Opciones de Servidor Personalizado",
|
||||
"customServer_text": "Puedes utilizar las opciones de servidor personalizadas para iniciar sesión en otros servidores Matrix especificando una URL de Home server distinta.<br/>Esto te permite usar Riot con una cuenta Matrix existente en un Home server distinto.<br/><br/>También puedes configurar un servidor de identidad personalizado, pero no podrás ni invitar usuarios ni ser invitado a través de tu dirección de correo electrónico.",
|
||||
"delete the alias.": "borrar el alias.",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "¿Borrar el alias de la sala %(alias)s y eliminar %(name)s del directorio?",
|
||||
"Direct Chat": "Conversación directa",
|
||||
"Directory": "Directorio",
|
||||
"Download this file": "Descargar este archivo",
|
||||
"Enable audible notifications in web client": "Habilitar notificaciones audibles en el cliente web",
|
||||
"Enable desktop notifications": "Habilitar notificaciones de escritorio",
|
||||
"Enable email notifications": "Habilitar notificaciones por email",
|
||||
"Enable notifications for this account": "Habilitar notificaciones para esta cuenta",
|
||||
"Enable them now": "Habilitarlos ahora",
|
||||
"Enter keywords separated by a comma:": "Introduzca palabras clave separadas por una coma:",
|
||||
"Error": "Error",
|
||||
"Error saving email notification preferences": "Error al guardar las preferencias de notificación por email",
|
||||
"#example": "#ejemplo",
|
||||
"Failed to add tag %(tagName)s to room": "Error al añadir la etiqueta %(tagName)s a la sala",
|
||||
"Failed to change settings": "Error al cambiar la configuración",
|
||||
"Failed to forget room %(errCode)s": "Falló al olvidar la sala %(errCode)s",
|
||||
"Failed to update keywords": "Error al actualizar las palabras clave",
|
||||
"Failed to get protocol list from Home Server": "Error al obtener la lista de protocolos desde el Home Server",
|
||||
"Failed to get public room list": "No se pudo obtener la lista de salas públicas",
|
||||
"Failed to remove tag %(tagName)s from room": "Error al eliminar la etiqueta %(tagName)s de la sala",
|
||||
"Failed to set direct chat tag": "Error al establecer la etiqueta de chat directo",
|
||||
"Failed to set Direct Message status of room": "No se pudo establecer el estado de Mensaje Directo de la sala",
|
||||
"Favourite": "Favorito",
|
||||
"Fetching third party location failed": "Falló la obtención de la ubicación de un tercero",
|
||||
"Files": "Archivos",
|
||||
"Filter room names": "Filtrar los nombres de las salas",
|
||||
"Forget": "Olvidar",
|
||||
"Guests can join": "Los invitados se pueden unir",
|
||||
"Invite to this room": "Invitar a esta sala",
|
||||
"Keywords": "Palabras clave",
|
||||
"Leave": "Salir",
|
||||
"Low Priority": "Baja Prioridad",
|
||||
"Members": "Miembros",
|
||||
"Mentions only": "Sólo menciones",
|
||||
"Messages containing my display name": "Mensajes que contienen mi nombre",
|
||||
"Messages containing my user name": "Mensajes que contienen mi nombre de usuario",
|
||||
"Messages in group chats": "Mensajes en chats de grupo",
|
||||
"Messages in one-to-one chats": "Mensajes en chats uno a uno",
|
||||
"Messages sent by bot": "Mensajes enviados por bot",
|
||||
"more": "más",
|
||||
"Mute": "Silenciar",
|
||||
"No rooms to show": "Sin salas para mostrar",
|
||||
"Noisy": "Ruidoso",
|
||||
"Notification targets": "Objetivos de notificación",
|
||||
"Notifications": "Notificaciones",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "Las notificaciones de las siguientes palabras clave siguen reglas que no se pueden mostrar aquí:",
|
||||
"Notify me for anything else": "Notificarme para cualquier otra cosa",
|
||||
"Off": "Apagado",
|
||||
"On": "Encendido",
|
||||
"Operation failed": "Falló la operación",
|
||||
"Permalink": "Enlace permanente",
|
||||
"Quote": "Citar",
|
||||
"Reject": "Rechazar",
|
||||
"Remove %(name)s from the directory?": "¿Retirar %(name)s del directorio?",
|
||||
"Remove": "Eliminar",
|
||||
"remove %(name)s from the directory.": "retirar %(name)s del directorio.",
|
||||
"Remove from Directory": "Retirar del Directorio",
|
||||
"Resend": "Reenviar",
|
||||
"Riot does not know how to join a room on this network": "Riot no sabe cómo unirse a una sala en esta red",
|
||||
"Room not found": "Sala no encontrada",
|
||||
"Search for a room": "Buscar sala",
|
||||
"Source URL": "URL de origen",
|
||||
"The Home Server may be too old to support third party networks": "El Home Server puede ser demasiado antiguo para soportar redes de terceros",
|
||||
"There are advanced notifications which are not shown here": "Hay notificaciones avanzadas que no se muestran aquí",
|
||||
"The server may be unavailable or overloaded": "El servidor puede estar no disponible o sobrecargado",
|
||||
"Unable to fetch notification target list": "No se puede obtener la lista de objetivos de notificación",
|
||||
"Unable to join network": "No se puede unir a la red",
|
||||
"Unable to look up room ID from server": "No se puede buscar el ID de la sala desde el servidor",
|
||||
"Unhide Preview": "Mostrar Vista Previa",
|
||||
"unknown error code": "Código de error desconocido",
|
||||
"Unnamed room": "Sala sin nombre",
|
||||
"Uploaded on %(date)s by %(user)s": "Subido el %(date)s por %(user)s",
|
||||
"View Decrypted Source": "Ver Fuente Descifrada",
|
||||
"View Source": "Ver Fuente",
|
||||
"When I'm invited to a room": "Cuando estoy invitado a una sala",
|
||||
"World readable": "Legible por todo el mundo",
|
||||
"You cannot delete this image. (%(code)s)": "No puedes eliminar esta imagen. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "No puedes eliminar este mensaje. (%(code)s)",
|
||||
"You are not receiving desktop notifications": "No estás recibiendo notificaciones de escritorio",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Es posible que los hayas configurado en un cliente que no sea Riot. No puedes ajustarlos en Riot, pero todavía se aplican",
|
||||
"Sunday": "Domingo",
|
||||
"Monday": "Lunes",
|
||||
"Tuesday": "Martes",
|
||||
"Wednesday": "Miércoles",
|
||||
"Thursday": "Jueves",
|
||||
"Friday": "Viernes",
|
||||
"Saturday": "Sábado",
|
||||
"Today": "Hoy",
|
||||
"Yesterday": "Ayer",
|
||||
"Continue": "Continuar",
|
||||
"Search": "Búsqueda",
|
||||
"OK": "Correcto",
|
||||
"Failed to change password. Is your password correct?": "No se pudo cambiar la contraseña. ¿Está usando la correcta?",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">Safari</a> y <a href=\"http://opera.com\">Opera</a> también funcionan.",
|
||||
"A new version of Riot is available.": "Una nueva versión de Riot está disponible.",
|
||||
"Cancel": "Cancelar",
|
||||
"Describe your problem here.": "Describa su problema aquí.",
|
||||
"Forward Message": "Reenviar mensaje",
|
||||
"Hide panel": "Ocultar panel",
|
||||
"(HTTP status %(httpStatus)s)": "(estado HTTP %(httpStatus)s)",
|
||||
"I understand the risks and wish to continue": "Entiendo los riesgos y deseo continuar",
|
||||
"Changelog": "Registro de cambios",
|
||||
"Collapse panel": "Colapsar panel",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Recuerde que, si es necesario, puede establecer una dirección de email en las preferencias de usuario.",
|
||||
"All Rooms": "Todas las salas",
|
||||
"Expand panel": "Expandir panel",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Para diagnosticar los problemas, los registros de este cliente serán enviados adjuntos a este informe de fallo. Si quisiera enviar el texto anterior solamente, entonces desmarque:",
|
||||
"Login": "Iniciar sesión",
|
||||
"Report a bug": "Informe de un fallo",
|
||||
"Search…": "Buscar…",
|
||||
"Send": "Enviar",
|
||||
"Send logs": "Enviar registros",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "¡Lo sentimos! Su navegador <b>no puede</b> ejecutar Riot.",
|
||||
"This Room": "Esta sala",
|
||||
"Unavailable": "No disponible",
|
||||
"Unknown device": "Dispositivo desconocido",
|
||||
"Update": "Actualizar",
|
||||
"Uploading report": "Enviando informe",
|
||||
"What's New": "Novedades",
|
||||
"What's new?": "¿Qué hay de nuevo?",
|
||||
"Waiting for response from server": "Esperando una respuesta del servidor",
|
||||
"You have successfully set a password and an email address!": "¡Ha establecido exitosamente la contraseña y la dirección de email!",
|
||||
"You have successfully set a password!": "¡Ha establecido exitosamente una contraseña!",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s en %(osName)s",
|
||||
"All messages (loud)": "Todos los mensajes (ruidoso)",
|
||||
"All notifications are currently disabled for all targets.": "Las notificaciones estan desactivadas para todos los objetivos.",
|
||||
"Collecting app version information": "Recolectando información de la versión de la aplicación",
|
||||
"Collecting logs": "Recolectando registros",
|
||||
"Dismiss": "Omitir",
|
||||
"Failed to send report: ": "Error al enviar informe: ",
|
||||
"Loading bug report module": "Cargando módulo de reporte de errores",
|
||||
"Messages containing <span>keywords</span>": "Mensajes que contienen <span>palabras clave</span>",
|
||||
"Notify for all other messages/rooms": "Notificar para todos los demás mensajes/salas",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Por favor describa el error. ¿Qué acción ejecutó? ¿Cuál era el resultado que esperaba? ¿Que pasó realmente?",
|
||||
"Please describe the bug and/or send logs.": "Por favor describa el error y/o envíe los registros.",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Por favor instale <a href=\"https://www.google.com/chrome\">Google Chrome</a> o <a href=\"https://getfirefox.com\">Mozilla Firefox</a> para una mejor experiencia.",
|
||||
"powered by Matrix": "con el poder de Matrix",
|
||||
"Riot Desktop on %(platformName)s": "Riot Desktop en %(platformName)s",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot no está soportado en navegadores Web móviles. ¿Quieres instalar la aplicación?",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot usa muchas características avanzadas del navegador, algunas de las cuales no están disponibles en su navegador actual.",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Debes usar HTTPS para hacer una llamada con pantalla compartida.",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "En su navegador actual, la apariencia y comportamiento de la aplicación puede ser completamente incorrecta, y algunas de las características podrían no funcionar. Si aún desea probarlo puede continuar, pero ¡no podremos ofrecer soporte por cualquier problema que pudiese tener!",
|
||||
"Welcome to Riot.im": "Bienvenido a Riot.im",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Conversaciones & colaboración cifradas y descentralizadas con el poder de [matrix]",
|
||||
"Search the room directory": "Buscar en el directorio de salas",
|
||||
"Chat with Riot Bot": "Conversar con el Bot de Riot",
|
||||
"Get started with some tips from Riot Bot!": "¡Comenzar con algunos consejos de Riot Bot!",
|
||||
"General discussion about Matrix and Riot": "Discusión general sobre Matrix y Riot",
|
||||
"Discussion of all things Matrix!": "¡Discusión sobre todas las cosas de Matrix!",
|
||||
"Riot/Web & Desktop chat": "Conversaciones de Riot/Web & Desktop",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Conversaciones sobre Riot/iOS & matrix-ios-sdk",
|
||||
"Riot/Android & matrix-android-sdk chat": "Conversaciones sobre Riot/Android & matrix-android-sdk",
|
||||
"Matrix technical discussions": "Discusiones técnicas sobre Matrix",
|
||||
"Running Matrix services": "Ejecutando servicios de Matrix",
|
||||
"Community-run support for Synapse": "Soporte comunitario de Synapse",
|
||||
"Admin support for Dendrite": "Soporte administrativo para Dendrite",
|
||||
"Announcements about Synapse releases": "Anuncios de lanzamientos de Synapse",
|
||||
"Support for those using and running matrix-appservice-irc": "Soporte para aquellos que usan o administran matrix-appservice-irc",
|
||||
"Building services on Matrix": "Construyendo servicios con Matrix",
|
||||
"Support for those using the Matrix spec": "Soporte para usuarios de la especificación de Matrix",
|
||||
"Design and implementation of E2E in Matrix": "Diseño e implementación de E2E en Matrix",
|
||||
"Implementing VR services with Matrix": "Implementación de servicios VR con Matrix",
|
||||
"Implementing VoIP services with Matrix": "Implementación de servicios VoIP con Matrix",
|
||||
"Discussion of the Identity Service API": "Discusión sobre el API de Identity Service",
|
||||
"Support for those using, running and writing other bridges": "Soporte para usuarios, administradores y desarrolladores de otros puentes",
|
||||
"Contributing code to Matrix and Riot": "Contribuciones de código para Matrix y Riot",
|
||||
"Dev chat for the Riot/Web dev team": "Conversaciones del equipo de desarrollo de Riot/Web",
|
||||
"Dev chat for the Dendrite dev team": "Conversaciones del equipo de desarrollo de Dendrite",
|
||||
"Co-ordination for Riot/Web translators": "Coordinación para traductores de Riot/Web",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Muchas salas ya están disponibles en Matrix, enlazadas a redes existentes (Slack, IRC, Gitter, etc) o independientes. ¡Revisa el directorio!",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "Ahora puedes regresar a tu cuenta después de cerrar tu sesión, e iniciar sesión en otros dispositivos.",
|
||||
"Please set a password!": "¡Por favor establece una contraseña!",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "Esto le permitirá regresar a su cuenta después de cerrar sesión, así como iniciar sesión en otros dispositivos.",
|
||||
"Warning": "Advertencia",
|
||||
"Checking for an update...": "Comprobando actualizaciones...",
|
||||
"No update available.": "No hay actualizaciones disponibles.",
|
||||
"Downloading update...": "Descargando actualizaciones...",
|
||||
"To return to your account in future you need to <u>set a password</u>": "Para regresar a su cuenta en el futuro Ud. debe <u>establecer una contraseña</u>",
|
||||
"Set Password": "Establezca la contraseña",
|
||||
"Error encountered (%(errorDetail)s).": "Error encontrado (%(errorDetail)s).",
|
||||
"Couldn't load home page": "No se puede cargar la página principal",
|
||||
"Bug report sent": "Informe de fallo enviado",
|
||||
"Thank you!": "¡Gracias!"
|
||||
}
|
197
src/i18n/strings/eu.json
Normal file
197
src/i18n/strings/eu.json
Normal file
|
@ -0,0 +1,197 @@
|
|||
{
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s %(browserName)s bidez %(osName)s ostalarian",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">Safari</a> eta <a href=\"http://opera.com\">Opera</a> badabiltza ere.",
|
||||
"A new version of Riot is available.": "Riot bertsio berri bat dago eskuragarri.",
|
||||
"Add an email address above to configure email notifications": "Gehitu e-mail helbide bat goian e-mail bidezko jakinarazpenak konfiguratzeko",
|
||||
"Advanced notification settings": "Jakinarazpen aurreratuen ezarpenak",
|
||||
"All messages": "Mezu guztiak",
|
||||
"All messages (loud)": "Mezu guztiak (ozen)",
|
||||
"All Rooms": "Gela guztiak",
|
||||
"All notifications are currently disabled for all targets.": "Une honetan jakinarazpen guztiak helburu guztietarako desgaituta daude.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Errore bat gertatu da zure e-mail bidezko jakinarazpenen hobespenak gordetzean.",
|
||||
"Call invitation": "Dei gonbidapena",
|
||||
"Cancel": "Utzi",
|
||||
"Cancel Sending": "Utzi bidaltzeari",
|
||||
"Can't update user notification settings": "Ezin dira erabiltzailearen jakinarazpenen ezarpenak eguneratu",
|
||||
"Changelog": "Aldaketa-egunkaria",
|
||||
"Close": "Itxi",
|
||||
"Collapse panel": "Tolestu panela",
|
||||
"Collecting app version information": "Aplikazioaren bertsio-informazioa biltzen",
|
||||
"Collecting logs": "Egunkariak biltzen",
|
||||
"Couldn't find a matching Matrix room": "Ezin izan da bat datorren Matrix gela bat aurkitu",
|
||||
"Custom Server Options": "Zerbitzari pertsonalizatuaren aukerak",
|
||||
"customServer_text": "Zerbitzari pertsonalizatuaren aukerak erabili ditzakezu beste hasiera zerbitzari baten URLa jarrita beste Matrix zerbitzarietan saioa hasteko.<br/>Honek oraingo Matrix kontuarekin Riot beste hasiera zerbitzari batean erabiltzea ahalbidetzen dizu.<br/><br/>Identitate zerbitzari pertsonalizatu bat jar dezakezu ere baina ezin izango dituzu erabiltzaileak bere e-mail helbidea erabilita gonbidatu, edo besteek zu gonbidatu zure e-mail helbidea erabilita.",
|
||||
"delete the alias.": "ezabatu ezizena.",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Ezabatu gelaren %(alias)s ezizena eta kendu %(name)s direktoriotik?",
|
||||
"Describe your problem here.": "Azaldu zure arazoa hemen.",
|
||||
"Direct Chat": "Txat zuzena",
|
||||
"Directory": "Direktorioa",
|
||||
"Dismiss": "Baztertu",
|
||||
"Download this file": "Deskargatu fitxategi hau",
|
||||
"Enable audible notifications in web client": "Gaitu jakinarazpen entzungarriak web bezeroan",
|
||||
"Enable desktop notifications": "Gaitu mahaigaineko jakinarazpenak",
|
||||
"Enable email notifications": "Gaitu e-mail bidezko jakinarazpenak",
|
||||
"Enable notifications for this account": "Gaitu jakinarazpenak kontu honetarako",
|
||||
"Enable them now": "Gaitu orain",
|
||||
"Enter keywords separated by a comma:": "Idatzi hitz gakoak koma bidez banatuta:",
|
||||
"Error": "Errorea",
|
||||
"Error saving email notification preferences": "Errorea e-mail jakinarazpenen hobespenak gordetzean",
|
||||
"#example": "#adibidea",
|
||||
"Expand panel": "Hedatu panela",
|
||||
"Failed to add tag %(tagName)s to room": "Huts egin du %(tagName)s etiketa gelara gehitzean",
|
||||
"Failed to change settings": "Huts egin du ezarpenak aldatzean",
|
||||
"Failed to forget room %(errCode)s": "Huts egin du %(errCode)s gela ahaztean",
|
||||
"Failed to update keywords": "Huts egin du hitz gakoak eguneratzean",
|
||||
"Failed to get protocol list from Home Server": "Huts egin du protokoloen zerrenda hasiera zerbitzaritik jasotzean",
|
||||
"Failed to get public room list": "Huts egin du gela publikoen zerrenda jasotzean",
|
||||
"Failed to remove tag %(tagName)s from room": "Huts egin du %(tagName)s etiketa gelatik kentzean",
|
||||
"Failed to send report: ": "Huts egin du txostena bidaltzean: ",
|
||||
"Failed to set direct chat tag": "Huts egin du txat zuzeneko etiketa jartzean",
|
||||
"Failed to set Direct Message status of room": "Huts egin du Mezu Zuzena egoera gelan ezartzean",
|
||||
"Favourite": "Gogokoa",
|
||||
"Fetching third party location failed": "Huts egin du hirugarrengoen kokalekua eskuratzean",
|
||||
"Files": "Fitxategiak",
|
||||
"Filter room names": "Iragazi gelen izenak",
|
||||
"Forget": "Ahaztu",
|
||||
"Forward Message": "Birbidali mezua",
|
||||
"Guests can join": "Bisitariak elkartu daitezke",
|
||||
"Hide panel": "Ezkutatu panela",
|
||||
"(HTTP status %(httpStatus)s)": "(HTTP egoera %(httpStatus)s)",
|
||||
"I understand the risks and wish to continue": "Arriskua ulertzen dut eta jarraitu nahi dut",
|
||||
"Invite to this room": "Gonbidatu gela honetara",
|
||||
"Keywords": "Hitz gakoak",
|
||||
"Leave": "Atera",
|
||||
"Login": "Hasi saioa",
|
||||
"Loading bug report module": "Arazte-txosten modulua kargatzen",
|
||||
"Low Priority": "Lehentasun baxua",
|
||||
"Members": "Kideak",
|
||||
"Mentions only": "Aipamenak besterik ez",
|
||||
"Messages containing my display name": "Nire pantaila izena duten mezuak",
|
||||
"Messages containing <span>keywords</span>": "<span>Hitz gakoak</span> dituzten mezuak",
|
||||
"Messages containing my user name": "Nire erabiltzaile-izena duten mezuak",
|
||||
"Messages in group chats": "Talde txatetako mezuak",
|
||||
"Messages in one-to-one chats": "Biren arteko txatetako mezuak",
|
||||
"Messages sent by bot": "botak bidalitako mezuak",
|
||||
"more": "gehiago",
|
||||
"Mute": "Mututu",
|
||||
"No rooms to show": "Ez dago gelarik erakusteko",
|
||||
"Noisy": "Zaratatsua",
|
||||
"Notification targets": "Jakinarazpenen helburuak",
|
||||
"Notifications": "Jakinarazpenak",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "Hitz gako hauen jakinarazpenak hemen bistaratu ezin daitezkeen arauak jarraitzen dituzte:",
|
||||
"Notify for all other messages/rooms": "Jakinarazi beste mezu/gela guztiak",
|
||||
"Notify me for anything else": "Jakinarazi beste edozer",
|
||||
"Off": "Ez",
|
||||
"On": "Bai",
|
||||
"Operation failed": "Eragiketak huts egin du",
|
||||
"Permalink": "Esteka iraunkorra",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Deskribatu akatsa. Zer egin duzu? Zer gertatuko zela uste zenuen? Zer gertatu da?",
|
||||
"Please describe the bug and/or send logs.": "Deskribatu akatsa eta/edo bidali egunkariak.",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Instalatu <a href=\"https://www.google.com/chrome\">Chrome</a> edo <a href=\"https://getfirefox.com\">Firefox</a> esperientzia on baterako.",
|
||||
"powered by Matrix": "Matrix mamian",
|
||||
"Quote": "Aipua",
|
||||
"Reject": "Baztertu",
|
||||
"Remove %(name)s from the directory?": "Kendu %(name)s direktoriotik?",
|
||||
"Remove": "Kendu",
|
||||
"remove %(name)s from the directory.": "kendu %(name)s direktoriotik.",
|
||||
"Remove from Directory": "Kendu direktoriotik",
|
||||
"Report a bug": "Eman akats baten berri",
|
||||
"Resend": "Birbidali",
|
||||
"Riot Desktop on %(platformName)s": "Riot Desktop %(platformName)s plataforman",
|
||||
"Riot does not know how to join a room on this network": "Riotek ez daki nola elkartu gela batetara sare honetan",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riotek ez du euskarririk mugikorrentzako webean. Instalatu aplikazioa?",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riotek nabigatzaileen ezaugarri aurreratu ugari erabiltzen ditu, hauetako batzuk ez daude erabilgarri edo esperimentalak dira zure oraingo nabigatzailean.",
|
||||
"Room not found": "Ez da gela aurkitu",
|
||||
"Search": "Bilatu",
|
||||
"Search…": "Bilatu…",
|
||||
"Search for a room": "Bilatu gela bat",
|
||||
"Send": "Bidali",
|
||||
"Send logs": "Bidali egunkariak",
|
||||
"Source URL": "Iturriaren URLa",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Zure nabigatzaileak <b>ez</b> du Riot erabiltzeko gaitasunik.",
|
||||
"The Home Server may be too old to support third party networks": "Hasiera zerbitzaria zaharregia izan daiteke hirugarrengoen sarean onartzeko",
|
||||
"There are advanced notifications which are not shown here": "Hemen erakusten ez diren jakinarazpen aurreratuak daude",
|
||||
"The server may be unavailable or overloaded": "Zerbitzaria eskuraezin edo gainezka egon daiteke",
|
||||
"This Room": "Gela hau",
|
||||
"Unable to fetch notification target list": "Ezin izan da jakinarazpen helburuen zerrenda eskuratu",
|
||||
"Unable to join network": "Ezin izan da sarera elkartu",
|
||||
"Unable to look up room ID from server": "Ezin izan da gelaren IDa zerbitzarian bilatu",
|
||||
"Unavailable": "Eskuraezina",
|
||||
"Unhide Preview": "Ez ezkutatu aurrebista",
|
||||
"Unknown device": "Gailu ezezaguna",
|
||||
"unknown error code": "errore kode ezezaguna",
|
||||
"Unnamed room": "Izenik gabeko gela",
|
||||
"Update": "Eguneratu",
|
||||
"Uploaded on %(date)s by %(user)s": "%(user)s erabiltzaileak %(date)s (e)an igota",
|
||||
"Uploading report": "Igoera txostena",
|
||||
"View Decrypted Source": "Ikusi deszifratutako iturria",
|
||||
"View Source": "Ikusi iturria",
|
||||
"What's New": "Zer dago berri",
|
||||
"What's new?": "Zer dago berri?",
|
||||
"Waiting for response from server": "Zerbitzariaren erantzunaren zain",
|
||||
"When I'm invited to a room": "Gela batetara gonbidatzen nautenean",
|
||||
"World readable": "Denek irakurtzeko moduan",
|
||||
"You cannot delete this image. (%(code)s)": "Ezin duzu irudi hau ezabatu. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "Ezin duzu mezu hau ezabatu. (%(code)s)",
|
||||
"You are not receiving desktop notifications": "Ez dituzu mahaigaineko jakinarazpenak jasotzen",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Agian Riot ez beste bezero batean konfiguratu dituzu. Ezin dituzu Riot bidez doitu, baina aplikagarriak dira",
|
||||
"Sunday": "Igandea",
|
||||
"Monday": "Astelehena",
|
||||
"Tuesday": "Asteartea",
|
||||
"Wednesday": "Asteazkena",
|
||||
"Thursday": "Osteguna",
|
||||
"Friday": "Ostirala",
|
||||
"Saturday": "Larunbata",
|
||||
"Today": "Gaur",
|
||||
"Yesterday": "Atzo",
|
||||
"OK": "Ados",
|
||||
"Warning": "Abisua",
|
||||
"Checking for an update...": "Eguneraketarik dagoen egiaztatzen...",
|
||||
"Error encountered (%(errorDetail)s).": "Errorea aurkitu da (%(errorDetail)s).",
|
||||
"No update available.": "Ez dago eguneraketarik eskuragarri.",
|
||||
"Downloading update...": "Eguneraketa deskargatzen...",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "HTTPS erabili behar duzu sekretuak partekatzeko dei bat ezartzeko.",
|
||||
"Welcome to Riot.im": "Ongi etorri Riot.im mezularitzara",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Deszentralizatutako eta zifratutako txat eta elkarlana [matrix] sareari esker",
|
||||
"Search the room directory": "Bilatu gelen direktorioa",
|
||||
"Chat with Riot Bot": "Txateatu Riot botarekin",
|
||||
"Get started with some tips from Riot Bot!": "Hasi Riot botaren aholku batzuekin!",
|
||||
"General discussion about Matrix and Riot": "Matrix eta Riot-i buruzko eztabaida orokorra",
|
||||
"Discussion of all things Matrix!": "Matrix-ekin zerikusia duen guztiari buruzko eztabaida!",
|
||||
"Riot/Web & Desktop chat": "Riot/Web eta mahaigaineko txata",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS eta matrix-ios-sdk txata",
|
||||
"Riot/Android & matrix-android-sdk chat": "Riot/Android eta matrix-android-sdk txata",
|
||||
"Matrix technical discussions": "Matrix buruzko eztabaida teknikoak",
|
||||
"Running Matrix services": "Matrix zerbitzuak exekutatzea",
|
||||
"Community-run support for Synapse": "Synapse-rako laguntza komunitatea",
|
||||
"Admin support for Dendrite": "Dendrite kudeatzaileentzako laguntza",
|
||||
"Announcements about Synapse releases": "Synapse bertsio berrien iragarkiak",
|
||||
"Support for those using and running matrix-appservice-irc": "matrix-appservice-irc exekutatu edo erabiltzen dutenentzako laguntza",
|
||||
"Building services on Matrix": "Matrix-en gaineko zerbitzuak eraikitzea",
|
||||
"Support for those using the Matrix spec": "Matrix espezifikazioa darabilenentzako laguntza",
|
||||
"Design and implementation of E2E in Matrix": "Matrix-en E2E diseinu eta inplementazioa",
|
||||
"Implementing VR services with Matrix": "VR zerbitzuak inplementatzea Matrix erabilita",
|
||||
"Implementing VoIP services with Matrix": "VoIP zerbitzuak inplementatzea Matrix erabilita",
|
||||
"Discussion of the Identity Service API": "Identitate zerbitzuaren APIari buruzko eztabaida",
|
||||
"Support for those using, running and writing other bridges": "Bestelako zubiak erabili, exekutatu eta idazten dituztenentzako laguntza",
|
||||
"Contributing code to Matrix and Riot": "Kodearekin lagundu Matrix eta Riot",
|
||||
"Dev chat for the Riot/Web dev team": "Riot/web garapen taldearen txata",
|
||||
"Dev chat for the Dendrite dev team": "Dendrite garapen taldearen txata",
|
||||
"Co-ordination for Riot/Web translators": "Riot/Web itzultzaileen arteko koordinazioa",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Badauden sareetara lotutako gela ugari daude Matrixen (Slack, IRC, Gitter eta abar), baita independienteak. Begiratu direktorioa!",
|
||||
"Failed to change password. Is your password correct?": "Pasahitza aldatzean huts egin du. Zuzena da pasahitza?",
|
||||
"You have successfully set a password!": "Ongi ezarri duzu pasahitza!",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "Zure kontura itzuli zaitezke beste gailuetan saioa amaitu eta berriro hastean.",
|
||||
"Continue": "Jarraitu",
|
||||
"Please set a password!": "Ezarri pasahitza mesedez!",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "Honek zure kontura itzultzea ahalbidetuko dizu, beste gailuetan saioa amaitu eta berriro hasi eta gero.",
|
||||
"You have successfully set a password and an email address!": "Ondo ezarri dituzu pasahitza eta e-mail helbidea!",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Gogoratu, e-mail helbide bat ezarri dezakezu erabiltzaile-ezarpenetan iritzia aldatzen baduzu.",
|
||||
"To return to your account in future you need to <u>set a password</u>": "Etorkizunean kontura itzuli ahal izateko <u>pasahitz bat ezarri</u> behar duzu",
|
||||
"Set Password": "Ezarri pasahitza",
|
||||
"Couldn't load home page": "Ezin izan da hasiera orria kargatu",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Arazoak diagnostikatzeko, bezero honen egunkariak bidaliko dira arazte-txosten honekin. Testua besterik ez baduzu bidali nahi, desmarkatu:",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Zure oraingo nabigatzailearekin aplikazioaren itxura eta portaera guztiz okerra izan daiteke, eta funtzio batzuk ez dira ibiliko. Hala ere aurrera jarraitu dezakezu saiatu nahi baduzu, baina zure erantzukizunaren menpe geratzen dira aurkitu ditzakezun arazoak!",
|
||||
"Bug report sent": "Arazte-txostena bidali da",
|
||||
"Thank you!": "Eskerrik asko!"
|
||||
}
|
190
src/i18n/strings/fa.json
Normal file
190
src/i18n/strings/fa.json
Normal file
|
@ -0,0 +1,190 @@
|
|||
{
|
||||
"A new version of Riot is available.": "نسخهی جدید از رایوت موجود است.",
|
||||
"All messages": "همهی پیامها",
|
||||
"All messages (loud)": "همهی پیامها(بلند)",
|
||||
"All Rooms": "همهی گپها",
|
||||
"Cancel Sending": "فرستادن را لغو کن",
|
||||
"Changelog": "تغییراتِ بهوجودآمده",
|
||||
"Close": "بستن",
|
||||
"Collecting app version information": "درحال جمعآوری اطلاعات نسخهی برنامه",
|
||||
"Couldn't find a matching Matrix room": "گپگاه مورد نظر در ماتریکس یافت نشد",
|
||||
"Direct Chat": "چت مستقیم",
|
||||
"Directory": "فهرست گپگاهها",
|
||||
"Download this file": "بارگیری کن",
|
||||
"Enable audible notifications in web client": "آگاهسازی صدادار را در کارگزار وب فعال کن",
|
||||
"Enable email notifications": "آگاهسازی با رایانامه را فعال کن",
|
||||
"Enable notifications for this account": "آگاه سازی با رایانامه را برای این اکانت فعال کن",
|
||||
"Enable them now": "همین حالا فعالشان کن",
|
||||
"Enter keywords separated by a comma:": "کلیدواژهها را وارد کنید؛ از کاما(,) برای جدا کردن آنها از یکدیگر استفاده کنید:",
|
||||
"Error": "خطا",
|
||||
"Error saving email notification preferences": "خطا در ذخیرهسازی ترجیحات آگاهسازی با ایمیل",
|
||||
"#example": "#نمونه",
|
||||
"Expand panel": "پنل را بگشا",
|
||||
"Failed to add tag %(tagName)s to room": "در افزودن تگ %(tagName)s موفقیتآمیز نبود",
|
||||
"Failed to change settings": "تغییر تنظیمات موفقیتآمیز نبود",
|
||||
"Failed to forget room %(errCode)s": "فراموش کردن گپگاه %(errCode)s موفقیتآمیز نبود",
|
||||
"Failed to update keywords": "بهروزرسانی کلیدواژهها موفقیتآمیز نبود",
|
||||
"Failed to get protocol list from Home Server": "دریافت لیست پروتکلها از کارگزار مبدا موفقیتآمیز نبود",
|
||||
"Failed to get public room list": "گرفتن لیست گپگاههای عمومی موفقیتآمیز نبود",
|
||||
"Failed to remove tag %(tagName)s from room": "خطا در حذف کلیدواژهی %(tagName)s از گپ",
|
||||
"Failed to send report: ": "فرستادن گزارش موفقیتآمیز نبود: ",
|
||||
"Favourite": "علاقهمندیها",
|
||||
"Files": "فایلها",
|
||||
"Forget": "فراموش کن",
|
||||
"Forward Message": "هدایت پیام",
|
||||
"Guests can join": "میهمانها میتوانند بپیوندند",
|
||||
"Hide panel": "پنل را پنهان کن",
|
||||
"I understand the risks and wish to continue": "از خطرات این کار آگاهم و مایلم که ادامه بدهم",
|
||||
"Invite to this room": "دعوت به این گپ",
|
||||
"Keywords": "کلیدواژهها",
|
||||
"Leave": "خروج",
|
||||
"Login": "ورود",
|
||||
"Loading bug report module": "درحال بارگذاری و اجرای ماژولِ گزارش باگ",
|
||||
"Low Priority": "کم اهمیت",
|
||||
"Members": "اعضا",
|
||||
"Mentions only": "فقط نامبردنها",
|
||||
"Please set a password!": "لطفا یک پسورد اختیار کنید!",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "این به شما اجازه خواهد داد که پس از خروج به اکانت خود بازگردید و از سایر دستگاهها وارد شوید.",
|
||||
"You have successfully set a password and an email address!": "تخصیص ایمیل و پسوردتان با موفقیت انجام شد!",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "به خاطر داشته باشید که اگر نظرتان عوض شد میتوانید از بخش تنظیمات یک ایمیل را به اکانتتان متصل کنید.",
|
||||
"To return to your account in future you need to <u>set a password</u>": "برای بازگشتِ دوباره به اکانتان در آینده نیاز به <u> ثبت یک پسورد </u> دارید",
|
||||
"Set Password": "پسوردتان را انتخاب کنید",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">سافاری</a> و <a href=\"http://opera.com\">اپرا</a> نیز کار میکنند.",
|
||||
"Add an email address above to configure email notifications": "آدرس ایمیلتان را به بالا بیفزایید تا بتوانید آگاهسازی با ایمیل را مدیریت کنید",
|
||||
"Advanced notification settings": "تنظیمات پیشرفته برای آگاهسازیها",
|
||||
"Continue": "ادامه",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "بسیاری از گپگاههای موجود در فهرستِ گپها به شبکههای موجود(اسلک، آیآرسی، گلیتر و...) متصل و یا مستقلاند؛ به آنها نگاهی بیندازید!",
|
||||
"Failed to change password. Is your password correct?": "خطا در تغییر گذرواژه. آیا از درستی گذرواژهتان اطمینان دارید؟",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "اکنون میتوانید پس از خروج به اکانتتان بازگردید و با دستگاههای دیگری وارد شوید.",
|
||||
"Co-ordination for Riot/Web translators": "هماهنگی برای مترجمان رایوت/وب",
|
||||
"Contributing code to Matrix and Riot": "کمک به برنامهنویسی در ماتریکس و رایوت",
|
||||
"(HTTP status %(httpStatus)s)": "(HTTP وضعیت %(httpStatus)s)",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "برای بهبود و رفع مشکلات، گزارشهایی از این کارخواه به عنوان مستنداتی از یک باگ ارسال خوهند شد. اگر ترجیح میدهید که فقط متن بالا ارسال شود لطفا تیک را بردارید",
|
||||
"Messages containing <span>keywords</span>": "پیامهای دارای <span> این کلیدواژهها </span>",
|
||||
"Messages containing my user name": "پیامهای شامل نامِ کاربری من",
|
||||
"Messages in group chats": "پیامهای درون چتهای گروهی",
|
||||
"Messages in one-to-one chats": "پیامهای درون چتهای یکبهیک",
|
||||
"Messages sent by bot": "پیامهای ارسال شده توسط ربات",
|
||||
"more": "بیشتر",
|
||||
"Mute": "سکوت",
|
||||
"No rooms to show": "هیچ گپی برای نشان دادن موجود نیست",
|
||||
"Noisy": "پرسروصدا",
|
||||
"Notification targets": "هدفهای آگاهسازی",
|
||||
"Notifications": "آگاهسازیها",
|
||||
"Notify me for anything else": "مرا برای هرچیز دیگری باخبر کن",
|
||||
"Off": "خاموش",
|
||||
"On": "روشن",
|
||||
"Operation failed": "عملیات شکست خورد",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "لطفا برای بهترین تجربهی کاربری از<a href=\"https://www.google.com/chrome\">کروم</a> یا <a href=\"https://getfirefox.com\">فایرفاکس</a> استفاده کنید",
|
||||
"powered by Matrix": "قدرتیافته از ماتریکس",
|
||||
"Quote": "گفتآورد",
|
||||
"Reject": "پس زدن",
|
||||
"Remove": "حذف کن",
|
||||
"Remove %(name)s from the directory?": "آیا مطمئنید میخواهید %(name)s را از فهرست گپها حذف کنید؟",
|
||||
"remove %(name)s from the directory.": "%(name)s را از فهرست گپها حذف کن",
|
||||
"Remove from Directory": "از فهرستِ گپها حذف کن",
|
||||
"Report a bug": "باگها را گزارش کنید",
|
||||
"Resend": "بازفرست",
|
||||
"Riot Desktop on %(platformName)s": "رایوت دسکتاپ بر %(platformName)s",
|
||||
"Riot does not know how to join a room on this network": "رایوت از چگونگی ورود به یک گپ در این شبکه اطلاعی ندارد",
|
||||
"Riot is not supported on mobile web. Install the app?": "رایوت در موبایلها پشتیبانی نمیشود؛ تمایلی دارید که اپ را نصب کنید؟",
|
||||
"Room not found": "گپ یافت نشد",
|
||||
"Search": "جستجو",
|
||||
"Search…": "جستجو…",
|
||||
"Search for a room": "جستجوی برای یک گپ",
|
||||
"Send": "ارسال",
|
||||
"Send logs": "ارسال گزارشها",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "متاسفانه مرورگر شما <b>نمیتواند</b> رایوت را اجرا کند.",
|
||||
"There are advanced notifications which are not shown here": "آگاهسازیهای پیشرفتهای هستند که در اینجا نشان داده نشدهاند",
|
||||
"The server may be unavailable or overloaded": "این سرور ممکن است ناموجود یا بسیار شلوغ باشد",
|
||||
"This Room": "این گپ",
|
||||
"Unable to join network": "خطا در ورود به شبکه",
|
||||
"Unavailable": "غیرقابلدسترسی",
|
||||
"Unknown device": "دستگاه ناشناخته",
|
||||
"unknown error code": "کد خطای ناشناخته",
|
||||
"Unnamed room": "گپ نامگذاری نشده",
|
||||
"Update": "بهروزرسانی",
|
||||
"Uploading report": "در حال بارگذاری گزارش",
|
||||
"Downloading update...": "در حال بارگیریِ بهروزرسانی...",
|
||||
"Cancel": "لغو",
|
||||
"Call invitation": "دعوت به تماس",
|
||||
"An error occurred whilst saving your email notification preferences.": "خطایی در حین ذخیرهی ترجیجات شما دربارهی رایانامه رخ داد.",
|
||||
"Describe your problem here.": "مشکلتان را در اینجا توضیح دهید.",
|
||||
"Enable desktop notifications": "آگاهسازی دسکتاپ را فعال کن",
|
||||
"Permalink": "پایاپیوند",
|
||||
"Please describe the bug and/or send logs.": "لطفا باگ را توصیف کنید و یا گزارشها را بفرستید",
|
||||
"Unhide Preview": "پیشنمایش را نمایان کن",
|
||||
"View Source": "دیدن منبع",
|
||||
"What's New": "تازهها",
|
||||
"World readable": "خواندن جهانی",
|
||||
"You cannot delete this image. (%(code)s)": "شما نمیتوانید این تصویر را پاک کنید. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "شما نمیتوانید این پیام را پاک کنید. (%(code)s)",
|
||||
"Sunday": "یکشنبه",
|
||||
"Monday": "دوشنبه",
|
||||
"Tuesday": "سهشنبه",
|
||||
"Wednesday": "چهارشنبه",
|
||||
"Thursday": "پنجشنبه",
|
||||
"Friday": "آدینه",
|
||||
"Saturday": "شنبه",
|
||||
"Today": "امروز",
|
||||
"Yesterday": "دیروز",
|
||||
"OK": "باشه",
|
||||
"Warning": "هشدار",
|
||||
"No update available.": "هیچ به روزرسانی جدیدی موجود نیست.",
|
||||
"Welcome to Riot.im": "به Riot.im خوشآمدید",
|
||||
"Chat with Riot Bot": "با رایوتبات چت کنید",
|
||||
"Get started with some tips from Riot Bot!": "با کمی راهنمایی از رایوتبات شروع کنید!",
|
||||
"General discussion about Matrix and Riot": "بحثهای کلی درمورد ماتریکس و رایوت",
|
||||
"Dev chat for the Dendrite dev team": "چت توسعهدهندگان برای تیم Dendrite",
|
||||
"Dev chat for the Riot/Web dev team": "چت توسعهدهندگان برای تیم رایوت/وب",
|
||||
"Support for those using, running and writing other bridges": "پشتیبانی برای آنان که یک پل را استفاده اجرا کرده و یا مینویسند",
|
||||
"Admin support for Dendrite": "پشتیبانی ادمین برای Dendrite",
|
||||
"Community-run support for Synapse": "پشتیبانی سیناپس ادارهشده توسط جامعهی کاربری",
|
||||
"Matrix technical discussions": "بحثهای فنی دربارهی ماتریکس",
|
||||
"Search the room directory": "در فهرست گپها جستجو کنید",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "چت مرکزگریز و رمزنگاریشده & ارائهای از ماتریکس",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s از طریق %(browserName)s بر %(osName)s",
|
||||
"All notifications are currently disabled for all targets.": "همهی آگاهسازیها برای تمام هدفها غیرفعالاند.",
|
||||
"Can't update user notification settings": "امکان بهروزرسانی تنظیمات آگاهسازی کاربر وجود ندارد",
|
||||
"Collecting logs": "درحال جمعآوری گزارشها",
|
||||
"Custom Server Options": "تنظیمات سفارشی برای سرور",
|
||||
"delete the alias.": "نام مستعار را پاک کن.",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "آیا مطمئنید که میخواهید نام مستعار گپ %(alias)s را پاک و %(name)s را از فهرست حذف کنید؟",
|
||||
"Dismiss": "نادیده بگیر",
|
||||
"Failed to set direct chat tag": "تنظیم تگ برای چت مستقیم موفقیتآمیز نبود",
|
||||
"Filter room names": "جستجو در گپها",
|
||||
"Notify for all other messages/rooms": "برای همهی پیامها/گپهای دیگر آگاهسازی کن",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "لطفا باگ را دقیقا تشریح کنید. چه کار کردید؟ انتظار داشتید چه اتفاقی بیفتد؟ دقیقا چه اتفاقی افتاد؟",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "رایوت از بسیاری از ویژگیهای پیشرفته در مروگرها استفاده میکند، برخی از این ویژگیها در مرورگر کنونی شما موجود نیستند و یا در حالت آزمایشی قرار دارند.",
|
||||
"Source URL": "آدرس مبدا",
|
||||
"Unable to fetch notification target list": "ناتوانی در تطبیق لیست آگاهسازیهای هدف",
|
||||
"Uploaded on %(date)s by %(user)s": "آپلود شده در تاریخ %(date)s توسط %(user)s",
|
||||
"View Decrypted Source": "دیدن منبع رمزگشایی شده",
|
||||
"Waiting for response from server": "در انتظار پاسخی از سمت سرور",
|
||||
"When I'm invited to a room": "وقتی من به گپی دعوت میشوم",
|
||||
"You are not receiving desktop notifications": "شما آگاهسازیهای دسکتاپ را دریافت نمیکنید",
|
||||
"Checking for an update...": "درحال بررسی بهروزرسانیها...",
|
||||
"Error encountered (%(errorDetail)s).": "خطای رخ داده (%(errorDetail)s).",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "شما باید از ارتباط امن HTTPS برای بهراهاندازی یک چتِ شامل به اشتراکگذاری صفحهی کامیپوتر استفاده کنید.",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "با مرورگر کنونی شما، ظاهر و حس استفاده از برنامه ممکن است کاملا اشتباه باشد و برخی یا همهی ویژگیها ممکن است کار نکنند. میتوانید به استفاده ادامه دهید اما مسئولیت هر مشکلی که به آن بربخورید بر عهدهی خودتان است!",
|
||||
"Discussion of all things Matrix!": "بحث درمورد تمام چیزهای مربوط به ماتریکس!",
|
||||
"Riot/Web & Desktop chat": "رایوت/وب & چت دسکتاپ",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "رایوت/آیاواس & چت در مورد matrix-ios-sdk",
|
||||
"Riot/Android & matrix-android-sdk chat": "رایوت/اندروید & چت در مورد matrix-android-sdk",
|
||||
"Running Matrix services": "اجرای سرویسهای ماتریکسی",
|
||||
"Announcements about Synapse releases": "اطلاعیهها دربارهی نسخهها و انتشار سیناپس",
|
||||
"Support for those using and running matrix-appservice-irc": "پشتیبانی برای کسانی که matrix-appservice-irc را اجرا و استفاده میکنند",
|
||||
"Design and implementation of E2E in Matrix": "طراحی و پیادهسازی رمزگذاری E2E در ماتریکس",
|
||||
"Implementing VR services with Matrix": "پیادهسازی سرویسهای VR با ماتریکس",
|
||||
"Implementing VoIP services with Matrix": "پیادهسازی سرویسهای VoIP با ماتریکس",
|
||||
"Discussion of the Identity Service API": "بحث درمورد API سرویس هویت",
|
||||
"You have successfully set a password!": "شما با موفقیت رمزتان را انتخاب کردید!",
|
||||
"Collapse panel": "پنل را ببند",
|
||||
"Failed to set Direct Message status of room": "تنظیم حالت پیام مستقیم برای گپ موفقیتآمیز نبود",
|
||||
"Fetching third party location failed": "تطبیق اطلاعات از منابع دسته سوم با شکست مواجه شد",
|
||||
"Messages containing my display name": "پیامهای حاوی نماینامِ من",
|
||||
"What's new?": "تازهها",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "ممکن است شما این تنظیمات را در کارخواهی به جز رایوت اعمال کرده باشید. شما نمیتوانید انها را تغییر دهید اما آنها همچنان تاثیر خود را دارند",
|
||||
"Building services on Matrix": "ساخت سرویس بر روی ماتریکس",
|
||||
"Support for those using the Matrix spec": "پشتیبانی برای آنان که از مستندات ماتریکس استفاده میکنند"
|
||||
}
|
209
src/i18n/strings/fi.json
Normal file
209
src/i18n/strings/fi.json
Normal file
|
@ -0,0 +1,209 @@
|
|||
{
|
||||
"Sunday": "Sunnuntai",
|
||||
"A new version of Riot is available.": "Uusi Riot-versio on saatavilla.",
|
||||
"Add an email address above to configure email notifications": "Lisää sähköpostiosoite yllä saadaksesi ilmoituksia sähköpostiisi",
|
||||
"Advanced notification settings": "Lisäasetukset ilmoituksille",
|
||||
"All messages": "Kaikki viestit",
|
||||
"All messages (loud)": "Kaikki viestit (äänekkäästi)",
|
||||
"All Rooms": "Kaikki huoneet",
|
||||
"All notifications are currently disabled for all targets.": "Kaikki ilmoitukset on kytketty pois kaikilta kohteilta.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Sähköposti-ilmoitusasetuksia tallettaessa tapahtui virhe.",
|
||||
"Call invitation": "Puhelukutsu",
|
||||
"Cancel": "Peruuta",
|
||||
"Cancel Sending": "Peruuta lähetys",
|
||||
"Can't update user notification settings": "Käyttäjän ilmoitusasetusten päivittäminen epäonnistui",
|
||||
"Changelog": "Muutosloki",
|
||||
"Close": "Sulje",
|
||||
"Couldn't find a matching Matrix room": "Vastaavaa Matrix-huonetta ei löytynyt",
|
||||
"delete the alias.": "poista alias.",
|
||||
"Describe your problem here.": "Kuvaa ongelmasi tähän.",
|
||||
"Direct Chat": "Suora viestittely",
|
||||
"Directory": "Hakemisto",
|
||||
"Dismiss": "Hylkää",
|
||||
"Download this file": "Lataa tiedosto",
|
||||
"Error": "Virhe",
|
||||
"#example": "#esimerkki",
|
||||
"Favourite": "Suosikki",
|
||||
"Files": "Tiedostot",
|
||||
"Forget": "Unohda",
|
||||
"I understand the risks and wish to continue": "Ymmärrän riskit ja haluan jatkaa",
|
||||
"Invite to this room": "Kutsu tähän huoneeseen",
|
||||
"Keywords": "Avainsanat",
|
||||
"Leave": "Poistu",
|
||||
"Login": "Kirjaudu sisään",
|
||||
"Low Priority": "Matala prioriteetti",
|
||||
"Members": "Jäsenet",
|
||||
"Mentions only": "Vain maininnat",
|
||||
"more": "lisää",
|
||||
"Mute": "Vaimenna",
|
||||
"No rooms to show": "Ei huoneita näytettäväksi",
|
||||
"Noisy": "Äänekäs",
|
||||
"Notifications": "Ilmoitukset",
|
||||
"Off": "Pois päältä",
|
||||
"On": "Päällä",
|
||||
"Operation failed": "Toiminto epäonnistui",
|
||||
"Permalink": "Pysyvä linkki",
|
||||
"Quote": "Lainaa",
|
||||
"Reject": "Hylkää",
|
||||
"Remove": "Poista",
|
||||
"Report a bug": "Ilmoita ongelmasta",
|
||||
"Resend": "Lähetä uudelleen",
|
||||
"Room not found": "Huonetta ei löytynyt",
|
||||
"Search": "Haku",
|
||||
"Search…": "Haku…",
|
||||
"Search for a room": "Hae huonetta",
|
||||
"Send": "Lähetä",
|
||||
"Send logs": "Lähetä lokit",
|
||||
"Source URL": "Lähde URL",
|
||||
"This Room": "Tämä huone",
|
||||
"Unable to join network": "Verkkoon liittyminen epäonnistui",
|
||||
"Unavailable": "Ei saatavilla",
|
||||
"Unknown device": "Tuntematon laite",
|
||||
"unknown error code": "tuntematon virhekoodi",
|
||||
"Unnamed room": "Nimeämätön huone",
|
||||
"Update": "Päivitä",
|
||||
"View Source": "Näytä lähde",
|
||||
"Waiting for response from server": "Odotetaan palvelimen vastausta",
|
||||
"Monday": "Maanantai",
|
||||
"Tuesday": "Tiistai",
|
||||
"Wednesday": "Keskiviikko",
|
||||
"Thursday": "Torstai",
|
||||
"Friday": "Perjantai",
|
||||
"Saturday": "Lauantai",
|
||||
"Today": "Tänään",
|
||||
"Yesterday": "Eilen",
|
||||
"OK": "Selvä",
|
||||
"Warning": "Varoitus",
|
||||
"Checking for an update...": "Tarkistetaan päivityksen saatavuutta...",
|
||||
"No update available.": "Ei päivityksiä saatavilla.",
|
||||
"Downloading update...": "Ladataan päivitystä...",
|
||||
"Welcome to Riot.im": "Tervetuloa Riot.im:ään",
|
||||
"Search the room directory": "Hae huonehakemistosta",
|
||||
"Continue": "Jatka",
|
||||
"Set Password": "Aseta salasana",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">Safari</a> ja <a href=\"http://opera.com\">Opera</a> toimivat myös.",
|
||||
"Collapse panel": "Piilota paneeli",
|
||||
"Collecting app version information": "Kerätään sovelluksen versiotietoja",
|
||||
"Collecting logs": "Kerätään lokitietoja",
|
||||
"Custom Server Options": "Omat palvelinasetukset",
|
||||
"customServer_text": "Voit käyttää palvelinasetuksia muille Matrix-palvelimille kirjautumiseen asettamalla oman kotipalvelinosoitteen.<br/>Näin voit käyttää Riotia toisella kotipalvelimella sijaitsevan Matrix-käyttäjän kanssa. <br/><br/>Voit myös asettaa oman tunnistautumispalvelimen, mutta sinua ei voi kutsua etkä voi kutsua muita sähköpostiosoitteella.",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Poista huonetunnus %(alias)s ja poista %(name)s hakemistosta?",
|
||||
"Enable them now": "Ota käyttöön nyt",
|
||||
"Enter keywords separated by a comma:": "Anna avainsanat eroteltuna pilkuin:",
|
||||
"Expand panel": "Avaa paneeli",
|
||||
"Error saving email notification preferences": "Virhe tallennettaessa sähköposti-ilmoitusasetuksia",
|
||||
"Failed to change settings": "Asetusten muuttaminen epäonnistui",
|
||||
"Failed to forget room %(errCode)s": "Huoneen unohtaminen epäonnistui %(errCode)s",
|
||||
"Failed to update keywords": "Avainsanojen päivittäminen epäonnistui",
|
||||
"Enable audible notifications in web client": "Ota käyttöön äänelliset ilmoitukset webasiakasohjelmassa",
|
||||
"Enable desktop notifications": "Ota käyttöön työpöytäilmoitukset",
|
||||
"Enable email notifications": "Ota käyttöön sähköposti-ilmoitukset",
|
||||
"Enable notifications for this account": "Ota käyttöön ilmoitukset tälle tilille",
|
||||
"Failed to add tag %(tagName)s to room": "Tagin %(tagName)s lisäämineen huoneelle ei onnistunut",
|
||||
"Failed to get protocol list from Home Server": "Protokollalistan hakeminen Kotipalvelimelta ei onnistunut",
|
||||
"Failed to get public room list": "Julkisten huoneiden listan hakeminen epäonnistui",
|
||||
"Failed to remove tag %(tagName)s from room": "Tagin %(tagName)s poistaminen huoneelta epäonnistui",
|
||||
"Failed to send report: ": "Raportin lähettäminen epäonnistui: ",
|
||||
"Failed to set direct chat tag": "Suoran viestittelyn tagin asettaminen epäonnistui",
|
||||
"Fetching third party location failed": "Kolmannen osapuolen paikan haku epäonnistui",
|
||||
"Filter room names": "Suodata huoneiden nimet",
|
||||
"Forward Message": "Edelleenlähetä viesti",
|
||||
"Guests can join": "Vieraat voivat liittyä",
|
||||
"Hide panel": "Piilota paneeli",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Diagnoosin helpottamiseksi lokitietoja tältä laitteelta lähetetään tämän bugiraportin mukana. Poista ruksi jos haluat lätettää vain ylläolevan tekstin:",
|
||||
"Loading bug report module": "Ladataan bugiraportointimoduuli",
|
||||
"Messages containing my display name": "Näyttönimeni sisältävät viestit",
|
||||
"Messages containing <span>keywords</span>": "<span>Avainsanoja</span> sisältävät viestit",
|
||||
"Messages containing my user name": "Käyttäjänimeni sisältävät viestit",
|
||||
"Messages in group chats": "Viestit ryhmäkeskusteluissa",
|
||||
"Messages in one-to-one chats": "Viestit henkilökohtaisissa keskusteluissa",
|
||||
"Messages sent by bot": "Bottien lähettämät viestit",
|
||||
"Notification targets": "Ilmoituksen kohteet",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "Seuraaviin avainsanoihin liittyvät ilmoitukset seuraavat sääntöjä joita ei voida näyttää tässä:",
|
||||
"Notify me for anything else": "Ilmoita minulle kaikesta muusta",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Ole hyvä ja kuvaile virhe. Mitä teit? Mitä oletit tapahtuvan? Mitä itse asiassa tapahtui?",
|
||||
"Please describe the bug and/or send logs.": "Ole hyvä ja kuvaile virhe sekä/tai lähetä lokitiedot.",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Ole hyvä ja asenna <a href=\"https://www.google.com/chrome\">Chrome</a> tai <a href=\"https://getfirefox.com\">Firefox</a> parhaan kokemuksen saavuttamiseksi.",
|
||||
"Remove %(name)s from the directory?": "Poista %(name)s hakemistosta?",
|
||||
"remove %(name)s from the directory.": "poista %(name)s hakemistosta.",
|
||||
"Remove from Directory": "Poista hakemistosta",
|
||||
"Riot Desktop on %(platformName)s": "Riot Desktop järjestelmällä %(platformName)s",
|
||||
"Riot does not know how to join a room on this network": "Riot ei tiedä miten liittya huoneeseen tässä verkossa",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot käyttää monia selainominaisuuksia, joista osa selaimesi ei tue tai ne ovat kokeellisia.",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Valitettavasti Riot <b>ei</b> toimi selaimessasi.",
|
||||
"The Home Server may be too old to support third party networks": "Kotipalvelin saattaa olla liian vanha tukeakseen kolmannen osapuolen verkkoja",
|
||||
"The server may be unavailable or overloaded": "Palvelin saattaa olla saavuttamaton tai ylikuormitettu",
|
||||
"Unable to fetch notification target list": "Ilmoituskohdelistan haku epäonnistui",
|
||||
"Unable to look up room ID from server": "Huone-ID:n haku palvelimelta epäonnistui",
|
||||
"Unhide Preview": "Näytä ennakkokatselu",
|
||||
"Uploaded on %(date)s by %(user)s": "Ladattu %(date)s käyttäjän %(user)s toimesta",
|
||||
"Uploading report": "Ladataan raportti",
|
||||
"View Decrypted Source": "Näytä purettu lähdekoodi",
|
||||
"What's New": "Mikä on uutta",
|
||||
"What's new?": "Mikä on uutta?",
|
||||
"When I'm invited to a room": "Kun minut kutsutaan huoneeseen",
|
||||
"World readable": "Kaikkien luettavissa",
|
||||
"You cannot delete this image. (%(code)s)": "Et voi poistaa tätä kuvaa. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "Et voi poistaa tätä viestiä. (%(code)s)",
|
||||
"You are not receiving desktop notifications": "Et vastaanota työpöytäilmoituksia",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Olet saattanut muuttaa niitä toisessa asiakasohjelmassa kuin Riot. Et voi muuttaa niitä Riotissa mutta ne pätevät kuitenkin",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Sinun täytyy käyttää HTTPS:ää voidaaksesi soittaa ruudunjakopuhelun.",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Nykyisellä selaimellasi ohjelman ulkonäkö voi olla aivan virheellinen, ja jotkut ominaisuudet eivät saata toimia. Voit jatkaa jos haluat kokeilla mutta et voi odottaa saavasi apua mahdollisesti ilmeneviin ongelmiin!",
|
||||
"Chat with Riot Bot": "Keskustele Riot-botin kanssa",
|
||||
"Get started with some tips from Riot Bot!": "Pääse käyntiin Riot-botin vinkkien avulla!",
|
||||
"General discussion about Matrix and Riot": "Yleistä Matrix- ja Riot-keskustelua",
|
||||
"Discussion of all things Matrix!": "Keskustelu kaikesta Matrixiin liittyvästä!",
|
||||
"Riot/Web & Desktop chat": "Riot/Web & Työpöytä-keskustelu",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk -keskustelu",
|
||||
"Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk -keskustelu",
|
||||
"Matrix technical discussions": "Matrix tekniset keskustelut",
|
||||
"Running Matrix services": "Matrix-palvelujen ylläpito",
|
||||
"Community-run support for Synapse": "Yhteisön tarjoama Synapse-tuki",
|
||||
"Admin support for Dendrite": "Dendrite ylläpitotuki",
|
||||
"Announcements about Synapse releases": "Ilmoitukset uusista Synapse-julkaisuista",
|
||||
"Error encountered (%(errorDetail)s).": "Virhe: %(errorDetail)s.",
|
||||
"Support for those using and running matrix-appservice-irc": "Tuki niille jotka käyttävät ja ajavat matrix-appservice-irc",
|
||||
"Building services on Matrix": "Palvelujen rakentaminen Matrixin avulla",
|
||||
"Support for those using the Matrix spec": "Tuki Matrix-spesifikaation käyttäjille",
|
||||
"Implementing VR services with Matrix": "VR-palvelujen implementointi Matrixin avulla",
|
||||
"Implementing VoIP services with Matrix": "VoIP-palvelujen implementointi Matrixin avulla",
|
||||
"Discussion of the Identity Service API": "Keskustelu Identity Service rajapinnasta",
|
||||
"Support for those using, running and writing other bridges": "Tuki niille jotka käyttävät, ajavat ja ohjelmoivat muita siltoja",
|
||||
"Dev chat for the Riot/Web dev team": "Kehittäjäkeskustelu Riot/Web kehitystiimille",
|
||||
"Dev chat for the Dendrite dev team": "Kehittäjäkeskustelu Dendrite kehitystiimille",
|
||||
"Co-ordination for Riot/Web translators": "Riot/Web kääntäjien koordinointi",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Matrixissa on jo olemassa monia huoneita jotka on linkitetty olemassa oleviin verkkoihin (Slack, IRC, Gitter, jne) tai itsenäisiin. Tutustu hakemistoon!",
|
||||
"Failed to change password. Is your password correct?": "Salasanan muuttaminen epäonnistui. Onko salasanasi oikein?",
|
||||
"You have successfully set a password!": "Olet onnistuneesti asettanut salasanan!",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "Voit nyt palata tilillesi kirjauduttua ulos, sekä kirjautua muilla laitteilla.",
|
||||
"Please set a password!": "Ole hyvä ja aseta salasana!",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "Tämä mahdollistaa sinut palamaan tilillesi uloskirjautumisen jälkeen sekä kirjautumaan muilla laitteilla.",
|
||||
"You have successfully set a password and an email address!": "Olet onnistuneesti asettanut salasanan ja sähköpostiosoitteen!",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Muista että voit aina asettaa sähköpostiosoitteen käyttäjäasetuksista jos muutat mielesi.",
|
||||
"To return to your account in future you need to <u>set a password</u>": "Voidaksesi tulevaisuudessa palata tilillesi sinut pitää <u>asettaa salasana</u>",
|
||||
"Couldn't load home page": "Kotisivun lataus epäonnistui",
|
||||
"Bug report sent": "Virheraportti lähetetty",
|
||||
"Failed to set Direct Message status of room": "Huoneen suoran viestittelyn tilan asettaminen epäonnistui",
|
||||
"(HTTP status %(httpStatus)s)": "(HTTP tila %(httpStatus)s)",
|
||||
"Notify for all other messages/rooms": "Ilmoita kaikista muista viesteistä/huoneista",
|
||||
"powered by Matrix": "Matrix-pohjainen",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot ei tue mobiiliselaimia. Asenna sovellus?",
|
||||
"Thank you!": "Kiitos!",
|
||||
"Design and implementation of E2E in Matrix": "Matrix päästä-päähän salauksen suunnittelu ja implementointi",
|
||||
"Contributing code to Matrix and Riot": "Osallistu Matrix ja Riot kehitykseen",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s selaimella %(browserName)s käyttöjärjestelmällä %(osName)s",
|
||||
"There are advanced notifications which are not shown here": "On kehittyneitä ilmoituksia joita ei näytetä tässä",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Matrix-pohjainen hajautettu, salattu viestittely ja yhteistyö",
|
||||
"Back": "Palaa",
|
||||
"Developer Tools": "Kehitystyökalut",
|
||||
"Failed to send custom event.": "Kustomoidun tapahtuman lähettäminen epäonnistui.",
|
||||
"Filter results": "Suodata tuloksia",
|
||||
"Send Custom Event": "Lähetä kustomoitu tapahtuma",
|
||||
"Send Custom State Event": "Lähetä kustomoitu tilatapahtuma",
|
||||
"Explore Room State": "Tutki huoneen tilaa",
|
||||
"You must specify an event type!": "Sinun on määritettävä tapahtuman tyyppi!",
|
||||
"Event sent!": "Tapahtuma lähetetty!",
|
||||
"Event Type": "Tapahtuman tyyppi",
|
||||
"Event Content": "Tapahtuman sisältö",
|
||||
"State Key": "Tila-avain"
|
||||
}
|
221
src/i18n/strings/fr.json
Normal file
221
src/i18n/strings/fr.json
Normal file
|
@ -0,0 +1,221 @@
|
|||
{
|
||||
"Add an email address above to configure email notifications": "Ajouter une adresse e-mail pour la configuration des notifications par e-mail",
|
||||
"All messages": "Tous les messages",
|
||||
"All messages (loud)": "Tous les messages (fort)",
|
||||
"All notifications are currently disabled for all targets.": "Toutes les notifications sont désactivées pour tous les appareils.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Une erreur est survenue lors de la sauvegarde de vos préférences de notification par e-mail.",
|
||||
"Cancel Sending": "Annuler l'envoi",
|
||||
"Can't update user notification settings": "Impossible de mettre à jour les paramètres de notification de l'utilisateur",
|
||||
"Close": "Fermer",
|
||||
"Couldn't find a matching Matrix room": "Impossible de trouver un salon Matrix correspondant",
|
||||
"Custom Server Options": "Options de serveur personnalisées",
|
||||
"delete the alias.": "supprimer l'alias.",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Supprimer l'alias %(alias)s du salon et supprimer %(name)s du répertoire ?",
|
||||
"Direct Chat": "Discussion directe",
|
||||
"Directory": "Répertoire",
|
||||
"Dismiss": "Ignorer",
|
||||
"Download this file": "Télécharger ce fichier",
|
||||
"Enable audible notifications in web client": "Activer les notifications sonores pour le client web",
|
||||
"Enable desktop notifications": "Activer les notifications de bureau",
|
||||
"Enable email notifications": "Activer les notifications par e-mail",
|
||||
"Enable notifications for this account": "Activer les notifications pour ce compte",
|
||||
"Enable them now": "Les activer maintenant",
|
||||
"Enter keywords separated by a comma:": "Entrez les mots-clés séparés par une virgule :",
|
||||
"Error": "Erreur",
|
||||
"Error saving email notification preferences": "Erreur lors de la sauvegarde des préférences de notification par e-mail",
|
||||
"#example": "#exemple",
|
||||
"Failed to add tag %(tagName)s to room": "Échec lors de l'ajout de l’étiquette %(tagName)s au salon",
|
||||
"Failed to change settings": "Échec de la mise à jour des paramètres",
|
||||
"Failed to forget room %(errCode)s": "Échec lors de l'oubli du salon %(errCode)s",
|
||||
"Failed to update keywords": "Échec dans la mise à jour des mots-clés",
|
||||
"Failed to get protocol list from Home Server": "Échec lors de la récupération de la liste sur le serveur",
|
||||
"Failed to get public room list": "Échec lors de la récupération de la liste des salons publics",
|
||||
"Failed to remove tag %(tagName)s from room": "Échec dans la suppression de l’étiquette %(tagName)s du salon",
|
||||
"Failed to set direct chat tag": "Échec dans l'attribution d'une étiquette dans la discussion directe",
|
||||
"Favourite": "Favoris",
|
||||
"Operation failed": "L'opération a échoué",
|
||||
"powered by Matrix": "propulsé par Matrix",
|
||||
"Quote": "Citer",
|
||||
"Reject": "Rejeter",
|
||||
"Remove %(name)s from the directory?": "Supprimer %(name)s du répertoire ?",
|
||||
"Remove": "Supprimer",
|
||||
"Resend": "Renvoyer",
|
||||
"unknown error code": "Code erreur inconnu",
|
||||
"View Source": "Voir la source",
|
||||
"You cannot delete this image. (%(code)s)": "Vous ne pouvez pas supprimer cette image. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "Vous ne pouvez pas supprimer ce message. (%(code)s)",
|
||||
"You are not receiving desktop notifications": "Vous ne recevez pas les notifications sur votre bureau",
|
||||
"Sunday": "Dimanche",
|
||||
"Monday": "Lundi",
|
||||
"Tuesday": "Mardi",
|
||||
"Wednesday": "Mercredi",
|
||||
"Thursday": "Jeudi",
|
||||
"Friday": "Vendredi",
|
||||
"Saturday": "Samedi",
|
||||
"Today": "Aujourd'hui",
|
||||
"Yesterday": "Hier",
|
||||
"Call invitation": "Appel entrant",
|
||||
"Failed to set Direct Message status of room": "Échec du réglage de l'état du salon en Discussion directe",
|
||||
"Fetching third party location failed": "Échec de la récupération de la localisation tierce",
|
||||
"Files": "Fichiers",
|
||||
"Filter room names": "Filtrer les salons par nom",
|
||||
"Forget": "Oublier",
|
||||
"Invite to this room": "Inviter dans ce salon",
|
||||
"Keywords": "Mots-clés",
|
||||
"Leave": "Quitter",
|
||||
"Low Priority": "Priorité basse",
|
||||
"Members": "Membres",
|
||||
"Mentions only": "Seulement les mentions",
|
||||
"Messages containing my display name": "Messages contenant mon nom affiché",
|
||||
"Messages containing my user name": "Message contenant mon nom d'utilisateur",
|
||||
"Messages in group chats": "Messages dans les discussions de groupe",
|
||||
"Messages in one-to-one chats": "Messages dans les discussions directes",
|
||||
"Messages sent by bot": "Messages envoyés par des robots",
|
||||
"more": "plus",
|
||||
"Mute": "Mettre en sourdine",
|
||||
"No rooms to show": "Aucun salon à afficher",
|
||||
"Noisy": "Bruyant",
|
||||
"Notification targets": "Appareils recevant les notifications",
|
||||
"Notifications": "Notifications",
|
||||
"Notify for all other messages/rooms": "Me notifier pour tous les autres messages/salons",
|
||||
"Notify me for anything else": "Me notifier pour tout le reste",
|
||||
"Off": "Désactivé",
|
||||
"On": "Activé",
|
||||
"Permalink": "Permalien",
|
||||
"remove %(name)s from the directory.": "supprimer %(name)s du répertoire.",
|
||||
"Remove from Directory": "Supprimer du répertoire",
|
||||
"Riot does not know how to join a room on this network": "Riot ne peut pas joindre un salon sur ce réseau",
|
||||
"Room not found": "Salon non trouvé",
|
||||
"Search for a room": "Rechercher un salon",
|
||||
"Source URL": "URL de la source",
|
||||
"The Home Server may be too old to support third party networks": "Le serveur d'accueil semble trop ancien pour supporter des réseaux tiers",
|
||||
"There are advanced notifications which are not shown here": "Il existe une configuration avancée des notifications qui ne peut être affichée ici",
|
||||
"The server may be unavailable or overloaded": "Le serveur est indisponible ou surchargé",
|
||||
"Unable to fetch notification target list": "Impossible de récupérer la liste des appareils recevant les notifications",
|
||||
"Unable to join network": "Impossible de rejoindre le réseau",
|
||||
"Unable to look up room ID from server": "Impossible de récupérer l'ID du salon sur le serveur",
|
||||
"Unhide Preview": "Dévoiler l'aperçu",
|
||||
"Unnamed room": "Salon sans nom",
|
||||
"Uploaded on %(date)s by %(user)s": "Téléchargé le %(date)s par %(user)s",
|
||||
"View Decrypted Source": "Voir la source déchiffrée",
|
||||
"When I'm invited to a room": "Quand je suis invité dans un salon",
|
||||
"World readable": "Lisible publiquement",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Vous les avez probablement configurées dans un autre client que Riot. Vous ne pouvez pas les configurer dans Riot mais elles s'appliquent quand même",
|
||||
"Guests can join": "Les invités peuvent rejoindre le salon",
|
||||
"Advanced notification settings": "Paramètres de notification avancés",
|
||||
"customServer_text": "Vous pouvez utiliser les options de serveur personnalisées pour vous connecter à d'autres serveurs Matrix, en spécifiant une adresse de serveur d'accueil différente.<br/>Cela permet d'utiliser Riot avec un compte Matrix existant sur un serveur d'accueil différent.<br/><br/>Vous pouvez aussi indiquer un serveur d'identité personnalisé mais vous ne pourrez pas inviter d'utilisateurs par e-mail ou être invité par e-mail.",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "Les notifications pour les mots-clés suivant répondent à des critères qui ne peuvent pas être affichés ici :",
|
||||
"Collapse panel": "Cacher le panneau",
|
||||
"Expand panel": "Dévoiler le panneau",
|
||||
"I understand the risks and wish to continue": "Je comprends les risques et souhaite continuer",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot utilise de nombreuses fonctionnalités avancées du navigateur, certaines ne sont pas disponibles ou expérimentales dans votre navigateur actuel.",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Désolé, Riot <b>n'</b>est <b>pas</b> supporté par votre navigateur.",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Depuis votre navigateur actuel, le visuel et le ressenti de l'application pourraient être complètement erronés, et certaines fonctionnalités pourraient ne pas être supportées. Vous pouvez continuer malgré tout, mais vous n'aurez aucune aide si vous rencontrez des problèmes !",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Veuillez installer <a href=\"https://www.google.com/chrome\">Chrome</a> ou <a href=\"https://getfirefox.com\">Firefox</a> pour une expérience optimale.",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">Safari</a> et <a href=\"http://opera.com\">Opera</a> fonctionnent aussi.",
|
||||
"Messages containing <span>keywords</span>": "Messages contenant des <span>mots-clés</span>",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s dans %(browserName)s sous %(osName)s",
|
||||
"A new version of Riot is available.": "Une nouvelle version de Riot est disponible.",
|
||||
"All Rooms": "Tous les salons",
|
||||
"Cancel": "Annuler",
|
||||
"Changelog": "Journal des modifications",
|
||||
"Collecting app version information": "Récupération des informations de version de l’application",
|
||||
"Collecting logs": "Récupération des journaux",
|
||||
"Describe your problem here.": "Décrivez votre problème ici.",
|
||||
"Failed to send report: ": "Échec de l’envoi du rapport : ",
|
||||
"Forward Message": "Transférer le message",
|
||||
"Hide panel": "Cacher le panneau",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Afin de diagnostiquer les problèmes, les journaux de ce client vont être envoyés avec ce rapport d’erreur. Si vous préférez n'envoyer que le texte ci-dessus, décochez la case :",
|
||||
"Loading bug report module": "Chargement du module de rapport d’erreur",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Veuillez décrire l'erreur. Qu'avez-vous fait ? Quel était le comportement attendu ? Que s'est-il réellement passé ?",
|
||||
"Please describe the bug and/or send logs.": "Veuillez décrire le problème et/ou envoyer les journaux.",
|
||||
"Report a bug": "Signaler un problème",
|
||||
"Riot Desktop on %(platformName)s": "Version bureau de Riot sur %(platformName)s",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot n’est pas supporté sur les appareils mobiles. Installer l’application ?",
|
||||
"Search": "Rechercher",
|
||||
"Search…": "Rechercher…",
|
||||
"Send": "Envoyer",
|
||||
"Send logs": "Envoyer les journaux",
|
||||
"This Room": "Ce salon",
|
||||
"Unavailable": "Indisponible",
|
||||
"Unknown device": "Appareil inconnu",
|
||||
"Update": "Mettre à jour",
|
||||
"Uploading report": "Envoi du rapport",
|
||||
"What's New": "Nouveautés",
|
||||
"What's new?": "Nouveautés ?",
|
||||
"Waiting for response from server": "En attente d’une réponse du serveur",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Vous devez utiliser HTTPS pour effectuer un appel en partage d’écran.",
|
||||
"OK": "OK",
|
||||
"Failed to change password. Is your password correct?": "Échec du changement de mot de passe. Votre mot de passe est-il correct ?",
|
||||
"You have successfully set a password!": "Vous avez défini un mot de passe avec succès !",
|
||||
"Continue": "Continuer",
|
||||
"Please set a password!": "Veuillez définir un mot de passe !",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "Vous pouvez maintenant revenir sur votre compte après vous être déconnecté, et vous identifier sur d'autres appareils.",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "Cela vous permettra de retourner sur votre compte après vous être déconnecté, et de vous identifier sur d'autres appareils.",
|
||||
"Welcome to Riot.im": "Bienvenue sur Riot.im",
|
||||
"(HTTP status %(httpStatus)s)": "(état HTTP %(httpStatus)s)",
|
||||
"Login": "Connexion",
|
||||
"Chat with Riot Bot": "Discussion avec Riot Bot",
|
||||
"Search the room directory": "Rechercher dans le répertoire de salons",
|
||||
"Get started with some tips from Riot Bot!": "Démarrer avec quelques astuces de Riot Bot !",
|
||||
"Riot/Android & matrix-android-sdk chat": "Discussions sur Riot/Android & matrix-android-sdk",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Discussions sur Riot/iOS & matrix-ios-sdk",
|
||||
"General discussion about Matrix and Riot": "Discussion générale sur Matrix et Riot",
|
||||
"Riot/Web & Desktop chat": "Discussions sur Riot/Web & Bureau",
|
||||
"Running Matrix services": "Exécution de services Matrix",
|
||||
"Admin support for Dendrite": "Support admin pour Dendrite",
|
||||
"Announcements about Synapse releases": "Communiqués sur les nouvelles versions de Synapse",
|
||||
"Matrix technical discussions": "Discussions techniques sur Matrix",
|
||||
"Community-run support for Synapse": "Support communautaire sur Synapse",
|
||||
"Support for those using and running matrix-appservice-irc": "Support pour ceux qui utilisent et exécutent matrix-appservice-irc",
|
||||
"Building services on Matrix": "Développement de services sur Matrix",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Discussion & collaboration décentralisées et chiffrées, propulsées par [matrix]",
|
||||
"Discussion of all things Matrix!": "Discussion sur tout ce qui concerne Matrix !",
|
||||
"Support for those using the Matrix spec": "Support pour les utilisateurs de la spécification de Matrix",
|
||||
"Design and implementation of E2E in Matrix": "Définition et implémentation du chiffrement de bout en bout dans Matrix",
|
||||
"Implementing VR services with Matrix": "Implémentation de services de réalité virtuelle avec Matrix",
|
||||
"Implementing VoIP services with Matrix": "Implémentation de services de voix sur IP avec Matrix",
|
||||
"Discussion of the Identity Service API": "Discussion sur l’API du Service Identité",
|
||||
"Support for those using, running and writing other bridges": "Support pour les utilisateurs, administrateurs et développeurs d'autres passerelles",
|
||||
"Contributing code to Matrix and Riot": "Contribuer du code à Matrix et Riot",
|
||||
"Dev chat for the Riot/Web dev team": "Discussions de l'équipe de développeurs de Riot/Web",
|
||||
"Dev chat for the Dendrite dev team": "Discussion pour l'équipe de développeurs de Dendrite",
|
||||
"Co-ordination for Riot/Web translators": "Coordination des traducteurs de Riot/Web",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "De nombreux salons existent déjà dans Matrix, liés à des réseaux existants (Slack, IRC, Gitter etc) ou indépendants. Jetez un œil au répertoire !",
|
||||
"You have successfully set a password and an email address!": "Vous avez défini un mot de passe et une adresse e-mail avec succès !",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Souvenez-vous que vous pourrez toujours définir une adresse e-mail dans les paramètres de l'utilisateur si vous changez d’avis.",
|
||||
"Warning": "Attention",
|
||||
"Checking for an update...": "Recherche de mise à jour...",
|
||||
"Error encountered (%(errorDetail)s).": "Erreur rencontrée (%(errorDetail)s).",
|
||||
"No update available.": "Aucune mise à jour disponible.",
|
||||
"Downloading update...": "Mise à jour en cours de téléchargement...",
|
||||
"To return to your account in future you need to <u>set a password</u>": "Pour pouvoir retrouver votre compte dans le futur, vous devez <u>définir un mot de passe</u>",
|
||||
"Set Password": "Définir un mot de passe",
|
||||
"Couldn't load home page": "Impossible de charger la page d'accueil",
|
||||
"Bug report sent": "Rapport d'erreur envoyé",
|
||||
"Thank you!": "Merci !",
|
||||
"Back": "Retour",
|
||||
"Developer Tools": "Outils de développement",
|
||||
"Filter results": "Filtrer les résultats",
|
||||
"You must specify an event type!": "Vous devez spécifier un type d'événement !",
|
||||
"Event sent!": "Événement envoyé !",
|
||||
"Event Type": "Type d'événement",
|
||||
"Event Content": "Contenu de l'événement",
|
||||
"Failed to send custom event.": "Échec de l'envoi de l'événement personnalisé.",
|
||||
"Send Custom Event": "Envoyer l'événement personnalisé",
|
||||
"Send Custom State Event": "Envoyer l'événement d'état personnalisé",
|
||||
"Explore Room State": "Parcourir l'état du salon",
|
||||
"State Key": "Clé d'état",
|
||||
"Unpin Message": "Dépingler le message",
|
||||
"Add rooms to this community": "Ajouter des salons à cette communauté",
|
||||
"Show message in desktop notification": "Afficher le message dans les notifications de bureau",
|
||||
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Vous pouvez utiliser les options de serveur personnalisé pour vous connecter à d'autres serveurs Matrix en précisant un serveur d'accueil différent.<br/>Cela vous permet d'utiliser Riot avec un compte Matrix existant sur un autre serveur d'accueil.<br/><br/>Vous pouvez aussi renseigner un serveur d'identité personnalisé mais vous ne pourrez pas inviter d'utilisateurs avec leur adresse e-mail, ou être invité avec votre adresse e-mail.",
|
||||
"Edit": "Modifier",
|
||||
"Pin Message": "Épingler le message",
|
||||
"Register": "S'inscrire",
|
||||
"Rooms": "Salons",
|
||||
"Invite to this community": "Inviter à cette communauté",
|
||||
"Toolbox": "Boîte à outils",
|
||||
"Send Account Data": "Envoyer les données du compte",
|
||||
"Explore Account Data": "Explorer les données du compte"
|
||||
}
|
221
src/i18n/strings/gl.json
Normal file
221
src/i18n/strings/gl.json
Normal file
|
@ -0,0 +1,221 @@
|
|||
{
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s vía %(browserName)s en %(osName)s",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">Safari</a> e <a href=\"http://opera.com\">Opera</a> tamén serven.",
|
||||
"A new version of Riot is available.": "Está dispoñible unha nova versión de Riot.",
|
||||
"Add an email address above to configure email notifications": "Engada un enderezo de correo electrónico para configurar as notificacións",
|
||||
"Advanced notification settings": "Axustes avanzados de notificación",
|
||||
"All messages": "Todas as mensaxes",
|
||||
"All messages (loud)": "Todas as mensaxes (alto)",
|
||||
"All Rooms": "Todas as Salas",
|
||||
"All notifications are currently disabled for all targets.": "Todas as notificacións están deshabilitadas para todos os destinos.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Algo fallou mentras se gardaban as súas preferencias de notificaicón.",
|
||||
"Back": "Atrás",
|
||||
"Bug report sent": "Enviado o informe de fallo",
|
||||
"Call invitation": "Convite de chamada",
|
||||
"Cancel": "Cancelar",
|
||||
"Cancel Sending": "Cancelar o envío",
|
||||
"Can't update user notification settings": "Non se poden actualizar os axutes de notificación",
|
||||
"Changelog": "Rexistro de cambios",
|
||||
"Close": "Pechar",
|
||||
"Collapse panel": "Agochar panel",
|
||||
"Collecting app version information": "Obtendo información sobre a versión da app",
|
||||
"Collecting logs": "Obtendo rexistros",
|
||||
"Couldn't find a matching Matrix room": "Non coincide con ningunha sala de Matrix",
|
||||
"Custom Server Options": "Axustes do servidor personalizado",
|
||||
"customServer_text": "Pode utilizar os axustes do servidor personalizado para conectarse a outros servidores Matrix indicando un URL de Inicio do servidor.<br/>Esto permítelle utilizar Riot con unha conta existente de Matrix nun servidor diferente.<br/><br/>Tamén pode establecer un servidor personalizado de identidade mais non poderá invitar a usuarias a través de enderezos de correo ou ser vostede invitada do mesmo xeito.",
|
||||
"delete the alias.": "borrar alcume.",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Eliminar o alcume da sala %(alias)s e borrar %(name)s do directorio?",
|
||||
"Describe your problem here.": "Describa aquí o seu problema.",
|
||||
"Developer Tools": "Ferramentas para desenvolver",
|
||||
"Direct Chat": "Chat directo",
|
||||
"Directory": "Directorio",
|
||||
"Dismiss": "Desbotar",
|
||||
"Download this file": "Descargue este ficheiro",
|
||||
"Enable audible notifications in web client": "Habilitar notificacións audibles no cliente web",
|
||||
"Enable desktop notifications": "Habilitar notificacións de escritorio",
|
||||
"Enable email notifications": "Habilitar notificacións de correo",
|
||||
"Enable notifications for this account": "Habilitar notificacións para esta conta",
|
||||
"Enable them now": "Habilitalas agora",
|
||||
"Enter keywords separated by a comma:": "Introduza palabras chave separadas por vírgulas:",
|
||||
"Error": "Fallo",
|
||||
"Error saving email notification preferences": "Fallo ao cargar os axustes de notificacións",
|
||||
"#example": "#exemplo",
|
||||
"Expand panel": "Expandir panel",
|
||||
"Failed to add tag %(tagName)s to room": "Fallou ao engadir a etiqueta %(tagName)s a sala",
|
||||
"Failed to change settings": "Fallo ao cambiar os axustes",
|
||||
"Failed to forget room %(errCode)s": "Fallou ao esquecer a sala %(errCode)s",
|
||||
"Failed to update keywords": "Fallo ao actualizar as palabras chave",
|
||||
"Failed to get protocol list from Home Server": "Fallo ao obter a lista de protocolo desde o servidor",
|
||||
"Failed to get public room list": "Fallo ao obter a lista de salas públicas",
|
||||
"Failed to remove tag %(tagName)s from room": "Fallo ao eliminar etiqueta %(tagName)s da sala",
|
||||
"Failed to send custom event.": "Fallo ao enviar evento personalizado.",
|
||||
"Failed to send report: ": "Fallo no envío do informe: ",
|
||||
"Failed to set direct chat tag": "Fallo ao establecer etiqueta do chat directo",
|
||||
"Failed to set Direct Message status of room": "Fallo ao establecer o estado Mensaxe Directa da sala",
|
||||
"Favourite": "Favorito",
|
||||
"Fetching third party location failed": "Fallo ao obter a localización de terceiros",
|
||||
"Files": "Ficheiros",
|
||||
"Filter results": "Filtrar resultados",
|
||||
"Filter room names": "Filtrar nomes de sala",
|
||||
"Forget": "Esquecer",
|
||||
"Forward Message": "Reenviar mensaxe",
|
||||
"Guests can join": "Convidadas pódense unir",
|
||||
"Hide panel": "Agochar panel",
|
||||
"(HTTP status %(httpStatus)s)": "(Estado HTTP %(httpStatus)s)",
|
||||
"I understand the risks and wish to continue": "Entendos os riscos e desexo continuar",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Para poder diagnosticar o problema, os rexistros de este cliente enviaranse neste informe de fallo. Si prefire enviar só o texto superior, desmarque:",
|
||||
"Invite to this room": "Convidar a esta sala",
|
||||
"Keywords": "Palabras chave",
|
||||
"Leave": "Saír",
|
||||
"Login": "Conectar",
|
||||
"Loading bug report module": "Cargando o módulo de informe de fallos",
|
||||
"Low Priority": "Baixa prioridade",
|
||||
"Members": "Membresía",
|
||||
"Mentions only": "Só mencións",
|
||||
"Messages containing my display name": "Mensaxes que conteñen o meu nome público",
|
||||
"Messages containing <span>keywords</span>": "Mensaxes que conteñen <span>palabras chave</span>",
|
||||
"Messages containing my user name": "Mensaxes que conteñen o meu nome de usuaria",
|
||||
"Messages in group chats": "Mensaxes en grupos de chat",
|
||||
"Messages in one-to-one chats": "Mensaxes en chats un-a-un",
|
||||
"Messages sent by bot": "Mensaxes enviadas por bot",
|
||||
"more": "máis",
|
||||
"Mute": "Calar",
|
||||
"No rooms to show": "Non hai salas que mostrar",
|
||||
"Noisy": "Ruidoso",
|
||||
"Notification targets": "Obxetivos das notificacións",
|
||||
"Notifications": "Notificacións",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "Notificacións das reglas de seguimento das seguintes palabras que non se mostrarán aquí:",
|
||||
"Notify for all other messages/rooms": "Notificar para todas as outras mensaxes/salas",
|
||||
"Notify me for anything else": "Notificarme todo o demáis",
|
||||
"Off": "Off",
|
||||
"On": "On",
|
||||
"Operation failed": "Fallou a operación",
|
||||
"Permalink": "Ligazón permanente",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Por favor describa a incidencia. Que estaba a facer? Que tiña que pasar? Que aconteceu en realidade?",
|
||||
"Please describe the bug and/or send logs.": "Por favor describa a incidencia e/ou envíe o informe.",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Por favor instale <a href=\"https://www.google.com/chrome\">Chrome</a> ou <a href=\"https://getfirefox.com\">Firefox</a> para ter a mellor experiencia de uso.",
|
||||
"powered by Matrix": "funcionando grazas a Matrix",
|
||||
"Quote": "Cita",
|
||||
"Reject": "Rexeitar",
|
||||
"Remove %(name)s from the directory?": "Eliminar %(name)s do directorio?",
|
||||
"Remove": "Eliminar",
|
||||
"remove %(name)s from the directory.": "eliminar %(name)s do directorio.",
|
||||
"Remove from Directory": "Eliminar do directorio",
|
||||
"Report a bug": "Informar de un fallo",
|
||||
"Resend": "Voltar a enviar",
|
||||
"Riot Desktop on %(platformName)s": "Riot Desktop en %(platformName)s",
|
||||
"Riot does not know how to join a room on this network": "Riot non sabe cómo conectar con unha sala en esta rede",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot no se pode executar na web móbil. Instalar a app?",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot utiliza características avanzadas do navegador, algunhas das cales non están dispoñibles ou son experimentales no seu navegador actual.",
|
||||
"Room not found": "Non se atopou a sala",
|
||||
"Search": "Buscar",
|
||||
"Search…": "Buscar…",
|
||||
"Search for a room": "Buscar unha sala",
|
||||
"Send": "Enviar",
|
||||
"Send logs": "Enviar informes",
|
||||
"Send Custom Event": "Enviar evento personalizado",
|
||||
"Send Custom State Event": "Enviar evento de estado personalizado",
|
||||
"Explore Room State": "Explorar estado da sala",
|
||||
"Source URL": "URL fonte",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Desculpe, o seu navegador <b>non pode</b> executar Riot.",
|
||||
"The Home Server may be too old to support third party networks": "O servidor de inicio podería ser demasiando antigo como para aceptar redes de terceiros",
|
||||
"There are advanced notifications which are not shown here": "Existen notificacións avanzadas que non se mostran aquí",
|
||||
"The server may be unavailable or overloaded": "O servidor podería non estar dispoñible ou sobrecargado",
|
||||
"This Room": "Esta sala",
|
||||
"Unable to fetch notification target list": "Non se puido procesar a lista de obxetivo de notificacións",
|
||||
"Unable to join network": "Non se puido conectar a rede",
|
||||
"Unable to look up room ID from server": "Non se puido atopar o ID da sala do servidor",
|
||||
"Unavailable": "Non dispoñible",
|
||||
"Unhide Preview": "Desagochar a vista previsa",
|
||||
"Unknown device": "Dispositivo descoñecido",
|
||||
"unknown error code": "código de erro descoñecido",
|
||||
"Unnamed room": "Sala sen nome",
|
||||
"Update": "Actualizar",
|
||||
"Uploaded on %(date)s by %(user)s": "Subido a %(date)s por %(user)s",
|
||||
"Uploading report": "Informe da subida",
|
||||
"View Decrypted Source": "Ver a fonte descifrada",
|
||||
"View Source": "Ver fonte",
|
||||
"What's New": "Qué hai de novo",
|
||||
"What's new?": "Qué hai de novo?",
|
||||
"Waiting for response from server": "Agardando pola resposta do servidor",
|
||||
"When I'm invited to a room": "Cando son convidado a unha sala",
|
||||
"World readable": "Visible por todo o mundo",
|
||||
"You cannot delete this image. (%(code)s)": "Non pode eliminar esta imaxe. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "Non pode eliminar esta mensaxe. (%(code)s)",
|
||||
"You are not receiving desktop notifications": "Non está a recibir notificacións de escritorio",
|
||||
"You must specify an event type!": "Debe indicar un tipo de evento!",
|
||||
"Thank you!": "Grazas!",
|
||||
"Sunday": "Domingo",
|
||||
"Monday": "Luns",
|
||||
"Tuesday": "Martes",
|
||||
"Wednesday": "Mércores",
|
||||
"Thursday": "Xoves",
|
||||
"Friday": "Venres",
|
||||
"Saturday": "Sábado",
|
||||
"Today": "Hoxe",
|
||||
"Yesterday": "Onte",
|
||||
"OK": "OK",
|
||||
"Warning": "Aviso",
|
||||
"Checking for an update...": "Comprobando as actualizacións...",
|
||||
"Error encountered (%(errorDetail)s).": "Houbo un erro (%(errorDetail)s).",
|
||||
"Event sent!": "Evento enviado!",
|
||||
"Event Type": "Tipo de evento",
|
||||
"Event Content": "Contido do evento",
|
||||
"State Key": "Chave do estado",
|
||||
"No update available.": "Sen actualizacións.",
|
||||
"Downloading update...": "Descargando actualización...",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Precisa utilizar HTTPS para establecer unha chamada de pantalla compartida.",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Co seu navegador actual a apareciencia e uso do aplicativo poderían estar totalmente falseadas, e algunhas características poderían non funcionar. Se quere pode continuar, pero debe ser consciente de que poden haber fallos!",
|
||||
"Welcome to Riot.im": "Benvida a Riot.im",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Chat & colaboración descentralizados e cifrados grazas a [matrix]",
|
||||
"Search the room directory": "Buscar no directorio de salas",
|
||||
"Chat with Riot Bot": "Chat co Bot de Riot",
|
||||
"Get started with some tips from Riot Bot!": "Iníciese con algúns consellos do Bot de Riot!",
|
||||
"General discussion about Matrix and Riot": "Discusión xeral sobre Matrix e Riot",
|
||||
"Discussion of all things Matrix!": "Conversa sobre to o relativo a Matrix!",
|
||||
"Riot/Web & Desktop chat": "Riot/Web & chat de Escritorio",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & chat matrix-ios-sdk",
|
||||
"Matrix technical discussions": "Discusións técnicas sobre Matrix",
|
||||
"Running Matrix services": "Servizos correndo sobre Matrix",
|
||||
"Community-run support for Synapse": "Axuda da comunidade para Synapse",
|
||||
"Admin support for Dendrite": "Axuda administrador para Dendrite",
|
||||
"Announcements about Synapse releases": "Anuncios sobre lanzamentos de Synapse",
|
||||
"Support for those using and running matrix-appservice-irc": "Axuda para quen usa matrix-appservice-irc",
|
||||
"Building services on Matrix": "Deseñando servizos sobre Matrix",
|
||||
"Support for those using the Matrix spec": "Axuda para quen usa a especificación Matrix",
|
||||
"Design and implementation of E2E in Matrix": "Deseño e implementación de E2E en Matrix",
|
||||
"Implementing VR services with Matrix": "Implementando servizos de RV con Matrix",
|
||||
"Implementing VoIP services with Matrix": "Implementación de servizos VoIP con Matrix",
|
||||
"Discussion of the Identity Service API": "Conversa sobre a Identity Service API",
|
||||
"Support for those using, running and writing other bridges": "Axuda para que utiliza, executa e desenvolve outras pontes",
|
||||
"Contributing code to Matrix and Riot": "Contribuíndo ao código en Matrix e Riot",
|
||||
"Dev chat for the Riot/Web dev team": "Chat para o equipo de desenvolvemento do Riot/Web",
|
||||
"Dev chat for the Dendrite dev team": "Chat para o equipo de desenvolvemento de Dendrite",
|
||||
"Co-ordination for Riot/Web translators": "Coordinación para tradutores de Riot/Web",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Xa existen multitude de salas en Matrix, ligadas a redes existentes (Slack, IRC, Gitter etc) ou independentes. Busque no directorio!",
|
||||
"Failed to change password. Is your password correct?": "Non se mudou o contrasinal. É correcto o contrasinal introducido?",
|
||||
"You have successfully set a password!": "Mudou con éxito o seu contrasinal!",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "Pode voltar a súa contra tras desconectarse, e conectarse en outros dispositivos.",
|
||||
"Continue": "Continuar",
|
||||
"Please set a password!": "Por favor estableza un contrasinal!",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "Esto permitiralle voltar a súa conta tras desconectarse, e conectarse en outros dispositivos.",
|
||||
"You have successfully set a password and an email address!": "Estableceu correctamente un contrasinal e enderezo de correo!",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Lembre, sempre poderá poñer un enderezo de correo nos axustes de usuario si cambia de idea.",
|
||||
"To return to your account in future you need to <u>set a password</u>": "Para voltar a súa conta no futuro debe <u>establecer un contrasinal>/u>",
|
||||
"Set Password": "Establecer contrasinal",
|
||||
"Couldn't load home page": "Non se cargou a páxina de inicio",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Pode que os configurase nun cliente diferente de Riot. Non pode establecelos desde Riot pero aínda así aplicaranse",
|
||||
"Riot/Android & matrix-android-sdk chat": "Chat para Riot/Android & matrix-android-sdk",
|
||||
"Show message in desktop notification": "Mostrar mensaxe nas notificacións de escritorio",
|
||||
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Vostede pode utilizar as opcións de servidor personalizado para conectarse a outros servidores Matrix indicando o enderezo URL do Servidor.</br>Esto permítelle utilizar Riot con unha conta Matrix existente en outro servidor.<br/><br/>Tamén pode indicar un servidor de identidade pero non poderá convidar a usarias polo seu enderezo de correo electrónico, o ser convidada vostede por correo electrónico.",
|
||||
"Toolbox": "Ferramentas",
|
||||
"Edit": "Editar",
|
||||
"Send Account Data": "Enviar datos da conta",
|
||||
"Explore Account Data": "Explorar datos da conta",
|
||||
"Unpin Message": "Non fixar mensaxe",
|
||||
"Pin Message": "Fixar mensaxe",
|
||||
"Register": "Rexistrar",
|
||||
"Rooms": "Salas",
|
||||
"Invite to this community": "Convidar a esta comunidade",
|
||||
"Add rooms to this community": "Engadir salas a esta comunidade"
|
||||
}
|
184
src/i18n/strings/he.json
Normal file
184
src/i18n/strings/he.json
Normal file
|
@ -0,0 +1,184 @@
|
|||
{
|
||||
"A new version of Riot is available.": "יצאה גרסה חדשה של Riot.",
|
||||
"Add an email address above to configure email notifications": "הוסף כתובת דואר אלקטורני למעלה בכדי להגדיר התראות",
|
||||
"Advanced notification settings": "הגדרות מתקדמות להתראות",
|
||||
"All messages": "כל ההודעות",
|
||||
"All messages (loud)": "כל ההודעות (צעקה)",
|
||||
"All Rooms": "כל החדרים",
|
||||
"All notifications are currently disabled for all targets.": "התראות מנוטרלות לכלל המערכת.",
|
||||
"An error occurred whilst saving your email notification preferences.": "קרתה שגיאה בזמן שמירת הגדרות התראה באמצעות הדואר האלקטרוני.",
|
||||
"Call invitation": "הזמנה לשיחה",
|
||||
"Cancel": "ביטול",
|
||||
"Cancel Sending": "ביטול שליחה",
|
||||
"Can't update user notification settings": "לא ניתן לעדכן הגדרות התראה למשתמש",
|
||||
"Changelog": "דו\"ח שינויים",
|
||||
"Close": "סגור",
|
||||
"Collapse panel": "סגור פאנל",
|
||||
"Collecting app version information": "אוסף מידע על גרסת האפליקציה",
|
||||
"Collecting logs": "אוסף לוגים",
|
||||
"Couldn't find a matching Matrix room": "לא נמצא חדר כזה ב Matrix",
|
||||
"Custom Server Options": "הגדרות שרת מותאמות אישית",
|
||||
"customServer_text": "אפשר להשתמש בהגדרות שרת מותאמות אישית בכדי להתחבר לשרתים אחרים באמצעות בחירת כתובת שרת בית שונה.<br/>זה יאפשר לך להשתמש ב Riot עם חשבון קיים ב Matrix אבל אל מול שרת בית שונה. <br/><br/>כמו כן אפשר להגדיר זהות מותאמת אישית אבל אז לא תהיה אפשרות להזמין משתמשים באמצעות כתובת אימייל, או להזמין את עצמך באמצעות כתובת האימייל.",
|
||||
"delete the alias.": "מחיקת כינוי.",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "מחק כינוי %(alias)s של החדר והסר את %(name)s מהרשימה?",
|
||||
"Describe your problem here.": "תאר את הבעיה כאן.",
|
||||
"Direct Chat": "שיחה ישירה",
|
||||
"Directory": "ספרייה",
|
||||
"Dismiss": "שחרר",
|
||||
"Download this file": "הורד את הקובץ",
|
||||
"Enable audible notifications in web client": "אפשר התראות קוליות בדפדפן",
|
||||
"Enable desktop notifications": "אפשר התראות בשולחן העבודה",
|
||||
"Enable email notifications": "אפשר התראות באמצעות הדואר האלקטרוני",
|
||||
"Enable notifications for this account": "אפשר התראות לחשבון זה",
|
||||
"Enable them now": "אפשר אותם כעת",
|
||||
"Enter keywords separated by a comma:": "הכנס מילים מופרדות באמצעות פסיק:",
|
||||
"Error": "שגיאה",
|
||||
"Error saving email notification preferences": "שגיאה בעת שמירת הגדרות התראה באמצעות הדואר האלקטרוני",
|
||||
"#example": "#דוגמא",
|
||||
"Expand panel": "הרחב פנאל",
|
||||
"Failed to add tag %(tagName)s to room": "נכשל בעת הוספת תג %(tagName)s לחדר",
|
||||
"Failed to change settings": "נכשל בעת שינוי הגדרות",
|
||||
"Failed to forget room %(errCode)s": "נכשל בעת בקשה לשכוח חדר %(errCode)s",
|
||||
"Failed to update keywords": "נכשל עדכון מילים",
|
||||
"Failed to get protocol list from Home Server": "נכשל בעת נסיון קבלת רשימת פרוטוקולים משרת הבית",
|
||||
"Failed to get public room list": "נכשלה קבלת רשימת חדרים ציבוריים",
|
||||
"Failed to remove tag %(tagName)s from room": "נכשל בעת נסיון הסרת תג %(tagName)s מהחדר",
|
||||
"Failed to send report: ": "נכשל בעת שליחת דו\"ח: ",
|
||||
"Failed to set direct chat tag": "נכשל בעת סימון תג לשיחה ישירה",
|
||||
"Failed to set Direct Message status of room": "נכשל בעת סימון סטטוס הודעה ישירה של החדר",
|
||||
"Favourite": "מועדף",
|
||||
"Fetching third party location failed": "נסיון להביא מיקום צד שלישי נכשל",
|
||||
"Files": "קבצים",
|
||||
"Filter room names": "מיין לפי שמות חדרים",
|
||||
"Forget": "שכח",
|
||||
"Forward Message": "העבר הודעה",
|
||||
"Guests can join": "אורחים יכולים להצטרף",
|
||||
"Hide panel": "הסתר פנאל",
|
||||
"I understand the risks and wish to continue": "אני מבין את הסיכונים אבל מבקש להמשיך",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "בכדי לנתח את הבעיות, ישלח דוח עם פרטי הבעיה. אם ברצונך רק לשלוח את שנאמר למעלה, נא הסר את הסימון:",
|
||||
"Invite to this room": "הזמן לחדר זה",
|
||||
"Keywords": "מילות מפתח",
|
||||
"Leave": "לעזוב",
|
||||
"Login": "התחבר",
|
||||
"Loading bug report module": "טוען רכיב דיווח דו\"ח שגיאה",
|
||||
"Low Priority": "עדיפות נמוכה",
|
||||
"Members": "חברים",
|
||||
"Mentions only": "הערות בלבד",
|
||||
"Messages containing my display name": "הודעות המכילות את שם התצוגה שלי",
|
||||
"Messages containing <span>keywords</span>": "הודעות המכילות <span> מילות מפתח </span>",
|
||||
"Messages containing my user name": "הודעות המכילות את שם המשתמש שלי",
|
||||
"Messages in group chats": "הודעות בקבוצות השיחה",
|
||||
"Messages in one-to-one chats": "הודעות בשיחות פרטיות",
|
||||
"Messages sent by bot": "הודעות שנשלחו באמצעות בוט",
|
||||
"more": "עוד",
|
||||
"Mute": "השתק",
|
||||
"No rooms to show": "אין חדרים להצגה",
|
||||
"Noisy": "רועש",
|
||||
"Notification targets": "יעדי התראה",
|
||||
"Notifications": "התראות",
|
||||
"Notify for all other messages/rooms": "התראה לכל שאר ההודעות/החדרים",
|
||||
"Notify me for anything else": "התראה לי על כל דבר אחר",
|
||||
"Off": "סגור",
|
||||
"On": "דלוק",
|
||||
"Operation failed": "פעולה נכשלה",
|
||||
"Permalink": "קישור קבוע",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "נא תאר את הבאג. מה עשית? מה ציפית שיקרה? מה קרה בפועל?",
|
||||
"Please describe the bug and/or send logs.": "נא תאר את הבאג ו/או שלח את הלוגים.",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "נא התקן <a href=\"https://www.google.com/chrome\"> כרום</a> או <a href=\"https://getfirefox.com\"> פיירפוקס</a> לשימוש מייטבי.",
|
||||
"powered by Matrix": "מופעל ע\"י Matrix",
|
||||
"Quote": "ציטוט",
|
||||
"Reject": "דחה",
|
||||
"Remove %(name)s from the directory?": "הסר את %(name)s מהרשימה?",
|
||||
"Remove": "הסר",
|
||||
"remove %(name)s from the directory.": "הסר את %(name)s מהרשימה.",
|
||||
"Remove from Directory": "הסר מהרשימה",
|
||||
"Report a bug": "דווח על שגיאה",
|
||||
"Resend": "שלח מחדש",
|
||||
"Riot Desktop on %(platformName)s": "Riot לשולחן העבודה על גבי %(platformName)s",
|
||||
"Riot does not know how to join a room on this network": "Riot אינו יודע כיצד להצטרף לחדר ברשת זו",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot לא נתמך באמצעות דפדפן במכשיר הסלולארי. האם ברצונך להתקין את האפליקציה?",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot משתמש במספר רב של אפשרויות מתקדמות בדפדפן, חלק מהן לא זמינות או בשלבי נסיון בדפדפן שבשימושך כרגע.",
|
||||
"Room not found": "חדר לא נמצא",
|
||||
"Search": "חפש",
|
||||
"Search…": "חפש…",
|
||||
"Search for a room": "חפש חדר",
|
||||
"Send": "שלח",
|
||||
"Send logs": "שלח לוגים",
|
||||
"Source URL": "כתובת אתר המקור",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "מצטערים, הדפדפן שלך הוא <b> אינו</b> יכול להריץ את Riot.",
|
||||
"The Home Server may be too old to support third party networks": "שרת הבית ישן ואינו יכול לתמוך ברשתות צד שלישי",
|
||||
"There are advanced notifications which are not shown here": "ישנן התראות מתקדמות אשר אינן מוצגות כאן",
|
||||
"The server may be unavailable or overloaded": "השרת אינו זמין או עמוס",
|
||||
"This Room": "החדר הזה",
|
||||
"Unable to fetch notification target list": "לא ניתן לאחזר רשימת יעדי התראה",
|
||||
"Unable to join network": "לא ניתן להצטרף לרשת",
|
||||
"Unable to look up room ID from server": "לא ניתן לאתר מזהה חדר על השרת",
|
||||
"Unavailable": "לא זמין",
|
||||
"Unhide Preview": "הצג מחדש תצוגה מקדימה",
|
||||
"Unknown device": "מכשיר לא ידוע",
|
||||
"unknown error code": "קוד שגיאה לא מוכר",
|
||||
"Unnamed room": "חדר ללא שם",
|
||||
"Update": "עדכון",
|
||||
"Uploaded on %(date)s by %(user)s": "עודכן ב %(date)s ע\"י %(user)s",
|
||||
"Uploading report": "מעדכן דוח",
|
||||
"View Decrypted Source": "הצג מקור מוצפן",
|
||||
"View Source": "הצג מקור",
|
||||
"What's New": "מה חדש",
|
||||
"What's new?": "מה חדש?",
|
||||
"Waiting for response from server": "ממתין לתשובה מהשרת",
|
||||
"When I'm invited to a room": "מתי אני מוזמן לחדר",
|
||||
"World readable": "העולם קריא",
|
||||
"You cannot delete this image. (%(code)s)": "אי אפשר למחוק את התמונה. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "לא ניתן למחוק הודעה זו. (%(code)s)",
|
||||
"You are not receiving desktop notifications": "אתה לא מקבל התראות משולחן העבודה",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "יתכן כי בצעת את ההגדרות בצד לקוח ולא ב Riot. לא תוכל לווסת אותם ב Riot אבל הם עדיין תקפים",
|
||||
"Sunday": "ראשון",
|
||||
"Monday": "שני",
|
||||
"Tuesday": "שלישי",
|
||||
"Wednesday": "רביעי",
|
||||
"Thursday": "חמישי",
|
||||
"Friday": "שישי",
|
||||
"Saturday": "שבת",
|
||||
"Today": "היום",
|
||||
"Yesterday": "אתמול",
|
||||
"OK": "בסדר",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "עליך להשתמש ב HTTPS בכדי לבצע שיחה משותפת.",
|
||||
"Welcome to Riot.im": "ברוכים הבאים ל Riot.im",
|
||||
"Search the room directory": "חפש ברשימת החדרים",
|
||||
"Chat with Riot Bot": "שיחה עם Riot בוט",
|
||||
"Get started with some tips from Riot Bot!": "התחל באמצעות מספר טיפים מהבוט של Riot!",
|
||||
"General discussion about Matrix and Riot": "דיון כללי על Matrix ו Riot",
|
||||
"Discussion of all things Matrix!": "דיון על כל הדברים הקשורים ל Matrix!",
|
||||
"Riot/Web & Desktop chat": "Riot/Web & צ'ט שולחן עבודה",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & שיחה עם matrix-ios-sdk",
|
||||
"Riot/Android & matrix-android-sdk chat": "Riot/Android & צ'ט matrix-android-sdk",
|
||||
"Matrix technical discussions": "פורום טכני של Matrix",
|
||||
"Running Matrix services": "הרץ את שירותי ה Matrix",
|
||||
"Community-run support for Synapse": "תמיכה בקהילה של Synapse",
|
||||
"Admin support for Dendrite": "תמיכת מנהל מערכת עבור Dendrite",
|
||||
"Announcements about Synapse releases": "הודעות לגבי גרסאות Synapse",
|
||||
"Support for those using and running matrix-appservice-irc": "תמיכה באלו המשתמשים ב matrix-appservice-irc",
|
||||
"Building services on Matrix": "בניית שירותים על גבי ה Matrix",
|
||||
"Support for those using the Matrix spec": "תמיכה באלו המשתמשים בהגדרות ה Matrix",
|
||||
"Design and implementation of E2E in Matrix": "תכנון וביצוע קצה לקצה ב Matrix",
|
||||
"Implementing VR services with Matrix": "מימוש שירותי VR ב Matrix",
|
||||
"Implementing VoIP services with Matrix": "מימוש Voip ב Matrix",
|
||||
"Discussion of the Identity Service API": "דיון על שירות זהויות",
|
||||
"Support for those using, running and writing other bridges": "שירות לכל אותם אלו המשתמשים, מריצים וכותבים חיבורים נוספים",
|
||||
"Contributing code to Matrix and Riot": "תרומת קוד ל Matrix ו Riot",
|
||||
"Dev chat for the Riot/Web dev team": "שיחה עם המפתחים עבור ה קבוצת הפיתוח של Riot/Web",
|
||||
"Dev chat for the Dendrite dev team": "שיחת מפתחים עבור Dendrite",
|
||||
"Co-ordination for Riot/Web translators": "תאום למתרגמי ה Riot/Web",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "הרבה חדרים כבר קיימים ב Matrix ומקושרים לרשתות קיימות (Slack, IRC, Gitter וכו') או עצמאיים. בדוק את הספרייה!",
|
||||
"Failed to change password. Is your password correct?": "נכשל בעת שינוי סיסמא, האם הסיסמא אינה שגויה?",
|
||||
"You have successfully set a password!": "שינוי סיסמא בוצע בהצלחה!",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "תוכל עתה לחזור לחשבון שלך רק אחרי התנתקות וחיבור מחדש לחשבון.",
|
||||
"Continue": "המשך",
|
||||
"Please set a password!": "נא להגדיר סיסמא!",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "זה יאפשר לך לחזור לחשבונך אחרי התנתקות ולהתחבר באמצעות התקנים אחרים.",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s באמצעות הדפדפן %(browserName)s על גבי %(osName)s",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\"> ספארי</a> ו <a href=\"http://opera.com\"> אופרה</a> עובדים גם כן.",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "התראה על מילות המפתח הבאות עוקבת אחר החוקים שאינם יכולים להיות מוצגים כאן:",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "באמצעות הדפדפן הנוכחי שלך המראה של האפליקציה יכול להיות שגוי לחלוטין וחלק מהאפשרויות לא תתפקדנה. אם תרצה לנסות בכל זאת תוכל אבל אז הסיכון חל עליך!",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "צ'ט מוצפן & ושת\"פ נעשה ע\"י ה [matrix]"
|
||||
}
|
8
src/i18n/strings/hi.json
Normal file
8
src/i18n/strings/hi.json
Normal file
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"A new version of Riot is available.": "रायट के एक नया वर्शन उपलब्ध है।",
|
||||
"All messages": "सारे संदेश",
|
||||
"All Rooms": "सारे कमरे",
|
||||
"Please set a password!": "कृपया एक पासवर्ड सेट करें!",
|
||||
"Continue": "आगे बढ़ें",
|
||||
"You have successfully set a password and an email address!": "आपने सफलतापूर्वक एक पासवर्ड और एक ईमेल एड्रेस सेट कर लिया है!"
|
||||
}
|
221
src/i18n/strings/hu.json
Normal file
221
src/i18n/strings/hu.json
Normal file
|
@ -0,0 +1,221 @@
|
|||
{
|
||||
"Add an email address above to configure email notifications": "E-mail értesítés beállításához írd be az e-mail címed",
|
||||
"Advanced notification settings": "Haladó értesítési beállítások",
|
||||
"All messages": "Minden üzenet",
|
||||
"All messages (loud)": "Minden üzenet (hangos)",
|
||||
"All notifications are currently disabled for all targets.": "Minden céleszközön minden értesítés tiltva van.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Hiba történt az e-mail értesítés beállításánál.",
|
||||
"Call invitation": "Hívás meghívó",
|
||||
"Cancel Sending": "Küldés megszakítása",
|
||||
"Can't update user notification settings": "Nem sikerül frissíteni az értesítési beállításokat",
|
||||
"Close": "Bezár",
|
||||
"Couldn't find a matching Matrix room": "Nem található a keresett Matrix szoba",
|
||||
"Custom Server Options": "Egyedi szerver beállítások",
|
||||
"delete the alias.": "becenév törlése.",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Törlöd a(z) %(alias)s szobát és kiveszed a könyvtárból ezt: %(name)s?",
|
||||
"Direct Chat": "Közvetlen csevegés",
|
||||
"Directory": "Könyvtár",
|
||||
"Dismiss": "Eltűntet",
|
||||
"Download this file": "Fájl letöltése",
|
||||
"Enable audible notifications in web client": "Hallható értesítések engedélyezése a webes kliensben",
|
||||
"Enable desktop notifications": "Asztali értesítések engedélyezése",
|
||||
"Enable email notifications": "E-mail értesítések engedélyezése",
|
||||
"Enable notifications for this account": "Értesítések engedélyezése a fiókhoz",
|
||||
"Enable them now": "Engedélyezés most",
|
||||
"Enter keywords separated by a comma:": "Kulcsszavak vesszővel elválasztva:",
|
||||
"Error": "Hiba",
|
||||
"Error saving email notification preferences": "Hiba e-mail értesítés beállításának mentésénél",
|
||||
"#example": "#példa",
|
||||
"Failed to add tag %(tagName)s to room": "Nem lehet a címkét hozzáadni a szobához: %(tagName)s",
|
||||
"Failed to change settings": "Nem lehet a beállítást megváltoztatni",
|
||||
"Failed to forget room %(errCode)s": "Nem lehet eltávolítani a szobát: %(errCode)s",
|
||||
"Failed to update keywords": "Nem lehet a kulcsszavakat frissíteni",
|
||||
"Failed to get protocol list from Home Server": "Nem lehet a protokoll listát lekérni a Saját szerverről",
|
||||
"Failed to get public room list": "Nem lehet lekérdezni a nyílt szobák listáját",
|
||||
"Failed to remove tag %(tagName)s from room": "Nem lehet törölni a(z) %(tagName)s címkét a szobáról",
|
||||
"Failed to set direct chat tag": "Nem lehet a címkét beállítani a közvetlen beszélgetéshez",
|
||||
"Failed to set Direct Message status of room": "Nem lehet beállítani a Közvetlen beszélgetés státuszt a szobához",
|
||||
"Favourite": "Kedvenc",
|
||||
"Fetching third party location failed": "Nem sikerült lekérdezni a harmadik felet",
|
||||
"Files": "Fájlok",
|
||||
"Filter room names": "Szoba nevek szűrése",
|
||||
"Forget": "Elfelejt",
|
||||
"Guests can join": "Vendégek is csatlakozhatnak",
|
||||
"Invite to this room": "Meghívás a szobába",
|
||||
"Keywords": "Kulcsszavak",
|
||||
"Leave": "Elhagy",
|
||||
"Low Priority": "Alacsony priorítás",
|
||||
"Members": "Résztvevők",
|
||||
"Mentions only": "Csak ha megemlítenek",
|
||||
"Messages containing my display name": "Az üzenet tartalmazza a nevem",
|
||||
"Messages containing my user name": "Az üzenet tartalmazza a felhasználói nevem",
|
||||
"Messages in group chats": "Üzenetek a csoportszobában",
|
||||
"Messages in one-to-one chats": "Üzenetek közvetlen beszélgetésekben",
|
||||
"Messages sent by bot": "Botok által küldött üzenetek",
|
||||
"more": "további",
|
||||
"Mute": "Elnémít",
|
||||
"No rooms to show": "Nincsenek megjelenítendő szobák",
|
||||
"Noisy": "Hangos",
|
||||
"Notification targets": "Értesítések célpontja",
|
||||
"Notifications": "Értesítések",
|
||||
"Notify for all other messages/rooms": "Értesítés minden más üzenethez/szobához",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">Safari</a>val és <a href=\"http://opera.com\">Opera</a>val is működik.",
|
||||
"Collapse panel": "Panel bezárása",
|
||||
"customServer_text": "Egyedi Matrix szervert használhatsz a Saját szerver URL beállításával.<br/> Ezzel meglévő Matrix fiókot használhatsz Riot klienssel és egyedi szerverrel.<br/><br/>Beállíthatsz egyedi \"identity\" szervert de akkor nem tudsz e-maillel meghívni felhasználót és téged sem tudnak meghívni e-maillel.",
|
||||
"Expand panel": "Panel kinyitása",
|
||||
"I understand the risks and wish to continue": "Megértettem a kockázatot és folytatom",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "A kulcsszavakhoz tartozó értesítések olyan szabályokat követnek amiket nem lehet itt megjeleníteni:",
|
||||
"Notify me for anything else": "Értesíts minden egyéb esetben",
|
||||
"Off": "Ki",
|
||||
"On": "Be",
|
||||
"Operation failed": "Művelet sikertelen",
|
||||
"Permalink": "Állandó hivatkozás",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "A legjobb élmény érdekében telepíts <a href=\"https://www.google.com/chrome\">Chrome</a>ot vagy <a href=\"https://getfirefox.com\">Firefox</a>ot.",
|
||||
"powered by Matrix": "Matrixon alapul",
|
||||
"Quote": "Idézet",
|
||||
"Reject": "Elutasít",
|
||||
"Remove %(name)s from the directory?": "Törlöd a %(name)s szobát a listából?",
|
||||
"Remove": "Törlés",
|
||||
"remove %(name)s from the directory.": "%(name)s szoba törlése a listából.",
|
||||
"Remove from Directory": "Törlés a szobák listájából",
|
||||
"Resend": "Újraküld",
|
||||
"Riot does not know how to join a room on this network": "Riot nem tudja, hogy csatlakozzon ehhez a szobához ezen a hálózaton",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot sok haladó képességét használja a böngészőnek amik közül lehet, hogy nem mind érhető el a most használt böngészőben vagy még csak kísérleti jellegű.",
|
||||
"Room not found": "A szoba nem található",
|
||||
"Search for a room": "Szoba keresése",
|
||||
"Source URL": "Forrás URL",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Elnézést, a böngésződ <b>nem</b> képes futtatni a Riotot.",
|
||||
"The Home Server may be too old to support third party networks": "A Saját szerver lehet, hogy túl régi ahhoz, hogy más hálózatokhoz tudjon kapcsolódni",
|
||||
"There are advanced notifications which are not shown here": "Vannak haladó értesítések amik itt nincsenek megjelenítve",
|
||||
"The server may be unavailable or overloaded": "A szerver nem érhető el vagy túl van terhelve",
|
||||
"Unable to fetch notification target list": "Nem sikerült letölteni az értesítési célok listáját",
|
||||
"Unable to join network": "Nem sikerült kapcsolódni a hálózathoz",
|
||||
"Unable to look up room ID from server": "Nem lehet lekérdezni a szoba ID-ját a szervertől",
|
||||
"Unhide Preview": "Előkép felfedése",
|
||||
"unknown error code": "ismeretlen hiba kód",
|
||||
"Unnamed room": "Névtelen szoba",
|
||||
"Uploaded on %(date)s by %(user)s": "Feltöltés: %(date)s, %(user)s",
|
||||
"View Decrypted Source": "Visszafejtett forrás megjelenítése",
|
||||
"View Source": "Forrás megjelenítése",
|
||||
"When I'm invited to a room": "Amikor meghívtak a szobába",
|
||||
"World readable": "Nyilvános",
|
||||
"You cannot delete this image. (%(code)s)": "Nem törölheted ezt a képet. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "Nem törölheted ezt az üzenetet. (%(code)s)",
|
||||
"You are not receiving desktop notifications": "Nem fogadsz asztali értesítéseket",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Valószínűleg Riottól eltérő klienssel állítottad be. Riotból nem állítható de érvényben van",
|
||||
"Sunday": "Vasárnap",
|
||||
"Monday": "Hétfő",
|
||||
"Tuesday": "Kedd",
|
||||
"Wednesday": "Szerda",
|
||||
"Thursday": "Csütörtök",
|
||||
"Friday": "Péntek",
|
||||
"Saturday": "Szombat",
|
||||
"Today": "Ma",
|
||||
"Yesterday": "Tegnap",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "A jelenlegi bőngésződdel teljesen hibás lehet az alkalmazás kinézete és bizonyos funkciók, ha nem az összes, nem fog működni. Ha mindenképpen ki akarod próbálni, folytathatod de egyedül vagy minden felbukkanó problémával!",
|
||||
"Messages containing <span>keywords</span>": "Az üzenet <span>kulcsszavakat</span> tartalmaz",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s alkalmazás %(browserName)s böngészőn %(osName)s rendszeren",
|
||||
"A new version of Riot is available.": "Elérhető egy új Riot verzió.",
|
||||
"All Rooms": "Minden szobában",
|
||||
"Cancel": "Mégse",
|
||||
"Changelog": "Változások",
|
||||
"Collecting app version information": "Alkalmazás verzió információk összegyűjtése",
|
||||
"Collecting logs": "Naplók összegyűjtése",
|
||||
"Describe your problem here.": "Írd le a problémád itt.",
|
||||
"Failed to send report: ": "A jelentést nem lehetett elküldeni: ",
|
||||
"Forward Message": "Üzenet továbbküldése",
|
||||
"Hide panel": "Panel elrejtése",
|
||||
"Loading bug report module": "Hibabejelentő modul betöltése",
|
||||
"Please describe the bug and/or send logs.": "Írd le a hibát és/vagy küld el a naplókat.",
|
||||
"Report a bug": "Hiba bejelentése",
|
||||
"Riot Desktop on %(platformName)s": "Riot Desktop ezen: %(platformName)s",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot nem támogatott mobil webböngészőn. Telepíted az alkalmazást?",
|
||||
"Search": "Keresés",
|
||||
"Search…": "Keresés…",
|
||||
"Send": "Küld",
|
||||
"Send logs": "Naplók elküldése",
|
||||
"This Room": "Ebben a szobában",
|
||||
"Unavailable": "Elérhetetlen",
|
||||
"Unknown device": "Ismeretlen eszköz",
|
||||
"Update": "Frissítés",
|
||||
"Uploading report": "Jelentés feltöltése",
|
||||
"What's New": "Mik az újdonságok",
|
||||
"What's new?": "Mik az újdonságok?",
|
||||
"Waiting for response from server": "Válasz várása a szervertől",
|
||||
"OK": "Rendben",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "HTTPS-t kell használnod hogy képernyőmegosztásos hívást kezdeményezz.",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "A problémák diagnosztizálása érdekében erről a kliensről a hibajelentésben naplók lesznek elküldve. Ha csak az alábbi szöveget szeretnéd elküldeni akkor ezt ne jelöld meg:",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Írd le a hibát. Mit csináltál? Mi az amit szerettél volna ha történik? Ezzel szemben mi az ami történt?",
|
||||
"Login": "Bejelentkezés",
|
||||
"Welcome to Riot.im": "Üdvözlünk a Riot.im-en",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizált, titkosított csevegés és kollaboráció [matrix] alapokon",
|
||||
"Search the room directory": "Keresés a szobák jegyzékében",
|
||||
"Chat with Riot Bot": "Csevegés a Riot Robottal",
|
||||
"Get started with some tips from Riot Bot!": "Kezdd el a Riot használatát a Riot Robot tippjei segítségével!",
|
||||
"General discussion about Matrix and Riot": "Általános beszélgetések a Matrixról és a Riotról",
|
||||
"Discussion of all things Matrix!": "Beszélgetések mindenről, ami a Matrixhoz kapcsolódik!",
|
||||
"Riot/Web & Desktop chat": "Riot/Web és asztali csevegés",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS és matrix-ios-sdk csevegés",
|
||||
"Riot/Android & matrix-android-sdk chat": "Riot/Android és matrix-android-sdk csevegés",
|
||||
"Matrix technical discussions": "Technikai jellegű beszélgetések a Matrixról",
|
||||
"Community-run support for Synapse": "Közösségi támogatás a Synapse-hez",
|
||||
"Admin support for Dendrite": "Adminisztrációs támogatás a Dendrite-hoz",
|
||||
"Announcements about Synapse releases": "Bejelentések a Synapse kiadásairól",
|
||||
"Running Matrix services": "Matrixszolgáltatások működtetése",
|
||||
"Support for those using and running matrix-appservice-irc": "Támogatás a matrix-appservice-irc használatáról és működtetéséről",
|
||||
"Building services on Matrix": "Szolgáltatások fejlesztése a Matrixra",
|
||||
"Support for those using the Matrix spec": "Támogatás a Matrix specifikáció használatáról",
|
||||
"Design and implementation of E2E in Matrix": "A végponttól végpontig történő titkosítás (E2E) tervezése és implementációja a Matrixban",
|
||||
"Implementing VR services with Matrix": "A Matrixszal együttműködő virtuális valóság (VR) szolgáltatások implementációja",
|
||||
"Implementing VoIP services with Matrix": "A Matrixszal együttműködő VoIP szolgáltatások implementációja",
|
||||
"Discussion of the Identity Service API": "Beszélgetések az Identity Service API-ról",
|
||||
"Support for those using, running and writing other bridges": "Támogatás egyéb hídak használáról, működtetéséről és fejlesztéséről",
|
||||
"Contributing code to Matrix and Riot": "Hozzájárulás a Matrix és Riot programkódjának fejlesztéséhez",
|
||||
"Dev chat for the Riot/Web dev team": "Csevegés a Riot/Web fejlesztői csapatával fejlesztőknek",
|
||||
"Dev chat for the Dendrite dev team": "Csevegés a Dendrite fejlesztői csapatával fejlesztőknek",
|
||||
"Co-ordination for Riot/Web translators": "Egyeztetés a Riot/Web fordítóival",
|
||||
"Failed to change password. Is your password correct?": "Nem sikerült megváltoztatni a jelszót. Helyesen írtad be a jelszavadat?",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Már sok létező szoba van a Matrixon, melyek más hálózatokkal vannak összekapcsolva (Slack, IRC, Gitter stb.) vagy függetlenek. Látogasd meg a szobajegyzéket!",
|
||||
"You have successfully set a password!": "Sikeresen állítottál be jelszót!",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "Most már visszatérhetsz a fiókodhoz kijelentkezés után, és más eszközökkel is be tudsz jelentkezni.",
|
||||
"Continue": "Folytatás",
|
||||
"Please set a password!": "Kérlek, állíts be egy jelszót!",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "Ezzel visszatérhetsz kijelentkezés után a fiókodhoz és más eszközökkel is be tudsz jelentkezni.",
|
||||
"(HTTP status %(httpStatus)s)": "(HTTP állapot %(httpStatus)s)",
|
||||
"You have successfully set a password and an email address!": "Sikeresen beállítottad a jelszavad és e-mail címed!",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Ha meggondolod magad, bármikor beállíthatod az e-mail címed a felhasználói beállításoknál.",
|
||||
"To return to your account in future you need to <u>set a password</u>": "A fiókba való visszalépéshez <u>jelszót</u> kell beállítanod",
|
||||
"Set Password": "Jelszó beállítása",
|
||||
"Warning": "Figyelmeztetés",
|
||||
"Checking for an update...": "Frissítés keresése...",
|
||||
"Error encountered (%(errorDetail)s).": "Hiba történt (%(errorDetail)s).",
|
||||
"No update available.": "Frissítés nem érthető el.",
|
||||
"Downloading update...": "Frissítés letöltése...",
|
||||
"Couldn't load home page": "Kezdőképernyő betöltése sikertelen",
|
||||
"Bug report sent": "Hibajelentés elküldve",
|
||||
"Thank you!": "Köszönjük!",
|
||||
"Back": "Vissza",
|
||||
"Developer Tools": "Fejlesztői eszközök",
|
||||
"Failed to send custom event.": "Egyéni esemény elküldése nem sikerült.",
|
||||
"Send Custom Event": "Egyéni esemény elküldése",
|
||||
"Send Custom State Event": "Egyéni állapot esemény küldése",
|
||||
"Explore Room State": "Szoba állapot felfedezése",
|
||||
"Event sent!": "Esemény elküldve!",
|
||||
"Event Type": "Esemény típusa",
|
||||
"Event Content": "Esemény tartalma",
|
||||
"State Key": "Állapot kulcs",
|
||||
"Filter results": "Találatok szűrése",
|
||||
"You must specify an event type!": "Meg kell határoznod az esemény típusát!",
|
||||
"Show message in desktop notification": "Üzenetek megmutatása az asztali értesítésekben",
|
||||
"Pin Message": "Üzenet kitűzése",
|
||||
"Unpin Message": "Üzenet levétele",
|
||||
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Bejelentkezhetsz más Matrix szerverbe ha használhatod a saját szerver opciót és megadod egy másik szerver URL-jét.<br/>Ezzel egy másik szerveren egy már meglévő fiókot tudsz használni.<br/><br/>Beállíthatsz egyedi azonosító szervert de akkor nem tudsz másokat e-mail cím alapján meghívni és téged sem tudnak.",
|
||||
"Edit": "Szerkeszt",
|
||||
"Register": "Regisztrál",
|
||||
"Rooms": "Szobák",
|
||||
"Invite to this community": "Meghívás ebbe a közösségbe",
|
||||
"Add rooms to this community": "Szobák hozzáadása ehhez a közösséghez",
|
||||
"Toolbox": "Szerszámok",
|
||||
"Send Account Data": "Fiók adatok küldése",
|
||||
"Explore Account Data": "Fiók adatok böngészése"
|
||||
}
|
195
src/i18n/strings/id.json
Normal file
195
src/i18n/strings/id.json
Normal file
|
@ -0,0 +1,195 @@
|
|||
{
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s melalui %(browserName)s di %(osName)s",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">Safari</a> dan <a href=\"http://opera.com\">Opera</a> juga berfungsi.",
|
||||
"A new version of Riot is available.": "Riot versi baru telah tersedia.",
|
||||
"Add an email address above to configure email notifications": "Tambahkan alamat email di atas untuk konfigurasi notifikasi email",
|
||||
"Advanced notification settings": "Pengaturan notifikasi lanjutan",
|
||||
"All messages": "Semua pesan",
|
||||
"All messages (loud)": "Semua pesan (keras)",
|
||||
"All Rooms": "Semua Ruang",
|
||||
"All notifications are currently disabled for all targets.": "Semua notifikasi saat ini dinonaktifkan untuk semua target.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Terjadi kesalahan saat menyimpan preferensi notifikasi email Anda.",
|
||||
"Call invitation": "Undangan panggilan",
|
||||
"Cancel": "Batal",
|
||||
"Cancel Sending": "Batalkan pengiriman",
|
||||
"Can't update user notification settings": "Tidak dapat memperbarui pengaturan notifikasi pengguna",
|
||||
"Changelog": "Daftar perubahan",
|
||||
"Close": "Tutup",
|
||||
"Collapse panel": "Lipat panel",
|
||||
"Collecting app version information": "Mengumpukan informasi versi aplikasi",
|
||||
"Collecting logs": "Mengumpulkan catatan",
|
||||
"Couldn't find a matching Matrix room": "Tidak dapat menemukan ruang Matrix yang sesuai",
|
||||
"Custom Server Options": "Pilihan Server Khusus",
|
||||
"customServer_text": "Anda dapat menggunakan opsi server khusus untuk masuk ke server Matrix lain dengan menyebutkan URL server Home.<br/>Hal ini memperbolehkan Anda untuk menggunakan Riot dengan akun Matrix yang sudah ada di server Home yang berbeda.<br/><br/>Anda juga bisa mengatur server identitas khusus tapi Anda tidak akan dapat mengundang pengguna melalui alamat email, atau diundang dengan alamat email Anda.",
|
||||
"delete the alias.": "hapus alias.",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Hapus alias ruang %(alias)s dan hapus %(name)s dari direktori?",
|
||||
"Describe your problem here.": "Jelaskan masalah anda di sini.",
|
||||
"Direct Chat": "Obrolan Langsung",
|
||||
"Directory": "Direktori",
|
||||
"Dismiss": "Abaikan",
|
||||
"Download this file": "Unduh file ini",
|
||||
"Enable audible notifications in web client": "Aktifkan notifikasi suara di klien web",
|
||||
"Enable desktop notifications": "Aktifkan notifikasi desktop",
|
||||
"Enable email notifications": "Aktifkan notifikasi email",
|
||||
"Enable notifications for this account": "Aktifkan notifikasi untuk akun ini",
|
||||
"Enable them now": "Aktifkan sekarang",
|
||||
"Enter keywords separated by a comma:": "Masukkan kata kunci dipisahkan oleh koma:",
|
||||
"Error": "Terjadi Kesalahan",
|
||||
"Error saving email notification preferences": "Terjadi kesalahan saat menyimpan pilihan notifikasi email",
|
||||
"#example": "#contoh",
|
||||
"Expand panel": "Luaskan panel",
|
||||
"Failed to add tag %(tagName)s to room": "Gagal menambahkan tag %(tagName)s ke ruang",
|
||||
"Failed to change settings": "Gagal mengubah pengaturan",
|
||||
"Failed to forget room %(errCode)s": "Gagal melupakan ruang %(errCode)s",
|
||||
"Failed to update keywords": "Gagal memperbarui kata kunci",
|
||||
"Failed to get protocol list from Home Server": "Gagal mendapatkan daftar protokol dari Server Home",
|
||||
"Failed to get public room list": "Gagal mendapatkan daftar ruang publik",
|
||||
"Failed to remove tag %(tagName)s from room": "Gagal menghapus tag %(tagName)s dari ruang",
|
||||
"Failed to send report: ": "Gagal mengirim laporan: ",
|
||||
"Failed to set direct chat tag": "Gagal mengatur tag obrolan langsung",
|
||||
"Failed to set Direct Message status of room": "Gagal mengatur status Pesan Langsung dari ruang",
|
||||
"Favourite": "Favorit",
|
||||
"Fetching third party location failed": "Gagal mengambil lokasi pihak ketiga",
|
||||
"Files": "Files",
|
||||
"Filter room names": "Saring nama ruang",
|
||||
"Forget": "Lupakan",
|
||||
"Forward Message": "Teruskan Pesan",
|
||||
"Guests can join": "Tamu dapat gabung",
|
||||
"Hide panel": "Sembunyikan panel",
|
||||
"(HTTP status %(httpStatus)s)": "(status HTTP %(httpStatus)s)",
|
||||
"I understand the risks and wish to continue": "Saya mengerti resikonya dan berharap untuk melanjutkan",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Untuk diagnosis permasalahannya, catatan dari klien ini akan dikirimkan bersama laporan bug. Jika Anda memilih untuk hanya mengirimkan pesan di atas, mohon hapus centang:",
|
||||
"Invite to this room": "Undang ke ruang ini",
|
||||
"Keywords": "Kata Kunci",
|
||||
"Leave": "Tinggalkan",
|
||||
"Login": "Masuk",
|
||||
"Loading bug report module": "Memuat modul laporan bug",
|
||||
"Low Priority": "Prioritas Rendah",
|
||||
"Members": "Anggota",
|
||||
"Mentions only": "Hanya jika disinggung",
|
||||
"Messages containing my display name": "Pesan mengandung nama tampilan saya",
|
||||
"Messages containing <span>keywords</span>": "Pesan mengandung <span>kata kunci</span>",
|
||||
"Messages containing my user name": "Pesan mengandung nama pengguna saya",
|
||||
"Messages in group chats": "Pesan di obrolan grup",
|
||||
"Messages in one-to-one chats": "Pesan di obrolan satu-ke-satu",
|
||||
"Messages sent by bot": "Pesan dikirim oleh bot",
|
||||
"more": "lagi",
|
||||
"Mute": "Bisu",
|
||||
"No rooms to show": "Tidak ada ruang ditunjukkan",
|
||||
"Noisy": "Berisik",
|
||||
"Notification targets": "Target notifikasi",
|
||||
"Notifications": "Notifikasi",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "Notifikasi pada kata kunci berikut mengikuti aturan dimana tidak dapat ditampilkan di sini:",
|
||||
"Notify for all other messages/rooms": "Beritau semua pesan/ruang",
|
||||
"Notify me for anything else": "Beritau saya untuk lainnya",
|
||||
"Off": "Mati",
|
||||
"On": "Nyala",
|
||||
"Operation failed": "Operasi gagal",
|
||||
"Permalink": "Permalink",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Harap jelaskan bug. Apa yang Anda lakukan? Apa yang Anda harap terjadi? Apa yang sebenarnya terjadi?",
|
||||
"Please describe the bug and/or send logs.": "Harap jelaskan bug dan/atau kirim catatan.",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Harap install <a href=\"https://www.google.com/chrome\">Chrome</a> atau <a href=\"https://getfirefox.com\">Firefox</a> untuk pengalaman terbaik.",
|
||||
"powered by Matrix": "didukung oleh Matrix",
|
||||
"Quote": "Kutip",
|
||||
"Reject": "Tolak",
|
||||
"Remove %(name)s from the directory?": "Hapus %(name)s dari direktori?",
|
||||
"Remove": "Hapus",
|
||||
"remove %(name)s from the directory.": "hapus %(name)s dari direktori.",
|
||||
"Remove from Directory": "Hapus dari DIrektori",
|
||||
"Report a bug": "Laporkan bug",
|
||||
"Resend": "Kirim Ulang",
|
||||
"Riot Desktop on %(platformName)s": "Riot Desktop di %(platformName)s",
|
||||
"Riot does not know how to join a room on this network": "Riot tidak tau bagaimana gabung ruang di jaringan ini",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot tidak mendukung web seluler. Install aplikasi?",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot menggunakan banyak fitur terdepan dari browser, dimana tidak tersedia atau dalam fase eksperimen di browser Anda.",
|
||||
"Room not found": "Ruang tidak ditemukan",
|
||||
"Search": "Cari",
|
||||
"Search…": "Cari…",
|
||||
"Search for a room": "Cari ruang obrolan",
|
||||
"Send": "Kirim",
|
||||
"Send logs": "Kirim catatan",
|
||||
"Source URL": "URL sumber",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Maaf, browser Anda <b>tidak</b> dapat menjalankan Riot.",
|
||||
"The Home Server may be too old to support third party networks": "Server Home mungkin terlalu kuno untuk mendukung jaringan pihak ketiga",
|
||||
"There are advanced notifications which are not shown here": "Ada notifikasi lanjutan yang tidak ditampilkan di sini",
|
||||
"The server may be unavailable or overloaded": "Server mungkin tidak tersedia atau kelebihan muatan",
|
||||
"This Room": "Ruang ini",
|
||||
"Unable to fetch notification target list": "Tidak dapat mengambil daftar notifikasi target",
|
||||
"Unable to join network": "Tidak dapat bergabung di jaringan",
|
||||
"Unable to look up room ID from server": "Tidak dapat mencari ID ruang dari server",
|
||||
"Unavailable": "Tidak Tersedia",
|
||||
"Unhide Preview": "Tampilkan Pratinjau",
|
||||
"Unknown device": "Perangkat Tidak Diketahui",
|
||||
"unknown error code": "kode kesalahan tidak diketahui",
|
||||
"Unnamed room": "Ruang tanpa nama",
|
||||
"Update": "Perbarui",
|
||||
"Uploaded on %(date)s by %(user)s": "Diunggah pada %(date)s oleh %(user)s",
|
||||
"Uploading report": "Unggah laporan",
|
||||
"View Decrypted Source": "Tampilkan Sumber Terdekripsi",
|
||||
"View Source": "Tampilkan Sumber",
|
||||
"What's New": "Apa Yang Baru",
|
||||
"What's new?": "Apa yang baru?",
|
||||
"Waiting for response from server": "Menunggu respon dari server",
|
||||
"When I'm invited to a room": "Ketika Saya diundang ke ruang",
|
||||
"World readable": "Terpublikasi Umum",
|
||||
"You cannot delete this image. (%(code)s)": "Anda tidak dapat menghapus gambar ini. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "Anda tidak dapat menghapus pesan ini. (%(code)s)",
|
||||
"You are not receiving desktop notifications": "Anda tidak menerima notifikasi desktop",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Anda mungkin sudah konfigurasi di klien selain Riot. Anda tidak dapat setel di Riot tetap berlaku",
|
||||
"Sunday": "Minggu",
|
||||
"Monday": "Senin",
|
||||
"Tuesday": "Selasa",
|
||||
"Wednesday": "Rabu",
|
||||
"Thursday": "Kamis",
|
||||
"Friday": "Jumat",
|
||||
"Saturday": "Sabtu",
|
||||
"Today": "Hari Ini",
|
||||
"Yesterday": "Kemarin",
|
||||
"OK": "OK",
|
||||
"Warning": "Peringatan",
|
||||
"Checking for an update...": "Cek pembaruan...",
|
||||
"Error encountered (%(errorDetail)s).": "Terjadi kesalahan (%(errorDetail)s).",
|
||||
"No update available.": "Tidak ada pembaruan.",
|
||||
"Downloading update...": "Unduh pembaruan...",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Anda perlu menggunakan HTTPS untuk melakukan panggilan berbagi-layar.",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Dengan browser ini, tampilan dari aplikasi mungkin tidak sesuai, dan beberapa atau bahkan semua fitur mungkin tidak berjalan. Jika Anda ingin tetap mencobanya, Anda bisa melanjutkan, tapi Anda tanggung sendiri jika muncul masalah yang terjadi!",
|
||||
"Welcome to Riot.im": "Selamat datang di Riot.im",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Obrolan terenkripsi, terdesentralisasi & kolaborasi didukung oleh [matrix]",
|
||||
"Search the room directory": "Cari di direktori ruang",
|
||||
"Chat with Riot Bot": "Mengobrol dengan bot Riot",
|
||||
"Get started with some tips from Riot Bot!": "Mulai dengan beberapa tip dari Bot Riot!",
|
||||
"General discussion about Matrix and Riot": "Diskusi umum tentang Matrix dan Riot",
|
||||
"Discussion of all things Matrix!": "Diskusi semua tentang Matrix!",
|
||||
"Riot/Web & Desktop chat": "Obrolan Riot/Web & Desktop",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Obrolan Riot/iOS & matrix-ios-sdk",
|
||||
"Riot/Android & matrix-android-sdk chat": "Obrolan Riot/Android & matrix-android-sdk",
|
||||
"Matrix technical discussions": "Diskusi teknis Matrix",
|
||||
"Running Matrix services": "Mengoperasikan layanan Matrix",
|
||||
"Community-run support for Synapse": "Dukungan komunitas untuk Synapse",
|
||||
"Admin support for Dendrite": "Dukungan Admin untuk Dendrite",
|
||||
"Announcements about Synapse releases": "Pengumuman tentang rilis Synapse",
|
||||
"Support for those using and running matrix-appservice-irc": "Dukungan untuk pengguna dan penyedia matrix-appservice-irc",
|
||||
"Building services on Matrix": "Membangun layanan dengan Matrix",
|
||||
"Support for those using the Matrix spec": "Dukungan untuk pengguna Matrix spec",
|
||||
"Design and implementation of E2E in Matrix": "Desain dan implementasi E2E di Matrix",
|
||||
"Implementing VR services with Matrix": "Implementasi layanan VR dengan Matrix",
|
||||
"Implementing VoIP services with Matrix": "Implementasi layanan VoIP dengan Matrix",
|
||||
"Discussion of the Identity Service API": "Diskusi tentang API Identity Service",
|
||||
"Support for those using, running and writing other bridges": "Dukungan untuk pengguna, penyedia dan penulis jembatan lainnya",
|
||||
"Contributing code to Matrix and Riot": "Kontribusi kode untuk Matrix dan Riot",
|
||||
"Dev chat for the Riot/Web dev team": "Obrolan Developer untuk tim developer Riot/Web",
|
||||
"Dev chat for the Dendrite dev team": "Obrolan Developer untuk tim developer Dendrite",
|
||||
"Co-ordination for Riot/Web translators": "Koordinasi untuk penerjemah Riot/Web",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Banyak ruang sudah tersedia di Matrix, terhubung ke jaringan yang sudah ada (Slack, IRC, Gitter dls) atau independen. Cek direktori!",
|
||||
"Failed to change password. Is your password correct?": "Gagal untuk mengubah password. Apakah password Anda benar?",
|
||||
"You have successfully set a password!": "Anda berhasil mengubah password!",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "Anda dapat kembali ke akun setelah keluar dan masuk kembali di perangkat lain.",
|
||||
"Continue": "Lanjut",
|
||||
"Please set a password!": "Mohon isi password!",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "Hal ini akan memperbolehkan anda kembali ke akun setelah keluar dan masuk kembali di perangkat lain.",
|
||||
"You have successfully set a password and an email address!": "Anda telah berhasil mengubah password dan alamat email!",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Ingat, Anda selalu dapat mengubah alamat email di pengaturan pengguna jika anda berubah pikiran.",
|
||||
"To return to your account in future you need to <u>set a password</u>": "Untuk kembali ke akun di lain waktu, Anda perlu <u>mengisi password</u>",
|
||||
"Set Password": "Ubah Password",
|
||||
"Couldn't load home page": "Tidak dapat memuat halaman utama"
|
||||
}
|
211
src/i18n/strings/it.json
Normal file
211
src/i18n/strings/it.json
Normal file
|
@ -0,0 +1,211 @@
|
|||
{
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "Anche <a href=\"http://apple.com/safari\">Safari</a> e <a href=\"http://opera.com\"> Opera</a> funzionano.",
|
||||
"A new version of Riot is available.": "È disponibile una nuova versione di Riot.",
|
||||
"Add an email address above to configure email notifications": "Aggiungi un indirizzo email sopra per configurare le notifiche via email",
|
||||
"Advanced notification settings": "Impostazioni di notifica avanzate",
|
||||
"All messages": "Tutti i messaggi",
|
||||
"All messages (loud)": "Tutti i messaggi (rumoroso)",
|
||||
"All Rooms": "Tutte le stanze",
|
||||
"An error occurred whilst saving your email notification preferences.": "Si è verificato un errore durante il salvataggio delle tue preferenze sulle notifiche email.",
|
||||
"Call invitation": "Invito ad una chiamata",
|
||||
"Cancel": "Annulla",
|
||||
"Cancel Sending": "Annulla invio",
|
||||
"Can't update user notification settings": "Impossibile aggiornare le impostazioni di notifica dell'utente",
|
||||
"Changelog": "Cambiamenti",
|
||||
"Close": "Chiudi",
|
||||
"Collapse panel": "Riduci pannello",
|
||||
"Collecting app version information": "Raccolta di informazioni sulla versione dell'applicazione",
|
||||
"Collecting logs": "Sto recuperando i log",
|
||||
"Couldn't find a matching Matrix room": "Impossibile trovare una stanza Matrix corrispondente",
|
||||
"Custom Server Options": "Opzioni Server Personalizzate",
|
||||
"customServer_text": "Puoi utilizzare un server personale per accedere su altri server Matrix specificando un diverso indirizzo URL per il server Home.<br/>Questo ti permetterà di usare Riot con un account Matrix già esistente su un altro server.<br/><br/>Puoi anche specificare un diverso server di identità ma non sarai in grado di invitare utenti, o di essere invitato tramite indirizzo email.",
|
||||
"delete the alias.": "elimina l'alias.",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Eliminare l'alias %(alias)s e rimuovere %(name)s dalla lista?",
|
||||
"Describe your problem here.": "Descrivi qui il tuo problema.",
|
||||
"Direct Chat": "Chat Diretta",
|
||||
"Directory": "Lista",
|
||||
"Dismiss": "Scarta",
|
||||
"Download this file": "Scarica questo file",
|
||||
"Enable audible notifications in web client": "Abilita notifiche audio nel client web",
|
||||
"Enable desktop notifications": "Abilita le notifiche desktop",
|
||||
"Enable email notifications": "Abilita le notifiche email",
|
||||
"Enable notifications for this account": "Abilita le notifiche per questo account",
|
||||
"Enable them now": "Abilitale adesso",
|
||||
"Enter keywords separated by a comma:": "Inserisci le parole chiave separate da virgole:",
|
||||
"Error": "Errore",
|
||||
"Error saving email notification preferences": "Errore nel salvataggio delle preferenze di notifica email",
|
||||
"#example": "#esempio",
|
||||
"Expand panel": "Espandi il pannello",
|
||||
"Failed to add tag %(tagName)s to room": "Impossibile aggiungere l'etichetta %(tagName)s alla stanza",
|
||||
"Failed to change settings": "Impossibile modificare le impostazioni",
|
||||
"Failed to update keywords": "Impossibile aggiornare le parole chiave",
|
||||
"Failed to get protocol list from Home Server": "Impossibile ottenere la lista di protocolli dal server Home",
|
||||
"Failed to get public room list": "Impossibile ottenere la lista delle stanze pubbliche",
|
||||
"Failed to remove tag %(tagName)s from room": "Impossibile rimuovere l'etichetta %(tagName)s dalla stanza",
|
||||
"Failed to send report: ": "Impossibile inviare il resoconto: ",
|
||||
"Failed to set direct chat tag": "Impossibile impostare l'etichetta di chat diretta",
|
||||
"Failed to set Direct Message status of room": "Impossibile impostare lo stato di Messaggio Diretto alla stanza",
|
||||
"Favourite": "Preferito",
|
||||
"Files": "File",
|
||||
"Filter room names": "Filtra i nomi delle stanze",
|
||||
"Forget": "Dimentica",
|
||||
"Forward Message": "Inoltra messaggio",
|
||||
"Guests can join": "Gli ospiti sono ammessi",
|
||||
"Hide panel": "Nascondi pannello",
|
||||
"I understand the risks and wish to continue": "Sono consapevole dei rischi e vorrei continuare",
|
||||
"Invite to this room": "Invita in questa stanza",
|
||||
"Keywords": "Parole chiave",
|
||||
"Leave": "Abbandona",
|
||||
"Login": "Entra",
|
||||
"All notifications are currently disabled for all targets.": "Tutte le notifiche sono disabilitate per tutti gli obbiettivi.",
|
||||
"Failed to forget room %(errCode)s": "Impossibile dimenticare la stanza %(errCode)s",
|
||||
"Fetching third party location failed": "Rilevazione posizione di terze parti fallita",
|
||||
"(HTTP status %(httpStatus)s)": "(stato HTTP %(httpStatus)s)",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Per diagnosticare i problemi, i log da questo client verranno inviati con questo bug report. Se vuoi solo mandare il testo sopra, togli la spunta a:",
|
||||
"Loading bug report module": "Caricamento modulo di segnalazione errori",
|
||||
"Low Priority": "Priorità bassa",
|
||||
"Members": "Membri",
|
||||
"Mentions only": "Solo le citazioni",
|
||||
"Messages containing my display name": "Messaggi contenenti il mio nome visualizzato",
|
||||
"Messages containing my user name": "Messaggi contenenti il mio nome utente",
|
||||
"Messages in group chats": "Messaggi nelle chat di gruppo",
|
||||
"Messages in one-to-one chats": "Messaggi in chat uno-a-uno",
|
||||
"Messages sent by bot": "Messaggi inviati dai bot",
|
||||
"more": "altro",
|
||||
"Mute": "Silenzia",
|
||||
"No rooms to show": "Nessuna stanza da mostrare",
|
||||
"Noisy": "Rumoroso",
|
||||
"Notifications": "Notifiche",
|
||||
"Notify for all other messages/rooms": "Notifica per tutti gli altri messaggi/stanze",
|
||||
"Notify me for anything else": "Notificami per qualsiasi altra cosa",
|
||||
"Off": "Spento",
|
||||
"On": "Acceso",
|
||||
"Operation failed": "Operazione fallita",
|
||||
"Permalink": "Link permanente",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Per favore descrivi l'errore. Cosa hai fatto? Cosa ti aspettavi accadesse? Cos'è successo invece?",
|
||||
"Please describe the bug and/or send logs.": "Per favore descrivi l'errore e/o invia i log.",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Per favore installa<a href=\"https://www.google.com/chrome\">Chrome</a> o <a href=\"https://getfirefox.com\">Firefox</a> per un'esperienza migliore.",
|
||||
"powered by Matrix": "offerto da Matrix",
|
||||
"Quote": "Cita",
|
||||
"Reject": "Rifiuta",
|
||||
"Remove %(name)s from the directory?": "Rimuovere %(name)s dalla lista?",
|
||||
"Remove": "Rimuovi",
|
||||
"remove %(name)s from the directory.": "rimuovi %(name)s dalla lista.",
|
||||
"Remove from Directory": "Rimuovi dalla lista",
|
||||
"Report a bug": "Segnala un errore",
|
||||
"Resend": "Reinvia",
|
||||
"Riot Desktop on %(platformName)s": "Riot Desktop su %(platformName)s",
|
||||
"Riot does not know how to join a room on this network": "Riot non sa come entrare nella stanza su questa rete",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot non è supportato sul web mobile. Vuoi installare l'applicazione?",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot utilizza molte funzioni avanzate del browser, alcune delle quali non sono disponibili o sono sperimentali nel tuo browser attuale.",
|
||||
"Room not found": "Stanza non trovata",
|
||||
"Search": "Cerca",
|
||||
"Search…": "Cerca…",
|
||||
"Search for a room": "Cerca una stanza",
|
||||
"Send": "Invia",
|
||||
"Send logs": "Invia i log",
|
||||
"Source URL": "URL d'origine",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Spiacenti, ma il tuo browser <b>non</b> è in grado di utilizzare Riot.",
|
||||
"Messages containing <span>keywords</span>": "Messaggi contenenti <span>parole chiave</span>",
|
||||
"Notification targets": "Obiettivi di notifica",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "Le notifiche alle seguenti parole chiave seguono regole che non possono essere mostrate qui:",
|
||||
"The Home Server may be too old to support third party networks": "Il server Home potrebbe essere troppo vecchio per supportare reti di terze parti",
|
||||
"There are advanced notifications which are not shown here": "Ci sono notifiche avanzate che non sono mostrate qui",
|
||||
"The server may be unavailable or overloaded": "Il server potrebbe essere non disponibile o sovraccarico",
|
||||
"This Room": "Questa stanza",
|
||||
"Unable to join network": "Impossibile collegarsi alla rete",
|
||||
"Unable to look up room ID from server": "Impossibile consultare l'ID stanza dal server",
|
||||
"Unavailable": "Non disponibile",
|
||||
"Unhide Preview": "Mostra anteprima",
|
||||
"Unknown device": "Dispositivo sconosciuto",
|
||||
"unknown error code": "codice errore sconosciuto",
|
||||
"Unnamed room": "Stanza senza nome",
|
||||
"Update": "Aggiornamento",
|
||||
"Uploaded on %(date)s by %(user)s": "Caricato il %(date)s da %(user)s",
|
||||
"Uploading report": "Sto caricando il report",
|
||||
"View Decrypted Source": "Visualizza sorgente decifrato",
|
||||
"View Source": "Visualizza sorgente",
|
||||
"What's New": "Novità",
|
||||
"What's new?": "Cosa c'è di nuovo?",
|
||||
"Waiting for response from server": "In attesa di una risposta dal server",
|
||||
"When I'm invited to a room": "Quando vengo invitato/a in una stanza",
|
||||
"You cannot delete this image. (%(code)s)": "Non puoi eliminare quest'immagine. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "Non puoi eliminare questo messaggio. (%(code)s)",
|
||||
"You are not receiving desktop notifications": "Non stai ricevendo le notifiche sul desktop",
|
||||
"World readable": "Leggibile da tutti",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Potresti averli configurati in un client diverso da Riot. Non puoi cambiarli in Riot ma sono comunque applicati",
|
||||
"Sunday": "Domenica",
|
||||
"Monday": "Lunedì",
|
||||
"Tuesday": "Martedì",
|
||||
"Wednesday": "Mercoledì",
|
||||
"Thursday": "Giovedì",
|
||||
"Friday": "Venerdì",
|
||||
"Saturday": "Sabato",
|
||||
"Today": "Oggi",
|
||||
"Yesterday": "Ieri",
|
||||
"OK": "OK",
|
||||
"Warning": "Attenzione",
|
||||
"Checking for an update...": "Controllo aggiornamenti...",
|
||||
"Error encountered (%(errorDetail)s).": "Errore riscontrato (%(errorDetail)s).",
|
||||
"No update available.": "Nessun aggiornamento disponibile.",
|
||||
"Downloading update...": "Scaricamento aggiornamento...",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Devi usare HTTPS per utilizzare una chiamata con condivisione schermo.",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Con il tuo attuale browser, l'aspetto e la sensazione generale dell'applicazione potrebbero essere completamente sbagliati e alcune delle funzionalità potrebbero non funzionare. Se vuoi provare comunque puoi continuare, ma non riceverai aiuto per qualsiasi problema tu possa riscontrare!",
|
||||
"Welcome to Riot.im": "Benvenuto/a su Riot.im",
|
||||
"Search the room directory": "Cerca nella lista delle stanze",
|
||||
"Chat with Riot Bot": "Chatta con Riot Bot",
|
||||
"Get started with some tips from Riot Bot!": "Inizia con alcuni consigli di Riot Bot!",
|
||||
"General discussion about Matrix and Riot": "Discussioni generali riguardo Matrix e Riot",
|
||||
"Couldn't load home page": "Impossibile caricare la pagina principale",
|
||||
"Riot/Web & Desktop chat": "Chat su Riot/Web & Desktop",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Chat su Riot/iOS & matrix-ios-sdk",
|
||||
"Riot/Android & matrix-android-sdk chat": "Chat su Riot/Android & matrix-android-sdk",
|
||||
"Matrix technical discussions": "Discussioni tecniche su Matrix",
|
||||
"Running Matrix services": "Esecuzione servizi Matrix",
|
||||
"Community-run support for Synapse": "Supporto per Synapse dalla comunità",
|
||||
"Admin support for Dendrite": "Supporto amministrativo per Dendrite",
|
||||
"Announcements about Synapse releases": "Annunci riguardo i rilasci di Synapse",
|
||||
"Support for those using and running matrix-appservice-irc": "Supporto per chi usa e amministra matrix-appservice-irc",
|
||||
"Building services on Matrix": "Costruzione servizi su Matrix",
|
||||
"Support for those using the Matrix spec": "Supporto per chi utilizza le specifiche Matrix",
|
||||
"Design and implementation of E2E in Matrix": "Design e implementazione di E2E in Matrix",
|
||||
"Implementing VR services with Matrix": "Implementazione servizi VR con Matrix",
|
||||
"Implementing VoIP services with Matrix": "Implementazione servizi VoIP con Matrix",
|
||||
"Discussion of the Identity Service API": "Discussione sull'Identity Service API",
|
||||
"Support for those using, running and writing other bridges": "Supporto per chi usa, amministra e scrive altri bridge",
|
||||
"Contributing code to Matrix and Riot": "Contributi al codice di Matrix e Riot",
|
||||
"Co-ordination for Riot/Web translators": "Coordinamento per i traduttori di Riot/Web",
|
||||
"Failed to change password. Is your password correct?": "Modifica password fallita. La tua password è corretta?",
|
||||
"You have successfully set a password!": "Hai impostato una password con successo!",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "Ora puoi tornare al tuo account dopo esserti disconnesso e accedere su altri dispositivi.",
|
||||
"Continue": "Continua",
|
||||
"Please set a password!": "Imposta una password!",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "Questo ti permetterà di ritornare al tuo account dopo esserti disconnesso e accedere in altri dispositivi.",
|
||||
"You have successfully set a password and an email address!": "Hai impostato con successo una password e un indirizzo email!",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Ricorda, puoi sempre specificare un indirizzo email nelle impostazioni utente se cambi idea.",
|
||||
"To return to your account in future you need to <u>set a password</u>": "Per tornare nel tuo account in futuro devi <u>impostare una password</u>",
|
||||
"Set Password": "Imposta Password",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s su %(osName)s",
|
||||
"Unable to fetch notification target list": "Impossibile ottenere la lista di obiettivi notifiche",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Chat & collaborazione decentralizzata e criptata offerta da [matrix]",
|
||||
"Discussion of all things Matrix!": "Discussione su tutto quanto riguardi Matrix!",
|
||||
"Dev chat for the Riot/Web dev team": "Chat per gli sviluppatori di Riot/Web",
|
||||
"Dev chat for the Dendrite dev team": "Chat per gli sviluppatori di Dendrite",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Esistono già molte stanze in Matrix, collegate a reti già esistenti (Slack, IRC, Gitter ecc) o indipendenti. Dai un'occhiata all'elenco!",
|
||||
"Thank you!": "Grazie!",
|
||||
"Bug report sent": "Rapporto inviato",
|
||||
"Back": "Indietro",
|
||||
"Developer Tools": "Strumenti per Sviluppatori",
|
||||
"Failed to send custom event.": "Impossibile inviare evento personalizzato.",
|
||||
"Filter results": "Filtra risultati",
|
||||
"Send Custom Event": "Invia Evento Personalizzato",
|
||||
"Send Custom State Event": "Invia Evento di Stato Personalizzato",
|
||||
"Explore Room State": "Esplora Stato Stanza",
|
||||
"You must specify an event type!": "Devi specificare un tipo di evento!",
|
||||
"Event sent!": "Evento inviato!",
|
||||
"Event Type": "Tipo di Evento",
|
||||
"Event Content": "Contenuto dell'Evento",
|
||||
"State Key": "Chiave dello Stato",
|
||||
"Show message in desktop notification": "Mostra i messaggi nelle notifiche desktop",
|
||||
"Edit": "Modifica"
|
||||
}
|
56
src/i18n/strings/ja.json
Normal file
56
src/i18n/strings/ja.json
Normal file
|
@ -0,0 +1,56 @@
|
|||
{
|
||||
"All messages": "全ての発言",
|
||||
"All messages (loud)": "全ての発言(通知音あり)",
|
||||
"Cancel": "取消",
|
||||
"Close": "閉じる",
|
||||
"Direct Chat": "対話",
|
||||
"Favourite": "お気に入り",
|
||||
"Hide panel": "右欄を非表示",
|
||||
"Invite to this room": "この部屋へ招待",
|
||||
"Low Priority": "低優先度",
|
||||
"Members": "参加者",
|
||||
"Mentions only": "呼び掛けられた時のみ",
|
||||
"Mute": "通知しない",
|
||||
"Notifications": "通知",
|
||||
"Report a bug": "バグを報告",
|
||||
"Resend": "再送信",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riotはスマートフォンでの表示に対応していません。できればアプリをインストールして頂けませんでしょうか?",
|
||||
"Room not found": "部屋が見つかりません",
|
||||
"Search": "検索",
|
||||
"Search…": "検索…",
|
||||
"Send": "送信",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "申し訳ありません。あなたのブラウザではRiotは<b>動作できません</b>。",
|
||||
"This Room": "この部屋",
|
||||
"Waiting for response from server": "サーバからの応答を待っています",
|
||||
"You cannot delete this message. (%(code)s)": "あなたはこの発言を削除できません (%(code)s)",
|
||||
"Sunday": "日曜日",
|
||||
"Monday": "月曜日",
|
||||
"Tuesday": "火曜日",
|
||||
"Wednesday": "水曜日",
|
||||
"Thursday": "木曜日",
|
||||
"Friday": "金曜日",
|
||||
"Saturday": "土曜日",
|
||||
"Today": "今日",
|
||||
"Yesterday": "昨日",
|
||||
"Warning": "警告",
|
||||
"No update available.": "更新はありません。",
|
||||
"Welcome to Riot.im": "Riot.imへようこそ",
|
||||
"Search the room directory": "部屋一覧を検索",
|
||||
"Failed to change password. Is your password correct?": "パスワード変更に失敗しました。パスワードは正しいですか?",
|
||||
"Set Password": "パスワードを設定",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">Safari</a>と<a href=\"http://opera.com\">Opera</a>でも動作します。",
|
||||
"A new version of Riot is available.": "新しいバージョンのRiotが利用可能です。",
|
||||
"All Rooms": "全ての部屋",
|
||||
"Changelog": "変更履歴",
|
||||
"Directory": "部屋一覧",
|
||||
"Download this file": "この添付ファイルをダウンロード",
|
||||
"Enable desktop notifications": "デスクトップ画面に通知を行う",
|
||||
"Enable email notifications": "電子メールでの通知を行う",
|
||||
"Enable notifications for this account": "このアカウントで通知を行う",
|
||||
"Failed to change settings": "設定の変更に失敗しました",
|
||||
"Failed to get public room list": "公開部屋一覧の取得に失敗しました",
|
||||
"Filter room names": "部屋名検索",
|
||||
"Forget": "忘れる",
|
||||
"Leave": "退室",
|
||||
"Files": "添付ファイル"
|
||||
}
|
195
src/i18n/strings/ko.json
Normal file
195
src/i18n/strings/ko.json
Normal file
|
@ -0,0 +1,195 @@
|
|||
{
|
||||
"A new version of Riot is available.": "라이엇의 새 버전을 사용하실 수 있어요.",
|
||||
"Add an email address above to configure email notifications": "이메일 알림을 설정하기 위해 이메일 주소를 추가해주세요",
|
||||
"Advanced notification settings": "고급 알림 설정",
|
||||
"All messages": "모든 메시지",
|
||||
"All messages (loud)": "모든 메시지 (크게)",
|
||||
"All Rooms": "모든 방",
|
||||
"All notifications are currently disabled for all targets.": "현재 모든 알림이 모든 상대에게서 꺼졌어요.",
|
||||
"An error occurred whilst saving your email notification preferences.": "이메일 알림을 설정하다가 오류가 일어났어요.",
|
||||
"Call invitation": "전화가 왔어요",
|
||||
"Cancel": "취소",
|
||||
"Cancel Sending": "보내기 취소",
|
||||
"Can't update user notification settings": "사용자 알림 설정을 갱신할 수 없어요",
|
||||
"Changelog": "바뀐 점",
|
||||
"Close": "닫기",
|
||||
"Collapse panel": "패널 접기",
|
||||
"Collecting app version information": "앱 버전 정보를 수집하는 중",
|
||||
"Collecting logs": "로그 수집 중",
|
||||
"Couldn't find a matching Matrix room": "일치하는 매트릭스 방을 찾을 수 없어요",
|
||||
"Custom Server Options": "사용자 지정 서버 설정",
|
||||
"delete the alias.": "가명을 지울게요.",
|
||||
"Describe your problem here.": "여기에 일어난 문제를 적어주세요.",
|
||||
"Direct Chat": "직접 이야기하기",
|
||||
"Directory": "목록",
|
||||
"Dismiss": "없애기",
|
||||
"Download this file": "이 파일 받기",
|
||||
"Enable desktop notifications": "컴퓨터에서 알림 받기",
|
||||
"Enable email notifications": "이메일로 알림 받기",
|
||||
"Enable notifications for this account": "이 계정의 알림 받기",
|
||||
"Error": "오류",
|
||||
"Error saving email notification preferences": "이메일 알림을 설정하는데 오류가 일어났어요",
|
||||
"#example": "#예",
|
||||
"Expand panel": "확장 패널",
|
||||
"Forget": "잊기",
|
||||
"Hide panel": "패널 숨기기",
|
||||
"I understand the risks and wish to continue": "위험할 수 있는 걸 알고 계속하기를 바라요",
|
||||
"Invite to this room": "이 방에 초대하기",
|
||||
"Leave": "떠나기",
|
||||
"Login": "로그인",
|
||||
"Loading bug report module": "오류 보고 모듈을 불러오는 중",
|
||||
"Low Priority": "낮은 우선순위",
|
||||
"Members": "구성원",
|
||||
"more": "더 보기",
|
||||
"Mute": "알림 끄기",
|
||||
"No rooms to show": "보여드릴 방이 없어요",
|
||||
"Notification targets": "알림 대상",
|
||||
"Notifications": "알림",
|
||||
"Off": "끄기",
|
||||
"On": "켜기",
|
||||
"Permalink": "고유주소",
|
||||
"Please describe the bug and/or send logs.": "오류를 적어주시거나 로그를 보내주세요.",
|
||||
"powered by Matrix": "매트릭스의 지원을 받고 있어요",
|
||||
"Quote": "인용하기",
|
||||
"Reject": "거절하기",
|
||||
"Remove %(name)s from the directory?": "목록에서 %(name)s을 지우시겠어요?",
|
||||
"Remove": "지우기",
|
||||
"remove %(name)s from the directory.": "목록에서 %(name)s을 지웠어요.",
|
||||
"Remove from Directory": "목록에서 지우기",
|
||||
"Report a bug": "오류 보고하기",
|
||||
"Resend": "다시 보내기",
|
||||
"Riot Desktop on %(platformName)s": "%(platformName)s에서 라이엇 컴퓨터판",
|
||||
"Riot is not supported on mobile web. Install the app?": "라이엇은 모바일 사이트를 지원하지 않아요. 앱을 설치하시겠어요?",
|
||||
"Room not found": "방을 찾지 못했어요",
|
||||
"Search": "찾기",
|
||||
"Search…": "찾기…",
|
||||
"Search for a room": "방에서 찾기",
|
||||
"Send": "보내기",
|
||||
"Send logs": "로그 보내기",
|
||||
"Source URL": "출처 URL",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "죄송해요. 브라우저에서 라이엇을 켤 수가 <b>없어요</b>.",
|
||||
"This Room": "방",
|
||||
"Unavailable": "이용할 수 없음",
|
||||
"Unknown device": "알 수 없는 장치",
|
||||
"unknown error code": "알 수 없는 오류 코드",
|
||||
"Unnamed room": "이름없는 방",
|
||||
"Update": "업데이트",
|
||||
"Uploading report": "보고를 올리는 중",
|
||||
"What's New": "새로운 점",
|
||||
"What's new?": "새로운 점은?",
|
||||
"Waiting for response from server": "서버에서 응답을 기다리는 중",
|
||||
"You cannot delete this image. (%(code)s)": "이 사진을 지우실 수 없어요. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "이 메시지를 지우실 수 없어요. (%(code)s)",
|
||||
"You are not receiving desktop notifications": "컴퓨터 알림을 받지 않고 있어요",
|
||||
"Sunday": "일요일",
|
||||
"Monday": "월요일",
|
||||
"Tuesday": "화요일",
|
||||
"Wednesday": "수요일",
|
||||
"Thursday": "목요일",
|
||||
"Friday": "금요일",
|
||||
"Saturday": "토요일",
|
||||
"Today": "오늘",
|
||||
"Yesterday": "어제",
|
||||
"OK": "알았어요",
|
||||
"Welcome to Riot.im": "라이엇에 오신 걸 환영해요",
|
||||
"Chat with Riot Bot": "Riot 봇과 이야기하기",
|
||||
"You have successfully set a password!": "비밀번호를 설정했어요!",
|
||||
"Continue": "게속하기",
|
||||
"Please set a password!": "비밀번호를 설정해주세요!",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(osName)s의 %(browserName)s을 통한 %(appName)s",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">사파리</a>와 <a href=\"http://opera.com\">오페라</a>에서도 작동해요.",
|
||||
"customServer_text": "사용자 지정 서버 설정에서 다른 홈 서버 URL을 지정해 다른 매트릭스 서버에 로그인할 수 있어요.<br/>이를 통해 라이엇과 다른 홈 서버의 기존 매트릭스 계정을 함께 쓸 수 있죠.<br/><br/>사용자 지정 ID 서버를 설정할 수도 있지만 이메일 주소로 사용자를 초대하거나 초대받을 수는 없답니다.",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "방 가명 %(alias)s 을 지우고 목록에서 %(name)s를 지우시겠어요?",
|
||||
"Enable audible notifications in web client": "웹 클라이언트에서 알림 소리 켜기",
|
||||
"Enable them now": "지금 켜기",
|
||||
"Enter keywords separated by a comma:": "키워드를 쉼표로 구분해 입력해주세요:",
|
||||
"Failed to add tag %(tagName)s to room": "방에 %(tagName)s로 지정하지 못했어요",
|
||||
"Failed to change settings": "설정을 바꾸지 못했어요",
|
||||
"Failed to forget room %(errCode)s": "방 %(errCode)s를 잊지 못했어요",
|
||||
"Failed to update keywords": "키워드를 갱신하지 못했어요",
|
||||
"Failed to get protocol list from Home Server": "홈 서버에서 프로토콜 목록을 얻지 못했어요",
|
||||
"Failed to get public room list": "공개한 방 목록을 얻지 못했어요",
|
||||
"Failed to remove tag %(tagName)s from room": "방에서 %(tagName)s 지정을 지우지 못했어요",
|
||||
"Failed to send report: ": "보고를 보내지 못했어요: ",
|
||||
"Failed to set direct chat tag": "직접 이야기 지정을 설정하지 못했어요",
|
||||
"Failed to set Direct Message status of room": "방의 쪽지 상태를 설정하지 못했어요",
|
||||
"Favourite": "즐겨찾기",
|
||||
"Fetching third party location failed": "타사 위치를 불러오지 못했어요",
|
||||
"Files": "파일",
|
||||
"Filter room names": "방 이름 거르기",
|
||||
"Forward Message": "메시지 전달",
|
||||
"Guests can join": "손님이 들어올 수 있어요",
|
||||
"(HTTP status %(httpStatus)s)": "(HTTP 상태 %(httpStatus)s)",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "문제를 진단하기 위해서, 이 클라이언트의 로그를 오류 보고서와 같이 보낼 거에요. 위 내용만 보내시려면, 체크를 해제하세요:",
|
||||
"Keywords": "키워드",
|
||||
"Mentions only": "답만 하기",
|
||||
"Messages containing my display name": "내 별명이 적힌 메시지",
|
||||
"Messages containing <span>keywords</span>": "<span>키워드</span>가 적힌 메시지",
|
||||
"Messages containing my user name": "내 사용자 이름이 적힌 메시지",
|
||||
"Messages in group chats": "이야기 모임의 메시지",
|
||||
"Messages in one-to-one chats": "1:1 이야기의 메시지",
|
||||
"Messages sent by bot": "봇이 보낸 메시지",
|
||||
"Noisy": "소리",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "여기 표시될 수 없는 규칙에 따라 다음 키워드는 알리지 않아요:",
|
||||
"Notify for all other messages/rooms": "다른 모든 메시지/방 알리기",
|
||||
"Notify me for anything else": "모든 걸 알리기",
|
||||
"Operation failed": "작업 실패",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "오류를 설명해주세요. 무슨 일을 하셨나요? 어떤 일을 예상하셨나요? 실제로는 어떤 일이 일어났나요?",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "최상의 경험을 위해 <a href=\"https://www.google.com/chrome\">크롬</a>이나 <a href=\"https://getfirefox.com\">파이어폭스</a>를 설치해주세요.",
|
||||
"Riot does not know how to join a room on this network": "라이엇이 이 네트워크에서 방에 들어가는 법을 알 수 없어요",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "라이엇은 많은 고급 브라우저 기능을 사용해요. 일부는 현재 브라우저에서 쓸 수 없거나 실험적이에요.",
|
||||
"The Home Server may be too old to support third party networks": "타사 네트워크를 지원하기에는 홈 서버가 너무 오래된 걸 수 있어요",
|
||||
"There are advanced notifications which are not shown here": "여기 보이지 않는 고급 알림이 있어요",
|
||||
"The server may be unavailable or overloaded": "서버를 쓸 수 없거나 과부하일 수 있어요",
|
||||
"Unable to fetch notification target list": "알림 대상 목록을 불러올 수 없어요",
|
||||
"Unable to join network": "네트워크에 들어갈 수 없어요",
|
||||
"Unable to look up room ID from server": "서버에서 방 ID를 찾아볼 수 없어요",
|
||||
"Unhide Preview": "미리보기를 숨기지 않기",
|
||||
"Uploaded on %(date)s by %(user)s": "by %(user)s가 %(date)s에 올림",
|
||||
"View Decrypted Source": "해독된 출처 보기",
|
||||
"View Source": "출처 보기",
|
||||
"When I'm invited to a room": "방에 초대받았을 때",
|
||||
"World readable": "세계에 보이기",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "화면 공유를 하려면 HTTPS를 써야만 해요.",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "현재 브라우저에서는, 응용 프로그램의 모양과 기능이 완벽하게 맞지 않거나, 일부 혹은 모든 기능이 작동하지 않을 수 있어요. 계속할 수는 있지만, 맞닥뜨리는 모든 문제는 직접 해결하셔야해요!",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "분산되고, 암호화된 대화 & [matrix]의 지원으로 협력",
|
||||
"Search the room directory": "방 목록을 찾기",
|
||||
"Get started with some tips from Riot Bot!": "라이엇 봇에게 조언을 받고 시작하세요!",
|
||||
"General discussion about Matrix and Riot": "매트릭스와 라이엇에 대한 일반 논의",
|
||||
"Discussion of all things Matrix!": "매트릭스의 모든 것에 대한 토론!",
|
||||
"Riot/Web & Desktop chat": "라이엇/웹 & 컴퓨터 이야기",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "라이엇/IOS & matrix-ios-sdk 대화",
|
||||
"Riot/Android & matrix-android-sdk chat": "매트릭스/안드로이드 & matrix-ios-sdk 대화",
|
||||
"Matrix technical discussions": "매트릭스 기술 논의",
|
||||
"Running Matrix services": "매트릭스 서비스 실행",
|
||||
"Community-run support for Synapse": "시냅스 커뮤니티 운영 지원",
|
||||
"Admin support for Dendrite": "덴드라이트 관리 지원",
|
||||
"Announcements about Synapse releases": "시냅스 공개 발표",
|
||||
"Support for those using and running matrix-appservice-irc": "matrix-appservice-irc를 사용하고 운영하는 사람들을 지원",
|
||||
"Building services on Matrix": "매트릭스에서 서비스 구축",
|
||||
"Support for those using the Matrix spec": "Matrix spec을 사용하는 사람들을 지원",
|
||||
"Design and implementation of E2E in Matrix": "매트릭스에서 E2E 설계와 구현",
|
||||
"Implementing VR services with Matrix": "매트릭스로 VR 서비스 구현",
|
||||
"Implementing VoIP services with Matrix": "매트릭스로 인터넷전화 서비스 구현",
|
||||
"Discussion of the Identity Service API": "ID 서비스 API에 대한 논의",
|
||||
"Support for those using, running and writing other bridges": "다른 브릿지를 사용하고, 운영하고, 기록하는 사람들을 지원",
|
||||
"Contributing code to Matrix and Riot": "매트릭스와 라이엇에 코드 기여하기",
|
||||
"Dev chat for the Riot/Web dev team": "라이엇/웹 개발 팀을 위한 개발자 대화",
|
||||
"Dev chat for the Dendrite dev team": "덴드라이트 개발 팀을 위한 개발자 대화",
|
||||
"Co-ordination for Riot/Web translators": "라이엇/웹 번역자를 위한 조정",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "기존 네트워크(Slack, IRC, Gitter 등)에 연결되있거나 독립된 많은 방들이 이미 매트릭스에 있어요. 목록을 확인해보세요!",
|
||||
"Failed to change password. Is your password correct?": "비밀번호를 바꾸지 못했어요. 이 비밀번호가 정말 맞으세요?",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "계정을 로그아웃하신 뒤에 계정으로 돌아가, 다른 장치에서 로그인하실 수 있어요.",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "이런 식으로 로그아웃한 뒤 계정으로 돌아가, 다른 장치에서 로그인하실 수 있어요.",
|
||||
"You have successfully set a password and an email address!": "비밀번호와 이메일 주소를 설정했어요!",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "잊지마세요, 마음이 바뀌면 언제라도 사용자 설정에서 이메일 주소를 바꾸실 수 있다는 걸요.",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "라이엇이 아닌 다른 클라이언트에서 구성하셨을 수도 있어요. 라이엇에서 조정할 수는 없지만 여전히 적용되있을 거에요",
|
||||
"To return to your account in future you need to <u>set a password</u>": "나중에 계정으로 돌아가려면 <u>비밀번호 설정</u>을 해야만 해요",
|
||||
"Set Password": "비밀번호 설정",
|
||||
"Warning": "주의",
|
||||
"Checking for an update...": "업데이트를 확인하는 중...",
|
||||
"Error encountered (%(errorDetail)s).": "오류가 일어났어요 (%(errorDetail)s).",
|
||||
"No update available.": "업데이트가 없어요.",
|
||||
"Downloading update...": "업데이트를 받는 중...",
|
||||
"Couldn't load home page": "중심 화면을 불러올 수 없어요"
|
||||
}
|
195
src/i18n/strings/lv.json
Normal file
195
src/i18n/strings/lv.json
Normal file
|
@ -0,0 +1,195 @@
|
|||
{
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s caur %(browserName)s un %(osName)s",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "darbojas arī <a href=\"http://apple.com/safari\">Safari</a> un <a href=\"http://opera.com\">Opera</a>.",
|
||||
"A new version of Riot is available.": "Ir pieejama jauna Riot versija.",
|
||||
"Add an email address above to configure email notifications": "Pievieno augšā epasta adresi, lai konfigurētu epasta notifikāciju paziņojumus",
|
||||
"Advanced notification settings": "Īpašie notifikāciju uzstādījumi",
|
||||
"All messages": "Visas ziņas",
|
||||
"All messages (loud)": "Visas ziņas (skaļi)",
|
||||
"All Rooms": "Visas istabas",
|
||||
"All notifications are currently disabled for all targets.": "Visi notifikāciju paziņojumi ir atspējoti visiem saņēmējiem.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Radās kļūda saglabājot tavus epasta notifikāciju ziņu uzstādījumus.",
|
||||
"Call invitation": "Ielūguma zvans",
|
||||
"Cancel": "Atcelt",
|
||||
"Cancel Sending": "Atcelt sūtīšanu",
|
||||
"Can't update user notification settings": "Nav iespējams atjaunot lietotāja notifikāciju ziņu uzstādījumus",
|
||||
"Changelog": "Izmaiņu saraksts",
|
||||
"Close": "Aizvērt",
|
||||
"Collapse panel": "Aizvērt apgabalu",
|
||||
"Collecting app version information": "Tiek apkopota programmas versijas informācija",
|
||||
"Collecting logs": "Tiek apkopoti logfaili",
|
||||
"Couldn't find a matching Matrix room": "Nav iespējams noteikt atbilstošo Matrix istabu",
|
||||
"Custom Server Options": "Īpaši servera uzstādījumi",
|
||||
"customServer_text": "Tu vari izmantot īpašus servera uzstādījumus, lai pierakstītos citos Matrix serveros, norādot atšķirīgu servera URL adresi.<br/>Tas atļaus Tev izmantot Riot ar jau eksistējošu Matrix kontu citā serverī.<br/><br/>Tu vari norādīt arī īpašu identitātes serveri, bet tad nevarēsi uzaicināt lietotājus pēc epasta adreses,kā arī pēc tās tikt uzaicināts/a.",
|
||||
"Discussion of the Identity Service API": "Diskusija par identitātes servisa API",
|
||||
"delete the alias.": "dzēst aizstājējvārdu.",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Dzēst istabas aizstājējvārdu %(alias)s un dzēst %(name)s no kataloga?",
|
||||
"Describe your problem here.": "Apraksti savu problēmu šeit.",
|
||||
"Direct Chat": "Tiešais čats",
|
||||
"Directory": "Katalogs",
|
||||
"Dismiss": "Noņemt",
|
||||
"Download this file": "Lejupielādēt šo failu",
|
||||
"Enable audible notifications in web client": "Iespējot skaņas paziņojumus web klienta programmā",
|
||||
"Enable desktop notifications": "Iespējot darbvirsmas notifikāciju paziņojumus",
|
||||
"Enable email notifications": "Iespējot epasta notifikāciju paziņojumus",
|
||||
"Enable notifications for this account": "Iespējot notifikāciju paziņojumus šim kontam",
|
||||
"Enable them now": "Iespējot tos tagad",
|
||||
"Enter keywords separated by a comma:": "Ievadi atslēgvārdus, atdalītus ar komatu:",
|
||||
"Error": "Kļūda",
|
||||
"Error saving email notification preferences": "Kļūda saglabājot epasta notifikāciju paziņojumu uzstādījumus",
|
||||
"#example": "#piemērs",
|
||||
"Expand panel": "Izvērst apgabalu",
|
||||
"Failed to add tag %(tagName)s to room": "Neizdevās pievienot birku %(tagName)s istabai",
|
||||
"Failed to change settings": "Neizdevās mainīt uzstādījumus",
|
||||
"Failed to forget room %(errCode)s": "Neizdevās \"aizmirst\" istabu %(errCode)s",
|
||||
"Failed to update keywords": "Neizdevās atjaunot atslēgvārdus",
|
||||
"Failed to get protocol list from Home Server": "Neizdevās iegūt protokolu sarakstu no mājas servera",
|
||||
"Failed to get public room list": "Neizdevās iegūt publisko istabu sarakstu",
|
||||
"Failed to remove tag %(tagName)s from room": "Neizdevās dzēst istabas birku %(tagName)s",
|
||||
"Failed to send report: ": "Neizdevās nosūtīt atskaiti: ",
|
||||
"Failed to set direct chat tag": "Neizdevās uzstādīt birku tiešajam čatam",
|
||||
"Continue": "Turpināt",
|
||||
"Failed to change password. Is your password correct?": "Neizdevās mainīt paroli. Vai tava parole ir pareiza?",
|
||||
"Favourite": "Favorīts",
|
||||
"Mute": "Apklusināt",
|
||||
"Notifications": "Paziņojumi",
|
||||
"OK": "LABI",
|
||||
"Operation failed": "Darbība neizdevās",
|
||||
"Remove": "Dzēst",
|
||||
"Search": "Meklēt",
|
||||
"unknown error code": "nezināms kļūdas kods",
|
||||
"Monday": "Pirmdiena",
|
||||
"Tuesday": "Otrdiena",
|
||||
"Wednesday": "Trešdiena",
|
||||
"Thursday": "Ceturtdiena",
|
||||
"Friday": "Piektdiena",
|
||||
"Saturday": "Sestdiena",
|
||||
"Sunday": "Svētdiena",
|
||||
"powered by Matrix": "spēcināts ar Matrix",
|
||||
"Failed to set Direct Message status of room": "Neizdevās iestatīt istabas tiešo ziņu statusu",
|
||||
"Fetching third party location failed": "Neizdevās iegūt trešās puses atrašanās vietu",
|
||||
"Files": "Faili",
|
||||
"Filter room names": "Filtrēt pēc istabu nosaukuma",
|
||||
"Forget": "\"Aizmirst\"",
|
||||
"Forward Message": "Pārsūtīt ziņu",
|
||||
"Guests can join": "Viesi var pievienoties",
|
||||
"Hide panel": "Slēpt apgabalu",
|
||||
"(HTTP status %(httpStatus)s)": "(HTTP statuss %(httpStatus)s)",
|
||||
"I understand the risks and wish to continue": "Es saprotu riskus un vēlos turpināt",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Problēmu diagnosticēšanas ietvaros, šī klienta logfaili tiks nosūtīti kopā ar šo kļūdas paziņojumu. Ja vēlies nosūtīt vienīgi zemākesošo tekstu, lūdzu atķeksē:",
|
||||
"Invite to this room": "Uzaicināt uz šo istabu",
|
||||
"Keywords": "Atslēgvārdi",
|
||||
"Leave": "Atstāt",
|
||||
"Login": "Pierakstīties",
|
||||
"Loading bug report module": "Ielādējas kļūdas ziņojumu modulis",
|
||||
"Low Priority": "Zema prioritāte",
|
||||
"Members": "Biedri",
|
||||
"Mentions only": "Vienīgi atsauces",
|
||||
"Messages containing my display name": "Ziņas, kuras satur manu redzamo vārdu",
|
||||
"Messages containing <span>keywords</span>": "Ziņas,kuras satur <span>atslēgvārdus</span>",
|
||||
"Messages containing my user name": "Ziņas, kuras satur manu lietotājvārdu",
|
||||
"Messages in group chats": "Ziņas grupas čatos",
|
||||
"Messages in one-to-one chats": "Ziņas viens-pret-vienu čatos",
|
||||
"Messages sent by bot": "Botu nosūtītās ziņas",
|
||||
"more": "vairāk",
|
||||
"No rooms to show": "Nav istabu, ko parādīt",
|
||||
"Noisy": "Trokšņains",
|
||||
"Notification targets": "Notifikācijas paziņojuma mērķi",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "Paziņojumi par šādiem atslēgvārdiem atbilst noteikumiem, kurus šeit nevar parādīt:",
|
||||
"Notify for all other messages/rooms": "Paziņot par visām citām ziņām/istabām",
|
||||
"Notify me for anything else": "Paziņot man par jebko citu",
|
||||
"Off": "Izslēgts",
|
||||
"On": "Ieslēgts",
|
||||
"Permalink": "Pastāvīgā saite",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Lūdzu, apraksti kļūdu. Ko Tu darīji? Kas tika gaidīts, lai notiktu? Kas rezultātā notika?",
|
||||
"Please describe the bug and/or send logs.": "Lūdzu apraksti kļūdu un/vai nosūti logfailus.",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Lūdzu instalē <a href=\"https://www.google.com/chrome\">Chrome</a> vai <a href=\"https://getfirefox.com\">Firefox</a> pārlūku labākai pārlūkošanas pieredzei.",
|
||||
"Quote": "Citāts",
|
||||
"Reject": "Noraidīt",
|
||||
"Remove %(name)s from the directory?": "Dzēst %(name)s no kataloga?",
|
||||
"remove %(name)s from the directory.": "dzēst %(name)s no kataloga.",
|
||||
"Remove from Directory": "Dzēst no kataloga",
|
||||
"Report a bug": "Paziņot par kļūdu",
|
||||
"Resend": "Nosūtīt atkārtoti",
|
||||
"Riot Desktop on %(platformName)s": "Riot darbvirsma %(platformName)s",
|
||||
"Riot does not know how to join a room on this network": "Riot neatpazina iespēju pievienoties istabai šajā tīklā",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot netiek atbalstīts mobilajā versijā. Instalēt aplikāciju?",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot izmanto daudzas īpašās pārlūka iespējas, no kurām dažas var nebūt pieejamas vai ir eksperimentālas tavā pašreizējā pārlūkā.",
|
||||
"Room not found": "Istaba nav atrasta",
|
||||
"Search…": "Meklēt…",
|
||||
"Search for a room": "Meklēt istabu",
|
||||
"Send": "Nosūtīt",
|
||||
"Send logs": "Nosūtīt logfailus",
|
||||
"Source URL": "Avota URL adrese",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Atvaino, diemžēl tavs pārlūks <b>nespēj</b> darboties ar Riot.",
|
||||
"The Home Server may be too old to support third party networks": "Mājas serveris var būt pārāk novecojis, lai atbalstītu trešo pušu tīmekļa resurursus",
|
||||
"There are advanced notifications which are not shown here": "Ir īpašie notifikāciju paziņojumi, kuri šeit nav redzami",
|
||||
"The server may be unavailable or overloaded": "Serveris var nebūt pieejams vai ir pārslogots",
|
||||
"This Room": "Šī istaba",
|
||||
"Unable to fetch notification target list": "Nav iespējams iegūt notifikāciju paziņojumu mērķu sarakstu",
|
||||
"Unable to join network": "Nav iespējams pievienoties tīmeklim",
|
||||
"Unable to look up room ID from server": "Nav iespējams iegūt istabas ID no servera",
|
||||
"Unavailable": "Nav pieejams",
|
||||
"Unhide Preview": "Nerādīt priekšskatījumu",
|
||||
"Unknown device": "Nezināma ierīce",
|
||||
"Unnamed room": "Nezināma istaba",
|
||||
"Update": "Atjaunot",
|
||||
"Uploaded on %(date)s by %(user)s": "Augšuplādēts %(date)s no %(user)s",
|
||||
"Uploading report": "Augšuplādē atskaiti",
|
||||
"View Decrypted Source": "Skatīt atšifrētu avotu",
|
||||
"View Source": "Skatīt avotu",
|
||||
"What's New": "Kas jauns",
|
||||
"What's new?": "Kas jauns?",
|
||||
"Waiting for response from server": "Gaida atbildi no servera",
|
||||
"When I'm invited to a room": "Kad esmu uzaicināts/a istabā",
|
||||
"World readable": "Lasāms pasaulei",
|
||||
"You cannot delete this image. (%(code)s)": "Tu nevari dzēst šo attēlu. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "Tu nevari dzēst šo ziņu. (%(code)s)",
|
||||
"You are not receiving desktop notifications": "Tu nesaņem darbvirsmas notifikāciju paziņojumus",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Tu, iespējams, konfigurēji tās kādā citā klientā, nevis Riot. Tu nevari pielāgot tos Riot, bet tie joprojām ir spēkā",
|
||||
"Today": "Šodien",
|
||||
"Yesterday": "Vakar",
|
||||
"Warning": "Brīdinājums",
|
||||
"Checking for an update...": "Lūkojamies pēc atjauninājuma...",
|
||||
"Error encountered (%(errorDetail)s).": "Notika kļūda (%(errorDetail)s).",
|
||||
"No update available.": "Atjauninājumi nav pieejami.",
|
||||
"Downloading update...": "Lejupielādējam atjauninājumus...",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Tev ir nepieciešams izmantot HTTPS savienojumu, lai izmantotu ekrāna kopīgošanas zvanu.",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Tavā pašreizējā pārlūkā aplikācijas izskats un uzvedība var būt pilnīgi neatbilstoša, kā arī dažas no visām funkcijām var nedarboties. Ja vēlies turpināt izmantot šo pārlūku, Tu vari arī turpināt, apzinoties, ka šajā gadījumā esi viens/a ar iespējamo problēmu!",
|
||||
"Welcome to Riot.im": "Laipni lūdzam Riot.im",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizēta, šifrēta čata & sistēma, spēcināta ar [matrix]",
|
||||
"Search the room directory": "Meklēt istabu katalogu",
|
||||
"Chat with Riot Bot": "Pačatot ar Riot botu",
|
||||
"Get started with some tips from Riot Bot!": "Iepazīsties ar dažiem knifiem no Riot bota!",
|
||||
"General discussion about Matrix and Riot": "Galvenā diskusija par Matrix un Riot",
|
||||
"Discussion of all things Matrix!": "Diskusija par visām ar Matrix saistītajām lietām!",
|
||||
"Riot/Web & Desktop chat": "Riot/Web & darbvirsmas čats",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk čats",
|
||||
"Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk čats",
|
||||
"Matrix technical discussions": "Matrix tehniskās diskusijas",
|
||||
"Running Matrix services": "Izmantot Matrix pakalpojumus",
|
||||
"Community-run support for Synapse": "Komūnas atbalsts Synapse",
|
||||
"Admin support for Dendrite": "Administrācijas atbalsts Dendrite",
|
||||
"Announcements about Synapse releases": "Paziņojumi par Synapse izlaidumiem",
|
||||
"Support for those using and running matrix-appservice-irc": "Atbalsts tiem, kuri izmanto matrix-appservice-irc",
|
||||
"Building services on Matrix": "Pakalpojumu būvēšana uz Matrix",
|
||||
"Support for those using the Matrix spec": "Atbalsts tiem, kuri izmanto Matrix specifikācijas",
|
||||
"Design and implementation of E2E in Matrix": "Dizains un E2E implementācija Matrix",
|
||||
"Implementing VR services with Matrix": "VR servisu implementācija Matrix",
|
||||
"Implementing VoIP services with Matrix": "VoIP pakalpojumu implementācija Matrix",
|
||||
"Support for those using, running and writing other bridges": "Atbalsts tiem, kuri izmanto un raksta citus \"tilta\" risinājumus",
|
||||
"Contributing code to Matrix and Riot": "Dot ieguldījumu Matrix and Riot kodā",
|
||||
"Dev chat for the Riot/Web dev team": "Riot/Web izstrādātāju komandas čats",
|
||||
"Dev chat for the Dendrite dev team": "Dendrite izstrādatāju komandas čats",
|
||||
"Co-ordination for Riot/Web translators": "Riot/Web tulkotāju koordinācija",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Matrix sistēmā pastāv neskaitāmas neatkarīgas vai eksistējošiem tīmekļa resursiem (Slack, IRC, Gitter utml.) piesaistītas istabas. Ar tām vari iepazīties katalogā!",
|
||||
"You have successfully set a password!": "Tu veiksmīgi nomainīji paroli!",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "Tu vari tagad atgriezties savā kontā pēc izrakstīšanās, un pierakstīties no citām ierīcēm.",
|
||||
"Please set a password!": "Lūdzu iestati paroli!",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "Tas atļaus Tev atgriezties savā kontā pēc izrakstīšanās, un pierakstīties no citām ierīcēm.",
|
||||
"You have successfully set a password and an email address!": "Tu veiksmīgi iestatīji paroli un epasta adresi!",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Atceries, ka Tu vienmēr vari iestatīt epasta adresi lietotāja uzstādījumos, ja mainīsi domas.",
|
||||
"To return to your account in future you need to <u>set a password</u>": "Lai nākotnē atgrieztos savā kontā, tev būs nepieciešams <u>iestatīt paroli</u>",
|
||||
"Set Password": "Iestatīt paroli",
|
||||
"Couldn't load home page": "Neizdevās ielādēt sākumlapu"
|
||||
}
|
196
src/i18n/strings/ml.json
Normal file
196
src/i18n/strings/ml.json
Normal file
|
@ -0,0 +1,196 @@
|
|||
{
|
||||
"Add an email address above to configure email notifications": "ഇ മെയില് അറിയിപ്പുകൾ ലഭിക്കാന് മുകളില് ഇ-മെയില് വിലാസം നല്കൂ",
|
||||
"All messages": "എല്ലാ സന്ദേശങ്ങളും",
|
||||
"All messages (loud)": "എല്ലാ സന്ദേശങ്ങളും (ഉച്ചത്തിൽ)",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(osName)sല് %(browserName)s വഴി %(appName)s",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">സഫാരിയിലും</a>പിന്നെ <a href=\"http://opera.com\">ഓപ്പേറയിലും</a>പ്രവര്ത്തിക്കുന്നു.",
|
||||
"A new version of Riot is available.": "റയട്ടിന്റെ ഒരു പുതിയ പതിപ്പ് ലഭ്യമാണ്.",
|
||||
"Advanced notification settings": "അറിയപ്പുകളുടെ സങ്കീര്ണമായ സജ്ജീകരണങ്ങള്",
|
||||
"All Rooms": "എല്ലാ മുറികളും കാണുക",
|
||||
"All notifications are currently disabled for all targets.": "അറിയിപ്പുകളെല്ലാം നിര്ത്തിയിരിയ്ക്കുന്നു.",
|
||||
"An error occurred whilst saving your email notification preferences.": "ഇ-മെയില് വഴി അറിയിയ്ക്കാനുള്ള നിങ്ങളുടെ സജ്ജീകരണങ്ങള് സൂക്ഷിക്കുന്നതില് ഒരു പ്രശ്നമുണ്ടായി.",
|
||||
"Call invitation": "വിളിയ്ക്കുന്നു",
|
||||
"Cancel": "റദ്ദാക്കുക",
|
||||
"Cancel Sending": "അയയ്ക്കുന്നത് റദ്ദാക്കുക",
|
||||
"Can't update user notification settings": "ഉപയോക്താവിനെ അറിയിയ്ക്കാനുള്ള സജ്ജീകരണം പുതുക്കാനായില്ല",
|
||||
"Changelog": "മാറ്റങ്ങളുടെ നാള്വഴി",
|
||||
"Close": "അടയ്ക്കുക",
|
||||
"Collapse panel": "പാനല് കൊളാപ്സ് ചെയ്യുക",
|
||||
"Collecting app version information": "ആപ്പ് പതിപ്പു വിവരങ്ങള് ശേഖരിക്കുന്നു",
|
||||
"Collecting logs": "നാള്വഴി ശേഖരിക്കുന്നു",
|
||||
"Couldn't find a matching Matrix room": "ആവശ്യപ്പെട്ട മാട്രിക്സ് റൂം കണ്ടെത്താനായില്ല",
|
||||
"Custom Server Options": "കസ്റ്റം സെര്വര് ഓപ്ഷനുകള്",
|
||||
"delete the alias.": "ഏലിയാസ് നീക്കം ചെയ്യുക.",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "റൂം ഏലിയാസ് %(alias)s നീക്കം ചെയ്യുകയും %(name)s കള് ഡയറക്ടറിയില് നിന്നും നീക്കം ചെയ്യുകയും ചെയ്യുക ?",
|
||||
"Describe your problem here.": "നിങ്ങള് നേരിട്ട പ്രശ്നം ഇവിടെ വിവരിക്കാം.",
|
||||
"Direct Chat": "നേരിട്ടുള്ള ചാറ്റ്",
|
||||
"Directory": "ഡയറക്ടറി",
|
||||
"Dismiss": "ഒഴിവാക്കുക",
|
||||
"Download this file": "ഈ ഫയല് ഡൌണ്ലോഡ് ചെയ്യുക",
|
||||
"Enable audible notifications in web client": "വെബ് പതിപ്പിലെ അറിയിപ്പുകള് കേള്ക്കാവുന്നതാക്കുക",
|
||||
"Enable desktop notifications": "ഡെസ്ക്ടോപ്പ് നോട്ടിഫിക്കേഷനുകള് ഇനേബിള് ചെയ്യുക",
|
||||
"Enable email notifications": "ഇമെയില് നോട്ടിഫിക്കേഷനുകള് ഇനേബിള് ചെയ്യുക",
|
||||
"Enable notifications for this account": "ഈ അക്കൌണ്ടില് നോട്ടിഫിക്കേഷനുകള് ഇനേബിള് ചെയ്യുക",
|
||||
"Enable them now": "ഇപ്പോള് ഇനേബിള് ചെയ്യുക",
|
||||
"Enter keywords separated by a comma:": "കീവേഡുകളെ കോമ കൊണ്ട് വേര്ത്തിരിച്ച് ടൈപ്പ് ചെയ്യുക :",
|
||||
"Error": "എറര്",
|
||||
"Error saving email notification preferences": "ഇമെയില് നോട്ടിഫിക്കേഷന് സജ്ജീകരണങ്ങള് സൂക്ഷിക്കവേ എറര് നേരിട്ടു",
|
||||
"#example": "#ഉദാഹരണം",
|
||||
"Expand panel": "പാനല് വലുതാക്കുക",
|
||||
"Failed to add tag %(tagName)s to room": "റൂമിന് %(tagName)s എന്ന ടാഗ് ആഡ് ചെയ്യുവാന് സാധിച്ചില്ല",
|
||||
"Failed to change settings": "സജ്ജീകരണങ്ങള് മാറ്റുന്നവാന് സാധിച്ചില്ല",
|
||||
"Failed to forget room %(errCode)s": "%(errCode)s റൂം ഫോര്ഗെറ്റ് ചെയ്യുവാന് സാധിച്ചില്ല",
|
||||
"Failed to update keywords": "കീവേഡുകള് പുതുക്കുവാന് സാധിച്ചില്ല",
|
||||
"Failed to get protocol list from Home Server": "ഹോം സെര്വറില് നിന്ന് പ്രോട്ടോക്കോള് ലിസ്റ്റ് നേടാന് സാധിച്ചില്ല",
|
||||
"Failed to get public room list": "പബ്ലിക്ക് റൂം ലിസ്റ്റ് നേടാന് സാധിച്ചില്ല",
|
||||
"Failed to remove tag %(tagName)s from room": "റൂമില് നിന്നും %(tagName)s ടാഗ് നീക്കം ചെയ്യുവാന് സാധിച്ചില്ല",
|
||||
"Failed to send report: ": "റിപ്പോര്ട്ട് അയക്കുവാന് സാധിച്ചില്ല : ",
|
||||
"Failed to set direct chat tag": "ഡയറക്റ്റ് ചാറ്റ് ടാഗ് സെറ്റ് ചെയ്യാനായില്ല",
|
||||
"Failed to set Direct Message status of room": "റൂമില് നിന്നും ഡയറക്റ്റ് മെസേജ് സ്റ്റാറ്റസ് സജ്ജീകരിക്കാന് കഴിഞ്ഞില്ല",
|
||||
"Favourite": "പ്രിയപ്പെട്ടവ",
|
||||
"Fetching third party location failed": "തേഡ് പാര്ട്ടി ലൊക്കേഷന് ഫെച്ച് ചെയ്യാന് കഴിഞ്ഞില്ല",
|
||||
"Files": "ഫയലുകള്",
|
||||
"Filter room names": "റൂം പേരുകള് ഫില്ട്ടര് ചെയ്യുക",
|
||||
"Forget": "മറക്കുക",
|
||||
"Forward Message": "സന്ദേശം ഫോര്വേഡ് ചെയ്യുക",
|
||||
"Guests can join": "അതിഥികള്ക്കും പ്രവേശിക്കാം",
|
||||
"Hide panel": "പാനല് ഒളിപ്പിക്കുക",
|
||||
"(HTTP status %(httpStatus)s)": "(HTTP സ്റ്റാറ്റസ് %(httpStatus)s)",
|
||||
"I understand the risks and wish to continue": "കുഴപ്പമാകാന് സാധ്യതയുണ്ടെന്നെനിയ്ക്കു് മനസ്സിലായി, എന്നാലും മുന്നോട്ട് പോകുക",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "നേരിട്ട പ്രശ്നം മനസ്സിലാക്കാന്, ഈ ക്ലയന്റില് നിന്നുള്ള നാള്വഴികള് ബഗ് റിപ്പോര്ട്ടിനൊപ്പം അയയ്ക്കും. അതിനു പകരം ഈ എഴുത്ത് മാത്രം അയച്ചാല് മതിയെങ്കില് ദയവായി ശരിച്ഛിഹ്നം ഒഴിവാക്കുക:",
|
||||
"Invite to this room": "ഈ റൂമിലേക്ക് ക്ഷണിക്കുക",
|
||||
"Keywords": "കീവേഡുകള്",
|
||||
"Leave": "വിടവാങ്ങുക",
|
||||
"Login": "ലോഗിന്",
|
||||
"Loading bug report module": "പിഴവുകള് അറിയിയ്ക്കാനുള്ള ഘടകം ചേര്ക്കുന്നു",
|
||||
"Low Priority": "താഴ്ന്ന പരിഗണന",
|
||||
"Members": "അംഗങ്ങള്",
|
||||
"Mentions only": "മെന്ഷനുകള് മാത്രം",
|
||||
"Messages containing my display name": "എന്റെ പേര് അടങ്ങിയിരിക്കുന്ന സന്ദേശങ്ങള്ക്ക്",
|
||||
"Messages containing <span>keywords</span>": "<span>കീവേഡുകള്</span>അടങ്ങിയ സന്ദേശങ്ങള്ക്ക്",
|
||||
"Messages containing my user name": "എന്റെ യൂസര് നെയിം അടങ്ങിയിരിക്കുന്ന സന്ദേശങ്ങള്ക്ക്",
|
||||
"Messages in group chats": "ഗ്രൂപ്പ് ചാറ്റുകളിലെ സന്ദേശങ്ങള്ക്ക്",
|
||||
"Messages in one-to-one chats": "നേര്ക്കുനേര് ചാറ്റിലെ സന്ദേശങ്ങള്ക്ക്",
|
||||
"Messages sent by bot": "ബോട്ട് അയയ്ക്കുന്ന സന്ദേശങ്ങള്ക്ക്",
|
||||
"more": "കൂടുതല്",
|
||||
"Mute": "നിശ്ശബ്ദം",
|
||||
"No rooms to show": "കാണിക്കാന് റൂമുകളില്ല",
|
||||
"Noisy": "ഉച്ചത്തില്",
|
||||
"Notification targets": "നോട്ടിഫിക്കേഷന് ടാര്ഗെറ്റുകള്",
|
||||
"Notifications": "നോട്ടിഫിക്കേഷനുകള്",
|
||||
"Operation failed": "ശ്രമം പരാജയപ്പെട്ടു",
|
||||
"Permalink": "പെര്മാലിങ്ക്",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "ബഗ് വിശദീകരിക്കുക. എന്ത് ചെയ്തപ്പോഴാണ് വന്നത് ? എന്തായിരുന്നു പ്രതീക്ഷിച്ചിരുന്നത് ? ശരിക്കും എന്താണ് സംഭവിച്ചത് ?",
|
||||
"Please describe the bug and/or send logs.": "ബഗ് വിശദീകരിക്കുക , കൂടെ / അല്ലെങ്കില് നാള്വഴികളും അയക്കുക.",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "ഏറ്റവും മികച്ച ഉപയോഗത്തിനായി <a href=\"https://www.google.com/chrome\">ഗൂഗിള് ക്രോം</a>ബ്രൌസറോ അല്ലെങ്കില് <a href=\"https://getfirefox.com\">ഫയര്ഫോക്സ്</a> ബ്രൌസറോ ഇന്സ്റ്റാള് ചെയ്യൂ.",
|
||||
"powered by Matrix": "മാട്രിക്സില് പ്രവര്ത്തിക്കുന്നു",
|
||||
"Quote": "ഉദ്ധരിക്കുക",
|
||||
"Reject": "നിരസിക്കുക",
|
||||
"Remove %(name)s from the directory?": "%(name)s കള് ഡയറക്റ്ററിയില് നിന്നും മാറ്റണോ ?",
|
||||
"Remove": "നീക്കം ചെയ്യുക",
|
||||
"Remove from Directory": "ഡയറക്റ്ററിയില് നിന്നും നീക്കം ചെയ്യുക",
|
||||
"Report a bug": "ബഗ് റിപ്പോര്ട്ട് ചെയ്യുക",
|
||||
"Resend": "വീണ്ടും അയയ്ക്കുക",
|
||||
"Riot Desktop on %(platformName)s": "%(platformName)s ലെ റയട്ട് ഡെസ്ക്ടോപ്പ്",
|
||||
"Riot does not know how to join a room on this network": "ഈ നെറ്റ്വര്ക്കിലെ ഒരു റൂമില് എങ്ങനെ അംഗമാകാമെന്ന് റയട്ടിന് അറിയില്ല",
|
||||
"Riot is not supported on mobile web. Install the app?": "മൊബൈലില് റയട്ട് വെബ് പിന്തുണ ഇല്ല. ആപ്പ് ഇന്സ്റ്റാള് ചെയ്യാം ?",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "റയട്ട് നൂതന ബ്രൌസര് ഫീച്ചറുകള് ഉപയോഗിക്കുന്നു. നിങ്ങളുടെ ബ്രൌസറില് അവയില് പലതും ഇല്ല / പൂര്ണ്ണമല്ല .",
|
||||
"Room not found": "റൂം കണ്ടെത്താനായില്ല",
|
||||
"Search": "തിരയുക",
|
||||
"Search…": "തിരയുക…",
|
||||
"Search for a room": "ഒരു റൂം തിരയുക",
|
||||
"Send": "അയയ്ക്കുക",
|
||||
"Send logs": "നാള്വഴി അയയ്ക്കുക",
|
||||
"Source URL": "സോഴ്സ് യു ആര് എല്",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "ക്ഷമിക്കണം, നിങ്ങളുടെ ബ്രൌസര് റയട്ട് പ്രവര്ത്തിപ്പിക്കാന് <b>പര്യാപ്തമല്ല</b>.",
|
||||
"The Home Server may be too old to support third party networks": "തേഡ് പാര്ട്ടി നെറ്റ്വര്ക്കുകളെ പിന്തുണക്കാത്ത വളരെ പഴയ ഹോം സെര്വര് ആയേക്കാം",
|
||||
"There are advanced notifications which are not shown here": "ഇവിടെ കാണിക്കാത്ത നൂതന നോട്ടിഫിക്കേഷനുകള് ഉണ്ട്",
|
||||
"The server may be unavailable or overloaded": "സെര്വര് ലഭ്യമല്ല അല്ലെങ്കില് ഓവര്ലോഡഡ് ആണ്",
|
||||
"This Room": "ഈ മുറി",
|
||||
"Unable to fetch notification target list": "നോട്ടിഫിക്കേഷന് ടാര്ഗെറ്റ് ലിസ്റ്റ് നേടാനായില്ല",
|
||||
"Unable to join network": "നെറ്റ്വര്ക്കില് ജോയിന് ചെയ്യാന് കഴിയില്ല",
|
||||
"Unable to look up room ID from server": "സെര്വറില് നിന്നും റൂം ഐഡി കണ്ടെത്താനായില്ല",
|
||||
"Unavailable": "ലഭ്യമല്ല",
|
||||
"Unhide Preview": "പ്രിവ്യു കാണിക്കുക",
|
||||
"Unknown device": "അപരിചിത ഡിവൈസ്",
|
||||
"unknown error code": "അപരിചിത എറര് കോഡ്",
|
||||
"Unnamed room": "പേരില്ലാത്ത റൂം",
|
||||
"Update": "പുതുക്കുക",
|
||||
"Uploaded on %(date)s by %(user)s": "%(date)s ല് %(user)s അപ്ലോഡ് ചെയ്തത്",
|
||||
"Uploading report": "റിപ്പോര്ട്ട് അപ്ലോഡ് ചെയ്യുന്നു",
|
||||
"View Decrypted Source": "ഡീക്രിപ്റ്റ് ചെയ്ത സോഴ്സ് കാണുക",
|
||||
"View Source": "സോഴ്സ് കാണുക",
|
||||
"What's New": "പുതിയ വിശേഷങ്ങള്",
|
||||
"What's new?": "എന്തൊക്കെ പുതിയ വിശേഷങ്ങള് ?",
|
||||
"Waiting for response from server": "സെര്വറില് നിന്നുള്ള പ്രതികരണത്തിന് കാക്കുന്നു",
|
||||
"When I'm invited to a room": "ഞാന് ഒരു റൂമിലേക്ക് ക്ഷണിക്കപ്പെടുമ്പോള്",
|
||||
"You cannot delete this image. (%(code)s)": "നിങ്ങള്ക്ക് ഈ ചിത്രം നീക്കം ചെയ്യാനാകില്ല. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "നിങ്ങള്ക്ക് ഈ സന്ദേശം നീക്കം ചെയ്യാനാകില്ല. (%(code)s)",
|
||||
"You are not receiving desktop notifications": "നിങ്ങള്ക്ക് ഇപ്പോള് ഡെസ്ക്ടോപ്പ് നോട്ടിഫിക്കേഷനുകള് ലഭിക്കുന്നില്ല",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "ഇവ റയട്ടല്ലാതെ മറ്റൊരു ക്ലയന്റില് വച്ച് കോണ്ഫിഗര് ചെയ്തതാകാം. റയട്ടില് അവ ലഭിക്കില്ല, എങ്കിലും അവ നിലവിലുണ്ട്",
|
||||
"Sunday": "ഞായര്",
|
||||
"Monday": "തിങ്കള്",
|
||||
"Tuesday": "ചൊവ്വ",
|
||||
"Wednesday": "ബുധന്",
|
||||
"Thursday": "വ്യാഴം",
|
||||
"Friday": "വെള്ളി",
|
||||
"Saturday": "ശനി",
|
||||
"Today": "ഇന്ന്",
|
||||
"Yesterday": "ഇന്നലെ",
|
||||
"OK": "ശരി",
|
||||
"Warning": "മുന്നറിയിപ്പ്",
|
||||
"Checking for an update...": "അപ്ഡേറ്റ് ഉണ്ടോ എന്ന് തിരയുന്നു...",
|
||||
"Error encountered (%(errorDetail)s).": "എറര് നേരിട്ടു (%(errorDetail)s).",
|
||||
"No update available.": "അപ്ഡേറ്റുകള് ലഭ്യമല്ല.",
|
||||
"Downloading update...": "അപ്ഡേറ്റ് ഡൌണ്ലോഡ് ചെയ്യുന്നു...",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "സ്ക്രീന് ഷെയറിങ്ങ് കോള് നടത്തണമെങ്കില് https ഉപയോഗിക്കണം.",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "നിങ്ങളുടെ ഇപ്പോളത്തെ ബ്രൌസര് റയട്ട് പ്രവര്ത്തിപ്പിക്കാന് പൂര്ണമായും പര്യാപത്മല്ല. പല ഫീച്ചറുകളും പ്രവര്ത്തിക്കാതെയിരിക്കാം. ഈ ബ്രൌസര് തന്നെ ഉപയോഗിക്കണമെങ്കില് മുന്നോട്ട് പോകാം. പക്ഷേ നിങ്ങള് നേരിടുന്ന പ്രശ്നങ്ങള് നിങ്ങളുടെ ഉത്തരവാദിത്തത്തില് ആയിരിക്കും!",
|
||||
"Welcome to Riot.im": "റയട്ടിലേക്ക് സ്വാഗതം",
|
||||
"Search the room directory": "റൂം ഡയറക്റ്ററിയില് പരതുക",
|
||||
"Chat with Riot Bot": "റയട്ട് ബോട്ടുമായി ചാറ്റ് ചെയ്യുക",
|
||||
"Get started with some tips from Riot Bot!": "റയട്ട് ബോട്ടില് നിന്നുള്ള നിര്ദേശങ്ങള് സ്വീകരിച്ച് കൊണ്ട് തുടങ്ങൂ!",
|
||||
"General discussion about Matrix and Riot": "മാട്രിക്സിനേയും റയട്ടിനേയും കുറിച്ചുള്ള പൊതു ചര്ച്ച",
|
||||
"Discussion of all things Matrix!": "മാട്രിക്സിനെ കുറിച്ചുള്ള ചര്ച്ച!",
|
||||
"Riot/Web & Desktop chat": "റയട്ട്/വെബ് & ഡെസ്ക്ടോപ്പ് ചാറ്റ്",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "റയട്ട്/iOS& matrix-ios-sdk ചാറ്റ്",
|
||||
"Riot/Android & matrix-android-sdk chat": "റയട്ട്/ആന്ഡ്രോയ്ഡ്& matrix-android-sdk ചാറ്റ്",
|
||||
"Matrix technical discussions": "മാട്രിക്സ് സാങ്കേതിക ചര്ച്ച",
|
||||
"Running Matrix services": "മാട്രിക്സ് സര്വീസുകള് റണ് ചെയ്യുന്നു",
|
||||
"Community-run support for Synapse": "സിനാപ്സിനുള്ള കമ്യൂണിറ്റി-നേതൃത്വത്തലുള്ള പിന്തുണ",
|
||||
"Admin support for Dendrite": "ഡെന്ഡ്രൈറ്റിനുള്ള അഡ്മിന് പിന്തുണ",
|
||||
"Announcements about Synapse releases": "സിനാപ്സ് റിലീസുകളെ കുറിച്ചുള്ള അറിയിപ്പുകള്",
|
||||
"Support for those using and running matrix-appservice-irc": "matrix-appservice-irc ഉപയോഗിക്കുന്നവര്ക്കും റണ് ചെയ്യുന്നവര്ക്കുമുള്ള സപ്പോര്ട്ട്",
|
||||
"Support for those using the Matrix spec": "Matrix spec ഉപയോഗിക്കുന്നവര്ക്കുള്ള പിന്തുണ",
|
||||
"Design and implementation of E2E in Matrix": "മാട്രിക്സിലെ e2eയുടെ ഡിസൈനും ഇമ്പ്ലിമെന്റേഷനും",
|
||||
"remove %(name)s from the directory.": "%(name)s ഡയറക്റ്ററിയില് നിന്ന് നീക്കം ചെയ്യുക.",
|
||||
"World readable": "ആർക്കും വായിക്കാവുന്നത്",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "വികേന്ദ്രീകൃത , എന്ക്രിപ്റ്റഡ് ചാറ്റ് & മാട്രിക്സ് നല്കുന്ന കൊളാബൊറേഷന്",
|
||||
"Support for those using, running and writing other bridges": "മറ്റ് ബ്രിഡ്ജുകള് ഉപയോഗിക്കുന്ന, റണ് ചെയ്യുന്ന, എഴുതുന്നവര്ക്കുള്ള പിന്തുണ",
|
||||
"Contributing code to Matrix and Riot": "മാട്രിക്സിലേക്കും റയട്ടിലേക്കും കോഡ് സംഭാവന ചെയ്യാം",
|
||||
"Dev chat for the Riot/Web dev team": "റയട്ട്/വെബ് ഡെവലപ്പര് ടീമിനുള്ള dev chat",
|
||||
"Dev chat for the Dendrite dev team": "ഡെന്ഡ്രൈറ്റ് ഡെവലപ്പര് ടീമിനുള്ള dev chat",
|
||||
"Co-ordination for Riot/Web translators": "റയട്ട്/വെബ് പരിഭാഷകരുടെ കൂട്ടായ്മ",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "മാട്രിക്സിലുള്ളതും പഴയ നെറ്റ്വര്ക്കുകളിലേക്ക് ( സ്ലാക്ക്, IRC, ഗിറ്റര് മുതലായവ ) ലിങ്ക് ചെയ്തതുമൊക്കെയായ ധാരാളം റൂമുകളുണ്ട്. ഡയറക്റ്ററി പരിശാധിക്കൂ!",
|
||||
"Failed to change password. Is your password correct?": "രഹസ്യവാക്ക് മാറ്റാന് സാധിച്ചില്ല. രഹസ്യവാക്ക് ശരിയാണോ ?",
|
||||
"You have successfully set a password!": "രഹസ്യവാക്ക് സജ്ജീകരിച്ചിരിക്കുന്നു!",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "നിങ്ങള്ക്ക് ഇപ്പോള് സൈന് ഔട്ട് ചെയ്ത ശേഷവും നിങ്ങളുടെ അക്കൌണ്ടിലേക്ക് തിരികെ വരാം, അതു പോലെ മറ്റ് ഡിവൈസുകളില് സൈന് ഇന് ചെയ്യുകയുമാവാം.",
|
||||
"Continue": "മുന്നോട്ട്",
|
||||
"Please set a password!": "ദയവായി ഒരു രഹസ്യവാക്ക് ക്രമീകരിക്കുക!",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "സൈന് ഔട്ട് ചെയ്ത ശേഷം വീണ്ടും നിങ്ങളുടെ അക്കൌണ്ടിലേക്ക് മടങ്ങി വരാനും, മറ്റ് ഡിവൈസുകളില് സൈന് ഇന് ചെയ്യാനും ഇത് സഹായിക്കും.",
|
||||
"You have successfully set a password and an email address!": "ഇമെയില് വിലാസവും രഹസ്യവാക്കും വിജയകരമായി ക്രമീകരിച്ചിരിക്കുന്നു!",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "ഓര്ക്കുക, വേണ്ട സമയത്ത് യൂസര് സെറ്റിങ്സില് ഒരു ഇമെയില് വിലാസം നല്കാം.",
|
||||
"To return to your account in future you need to <u>set a password</u>": "വീണ്ടും ഈ അക്കൌണ്ട് ഉപയോഗിക്കണമെങ്കില് <u>ഒരു രഹസ്യവാക്ക് സെറ്റ് ചെയ്യുക</u>",
|
||||
"Set Password": "രഹസ്യവാക്ക് സജ്ജീകരിക്കുക",
|
||||
"customServer_text": "മറ്റ് മാട്രിക്സ് സെര്വറുകളില് ലോഗിന് ചെയ്യാന് കസ്റ്റം സെര്വര് ഓപ്ഷനില് ഹോം സെര്വര് യു ആര് എല് വ്യക്തമാക്കുക.<br/>ഇത് വഴി മറ്റൊരു ഹോം സെര്വറില് ഉള്ള മാട്രിക്സ് അക്കൌണ്ട് റയട്ടില് ഉപയോഗിക്കാം.<br/><br/>അതു പോലെ, നിങ്ങള്ക്ക് കസ്റ്റം ഐഡന്റിറ്റി സെര്വറും ക്രമീകരിക്കാം. പക്ഷേ അപ്പോള് നിങ്ങള്ക്ക് ആരേയും ഇമെയില് വഴി ക്ഷണിക്കാനോ തിരിച്ചോ സാധിക്കില്ല.",
|
||||
"Off": "ഓഫ്",
|
||||
"On": "ഓണ്",
|
||||
"Notify me for anything else": "ബാക്കി ഏതിനും എനിക്ക് അറിയിപ്പു നൽകുക",
|
||||
"Notify for all other messages/rooms": "ബാക്കി എല്ലാ സന്ദേശങ്ങൾക്കും/റൂമുകൾക്കും അറിയിപ്പു നൽകുക",
|
||||
"Building services on Matrix": "മട്രിക്സിന്മേൽ സർവീസുകൾ പണിയുന്നു",
|
||||
"Implementing VR services with Matrix": "മട്രിക്സ് ഉപയോഗിച്ചു വി.അർ. സർവീസുകൾ നടപ്പിലാക്കുന്നു",
|
||||
"Implementing VoIP services with Matrix": "മേട്രിക്സിന്മേൽ VoIP സർവീസുകൾ നടപ്പിലാക്കുന്നു",
|
||||
"Discussion of the Identity Service API": "ഐഡൻടിറ്റി സർവീസ് എപിഐ യെ പറ്റിയുള്ള ചർച്ച",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "ഈ പറയുന്ന കീവേർഡുകളെ പറ്റിയുള്ള അറിയിപ്പുകൾ പിൻതുടരുന്ന നിയമങ്ങൾ ഇവിടെ കാണിക്കുവാൻ സാധ്യമല്ല:",
|
||||
"Back": "തിരികെ",
|
||||
"Bug report sent": "ബഗ് റിപ്പോർട്ട് അയയ്ക്കുക"
|
||||
}
|
111
src/i18n/strings/nb_NO.json
Normal file
111
src/i18n/strings/nb_NO.json
Normal file
|
@ -0,0 +1,111 @@
|
|||
{
|
||||
"Add an email address above to configure email notifications": "Legg til en epost adresse for å sette opp epost varsling",
|
||||
"Advanced notification settings": "Avanserte varslingsinnstillinger",
|
||||
"All messages": "Alle meldinger",
|
||||
"All messages (loud)": "Alle meldinger (høy)",
|
||||
"All notifications are currently disabled for all targets.": "Alle varsler er deaktivert for alle mottakere.",
|
||||
"An error occurred whilst saving your email notification preferences.": "En feil oppsto i forbindelse med lagring av epost varsel innstillinger.",
|
||||
"Cancel Sending": "Avbryt sending",
|
||||
"Can't update user notification settings": "Kan ikke oppdatere brukervarsel innstillinger",
|
||||
"Close": "Lukk",
|
||||
"Couldn't find a matching Matrix room": "Kunne ikke finne et samsvarende Matrix rom",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">Safari</a> og <a href=\"http://opera.com\">Opera</a> fungerer også.",
|
||||
"Call invitation": "Anropsinvitasjon",
|
||||
"Collapse panel": "Skjul panel",
|
||||
"Custom Server Options": "Tilpassede serveralternativer",
|
||||
"customServer_text": "Du kan benytte de egendefinerte serveralternativene til å logge deg på andre Matrix-servere ved å spesifisere en annen Hjemmeserver-URL.<br/>Dette lar deg benytte Riot med en eksisterende Matrix konto på en annen hjemmeserver.<br/><br/>Du kan også angi en egendefinert identitetsserver, men du vil ikke kunne invitere brukere via e-post, eller bli invitert via e-post selv.",
|
||||
"delete the alias.": "Slett aliaset.",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Slett rom alias %(alias)s og fjern %(name)s fra katalogen?",
|
||||
"Direct Chat": "Direkte Chat",
|
||||
"Directory": "Katalog",
|
||||
"Download this file": "Last ned filen",
|
||||
"Enable audible notifications in web client": "Aktiver lyd-varsel i webklient",
|
||||
"Enable desktop notifications": "Aktiver skrivebordsvarsler",
|
||||
"Enable email notifications": "Aktiver e-postvarsler",
|
||||
"Enable notifications for this account": "Aktiver varsler for denne konto",
|
||||
"Enable them now": "Aktiver dem nå",
|
||||
"Enter keywords separated by a comma:": "Angi nøkkelord adskilt med komma:",
|
||||
"Error": "Feil",
|
||||
"Error saving email notification preferences": "Feil ved lagring av e-postvarselinnstillinger",
|
||||
"#example": "#eksempel",
|
||||
"Expand panel": "Utvid panel",
|
||||
"Failed to add tag %(tagName)s to room": "Kunne ikke legge til tagg %(tagName)s til rom",
|
||||
"Failed to change settings": "Kunne ikke endre innstillingene",
|
||||
"Failed to forget room %(errCode)s": "Kunne ikke glemme rommet %(errCode)s",
|
||||
"Failed to update keywords": "Kunne ikke oppdatere nøkkelord",
|
||||
"Failed to get protocol list from Home Server": "Kunne ikke hente protokolliste fra Hjemme-Server",
|
||||
"Failed to get public room list": "Kunne ikke hente offentlig romliste",
|
||||
"Failed to remove tag %(tagName)s from room": "Kunne ikke fjerne tagg %(tagName)s fra rommet",
|
||||
"Failed to set direct chat tag": "Kunne ikke angi direkte chat-tagg",
|
||||
"Failed to set Direct Message status of room": "Kunne ikke angi status for direkte melding i rommet",
|
||||
"Favourite": "Favoritt",
|
||||
"Fetching third party location failed": "Kunne ikke hente tredjeparts lokalisering",
|
||||
"Files": "Filer",
|
||||
"Filter room names": "Filtrer romnavn",
|
||||
"Forget": "Glem",
|
||||
"Guests can join": "Gjester kan bli med",
|
||||
"I understand the risks and wish to continue": "Jeg forstår risikoen og ønsker å fortsette",
|
||||
"Invite to this room": "Inviter til dette rommet",
|
||||
"Keywords": "Nøkkelord",
|
||||
"Leave": "Forlat",
|
||||
"Low Priority": "Lav Prioritet",
|
||||
"Members": "Medlemmer",
|
||||
"Messages containing my display name": "Meldinger som inneholder mitt visningsnavn",
|
||||
"Messages containing my user name": "Meldinger som inneholder mitt brukernavn",
|
||||
"Messages in group chats": "Meldinger i gruppesamtaler",
|
||||
"Messages in one-to-one chats": "Meldinger i en-til-en samtaler",
|
||||
"Messages sent by bot": "Meldinger sendt av bot",
|
||||
"more": "mer",
|
||||
"No rooms to show": "Ingen rom å vise",
|
||||
"Noisy": "Bråkete",
|
||||
"Notification targets": "Mål for varsel",
|
||||
"Notifications": "Varsler",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "Varsler på de følgende nøkkelordene følger regler som ikke kan vises her:",
|
||||
"Notify for all other messages/rooms": "Varsler om alle andre meldinger/rom",
|
||||
"Notify me for anything else": "Varsle meg om alt annet",
|
||||
"Off": "Av",
|
||||
"On": "På",
|
||||
"Permalink": "Permanent lenke",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Vennligst installer <a href=\"https://www.google.com/chrome\">Chrome</a> eller <a href=\"https://getfirefox.com\">Firefox</a> for den beste opplevelsen.",
|
||||
"powered by Matrix": "benytter seg av Matrix",
|
||||
"Quote": "Sitat",
|
||||
"Reject": "Avvis",
|
||||
"Remove %(name)s from the directory?": "Fjern %(name)s fra katalogen?",
|
||||
"Remove": "Fjern",
|
||||
"remove %(name)s from the directory.": "fjern %(name)s fra katalogen.",
|
||||
"Remove from Directory": "Fjern fra katalogen",
|
||||
"Resend": "Send på nytt",
|
||||
"Riot does not know how to join a room on this network": "Riot vet ikke hvordan man kan komme inn på et rom på dette nettverket",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot benytter mange avanserte nettleserfunksjoner, og noen av disse er ikke tilgjengelige eller er eksperimentelle på din nåværende nettleser.",
|
||||
"Room not found": "Rommet ble ikke funnet",
|
||||
"Search for a room": "Søk etter et rom",
|
||||
"Source URL": "Kilde URL",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Beklager, din nettleser er <b>ikke</b> i stand til å kjøre Riot.",
|
||||
"The Home Server may be too old to support third party networks": "Hjemme-serveren kan være for gammel til å støtte tredjeparts-nettverk",
|
||||
"There are advanced notifications which are not shown here": "Det er avanserte varsler som ikke vises her",
|
||||
"The server may be unavailable or overloaded": "Serveren kan være utilgjengelig eller overbelastet",
|
||||
"Unable to fetch notification target list": "Kunne ikke hente varsel-mål liste",
|
||||
"Unable to join network": "Kunne ikke bli med i nettverket",
|
||||
"Unable to look up room ID from server": "Kunne ikke slå opp rom-ID fra serveren",
|
||||
"Unhide Preview": "Vis forhåndsvisning",
|
||||
"unknown error code": "ukjent feilkode",
|
||||
"Unnamed room": "Rom uten navn",
|
||||
"Uploaded on %(date)s by %(user)s": "Lastet opp den %(date)s av %(user)s",
|
||||
"View Decrypted Source": "Vis dekryptert kilde",
|
||||
"View Source": "Vis kilde",
|
||||
"When I'm invited to a room": "Når jeg blir invitert til et rom",
|
||||
"World readable": "Lesbar for alle",
|
||||
"You cannot delete this image. (%(code)s)": "Du kan ikke slette dette bildet. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "Du kan ikke slette denne meldingen. (%(code)s)",
|
||||
"You are not receiving desktop notifications": "Du mottar ikke skrivebords varsler",
|
||||
"Messages containing <span>keywords</span>": "Meldinger som inneholder <span>nøkkelord</span>",
|
||||
"Sunday": "Søndag",
|
||||
"Monday": "Mandag",
|
||||
"Tuesday": "Tirsdag",
|
||||
"Wednesday": "Onsdag",
|
||||
"Thursday": "Torsdag",
|
||||
"Friday": "Fredag",
|
||||
"Saturday": "Lørdag",
|
||||
"Today": "I dag",
|
||||
"Yesterday": "I går"
|
||||
}
|
1
src/i18n/strings/ne.json
Normal file
1
src/i18n/strings/ne.json
Normal file
|
@ -0,0 +1 @@
|
|||
{}
|
209
src/i18n/strings/nl.json
Normal file
209
src/i18n/strings/nl.json
Normal file
|
@ -0,0 +1,209 @@
|
|||
{
|
||||
"Add an email address above to configure email notifications": "Voeg een e-mailadres toe om e-mailmeldingen te ontvangen",
|
||||
"Advanced notification settings": "Geavanceerde meldingsinstellingen",
|
||||
"All messages": "Alle berichten",
|
||||
"All messages (loud)": "Alle berichten (luid)",
|
||||
"All notifications are currently disabled for all targets.": "Alle meldingen zijn momenteel uitgeschakeld voor alle doelen.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Er is een fout opgetreden tijdens het opslaan van uw e-mailmeldingsvoorkeuren.",
|
||||
"Call invitation": "Oproep-uitnodiging",
|
||||
"Cancel Sending": "Versturen annuleren",
|
||||
"Can't update user notification settings": "Het is niet gelukt om de meldingsinstellingen van de gebruiker bij te werken",
|
||||
"Close": "Sluiten",
|
||||
"Couldn't find a matching Matrix room": "Het is niet gelukt om een bijbehorende Matrix-kamer te vinden",
|
||||
"Custom Server Options": "Aangepaste serverinstellingen",
|
||||
"customServer_text": "U kunt de aangepaste serverinstellingen gebruiken om in te loggen bij andere Matrix-servers door een andere homeserver-URL in te voeren.<br/>Dit maakt het mogelijk om Riot te gebruiken met een bestaand Matrix-account op een andere homeserver.<br/><br/>U kunt ook een aangepaste identiteitsserver instellen, maar het is dan niet mogelijk om gebruikers uit te nodigen met behulp van een e-mailadres of zelf uitgenodigd te worden met een e-mailadres.",
|
||||
"delete the alias.": "verwijder de alias.",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "De alias %(alias)s verwijderen en %(name)s uit de kamerlijst verwijderen?",
|
||||
"Direct Chat": "Privégesprek",
|
||||
"Directory": "Kamerlijst",
|
||||
"Dismiss": "Afwijzen",
|
||||
"Download this file": "Download dit bestand",
|
||||
"Enable audible notifications in web client": "Geluidsmeldingen in de webclient aanzetten",
|
||||
"Enable desktop notifications": "Desktopmeldingen aanzetten",
|
||||
"Enable email notifications": "E-mailmeldingen aanzetten",
|
||||
"Enable notifications for this account": "Meldingen voor dit account aanzetten",
|
||||
"Enable them now": "Deze nu aanzetten",
|
||||
"Enter keywords separated by a comma:": "Voeg trefwoorden toe, gescheiden door een komma:",
|
||||
"Error": "Fout",
|
||||
"Error saving email notification preferences": "Fout bij het opslaan van de meldingsvoorkeuren voor e-mail",
|
||||
"#example": "#voorbeeld",
|
||||
"Failed to add tag %(tagName)s to room": "Mislukt om de label %(tagName)s aan de kamer toe te voegen",
|
||||
"Failed to change settings": "Instellingen wijzigen mislukt",
|
||||
"Failed to forget room %(errCode)s": "Ruimte vergeten mislukt %(errCode)s",
|
||||
"Failed to update keywords": "Trefwoorden bijwerken mislukt",
|
||||
"Failed to get protocol list from Home Server": "Protocollijst ophalen van de homeserver mislukt",
|
||||
"Failed to get public room list": "Lijst met publieke kamers ophalen mislukt",
|
||||
"Failed to remove tag %(tagName)s from room": "Label %(tagName)s van de kamer verwijderen mislukt",
|
||||
"Failed to set direct chat tag": "Het is mislukt om het privéchatlabel weg te halen",
|
||||
"Favourite": "Favoriet",
|
||||
"Fetching third party location failed": "Het ophalen van de locatie van de derde partij is mislukt",
|
||||
"Files": "Bestanden",
|
||||
"Filter room names": "Filter kamernamen",
|
||||
"Forget": "Vergeten",
|
||||
"Guests can join": "Gasten kunnen deelnemen",
|
||||
"Invite to this room": "Uitnodigen voor deze kamer",
|
||||
"Keywords": "Trefwoorden",
|
||||
"Leave": "Verlaten",
|
||||
"Low Priority": "Lage prioriteit",
|
||||
"Members": "Leden",
|
||||
"Mentions only": "Alleen vermeldingen",
|
||||
"Messages containing my display name": "Berichten die mijn weergavenaam bevatten",
|
||||
"Messages containing my user name": "Berichten die mijn gebruikersnaam bevatten",
|
||||
"Messages in group chats": "Berichten in groepsgesprekken",
|
||||
"Messages in one-to-one chats": "Berichten in één-op-één-gesprekken",
|
||||
"Messages sent by bot": "Berichten verzonden door een bot",
|
||||
"more": "meer",
|
||||
"Mute": "Dempen",
|
||||
"No rooms to show": "Geen kamers om te laten zien",
|
||||
"Noisy": "Luidruchtig",
|
||||
"Notification targets": "Meldingsdoelen",
|
||||
"Notifications": "Meldingen",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "Meldingen op de volgende trefwoorden volgen regels die hier niet kunnen worden getoond:",
|
||||
"Notify for all other messages/rooms": "Stuur een melding voor alle andere berichten/kamers",
|
||||
"Notify me for anything else": "Stuur een melding voor al het andere",
|
||||
"Off": "Uit",
|
||||
"On": "Aan",
|
||||
"Operation failed": "Actie mislukt",
|
||||
"Permalink": "Permanente link",
|
||||
"powered by Matrix": "mogelijk gemaakt door Matrix",
|
||||
"Quote": "Citeer",
|
||||
"Reject": "Afwijzen",
|
||||
"Remove %(name)s from the directory?": "%(name)s uit de kamerlijst verwijderen?",
|
||||
"Remove": "Verwijderen",
|
||||
"remove %(name)s from the directory.": "verwijder %(name)s uit de kamerlijst.",
|
||||
"Remove from Directory": "Uit de kamerlijst verwijderen",
|
||||
"Resend": "Opnieuw verzenden",
|
||||
"Riot does not know how to join a room on this network": "Riot weet niet hoe het moet deelnemen in een kamer op dit netwerk",
|
||||
"Room not found": "De kamer is niet gevonden",
|
||||
"Search for a room": "Een kamer opzoeken",
|
||||
"Source URL": "Bron-URL",
|
||||
"The Home Server may be too old to support third party networks": "De thuisserver is misschien te oud om netwerken van derde partijen te ondersteunen",
|
||||
"There are advanced notifications which are not shown here": "Er zijn geavanceerde notificaties die hier niet getoond worden",
|
||||
"The server may be unavailable or overloaded": "De server is misschien niet beschikbaar of overbelast",
|
||||
"Unable to fetch notification target list": "Het is mislukt om de lijst van notificatiedoelen op te halen",
|
||||
"Unable to join network": "Het is mislukt om toe te treden tot dit netwerk",
|
||||
"Unable to look up room ID from server": "Het is mislukt om de kamer-ID op te halen van de server",
|
||||
"Unhide Preview": "Zichtbaar maken preview",
|
||||
"unknown error code": "onbekende foutcode",
|
||||
"Unnamed room": "Kamer zonder naam",
|
||||
"Uploaded on %(date)s by %(user)s": "Geüpload op %(date)s door %(user)s",
|
||||
"View Decrypted Source": "Bekijk ontsleutelde bron",
|
||||
"View Source": "Bekijk bron",
|
||||
"When I'm invited to a room": "Wanneer ik uitgenodigd word voor een kamer",
|
||||
"World readable": "Door iedereen leesbaar",
|
||||
"You cannot delete this image. (%(code)s)": "Je kunt deze afbeelding niet verwijderen. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "Je kunt dit bericht niet verwijderen. (%(code)s)",
|
||||
"You are not receiving desktop notifications": "Je ontvangt momenteel geen desktopmeldingen",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Je hebt ze mogelijk ingesteld in een andere client dan Riot. Je kunt ze niet aanpassen in Riot maar ze zijn wel actief",
|
||||
"Sunday": "Zondag",
|
||||
"Monday": "Maandag",
|
||||
"Tuesday": "Dinsdag",
|
||||
"Wednesday": "Woensdag",
|
||||
"Thursday": "Donderdag",
|
||||
"Friday": "Vrijdag",
|
||||
"Saturday": "Zaterdag",
|
||||
"Today": "Vandaag",
|
||||
"Yesterday": "Gisteren",
|
||||
"Failed to set Direct Message status of room": "Het is mislukt om de directe-berichtenstatus van de kamer in te stellen",
|
||||
"A new version of Riot is available.": "Er is een nieuwe versie van Riot beschikbaar.",
|
||||
"All Rooms": "Alle kamers",
|
||||
"Cancel": "Annuleren",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">Safari</a> en <a href=\"http://opera.com\">Opera</a> werken ook.",
|
||||
"Changelog": "Logboek van wijzigingen",
|
||||
"Collapse panel": "Paneel inklappen",
|
||||
"Collecting app version information": "App-versieinformatie verzamelen",
|
||||
"Collecting logs": "Logboeken verzamelen",
|
||||
"Describe your problem here.": "Beschrijf uw probleem hier.",
|
||||
"Expand panel": "Paneel uitklappen",
|
||||
"Failed to send report: ": "Rapport verzenden mislukt: ",
|
||||
"Forward Message": "Bericht doorsturen",
|
||||
"Hide panel": "Paneel verbergen",
|
||||
"(HTTP status %(httpStatus)s)": "(HTTP-status %(httpStatus)s)",
|
||||
"I understand the risks and wish to continue": "Ik begrijp de risico's en wil graag verder gaan",
|
||||
"Login": "Aanmelden",
|
||||
"Loading bug report module": "Bugrapporteermodule laden",
|
||||
"Messages containing <span>keywords</span>": "Berichten die <span>trefwoorden</span> bevatten",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Installeer <a href=\"https://www.google.com/chrome\">Chrome</a> of <a href=\"https://getfirefox.com\">Firefox</a> voor de beste ervaring.",
|
||||
"Report a bug": "Een bug rapporteren",
|
||||
"Riot Desktop on %(platformName)s": "Riot Desktop op %(platformName)s",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot wordt niet ondersteund op het mobiele web. Wil je de app installeren?",
|
||||
"Search": "Zoeken",
|
||||
"Search…": "Zoeken…",
|
||||
"Send": "Versturen",
|
||||
"Send logs": "Logboeken versturen",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Sorry, uw browser werkt <b>niet</b> met Riot.",
|
||||
"This Room": "Deze kamer",
|
||||
"Unavailable": "Niet beschikbaar",
|
||||
"Unknown device": "Onbekend apparaat",
|
||||
"Update": "Bijwerken",
|
||||
"Uploading report": "Rapport uploaden",
|
||||
"What's New": "Wat is er nieuw",
|
||||
"What's new?": "Wat is er nieuw?",
|
||||
"Waiting for response from server": "Wachten op antwoord van de server",
|
||||
"OK": "OK",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "U moet HTTPS gebruiken om een oproep met schermdelen te kunnen starten.",
|
||||
"Welcome to Riot.im": "Welkom bij Riot.im",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Gedecentaliseerd en versleuteld chatten & samenwerken mogelijk gemaakt door [matrix]",
|
||||
"Search the room directory": "De kamerlijst doorzoeken",
|
||||
"Chat with Riot Bot": "Met Riot Bot chatten",
|
||||
"Get started with some tips from Riot Bot!": "Begin met enkele tips van Riot Bot!",
|
||||
"General discussion about Matrix and Riot": "Algemene discussie over Matrix en Riot",
|
||||
"Discussion of all things Matrix!": "Discussie over alles wat met Matrix te maken heeft!",
|
||||
"Riot/Web & Desktop chat": "Riot/Web & Desktop-chat",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk-chat",
|
||||
"Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk-chat",
|
||||
"Matrix technical discussions": "Technische discussies over Matrix",
|
||||
"Running Matrix services": "Matrixdiensten beheren",
|
||||
"Community-run support for Synapse": "Synapse-ondersteuning vanuit de gemeenschap",
|
||||
"Admin support for Dendrite": "Beheerondersteuning voor Dendrite",
|
||||
"Announcements about Synapse releases": "Aankondigingen over Synapse-uitgaven",
|
||||
"Support for those using and running matrix-appservice-irc": "Ondersteuning voor gebruikers en beheerders van matrix-appservice-irc",
|
||||
"Building services on Matrix": "Diensten op Matrix bouwen",
|
||||
"Support for those using the Matrix spec": "Ondersteuning voor gebruikers van Matrix-specificatie",
|
||||
"Contributing code to Matrix and Riot": "Code bijdragen aan Matrix en Riot",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Veel kamers bestaan al in Matrix, gelinkt aan bestaande netwerken (Slack, IRC, Gitter, enz.) of onafhankelijk. Bekijk de kamerlijst!",
|
||||
"Failed to change password. Is your password correct?": "Wachtwoord wijzigen mislukt. Is uw wachtwoord juist?",
|
||||
"You have successfully set a password!": "U heeft met succes een wachtwoord ingesteld!",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "U kunt nu terugkeren naar uw account nadat u bent afgemeld, en u aanmelden op andere apparaten.",
|
||||
"Continue": "Doorgaan",
|
||||
"Please set a password!": "Stel een wachtwoord in!",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "Hiermee kunt u naar uw account terugkeren nadat u zich heeft afgemeld, en u aanmelden op andere apparaten.",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s op %(osName)s",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Beschrijf de bug. Wat deed u? Wat verwachtte u? Wat gebeurde er daadwerkelijk?",
|
||||
"Please describe the bug and/or send logs.": "Beschrijf de bug en/of verstuur logboeken.",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot gebrukt veel geavanceerde browserfuncties, waarvan enkele niet (of experimenteel) in uw webbrowser beschikbaar zijn.",
|
||||
"Co-ordination for Riot/Web translators": "Coördinatie voor Riot/Web-vertalers",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Om diagnose van het probleem mogelijk te maken worden logboeken van deze client met het bugrapport meegestuurd. Schakel dit vinkje uit als u slechts de bovenstaande tekst mee wil sturen:",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Met uw huidige browser kan de applicatie er volledig incorrect uitzien. Tevens is het mogelijk dat niet alle functies naar behoren werken. U kunt doorgaan als u het toch wil proberen, maar bij problemen bent u volledig op uzelf aangewezen!",
|
||||
"Design and implementation of E2E in Matrix": "Ontwerp en implementatie van E2E in Matrix",
|
||||
"Implementing VR services with Matrix": "Implementatie van VR-diensten met Matrix",
|
||||
"Implementing VoIP services with Matrix": "Implementatie van VoIP-diensten met Matrix",
|
||||
"Discussion of the Identity Service API": "Discussie over de Identity Service API",
|
||||
"Support for those using, running and writing other bridges": "Ondersteuning voor het gebruiken, draaien en ontwikkelen aan andere bruggen",
|
||||
"Dev chat for the Riot/Web dev team": "Dev-chat voor het Riot/Web ontwikkelteam",
|
||||
"Dev chat for the Dendrite dev team": "Dev-chat voor het Dendrite-ontwikkelteam",
|
||||
"You have successfully set a password and an email address!": "Het instellen van een wachtwoord en e-mailadres is geslaagd!",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Onthoud dat u altijd een e-mailadres in kan stellen in de gebruikersinstellingen als u zich bedenkt.",
|
||||
"Warning": "Waarschuwing",
|
||||
"Checking for an update...": "Aan het kijken voor een update...",
|
||||
"Error encountered (%(errorDetail)s).": "Fout ondervonden (%(errorDetail)s).",
|
||||
"No update available.": "Geen update beschikbaar.",
|
||||
"Downloading update...": "Update aan het downloaden...",
|
||||
"To return to your account in future you need to <u>set a password</u>": "Om in de toekomst naar je account terug te gaan moet je <u>een wachtwoord instellen</u>",
|
||||
"Set Password": "Wachtwoord instellen",
|
||||
"Couldn't load home page": "Kon de home pagina niet laden",
|
||||
"Bug report sent": "Bug report verzonden",
|
||||
"Thank you!": "Bedankt!",
|
||||
"Back": "Terug",
|
||||
"Failed to send custom event.": "Aangepast Event verzenden mislukt.",
|
||||
"Send Custom Event": "Verzend aangepast evenement",
|
||||
"Send Custom State Event": "Verzend aangepast State Event",
|
||||
"Developer Tools": "Ontwikkelaarsgereedschap",
|
||||
"Filter results": "Resultaten filteren",
|
||||
"Explore Room State": "Verken Ruimtetoestand",
|
||||
"You must specify an event type!": "Je moet een event-type specificeren!",
|
||||
"Event sent!": "Event verstuurd!",
|
||||
"Event Type": "Event-type",
|
||||
"Event Content": "Event-inhoud",
|
||||
"State Key": "Toestandssleutel"
|
||||
}
|
218
src/i18n/strings/pl.json
Normal file
218
src/i18n/strings/pl.json
Normal file
|
@ -0,0 +1,218 @@
|
|||
{
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s przez %(browserName)s na %(osName)s",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">Safari</a> i <a href=\"http://opera.com\">Opera</a> też działają.",
|
||||
"A new version of Riot is available.": "Dostępna jest nowa wersja Riot.",
|
||||
"Add an email address above to configure email notifications": "Dodaj adres e-mail powyżej, aby skonfigurować powiadomienia e-mailowe",
|
||||
"Advanced notification settings": "Zaawansowane ustawienia powiadomień",
|
||||
"All messages": "Wszystkie wiadomości",
|
||||
"All messages (loud)": "Wszystkie wiadomości (głośno)",
|
||||
"All Rooms": "Wszystkie pokoje",
|
||||
"All notifications are currently disabled for all targets.": "Wszystkie powiadomienia są obecnie wyłączone dla wszystkich celów.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Podczas zapisywania ustawień powiadomień e-mail wystąpił błąd.",
|
||||
"Call invitation": "Zaproszenie do rozmowy",
|
||||
"Cancel": "Anuluj",
|
||||
"Cancel Sending": "Anuluj wysyłanie",
|
||||
"Can't update user notification settings": "Nie można zaktualizować ustawień powiadomień użytkownika",
|
||||
"Changelog": "Dziennik zmian",
|
||||
"Close": "Zamknij",
|
||||
"Collecting app version information": "Zbieranie informacji o wersji aplikacji",
|
||||
"Collecting logs": "Zbieranie dzienników",
|
||||
"Couldn't find a matching Matrix room": "Nie można znaleźć pasującego pokoju Matrix",
|
||||
"Custom Server Options": "Niestandardowe opcje serwera",
|
||||
"delete the alias.": "usunąć alias.",
|
||||
"Describe your problem here.": "Opisz swój problem tutaj.",
|
||||
"Directory": "Księga adresowa",
|
||||
"Download this file": "Pobierz plik",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot nie jest obsługiwany przez przeglądarki mobilne. Zainstaluj aplikację?",
|
||||
"Search": "Szukaj",
|
||||
"Search…": "Szukaj…",
|
||||
"Search for a room": "Szukaj pokoju",
|
||||
"Send": "Wyślij",
|
||||
"Collapse panel": "Ukryj panel",
|
||||
"customServer_text": "Możesz używać opcji serwera niestandardowego do logowania się na inne serwery Matrix, określając inny adres URL serwera domowego.<br/>Pozwala to na wykorzystanie Riot z istniejącym kontem Matrix na innym serwerze domowym.<br/><br/>Można również ustawić niestandardowy serwer tożsamości, ale nie będzie można zapraszać użytkowników adresem e-mail, ani być zaproszonym przez adres e-mailowy.",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Usuń alias %(alias)s i usuń %(name)s z katalogu?",
|
||||
"Dismiss": "Zamknij",
|
||||
"Enable audible notifications in web client": "Włącz dźwiękowe powiadomienia w kliencie internetowym",
|
||||
"Enable email notifications": "Włącz powiadomienia e-mailowe",
|
||||
"Enable notifications for this account": "Włącz powiadomienia na tym koncie",
|
||||
"Enable them now": "Włącz je teraz",
|
||||
"Enter keywords separated by a comma:": "Wpisz słowa kluczowe oddzielone przecinkami:",
|
||||
"Error": "Błąd",
|
||||
"Error saving email notification preferences": "Wystąpił błąd podczas zapisywania ustawień powiadomień e-mailowych",
|
||||
"#example": "#przykład",
|
||||
"Expand panel": "Rozwiń panel",
|
||||
"Failed to add tag %(tagName)s to room": "Nie można dodać tagu %(tagName)s do pokoju",
|
||||
"Failed to change settings": "Nie udało się zmienić ustawień",
|
||||
"Failed to forget room %(errCode)s": "Nie mogłem zapomnieć o pokoju %(errCode)s",
|
||||
"Failed to update keywords": "Nie udało się zaktualizować słów kluczowych",
|
||||
"Failed to get protocol list from Home Server": "Nie można pobrać listy protokołów z serwera domowego",
|
||||
"Failed to get public room list": "Nie udało się uzyskać publicznej listy pokojowej",
|
||||
"Failed to remove tag %(tagName)s from room": "Nie udało się usunąć tagu %(tagName)s z pokoju",
|
||||
"Failed to send report: ": "Nie udało się wysłać raportu: ",
|
||||
"Favourite": "Ulubiony",
|
||||
"Files": "Pliki",
|
||||
"Filter room names": "Filtruj nazwy pokojów",
|
||||
"Forget": "Zapomnij",
|
||||
"Forward Message": "Przekaż wiadomość",
|
||||
"Guests can join": "Goście mogą dołączyć",
|
||||
"Hide panel": "Ukryj panel",
|
||||
"I understand the risks and wish to continue": "Rozumiem ryzyko i chęć kontynuować",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "W celu zdiagnozowania problemów logi z tego klienta zostaną wysłane wraz z tym raportem o błędzie. Jeśli wolisz wysłać tylko tekst powyżej, proszę odznacz:",
|
||||
"Invite to this room": "Zaproś do tego pokoju",
|
||||
"Keywords": "Słowa kluczowe",
|
||||
"Loading bug report module": "Ładowanie modułu raportu błędów",
|
||||
"Low Priority": "Niski priorytet",
|
||||
"Messages containing <span>keywords</span>": "Wiadomości zawierające <span>słowa kluczowe</span>",
|
||||
"Messages containing my user name": "Wiadomości zawierające moją nazwę użytkownika",
|
||||
"Messages in group chats": "Wiadomości w czatach grupowych",
|
||||
"Messages sent by bot": "Wiadomości wysłane przez bota",
|
||||
"more": "więcej",
|
||||
"Enable desktop notifications": "Włącz powiadomienia",
|
||||
"(HTTP status %(httpStatus)s)": "(status HTTP %(httpStatus)s)",
|
||||
"Leave": "Opuść",
|
||||
"Login": "Logowanie",
|
||||
"Members": "Członkowie",
|
||||
"Messages containing my display name": "Wiadomości zawierające moją wyświetlaną nazwę",
|
||||
"Direct Chat": "Rozmowa bezpośrednia",
|
||||
"Mute": "Wycisz",
|
||||
"No rooms to show": "Brak pokoi do wyświetlenia",
|
||||
"Notifications": "Powiadomienia",
|
||||
"Failed to set direct chat tag": "Nie udało się ustawić znacznika rozmów bezpośrednich",
|
||||
"Failed to set Direct Message status of room": "Nie udało się ustawić statusu Rozmów Bezpośrednich dla pokoju",
|
||||
"Notification targets": "Cele powiadomień",
|
||||
"Operation failed": "Operacja nieudana",
|
||||
"Permalink": "Odnośnik bezpośredni",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Proszę opisz problem (w miarę możliwości po angielsku). Co doprowadziło do błędu? Jakie było Twoje oczekiwanie, a co stało się zamiast tego?",
|
||||
"Please describe the bug and/or send logs.": "Proszę opisz błąd i/lub wyślij logi.",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Zainstaluj proszę <a href=\"https://www.google.com/chrome\">Chrome</a> lub <a href=\"https://getfirefox.com\">Firefox</a>.",
|
||||
"Quote": "Cytat",
|
||||
"Remove %(name)s from the directory?": "Usunąć %(name)s z katalogu?",
|
||||
"Remove from Directory": "Usuń z katalogu",
|
||||
"Report a bug": "Zgłoś błąd",
|
||||
"Resend": "Wyślij jeszcze raz",
|
||||
"Riot Desktop on %(platformName)s": "Riot Desktop na %(platformName)s",
|
||||
"Riot does not know how to join a room on this network": "Riot nie wie, jak dołączyć do pokoju w tej sieci",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot używa wiele zaawansowanych technologii, które nie są dostępne lub są w fazie testów w Twojej przeglądarce.",
|
||||
"Room not found": "Pokój nie znaleziony",
|
||||
"Send logs": "Wyślij logi",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Przepraszamy, Twoja przeglądarka <b>nie jest w stanie</b> uruchomić Riot.",
|
||||
"powered by Matrix": "napędzany przez Matrix",
|
||||
"Reject": "Odrzuć",
|
||||
"Remove": "Usuń",
|
||||
"remove %(name)s from the directory.": "usuń %(name)s z katalogu.",
|
||||
"The Home Server may be too old to support third party networks": "Serwer domowy może być za stary dla innych sieci",
|
||||
"There are advanced notifications which are not shown here": "Masz zaawansowane powiadomienia, nie pokazane tutaj",
|
||||
"The server may be unavailable or overloaded": "Serwer jest nieosiągalny lub jest przeciążony",
|
||||
"This Room": "Ten pokój",
|
||||
"Unable to join network": "Nie można dołączyć do sieci",
|
||||
"Unable to look up room ID from server": "Nie można wyszukać ID pokoju na serwerze",
|
||||
"Unavailable": "Niedostępny",
|
||||
"Unhide Preview": "Odkryj podgląd",
|
||||
"Unknown device": "Nieznane urządzenie",
|
||||
"unknown error code": "nieznany kod błędu",
|
||||
"Unnamed room": "Pokój bez nazwy",
|
||||
"Update": "Uaktualnienie",
|
||||
"Uploaded on %(date)s by %(user)s": "Wysłane %(date)s przez %(user)s",
|
||||
"Uploading report": "Raport wysyłania",
|
||||
"Messages in one-to-one chats": "Wiadomości w rozmowach jeden-na-jeden",
|
||||
"Noisy": "Głośny",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "Powiadomienia o słowach kluczowych spełniają reguły, które nie mogą być tu wyświetlone:",
|
||||
"Notify for all other messages/rooms": "Powiadamiaj o wszystkich innych wiadomośsciach/pokojach",
|
||||
"Notify me for anything else": "Powiadom mnie o całej reszcie",
|
||||
"Off": "Wyłącz",
|
||||
"On": "Włącz",
|
||||
"Source URL": "Źródłowy URL",
|
||||
"Unable to fetch notification target list": "Nie można pobrać listy docelowej dla powiadomień",
|
||||
"View Decrypted Source": "Pokaż zdeszyfrowane źródło",
|
||||
"View Source": "Pokaż źródło",
|
||||
"What's New": "Co nowego",
|
||||
"What's new?": "Co nowego?",
|
||||
"Waiting for response from server": "Czekam na odpowiedź serwera",
|
||||
"When I'm invited to a room": "Kiedy zostanę zaproszony do pokoju",
|
||||
"World readable": "Całkowicie publiczne",
|
||||
"You cannot delete this image. (%(code)s)": "Nie możesz usunąć tego obrazka. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "Nie możesz usunąć tej wiadomości. (%(code)s)",
|
||||
"You are not receiving desktop notifications": "Nie otrzymujesz powiadomień na pulpit",
|
||||
"Sunday": "Niedziela",
|
||||
"Monday": "Poniedziałek",
|
||||
"Tuesday": "Wtorek",
|
||||
"Wednesday": "Środa",
|
||||
"Thursday": "Czwartek",
|
||||
"Friday": "Piątek",
|
||||
"Saturday": "Sobota",
|
||||
"Today": "Dzisiaj",
|
||||
"Yesterday": "Wczoraj",
|
||||
"OK": "OK",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Musisz używać bezpiecznego protokołu HTTPS aby użyć połączenia współdzielenia ekranu.",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Z Twoją obecną przeglądarką, wygląd oraz wrażenia z używania aplikacji mogą być niepoprawne, a niektóre funkcje wcale nie działać. Kontynuuj jeśli chcesz spróbować, jednak trudno będzie pomóc w przypadku błędów, które mogą nastąpić!",
|
||||
"Welcome to Riot.im": "Witamy w Riot.im",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Zdecentralizowany, szyfrowany czat & współpraca wspierana przez [matrix]",
|
||||
"Search the room directory": "Wyszukaj katalog pokojów",
|
||||
"Chat with Riot Bot": "Rozmowa z Botem Riota",
|
||||
"Get started with some tips from Riot Bot!": "Rozpocznij z wskazówkami Riot Bota!",
|
||||
"General discussion about Matrix and Riot": "Generalna rozmowa o Matrix i Riot",
|
||||
"Discussion of all things Matrix!": "Rozmowa o wszystkim Matrixowym!",
|
||||
"Matrix technical discussions": "Dyskusje techniczne Matrixa",
|
||||
"Fetching third party location failed": "Pobranie lokalizacji zewnętrznej nie powiodło się",
|
||||
"Mentions only": "Tylko, gdy wymienieni",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Możliwe, że skofigurowałeś je w innym kliencie, niż Riot. Nie możesz ich zmieniać w Riot, ale nadal mają zastosowanie",
|
||||
"Riot/Web & Desktop chat": "Czat o Riot/Web i Desktop",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Czat o Riot/iOS i matrix-ios-sdk",
|
||||
"Riot/Android & matrix-android-sdk chat": "Czat o Riot/Android i matrix-android-sdk",
|
||||
"Running Matrix services": "Utrzymywanie usług Matrix",
|
||||
"Community-run support for Synapse": "Wsparcie społeczności dla Synapse",
|
||||
"Admin support for Dendrite": "Wsparcie administratorskie dla Dendrite",
|
||||
"Announcements about Synapse releases": "Ogłoszenia na temat Synapse",
|
||||
"Support for those using and running matrix-appservice-irc": "Wsparcie dla hostujących i korzystających z matrix-appservice-irc",
|
||||
"Building services on Matrix": "Tworzenie usług w oparciu o Matrix",
|
||||
"Support for those using the Matrix spec": "Wsparcie dla używających specyfikacji Matrix",
|
||||
"Design and implementation of E2E in Matrix": "Projektowanie i implementacja szyfrowania klient-klient (end-to-end) w Matrix",
|
||||
"Implementing VR services with Matrix": "Implementowanie usług wirtualnej rzeczywistości w oparciu o Matrix",
|
||||
"Implementing VoIP services with Matrix": "Implementowanie usług telefonii internetowej VoIP w oparciu o Matrix",
|
||||
"Discussion of the Identity Service API": "Dyskusja na temat API Identity Service",
|
||||
"Support for those using, running and writing other bridges": "Wsparcie dla używających, zapewniających i piszących inne mosty",
|
||||
"Contributing code to Matrix and Riot": "Dokładanie kodu do Matrix lub Riot",
|
||||
"Dev chat for the Riot/Web dev team": "Czat deweloperów zespołu Riot/Web",
|
||||
"Dev chat for the Dendrite dev team": "Czat deweloperów zespołu Dendrite",
|
||||
"Co-ordination for Riot/Web translators": "Koordynacja tłumaczy Riot/Web",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Matrix ma wiele, już działających pokoi, połączonych z istniejącymi sieciami, takimi jak Slack, IRC lub Gitter, a także wiele zupełnie niezależnych. Możesz przejrzeć je wszystkie w spisie pokoi!",
|
||||
"Failed to change password. Is your password correct?": "Zmiana hasła nie powiodła się. Czy Twoje hasło jest poprawne?",
|
||||
"You have successfully set a password!": "Hasło zostało zmienione z powodzeniem!",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "Teraz możesz powrócić do swojego konta na innych urządzeniach po wylogowaniu i ponownym zalogowaniu się.",
|
||||
"Continue": "Kontynuuj",
|
||||
"Please set a password!": "Proszę, ustaw hasło!",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "To pozwoli Ci powrócić do Twojego konta po wylogowaniu i ponownym zalogowaniu się na innych urządzeniach.",
|
||||
"You have successfully set a password and an email address!": "Z powodzeniem ustawiono hasło i adres e-mail dla Twojego konta!",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Pamiętaj, że zawsze możesz zmienić swój e-mail lub hasło w panelu ustawień użytkownika.",
|
||||
"To return to your account in future you need to <u>set a password</u>": "Aby wrócić do swojego konta w przyszłości musisz <u> ustawić hasło </u>",
|
||||
"Set Password": "Ustaw hasło",
|
||||
"No update available.": "Brak aktualizacji.",
|
||||
"Warning": "Ostrzeżenie",
|
||||
"Error encountered (%(errorDetail)s).": "Wystąpił błąd (%(errorDetail)s).",
|
||||
"Downloading update...": "Pobieranie aktualizacji...",
|
||||
"Checking for an update...": "Sprawdzanie aktualizacji...",
|
||||
"Couldn't load home page": "Nie można załadować strony startowej",
|
||||
"Bug report sent": "Raport błędu wysłany",
|
||||
"Thank you!": "Dziękujemy!",
|
||||
"Back": "Powrót",
|
||||
"Developer Tools": "Narzędzia programistyczne",
|
||||
"Failed to send custom event.": "Wysyłanie niestandardowego wydarzenia nie powiodło się.",
|
||||
"Filter results": "Filtruj wyniki",
|
||||
"Send Custom Event": "Wyślij niestandardowe wydarzenie",
|
||||
"Send Custom State Event": "Wyślij wydarzenie o niestandardowym stanie",
|
||||
"Explore Room State": "Przeglądaj stan pokoju",
|
||||
"You must specify an event type!": "Musisz określić typ wydarzenia!",
|
||||
"Event sent!": "Wydarzenie wysłane!",
|
||||
"Event Type": "Typ wydarzenia",
|
||||
"Event Content": "Zawartość wydarzenia",
|
||||
"State Key": "Klucz stanu",
|
||||
"Toolbox": "Przybornik",
|
||||
"Edit": "Edycja",
|
||||
"Show message in desktop notification": "Pokaż wiadomość w notyfikacji na pulpicie",
|
||||
"Unpin Message": "Odepnij Wiadomość",
|
||||
"Pin Message": "Przypnij Wiadomość",
|
||||
"Register": "Rejestracja",
|
||||
"Rooms": "Pokoje",
|
||||
"Invite to this community": "Zaproś do tej społeczności",
|
||||
"Add rooms to this community": "Dodaj pokoje do tej społeczności"
|
||||
}
|
209
src/i18n/strings/pt.json
Normal file
209
src/i18n/strings/pt.json
Normal file
|
@ -0,0 +1,209 @@
|
|||
{
|
||||
"Add an email address above to configure email notifications": "Insira um endereço de email no campo acima para configurar as notificações por email",
|
||||
"All messages": "Todas as mensagens",
|
||||
"All messages (loud)": "Todas as mensagens (alto)",
|
||||
"An error occurred whilst saving your email notification preferences.": "Ocorreu um erro ao guardar as suas preferências de notificação por email.",
|
||||
"Call invitation": "Convite para chamada",
|
||||
"Cancel Sending": "Cancelar o envio",
|
||||
"Can't update user notification settings": "Não é possível atualizar as preferências de notificação",
|
||||
"Close": "Fechar",
|
||||
"Couldn't find a matching Matrix room": "Não foi possível encontrar uma sala correspondente no servidor Matrix",
|
||||
"Custom Server Options": "Opções para Servidor Personalizado",
|
||||
"delete the alias.": "apagar o apelido da sala.",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Apagar o apelido %(alias)s da sala e remover %(name)s da lista pública?",
|
||||
"Direct Chat": "Conversa pessoal",
|
||||
"Directory": "Diretório",
|
||||
"Dismiss": "Descartar",
|
||||
"Download this file": "Transferir este ficheiro",
|
||||
"Enable audible notifications in web client": "Ativar notificações de áudio no cliente web",
|
||||
"Enable desktop notifications": "Ativar notificações no desktop",
|
||||
"Enable email notifications": "Ativar notificações por e-mail",
|
||||
"Enable notifications for this account": "Ativar notificações para esta conta",
|
||||
"Enable them now": "Ativar agora",
|
||||
"Enter keywords separated by a comma:": "Insira palavras-chave separadas por vírgula:",
|
||||
"Error": "Erro",
|
||||
"Error saving email notification preferences": "Erro ao guardar as preferências de notificação por e-mail",
|
||||
"Failed to add tag %(tagName)s to room": "Falha ao adicionar %(tagName)s à sala",
|
||||
"Failed to change settings": "Falha ao alterar as configurações",
|
||||
"Failed to forget room %(errCode)s": "Falha ao esquecer a sala %(errCode)s",
|
||||
"Failed to update keywords": "Falha ao atualizar as palavras-chave",
|
||||
"Failed to get protocol list from Home Server": "Falha ao obter a lista de protocolos do servidor padrão",
|
||||
"Failed to get public room list": "Falha ao obter a lista de salas públicas",
|
||||
"Failed to set direct chat tag": "Falha ao definir conversa como pessoal",
|
||||
"Failed to set Direct Message status of room": "Falha em definir a mensagem de status da sala",
|
||||
"Favourite": "Favorito",
|
||||
"Fetching third party location failed": "Falha ao obter localização de terceiros",
|
||||
"Files": "Ficheiros",
|
||||
"Filter room names": "Filtrar salas por título",
|
||||
"Forget": "Esquecer",
|
||||
"Forward Message": "Encaminhar",
|
||||
"Guests can join": "Convidados podem entrar",
|
||||
"Invite to this room": "Convidar para esta sala",
|
||||
"Keywords": "Palavras-chave",
|
||||
"Leave": "Sair",
|
||||
"Low Priority": "Baixa prioridade",
|
||||
"Members": "Membros",
|
||||
"Mentions only": "Apenas menções",
|
||||
"Messages containing my display name": "Mensagens contendo o meu nome público",
|
||||
"Messages containing my user name": "Mensagens contendo o meu nome de utilizador",
|
||||
"Messages in group chats": "Mensagens em salas",
|
||||
"Messages in one-to-one chats": "Mensagens em conversas pessoais",
|
||||
"Messages sent by bot": "Mensagens enviadas por bots",
|
||||
"more": "mais",
|
||||
"Mute": "Silenciar",
|
||||
"No rooms to show": "Não existem salas a serem exibidas",
|
||||
"Noisy": "Barulhento",
|
||||
"Notification targets": "Alvos de notificação",
|
||||
"Notifications": "Notificações",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "Notificações sobre as seguintes palavras-chave seguem regras que não podem ser exibidas aqui:",
|
||||
"Notify for all other messages/rooms": "Notificar para todas as outras mensagens/salas",
|
||||
"Notify me for anything else": "Notificar-me sobre qualquer outro evento",
|
||||
"Off": "Desativado",
|
||||
"On": "Ativado",
|
||||
"Operation failed": "A operação falhou",
|
||||
"Permalink": "Link permanente",
|
||||
"powered by Matrix": "rodando a partir do Matrix",
|
||||
"Quote": "Citar",
|
||||
"Reject": "Rejeitar",
|
||||
"Remove": "Remover",
|
||||
"Remove %(name)s from the directory?": "Remover %(name)s da lista pública de salas?",
|
||||
"remove %(name)s from the directory.": "remover %(name)s da lista pública de salas.",
|
||||
"Remove from Directory": "Remover da lista pública de salas",
|
||||
"Resend": "Reenviar",
|
||||
"Riot does not know how to join a room on this network": "O Riot não sabe como entrar numa sala nesta rede",
|
||||
"Room not found": "Sala não encontrada",
|
||||
"Search for a room": "Pesquisar por uma sala",
|
||||
"Source URL": "URL fonte",
|
||||
"The Home Server may be too old to support third party networks": "O servidor pode ser muito antigo para suportar redes de terceiros",
|
||||
"There are advanced notifications which are not shown here": "Existem notificações avançadas que não são exibidas aqui",
|
||||
"The server may be unavailable or overloaded": "O servidor pode estar inacessível ou sobrecarregado",
|
||||
"Unable to fetch notification target list": "Não foi possível obter a lista de alvos de notificação",
|
||||
"Unable to join network": "Não foi possível juntar-se à rede",
|
||||
"Unable to look up room ID from server": "Não foi possível obter a identificação da sala do servidor",
|
||||
"Unhide Preview": "Mostrar a pré-visualização novamente",
|
||||
"unknown error code": "código de erro desconhecido",
|
||||
"Unnamed room": "Sala sem nome",
|
||||
"Uploaded on %(date)s by %(user)s": "Enviada em %(date)s por %(user)s",
|
||||
"View Decrypted Source": "Ver a fonte desencriptada",
|
||||
"View Source": "Ver a fonte",
|
||||
"When I'm invited to a room": "Quando sou convidado para uma sala",
|
||||
"World readable": "Público",
|
||||
"You cannot delete this image. (%(code)s)": "Não pode apagar esta imagem. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "Não pode apagar esta mensagem. (%(code)s)",
|
||||
"You are not receiving desktop notifications": "Não está a receber notificações de desktop",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Pode ter configurado num outro cliente sem ser o Riot. Não pode ajustá-las no Riot, mas ainda assim elas aplicam-se",
|
||||
"Sunday": "Domingo",
|
||||
"Monday": "Segunda-feira",
|
||||
"Tuesday": "Terça-feira",
|
||||
"Wednesday": "Quarta-feira",
|
||||
"Thursday": "Quinta-feira",
|
||||
"Friday": "Sexta-feira",
|
||||
"Saturday": "Sábado",
|
||||
"Today": "Hoje",
|
||||
"Yesterday": "Ontem",
|
||||
"#example": "#exemplo",
|
||||
"Failed to remove tag %(tagName)s from room": "Não foi possível remover a marcação %(tagName)s desta sala",
|
||||
"Advanced notification settings": "Configurações avançadas de notificação",
|
||||
"customServer_text": "Pode usar as opções de servidor personalizado para entrar noutros servidores Matrix especificando para isso um URL de outro Servidor de Base.<br/> Isto permite que use o Riot com uma conta Matrix que exista noutro Servidor de Base.<br/> <br/> Também pode configurar um servidor de Identidade personalizado mas não poderá convidar utilizadores através do endereço de e-mail, ou ser convidado pelo seu endereço de e-mail.",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">Safari</a> e <a href=\"http://opera.com\">Opera</a> também funcionam.",
|
||||
"All notifications are currently disabled for all targets.": "Todas as notificações estão atualmente desativadas para todos os casos.",
|
||||
"Collapse panel": "Colapsar o painel",
|
||||
"Expand panel": "Expandir o painel",
|
||||
"I understand the risks and wish to continue": "Entendo os riscos e pretendo continuar",
|
||||
"Messages containing <span>keywords</span>": "Mensagens contendo <span>palavras-chave</span>",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Por favor instale <a href=\"https://www.google.com/chrome\">Chrome</a> ou <a href=\"https://getfirefox.com\">Firefox</a> para ter a melhor experiência.",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "O Riot usa muitas funcionalidades avançadas do navegador, algumas das quais não estão disponíveis ou ainda são experimentais no seu navegador atual.",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Desculpe, o seu navegador <b>não</b> é capaz de executar o Riot.",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Com o seu navegador atual, a aparência e sensação de uso da aplicação podem estar completamente incorretas, e algumas das funcionalidades poderão não funcionar. Se quiser tentar de qualquer maneira pode continuar, mas está por sua conta com algum problema que possa encontrar!",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s em %(osName)s",
|
||||
"A new version of Riot is available.": "Uma nova versão do Riot está disponível.",
|
||||
"All Rooms": "Todas as salas",
|
||||
"Cancel": "Cancelar",
|
||||
"Changelog": "Histórico de alterações",
|
||||
"Collecting app version information": "A recolher informação da versão da app",
|
||||
"Collecting logs": "A recolher logs",
|
||||
"Describe your problem here.": "Descreva o seu problema aqui.",
|
||||
"Failed to send report: ": "Falha ao enviar o relatório: ",
|
||||
"Hide panel": "Ocultar o painel",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Para diagnosticar problemas, relatórios deste cliente serão enviados juntamente com esta notificação de falha. Se preferir enviar apenas o texto acima, por favor remova a seleção:",
|
||||
"Loading bug report module": "A carregar o módulo de relato de erros",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Por favor descreva a falha encontrada. O que fez? O que esperava que acontecesse? O que realmente aconteceu?",
|
||||
"Please describe the bug and/or send logs.": "Por favor descreva a falha e/ou envie os logs de erro.",
|
||||
"Report a bug": "Reportar uma falha",
|
||||
"Riot Desktop on %(platformName)s": "Riot para computadores desktop em %(platformName)s",
|
||||
"Riot is not supported on mobile web. Install the app?": "O Riot não é suportado na web para dispositivos móveis. Quer instalar a app?",
|
||||
"Search": "Pesquisar",
|
||||
"Search…": "Pesquisar…",
|
||||
"Send": "Enviar",
|
||||
"Send logs": "Enviar relatórios de erro",
|
||||
"This Room": "Esta sala",
|
||||
"Unavailable": "Indisponível",
|
||||
"Unknown device": "Dispositivo desconhecido",
|
||||
"Update": "Atualizar",
|
||||
"Uploading report": "A enviar o relatório",
|
||||
"What's New": "Novidades",
|
||||
"What's new?": "O que há de novo?",
|
||||
"Waiting for response from server": "À espera de resposta do servidor",
|
||||
"OK": "Ok",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Necessita de estar a usar HTTPS para poder iniciar uma chamada com partilha de ecrã.",
|
||||
"No update available.": "Nenhuma atualização disponível.",
|
||||
"Welcome to Riot.im": "Bem-vindo ao Riot.im",
|
||||
"Login": "Entrar",
|
||||
"Warning": "Aviso",
|
||||
"Checking for an update...": "A procurar uma atualização...",
|
||||
"Error encountered (%(errorDetail)s).": "Erro encontrado (%(errorDetail)s).",
|
||||
"Downloading update...": "A transferir atualização...",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Chat descentralizado, encriptado & colaborativo alimentado por [matrix]",
|
||||
"Back": "Voltar",
|
||||
"Bug report sent": "Relatório de erros enviado",
|
||||
"Developer Tools": "Ferramentas de desenvolvedor",
|
||||
"Failed to send custom event.": "Falha ao enviar evento personalizado.",
|
||||
"(HTTP status %(httpStatus)s)": "(Estado HTTP %(httpStatus)s)",
|
||||
"Send Custom Event": "Enviar evento personalizado",
|
||||
"Send Custom State Event": "Enviar evento personalizado de estado",
|
||||
"Explore Room State": "Explorar estado da sala",
|
||||
"Thank you!": "Obrigado!",
|
||||
"Event sent!": "Evento enviado!",
|
||||
"Event Type": "Tipo de evento",
|
||||
"Event Content": "Conteúdo do evento",
|
||||
"State Key": "Chave de estado",
|
||||
"Search the room directory": "Procurar o diretório de salas",
|
||||
"Chat with Riot Bot": "Falar com o Bot do Riot",
|
||||
"Get started with some tips from Riot Bot!": "Comece com algumas dicas do Bot do Riot",
|
||||
"General discussion about Matrix and Riot": "Discussão geral acerca do Matrix e do Riot",
|
||||
"Discussion of all things Matrix!": "Discussão de tudo o que envolva o Matrix!",
|
||||
"Riot/Web & Desktop chat": "Riot/Web & Desktop chat",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk chat",
|
||||
"Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk chat",
|
||||
"Matrix technical discussions": "Discussões técnicas do Matrix",
|
||||
"Running Matrix services": "Correr serviços do Matrix",
|
||||
"Community-run support for Synapse": "Suporte da comunidade para o Synapse",
|
||||
"Admin support for Dendrite": "Suporte de administração para o Dendrite",
|
||||
"Announcements about Synapse releases": "Anúncios acerca de lançamentos do Synapse",
|
||||
"Support for those using and running matrix-appservice-irc": "Suporte para aqueles a correr e a utilizar o matrix-appservice-irc",
|
||||
"Building services on Matrix": "Construir serviços no Matrix",
|
||||
"Support for those using the Matrix spec": "Suporte para os utilizadores da especificação do Matrix",
|
||||
"Design and implementation of E2E in Matrix": "Design e implementação de encriptação ponto-a-ponto (E2E) no Matrix",
|
||||
"Implementing VR services with Matrix": "Implementar serviços de realidade virtual (VR) com o Matrix",
|
||||
"Implementing VoIP services with Matrix": "Implementar serviços VoIP com o Matrix",
|
||||
"Discussion of the Identity Service API": "Discussão da API do serviço de identidade",
|
||||
"Support for those using, running and writing other bridges": "Suporte para aqueles a usar, correr e desenvolver outras pontes (bridges)",
|
||||
"Contributing code to Matrix and Riot": "Contribuir código para o Matrix e para o Riot",
|
||||
"Dev chat for the Riot/Web dev team": "Conversa de desenvolvimento para a equipa do Riot/Web",
|
||||
"Dev chat for the Dendrite dev team": "Conversa de desenvolvimento para a equipa do Dendrite",
|
||||
"Co-ordination for Riot/Web translators": "Coordenação para a equipa de tradutores do Riot/Web",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Já existem muitas salas no Matrix, ligadas a redes já existentes (Slack, IRC, Gitter, etc) ou independentes. Dê uma vista de olhos no diretório!",
|
||||
"Failed to change password. Is your password correct?": "Falha ao alterar a palavra-passe. A sua palavra-passe está correta?",
|
||||
"You have successfully set a password!": "Palavra-passe definida com sucesso!",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "Pode agora voltar à sua conta no fim de terminar sessão, e iniciar sessão noutros dispositivos.",
|
||||
"Continue": "Continuar",
|
||||
"Please set a password!": "Por favor, defina uma palavra-passe!",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "Isto irá permitir-lhe voltar à sua conta depois de terminar sessão, assim como iniciar sessão noutros dispositivos.",
|
||||
"You have successfully set a password and an email address!": "Palavra passe e endereço de e-mail definidos com sucesso!",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Lembre-se, pode sempre definir um endereço de e-mail nas definições de utilizador se mudar de ideias.",
|
||||
"To return to your account in future you need to <u>set a password</u>": "Para voltar à sua conta no futuro, necessita de <u>definir uma palavra-passe</u>",
|
||||
"Set Password": "Definir palavra-passe",
|
||||
"Couldn't load home page": "Não foi possível carregar a página inicial",
|
||||
"Filter results": "Filtrar resultados",
|
||||
"You must specify an event type!": "Tem que especificar um tipo de evento!"
|
||||
}
|
209
src/i18n/strings/pt_BR.json
Normal file
209
src/i18n/strings/pt_BR.json
Normal file
|
@ -0,0 +1,209 @@
|
|||
{
|
||||
"Add an email address above to configure email notifications": "Insira um endereço de email no campo acima para configurar suas notificações por email",
|
||||
"All messages": "Todas as mensagens",
|
||||
"All messages (loud)": "Todas as mensagens (alto)",
|
||||
"An error occurred whilst saving your email notification preferences.": "Um erro ocorreu enquanto o sistema estava salvando suas preferências de notificação por email.",
|
||||
"Call invitation": "Convite para chamada",
|
||||
"Cancel Sending": "Cancelar o envio",
|
||||
"Can't update user notification settings": "Não é possível atualizar as preferências de notificação",
|
||||
"Close": "Fechar",
|
||||
"Couldn't find a matching Matrix room": "Não foi possível encontrar uma sala correspondente no servidor Matrix",
|
||||
"Custom Server Options": "Opções para Servidor Personalizado",
|
||||
"delete the alias.": "apagar o apelido da sala.",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Apagar o apelido %(alias)s da sala e remover %(name)s da lista pública?",
|
||||
"Direct Chat": "Conversa pessoal",
|
||||
"Directory": "Diretório",
|
||||
"Dismiss": "Descartar",
|
||||
"Download this file": "Baixar este arquivo",
|
||||
"Enable audible notifications in web client": "Ativar notificações de áudio no cliente web",
|
||||
"Enable desktop notifications": "Ativar notificações no desktop",
|
||||
"Enable email notifications": "Ativar notificações por email",
|
||||
"Enable notifications for this account": "Ativar notificações para esta conta",
|
||||
"Enable them now": "Habilitar agora",
|
||||
"Enter keywords separated by a comma:": "Coloque cada palavras-chave separada por vírgula:",
|
||||
"Error": "Erro",
|
||||
"Error saving email notification preferences": "Erro ao salvar as preferências de notificação por email",
|
||||
"Failed to add tag %(tagName)s to room": "Falha ao adicionar %(tagName)s à sala",
|
||||
"Failed to change settings": "Falhou ao mudar as preferências",
|
||||
"Failed to forget room %(errCode)s": "Falhou ao esquecer a sala %(errCode)s",
|
||||
"Failed to update keywords": "Falha ao alterar as palavras-chave",
|
||||
"Failed to get protocol list from Home Server": "Falha em acessar a lista de protocolos do servidor padrão",
|
||||
"Failed to get public room list": "Falha ao acessar a lista pública de salas",
|
||||
"Failed to set direct chat tag": "Falha ao definir conversa como pessoal",
|
||||
"Failed to set Direct Message status of room": "Falha em definir a mensagem de status da sala",
|
||||
"Favourite": "Favorito",
|
||||
"Fetching third party location failed": "Falha ao acessar localização de terceiros",
|
||||
"Files": "Arquivos",
|
||||
"Filter room names": "Filtrar salas por título",
|
||||
"Forget": "Esquecer",
|
||||
"Forward Message": "Encaminhar",
|
||||
"Guests can join": "Convidados podem entrar",
|
||||
"Invite to this room": "Convidar para esta sala",
|
||||
"Keywords": "Palavras-chave",
|
||||
"Leave": "Sair",
|
||||
"Low Priority": "Baixa prioridade",
|
||||
"Members": "Membros",
|
||||
"Mentions only": "Apenas menções",
|
||||
"Messages containing my display name": "Mensagens contendo meu nome público",
|
||||
"Messages containing my user name": "Mensagens contendo meu nome de usuário",
|
||||
"Messages in group chats": "Mensagens em salas",
|
||||
"Messages in one-to-one chats": "Mensagens em conversas pessoais",
|
||||
"Messages sent by bot": "Mensagens enviadas por bots",
|
||||
"more": "ver mais",
|
||||
"Mute": "Mudo",
|
||||
"No rooms to show": "Não existem salas a serem exibidas",
|
||||
"Noisy": "Barulhento",
|
||||
"Notification targets": "Alvos de notificação",
|
||||
"Notifications": "Notificações",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "Notificações sobre as seguintes palavras-chave seguem regras que não podem ser exibidas aqui:",
|
||||
"Notify for all other messages/rooms": "Notificar para todas as outras mensagens e salas",
|
||||
"Notify me for anything else": "Notificar-me sobre qualquer outro evento",
|
||||
"Off": "Desativado",
|
||||
"On": "Ativado",
|
||||
"Operation failed": "A operação falhou",
|
||||
"Permalink": "Link permanente",
|
||||
"powered by Matrix": "rodando a partir do Matrix",
|
||||
"Quote": "Citar",
|
||||
"Reject": "Rejeitar",
|
||||
"Remove": "Remover",
|
||||
"Remove %(name)s from the directory?": "Remover %(name)s da lista pública de salas?",
|
||||
"remove %(name)s from the directory.": "remover %(name)s da lista pública de salas.",
|
||||
"Remove from Directory": "Remover da lista pública de salas",
|
||||
"Resend": "Reenviar",
|
||||
"Riot does not know how to join a room on this network": "O sistema não sabe como entrar na sala desta rede",
|
||||
"Room not found": "Sala não encontrada",
|
||||
"Search for a room": "Procurar por uma sala",
|
||||
"Source URL": "URL fonte",
|
||||
"The Home Server may be too old to support third party networks": "O servidor pode ser muito antigo para suportar redes de terceiros",
|
||||
"There are advanced notifications which are not shown here": "Existem opções avançadas que não são exibidas aqui",
|
||||
"The server may be unavailable or overloaded": "O servidor pode estar inacessível ou sobrecarregado",
|
||||
"Unable to fetch notification target list": "Não foi possível obter a lista de alvos de notificação",
|
||||
"Unable to join network": "Não foi possível conectar na rede",
|
||||
"Unable to look up room ID from server": "Não foi possível buscar identificação da sala no servidor",
|
||||
"Unhide Preview": "Mostrar a pré-visualização",
|
||||
"unknown error code": "código de erro desconhecido",
|
||||
"Unnamed room": "Sala sem nome",
|
||||
"Uploaded on %(date)s by %(user)s": "Enviada em %(date)s por %(user)s",
|
||||
"View Decrypted Source": "Ver a fonte descriptografada",
|
||||
"View Source": "Ver a fonte",
|
||||
"When I'm invited to a room": "Quando sou convidada(o) a uma sala",
|
||||
"World readable": "Público",
|
||||
"You cannot delete this image. (%(code)s)": "Você não pode apagar esta imagem. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "Você não pode apagar esta mensagem. (%(code)s)",
|
||||
"You are not receiving desktop notifications": "Você não está recebendo notificações desktop",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Você pode te-las configurado em outro cliente além do Riot. Você não pode ajustá-las no Riot, mas ainda assim elas se aplicam aqui",
|
||||
"Sunday": "Domingo",
|
||||
"Monday": "Segunda",
|
||||
"Tuesday": "Terça",
|
||||
"Wednesday": "Quarta",
|
||||
"Thursday": "Quinta",
|
||||
"Friday": "Sexta",
|
||||
"Saturday": "Sábado",
|
||||
"Today": "Hoje",
|
||||
"Yesterday": "Ontem",
|
||||
"#example": "#exemplo",
|
||||
"Failed to remove tag %(tagName)s from room": "Não foi possível remover a marcação %(tagName)s desta sala",
|
||||
"Advanced notification settings": "Configurações avançadas de notificação",
|
||||
"customServer_text": "Você pode usar as opções de servidor personalizado para entrar em outros servidores Matrix, especificando uma URL de outro Servidor de Base.<br/> Isso permite que você use Riot com uma conta Matrix que exista em outro Servidor de Base.<br/> <br/> Você também pode configurar um servidor de Identidade personalizado, mas neste caso não poderá convidar usuárias(os) pelo endereço de e-mail, ou ser convidado(a) pelo seu endereço de e-mail.",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">Safari</a> e <a href=\"http://opera.com\">Opera</a> funcionam também.",
|
||||
"All notifications are currently disabled for all targets.": "Todas as notificações estão atualmente desabilitadas para todos os casos.",
|
||||
"Collapse panel": "Colapsar o painel",
|
||||
"Expand panel": "Expandir o painel",
|
||||
"I understand the risks and wish to continue": "Entendo os riscos e desejo continuar",
|
||||
"Messages containing <span>keywords</span>": "Mensagens contendo <span>palavras-chave</span>",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Por favor instale <a href=\"https://www.google.com/chrome\">Chrome</a> ou <a href=\"https://getfirefox.com\">Firefox</a> para ter a melhor experiência de uso.",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "O Riot usa muitas funcionalidades avançadas do navegador, algumas das quais não estão disponíveis ou ainda são experimentais no seu navegador atual.",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Perdão. O seu navegador <b>não</b> é capaz de rodar o Riot.",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Com o seu navegador atual, a aparência e sensação de uso da aplicação podem estar completamente incorretas, e algumas das funcionalidades poderão não funcionar. Se você quiser tentar de qualquer maneira, pode continuar, mas aí vai ter que se virar sozinho(a) com os problemas que porventura encontrar!",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s em %(osName)s",
|
||||
"A new version of Riot is available.": "Uma nova versão do Riot está disponível.",
|
||||
"All Rooms": "Todas as salas",
|
||||
"Cancel": "Cancelar",
|
||||
"Changelog": "Histórico de alterações",
|
||||
"Collecting app version information": "Coletando informação sobre a versão do app",
|
||||
"Collecting logs": "Coletando logs",
|
||||
"Describe your problem here.": "Descreva o seu problema aqui.",
|
||||
"Failed to send report: ": "Falha ao enviar o relatório: ",
|
||||
"Hide panel": "Ocultar o painel",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Para diagnosticar problemas, relatórios deste cliente serão enviados junto a esta notificação de falha. Se você prefere apenas enviar o seu texto acima, por favor des-selecione:",
|
||||
"Loading bug report module": "Carregando o módulo de relatórios de erros",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Por favor, descreva a falha encontrada. O que você estava fazendo? O que você esperava que devia ocorrer? E o que aconteceu efetivamente?",
|
||||
"Please describe the bug and/or send logs.": "Por favor, descreva as falhas e/ou envie os logs de erro.",
|
||||
"Report a bug": "Reportar uma falha",
|
||||
"Riot Desktop on %(platformName)s": "Riot para computadores desktop em %(platformName)s",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot versão web não é suportado a partir de celular. Quer instalar o app para celular?",
|
||||
"Search": "Buscar",
|
||||
"Search…": "Buscar…",
|
||||
"Send": "Enviar",
|
||||
"Send logs": "Enviar relatórios de erro",
|
||||
"This Room": "Esta sala",
|
||||
"Unavailable": "Indisponível",
|
||||
"Unknown device": "Dispositivo desconhecido",
|
||||
"Update": "Atualizar",
|
||||
"Uploading report": "Enviando o relatório",
|
||||
"What's New": "Novidades",
|
||||
"What's new?": "O que há de novidades?",
|
||||
"Waiting for response from server": "Esperando por resposta do servidor",
|
||||
"OK": "Ok",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Você precisa estar usando HTTPS para poder iniciar uma chamada com compartilhamento de tela.",
|
||||
"Login": "Fazer login",
|
||||
"Welcome to Riot.im": "Seja bem-vinda(o) a Riot.im",
|
||||
"Search the room directory": "Buscar na lista pública de salas",
|
||||
"Chat with Riot Bot": "Conversar com o Bot do Riot",
|
||||
"Get started with some tips from Riot Bot!": "Comece com algumas dicas do Bot do Riot!",
|
||||
"General discussion about Matrix and Riot": "Discussão geral sobre o Matrix e o Riot",
|
||||
"Discussion of all things Matrix!": "Discussão sobre todas as coisas do Matrix!",
|
||||
"Riot/Web & Desktop chat": "Riot/chat da web e do computador desktop",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Riot/chat do iOS e do matrix-ios-sdk",
|
||||
"Riot/Android & matrix-android-sdk chat": "Riot/Chat do Android e do matrix-android-sdk",
|
||||
"Matrix technical discussions": "Discussões técnicas do Matrix",
|
||||
"Running Matrix services": "Rodando serviços Matrix",
|
||||
"Community-run support for Synapse": "Apoio ao Synapse gerido pela comunidade",
|
||||
"Admin support for Dendrite": "Suporte de administração para Dendrite",
|
||||
"Announcements about Synapse releases": "Anúncios sobre lançamentos do Synapse",
|
||||
"Support for those using and running matrix-appservice-irc": "Apoio para as pessoas usando e rodando matrix-appservice-irc",
|
||||
"Building services on Matrix": "Construindo serviços no Matrix",
|
||||
"Support for those using the Matrix spec": "Apoio para as pessoas que estão usando as especificações Matrix",
|
||||
"Design and implementation of E2E in Matrix": "Design e implementação de criptografia ponta-a-ponta (E2E) no Matrix",
|
||||
"Implementing VR services with Matrix": "Implementando serviços de Realidade Virtual (VR) com Matrix",
|
||||
"Implementing VoIP services with Matrix": "Implementando serviços VoIP com Matrix",
|
||||
"Discussion of the Identity Service API": "Discussão do API do Serviço de Identidades",
|
||||
"Support for those using, running and writing other bridges": "Apoio para as pessoas que estejam usando, rodando e escrevendo outras pontes (bridges)",
|
||||
"Contributing code to Matrix and Riot": "Contribuindo com código para o Matrix e o Riot",
|
||||
"Dev chat for the Riot/Web dev team": "Chat de desenvolvimento para o time devel do Riot/Web",
|
||||
"Dev chat for the Dendrite dev team": "Chat de desenvolvimento para o time devel do Dendrite",
|
||||
"Co-ordination for Riot/Web translators": "Coordenação para tradutoras(es) do Riot/Web",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Muitas salas já existem no Matrix, algumas independentes, e outras relacionadas a redes existentes (tais como Slack, IRC, Gitter, entre outras). Dê uma olhada na lista de salas públicas!",
|
||||
"Failed to change password. Is your password correct?": "Não foi possível mudar a senha. A sua senha está correta?",
|
||||
"You have successfully set a password!": "Você definiu sua senha com sucesso!",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "Você pode retornar agora para a sua conta depois de fazer logout, e então fazer login em outros dispositivos.",
|
||||
"Continue": "Continuar",
|
||||
"Please set a password!": "Por favor, defina uma senha!",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "Isso permitirá que você possa retornar à sua conta após fazer logout, e também fazer login em outros dispositivos.",
|
||||
"(HTTP status %(httpStatus)s)": "(Status HTTP %(httpStatus)s)",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Chat descentralizado, criptografado e colaborativo impulsionado por [matrix]",
|
||||
"You have successfully set a password and an email address!": "Você definiu uma senha e um endereço de e-mail com sucesso!",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Lembre-se: você pode sempre definir um endereço de e-mail nas configurações de usuário, se mudar de ideia.",
|
||||
"To return to your account in future you need to <u>set a password</u>": "Para poder, futuramente, retornar à sua conta, você precisa <u>definir uma senha</u>",
|
||||
"Set Password": "Definir senha",
|
||||
"Warning": "Atenção",
|
||||
"Checking for an update...": "Verificando se há atualizações...",
|
||||
"Error encountered (%(errorDetail)s).": "Erro encontrado (%(errorDetail)s).",
|
||||
"No update available.": "Não há atualizações disponíveis.",
|
||||
"Downloading update...": "Baixando atualização...",
|
||||
"Couldn't load home page": "Não foi possível carregar a página inicial",
|
||||
"Back": "Voltar",
|
||||
"Bug report sent": "Relatório do bug enviado",
|
||||
"Developer Tools": "Ferramentas do desenvolvedor",
|
||||
"Failed to send custom event.": "Falha ao enviar evento personalizado.",
|
||||
"Filter results": "Filtrar resultados",
|
||||
"Send Custom Event": "Enviar Evento Customizado",
|
||||
"Send Custom State Event": "Enviar Evento de Estado Personalizado",
|
||||
"Explore Room State": "Explorar Estado da Sala",
|
||||
"You must specify an event type!": "Você precisa especificar um tipo do evento!",
|
||||
"Thank you!": "Obrigado!",
|
||||
"Event sent!": "Evento enviado!",
|
||||
"Event Type": "Tipo do Evento",
|
||||
"Event Content": "Conteúdo do Evento",
|
||||
"State Key": "Chave do Estado"
|
||||
}
|
221
src/i18n/strings/ru.json
Normal file
221
src/i18n/strings/ru.json
Normal file
|
@ -0,0 +1,221 @@
|
|||
{
|
||||
"Add an email address above to configure email notifications": "Добавьте email адрес для оповещений",
|
||||
"All notifications are currently disabled for all targets.": "Все оповещения для всех устройств отключены.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Возникла ошибка при сохранении настроек оповещения по email.",
|
||||
"Can't update user notification settings": "Не удается обновить пользовательские настройки оповещения",
|
||||
"Couldn't find a matching Matrix room": "Не удалось найти подходящую комнату Matrix",
|
||||
"Custom Server Options": "Настраиваемые параметры сервера",
|
||||
"delete the alias.": "удалить псевдоним.",
|
||||
"Direct Chat": "Прямой чат",
|
||||
"Directory": "Каталог",
|
||||
"Dismiss": "Отказ",
|
||||
"Enable audible notifications in web client": "Включить звуковые уведомления в веб-клиенте",
|
||||
"Enable desktop notifications": "Включить оповещения на рабочем столе",
|
||||
"Enable email notifications": "Включить уведомления по email",
|
||||
"Enable notifications for this account": "Включить уведомления для этой учетной записи",
|
||||
"Enable them now": "Включить сейчас",
|
||||
"Enter keywords separated by a comma:": "Введите ключевые слова, разделенные запятой:",
|
||||
"Error": "Ошибка",
|
||||
"Error saving email notification preferences": "Ошибка при сохранении настроек уведомлений по email",
|
||||
"#example": "#пример",
|
||||
"Failed to change settings": "Не удалось изменить настройки",
|
||||
"Failed to update keywords": "Не удалось обновить ключевые слова",
|
||||
"Failed to get protocol list from Home Server": "Не удалось получить список протоколов с домашнего сервера",
|
||||
"Failed to get public room list": "Не удалось получить список общедоступных комнат",
|
||||
"Failed to set Direct Message status of room": "Не удалось установить статус прямого сообщения в комнате",
|
||||
"Favourite": "Избранное",
|
||||
"Fetching third party location failed": "Не удалось извлечь местоположение третьей стороны",
|
||||
"Files": "Файлы",
|
||||
"Filter room names": "Фильтр по названию комнат",
|
||||
"Forget": "Забыть",
|
||||
"Guests can join": "Гости могут присоединиться",
|
||||
"Invite to this room": "Пригласить в комнату",
|
||||
"Keywords": "Ключевые слова",
|
||||
"Leave": "Покинуть",
|
||||
"Low Priority": "Низкий приоритет",
|
||||
"Members": "Участники",
|
||||
"No rooms to show": "Нет комнат для отображения",
|
||||
"Noisy": "Со звуком",
|
||||
"Notification targets": "Цели уведомления",
|
||||
"Notifications": "Уведомления",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "Уведомления по следующим ключевым словам соответствуют правилам, которые нельзя отобразить здесь:",
|
||||
"Notify for all other messages/rooms": "Уведомлять обо всех других сообщениях/комнатах",
|
||||
"Notify me for anything else": "Уведомлять во всех остальных случаях",
|
||||
"Off": "Выключить",
|
||||
"On": "Включить",
|
||||
"Operation failed": "Сбой операции",
|
||||
"powered by Matrix": "Основано на Matrix",
|
||||
"Reject": "Отклонить",
|
||||
"Remove": "Удалить",
|
||||
"Remove from Directory": "Удалить из каталога",
|
||||
"Riot does not know how to join a room on this network": "Riot не знает, как присоединиться к комнате, принадлежащей к этой сети",
|
||||
"Room not found": "Комната не найдена",
|
||||
"Search for a room": "Поиск комнаты",
|
||||
"The Home Server may be too old to support third party networks": "Домашний сервер может быть слишком старым для поддержки сетей сторонних производителей",
|
||||
"There are advanced notifications which are not shown here": "Существуют дополнительные уведомления, которые не показаны здесь",
|
||||
"The server may be unavailable or overloaded": "Сервер, вероятно, недоступен или перегружен",
|
||||
"Unable to fetch notification target list": "Не удалось получить список целей уведомления",
|
||||
"Unable to join network": "Не удается подключиться к сети",
|
||||
"Unable to look up room ID from server": "Не удалось найти ID комнаты на сервере",
|
||||
"unknown error code": "неизвестный код ошибки",
|
||||
"Unnamed room": "Комната без названия",
|
||||
"World readable": "Доступно всем",
|
||||
"You are not receiving desktop notifications": "Вы не получаете уведомления на рабочем столе",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Возможно вы настроили их не в Riot, а в другом Matrix-клиенте. Настроить их в Riot не удастся, но они будут в нем применяться",
|
||||
"All messages": "Все сообщения",
|
||||
"All messages (loud)": "Все сообщения (со звуком)",
|
||||
"Cancel Sending": "Отменить отправку",
|
||||
"Close": "Закрыть",
|
||||
"Download this file": "Скачать этот файл",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Удалить псевдоним комнаты %(alias)s и удалить %(name)s из каталога?",
|
||||
"Failed to add tag %(tagName)s to room": "Не удалось добавить тег %(tagName)s в комнату",
|
||||
"Failed to forget room %(errCode)s": "Не удалось удалить комнату %(errCode)s",
|
||||
"Failed to remove tag %(tagName)s from room": "Не удалось удалить тег %(tagName)s из комнаты",
|
||||
"Failed to set direct chat tag": "Не удалось установить тег прямого чата",
|
||||
"Unhide Preview": "Показать предварительный просмотр",
|
||||
"Uploaded on %(date)s by %(user)s": "Отправлено %(date)s для %(user)s",
|
||||
"View Decrypted Source": "Просмотр расшифрованного источника",
|
||||
"View Source": "Просмотр источника",
|
||||
"You cannot delete this image. (%(code)s)": "Это изображение нельзя удалить. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "Это сообщение нельзя удалить. (%(code)s)",
|
||||
"Sunday": "Воскресенье",
|
||||
"Monday": "Понедельник",
|
||||
"Tuesday": "Вторник",
|
||||
"Wednesday": "Среда",
|
||||
"Thursday": "Четверг",
|
||||
"Friday": "Пятница",
|
||||
"Saturday": "Суббота",
|
||||
"Today": "Сегодня",
|
||||
"Yesterday": "Вчера",
|
||||
"Mentions only": "Только при упоминаниях",
|
||||
"Mute": "Беззвучный",
|
||||
"Permalink": "Постоянная ссылка",
|
||||
"Quote": "Цитата",
|
||||
"Remove %(name)s from the directory?": "Удалить %(name)s из каталога?",
|
||||
"remove %(name)s from the directory.": "удалить %(name)s из каталога.",
|
||||
"Resend": "Переотправить",
|
||||
"Source URL": "Исходный URL-адрес",
|
||||
"Advanced notification settings": "Дополнительные параметры уведомлений",
|
||||
"Call invitation": "Пригласительный звонок",
|
||||
"customServer_text": "Вы можете использовать настраиваемые параметры сервера для входа на другие серверы Matrix, указав другой URL-адрес домашнего сервера.<br/>Это позволяет использовать это приложение с существующей учетной записью Matrix на другом домашнем сервере.<br/><br/>Вы также можете установить другой сервер идентификации, но это, как правило, будет препятствовать взаимодействию с пользователями на основе адреса электронной почты.",
|
||||
"Messages containing my display name": "Сообщения, содержащие мое имя",
|
||||
"Messages containing my user name": "Сообщение, содержащие мое имя пользователя",
|
||||
"Messages in group chats": "Сообщения в групповых чатах",
|
||||
"Messages in one-to-one chats": "Сообщения в индивидуальных чатах",
|
||||
"Messages sent by bot": "Сообщения, отправленные ботом",
|
||||
"more": "больше",
|
||||
"When I'm invited to a room": "Когда меня приглашают в комнату",
|
||||
"A new version of Riot is available.": "Доступна новая версия Riot.",
|
||||
"All Rooms": "Все комнаты",
|
||||
"Cancel": "Отмена",
|
||||
"Changelog": "История изменений",
|
||||
"Collapse panel": "Свернуть панель",
|
||||
"Collecting app version information": "Сбор информации о версии приложения",
|
||||
"Collecting logs": "Сбор журналов",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s с %(browserName)s на %(osName)s",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">Safari</a> и <a href=\"http://opera.com\">Opera</a> работают тоже.",
|
||||
"Describe your problem here.": "Опишите вашу проблему здесь.",
|
||||
"Expand panel": "Развернуть панель",
|
||||
"Failed to send report: ": "Не удалось отправить отчет: ",
|
||||
"Forward Message": "Переслать сообщение",
|
||||
"Hide panel": "Скрыть панель",
|
||||
"I understand the risks and wish to continue": "Я понимаю риски и желаю продолжить",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Чтобы диагностировать проблемы, журналы работы этого клиента будут отправлены вместе с сообщением об ошибке. Если вы предпочитаете отправить только текст выше, пожалуйста, снимите отметку:",
|
||||
"Loading bug report module": "Загрузка модуля Отчет об ошибках",
|
||||
"Messages containing <span>keywords</span>": "Сообщения, содержащие определенные <span>ключевые слова</span>",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Пожалуйста, опишите ошибку. Что сделали? Чего ожидали? Что на самом деле произошло?",
|
||||
"Please describe the bug and/or send logs.": "Опишите ошибку и/или отправьте журналы.",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Для получения наилучшего опыта при работе с Riot, пожалуйста, установите <a href=\"https://www.google.com/chrome\">Chrome</a> или <a href=\"https://getfirefox.com\">Firefox</a>.",
|
||||
"Report a bug": "Сообщить об ошибке",
|
||||
"Riot Desktop on %(platformName)s": "Riot Desktop на %(platformName)s",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot не поддерживает версию веб-сайта для мобильных устройств. Установить приложение?",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot использует многие передовые возможности браузера, некоторые из которых недоступны или являются экспериментальным в вашем текущем браузере.",
|
||||
"Search": "Поиск",
|
||||
"Search…": "Поиск.…",
|
||||
"Send": "Отослать",
|
||||
"Send logs": "Отправка журналов",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "К сожалению, ваш браузер <b>не способен</b> запустить Riot.",
|
||||
"This Room": "Эта комната",
|
||||
"Unavailable": "Недоступен",
|
||||
"Unknown device": "Неизвестное устройство",
|
||||
"Update": "Обновление",
|
||||
"Uploading report": "Отправка отчета",
|
||||
"What's New": "Что нового",
|
||||
"What's new?": "Что нового?",
|
||||
"Waiting for response from server": "Ожидание ответа от сервера",
|
||||
"OK": "OK",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Требуется использование HTTPS для совместного использования рабочего стола.",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "В текущем браузере внешний вид приложения может быть полностью неверным, а некоторые или все функции могут не работать. Если вы хотите попробовать в любом случае, то можете продолжить, но с теми проблемами, с которыми вы можете столкнуться вам придется разбираться самостоятельно!",
|
||||
"Login": "Войти",
|
||||
"Welcome to Riot.im": "Добро пожаловать на Riot.im",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Децентрализованный, зашифрованный чат и совместная работа при поддержке [matrix]",
|
||||
"Search the room directory": "Поиск в каталоге комнат",
|
||||
"Chat with Riot Bot": "Пообщаться с ботом Riot",
|
||||
"Get started with some tips from Riot Bot!": "Начните с некоторых советов от бота Riot!",
|
||||
"General discussion about Matrix and Riot": "Общая дискуссия о Matrix и Riot",
|
||||
"Discussion of all things Matrix!": "Дискуссия обо всем, что связано с Matrix!",
|
||||
"Riot/Web & Desktop chat": "Riot/Web & Desktop-чат",
|
||||
"Matrix technical discussions": "Технические дискуссии о Matrix",
|
||||
"Running Matrix services": "Запуск сервисов Matrix",
|
||||
"Community-run support for Synapse": "Поддержка Synapse от сообщества",
|
||||
"Admin support for Dendrite": "Административная поддержка Dendrite",
|
||||
"Building services on Matrix": "Разработка сервисов на Matrix",
|
||||
"Implementing VoIP services with Matrix": "Внедрение VoIP-услуг с помощью Matrix",
|
||||
"(HTTP status %(httpStatus)s)": "(статус HTTP %(httpStatus)s)",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk чат",
|
||||
"Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk чат",
|
||||
"Announcements about Synapse releases": "Объявления о выпусках Synapse",
|
||||
"Support for those using and running matrix-appservice-irc": "Поддержка тех, кто использует и работает с matrix-appservice-irc",
|
||||
"You have successfully set a password!": "Вы успешно установили пароль!",
|
||||
"Continue": "Продолжить",
|
||||
"Please set a password!": "Пожалуйста, установите пароль!",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "В Matrix существует множество комнат, как связанных с существующими сетями (Slack, IRC, Gitter и пр.), так и независимых. Ищите в каталоге!",
|
||||
"Failed to change password. Is your password correct?": "Не удалось сменить пароль. Вы правильно ввели текущий пароль?",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "Теперь вы сможете вернуться к своей учетной записи после выхода из системы и войти на других устройствах.",
|
||||
"Support for those using the Matrix spec": "Поддержка пользователей, использующих Matrix spec",
|
||||
"Design and implementation of E2E in Matrix": "Разработка и внедрение сквозного шифрования (E2E) в Matrix",
|
||||
"Implementing VR services with Matrix": "Внедрение сервисов виртуальной реальности (VR) с помощью Matrix",
|
||||
"Discussion of the Identity Service API": "Обсуждение API службы идентификации",
|
||||
"Support for those using, running and writing other bridges": "Поддержка для тех, кто использует, разрабатывает и внедряет приложения интеграции для Matrix",
|
||||
"Contributing code to Matrix and Riot": "Внести свой вклад в разработку кода Matrix и Riot",
|
||||
"Dev chat for the Riot/Web dev team": "Чат с командой разработчиков Riot/Web",
|
||||
"Dev chat for the Dendrite dev team": "Чат с командой разработчиков Dendrite",
|
||||
"Co-ordination for Riot/Web translators": "Координация для переводчиков Riot/Web",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "Это позволит вам вернуться к учетной записи после выхода из системы и войти на других устройствах.",
|
||||
"You have successfully set a password and an email address!": "Вы успешно установили пароль и адрес email!",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Помните, что вы всегда сможете задать адрес email в настройках пользователя, если передумаете.",
|
||||
"Set Password": "Задать пароль",
|
||||
"To return to your account in future you need to <u>set a password</u>": "Чтобы вернуться к учетной записи в будущем, необходимо <u>задать пароль</u>",
|
||||
"Warning": "Предупреждение",
|
||||
"Checking for an update...": "Проверка обновлений...",
|
||||
"Error encountered (%(errorDetail)s).": "Обнаружена ошибка (%(errorDetail)s).",
|
||||
"No update available.": "Нет доступных обновлений.",
|
||||
"Downloading update...": "Загрузка обновления...",
|
||||
"Couldn't load home page": "Не удалось загрузить домашнюю страницу",
|
||||
"Bug report sent": "Отчет об ошибке отправлен",
|
||||
"Thank you!": "Спасибо!",
|
||||
"Back": "Назад",
|
||||
"Developer Tools": "Инструменты разработчика",
|
||||
"Failed to send custom event.": "Не удалось отправить индивидуальное мероприятие.",
|
||||
"Send Custom Event": "Отправить индивидуальное мероприятие",
|
||||
"Send Custom State Event": "Отправить статус индивидуального мероприятия",
|
||||
"Explore Room State": "Просмотр статуса комнаты",
|
||||
"Event sent!": "Мероприятие отправлено!",
|
||||
"Event Type": "Тип мероприятия",
|
||||
"Event Content": "Содержание мероприятия",
|
||||
"State Key": "Ключ состояния",
|
||||
"Filter results": "Фильтрация результатов",
|
||||
"You must specify an event type!": "Необходимо указать тип мероприятия!",
|
||||
"Show message in desktop notification": "Показывать сообщение в уведомлении на рабочем столе",
|
||||
"Pin Message": "Закрепить сообщение",
|
||||
"Unpin Message": "Открепить сообщение",
|
||||
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Вы можете использовать пользовательские параметры сервера для входа на другие сервера Matrix, указав другой URL-адрес домашнего сервера.<br/>Это позволяет использовать Riot с существующей учетной записью Matrix на другом домашнем сервере.<br/><br/>Кроме того, можно установить пользовательский сервер идентификации, однако вы не сможете ни пригласить других пользователей, ни быть приглашенным, используя адрес электронной почты, .",
|
||||
"Edit": "Редактировать",
|
||||
"Register": "Регистрация",
|
||||
"Rooms": "Комнаты",
|
||||
"Invite to this community": "Пригласить в это сообщество",
|
||||
"Add rooms to this community": "Добавить комнаты в это сообщество",
|
||||
"Toolbox": "Панель инструментов",
|
||||
"Send Account Data": "Отправить данные аккаунта",
|
||||
"Explore Account Data": "Просмотр данных аккаунта"
|
||||
}
|
219
src/i18n/strings/sk.json
Normal file
219
src/i18n/strings/sk.json
Normal file
|
@ -0,0 +1,219 @@
|
|||
{
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot nie je podporovaný na mobilných zariadeniach. Želáte si nainštalovať aplikáciu?",
|
||||
"Collecting app version information": "Získavajú sa informácie o verzii aplikácii",
|
||||
"Collecting logs": "Získavajú sa záznamy",
|
||||
"Uploading report": "Prebieha odovzdanie hlásenia",
|
||||
"Waiting for response from server": "Čakanie na odpoveď zo servera",
|
||||
"Riot Desktop on %(platformName)s": "Riot Desktop pre %(platformName)s",
|
||||
"Unknown device": "Neznáme zariadenie",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s cez %(browserName)s pre %(osName)s",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Ak si želáte spustiť zdieľanie obrazovky, musíte byť pripojení cez protokol HTTPS.",
|
||||
"Messages containing my display name": "Správy obsahujúce moje zobrazované meno",
|
||||
"Messages containing my user name": "Správy obsahujúce moje používateľské meno",
|
||||
"Messages in one-to-one chats": "Správy v priamych konverzáciách",
|
||||
"Messages in group chats": "Správy v skupinových konverzáciách",
|
||||
"When I'm invited to a room": "Pozvania vstúpiť do miestnosti",
|
||||
"Call invitation": "Audio / Video hovory",
|
||||
"Messages sent by bot": "Správy odosielané robotmi",
|
||||
"Error saving email notification preferences": "Chyba pri ukladaní nastavení oznamovania emailom",
|
||||
"An error occurred whilst saving your email notification preferences.": "Počas ukladania vašich nastavení oznamovania emailom sa vyskytla chyba.",
|
||||
"Keywords": "Kľúčové slová",
|
||||
"Enter keywords separated by a comma:": "Zadajte kľúčové slová oddelené čiarkou:",
|
||||
"OK": "OK",
|
||||
"Failed to change settings": "Nepodarilo sa zmeniť nastavenia",
|
||||
"Operation failed": "Operácia zlyhala",
|
||||
"Can't update user notification settings": "Nie je možné aktualizovať používateľské nastavenia oznamovania",
|
||||
"Failed to update keywords": "Nepodarilo sa aktualizovať kľúčové slová",
|
||||
"Messages containing <span>keywords</span>": "Správy obsahujúce <span>kľúčové slová</span>",
|
||||
"Notify for all other messages/rooms": "oznamovať všetky ostatné správy / miestnosti",
|
||||
"Notify me for anything else": "Oznamovať mi všetko ostatné",
|
||||
"Enable notifications for this account": "Povoliť oznámenia pre tento účet",
|
||||
"All notifications are currently disabled for all targets.": "Momentálne sú zakázané všetky oznámenia pre všetky ciele.",
|
||||
"Add an email address above to configure email notifications": "Ak si chcete nastaviť oznamovanie emailom, pridajte si emailovú adresu vyššie",
|
||||
"Enable email notifications": "Povoliť oznamovanie emailom",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "Oznámenia nasledujúcich kľúčových slov sa riadia pravidlami, ktoré nie je možné zobraziť na tomto mieste:",
|
||||
"Unable to fetch notification target list": "Nie je možné získať zoznam cieľov oznámení",
|
||||
"Notification targets": "Ciele oznámení",
|
||||
"Advanced notification settings": "Pokročilé nastavenia oznámení",
|
||||
"There are advanced notifications which are not shown here": "Niektoré pokročilé oznámenia nemôžu byť zobrazené",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Tieto nastavenia oznámení sa použijú aj napriek tomu, že ich nemôžete meniť cez Riot. Pravdepodobne ste si ich nastavili v inej aplikácii",
|
||||
"Enable desktop notifications": "Povoliť oznámenia na pracovnej ploche",
|
||||
"Show message in desktop notification": "Zobraziť text správy v oznámení na pracovnej ploche",
|
||||
"Enable audible notifications in web client": "Povoliť zvukové oznámenia vo webovom klientovi",
|
||||
"Off": "Zakázané",
|
||||
"On": "Povolené",
|
||||
"Noisy": "Hlučné",
|
||||
"Failed to set direct chat tag": "Nepodarilo sa nastaviť značku priama konverzácia",
|
||||
"Failed to remove tag %(tagName)s from room": "Nepodarilo sa odstrániť značku %(tagName)s pre túto miestnosť",
|
||||
"Failed to add tag %(tagName)s to room": "Nepodarilo sa pridať značku %(tagName)s pre túto miestnosť",
|
||||
"Search…": "Hľadať…",
|
||||
"Search": "Vyhľadávanie",
|
||||
"This Room": "V tejto miestnosti",
|
||||
"All Rooms": "Vo všetkych miestnostiach",
|
||||
"Sunday": "Nedeľa",
|
||||
"Monday": "Pondelok",
|
||||
"Tuesday": "Utorok",
|
||||
"Wednesday": "Streda",
|
||||
"Thursday": "Štvrtok",
|
||||
"Friday": "Piatok",
|
||||
"Saturday": "Sobota",
|
||||
"Today": "Dnes",
|
||||
"Yesterday": "Včera",
|
||||
"Custom Server Options": "Vlastné možnosti servera",
|
||||
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Vlastné nastavenia servera môžete použiť na pripojenie k iným serverom Matrix a to zadaním URL adresy domovského servera.<br/>Umožní vám to použiť Riot s už existujúcim Matrix účtom na akomkoľvek domovskom servery.<br/><br>Môžete tiež nastaviť vlastný server totožností, no ak tak urobíte, nebudete môcť do konverzácií pozývať používateľov zadaním ich emailovej adresy, ani ostatní nebudú môcť pozvať vás zadaním vašej emailovej adresy.",
|
||||
"Dismiss": "Zamietnuť",
|
||||
"powered by Matrix": "poháňa Matrix",
|
||||
"You are not receiving desktop notifications": "Nedostávate oznámenia na pracovnej ploche",
|
||||
"Enable them now": "Povolte si ich teraz",
|
||||
"What's New": "Čo Je Nové",
|
||||
"Update": "Aktualizovať",
|
||||
"What's new?": "Čo je nové?",
|
||||
"A new version of Riot is available.": "Dostupná je nová verzia Riot.",
|
||||
"To return to your account in future you need to <u>set a password</u>": "Aby ste sa v budúcnosti mohli vrátiť k vašemu účtu mali by ste si teraz <u>nastaviť heslo</u>",
|
||||
"Toolbox": "Nástroje",
|
||||
"Set Password": "Nastaviť Heslo",
|
||||
"Error encountered (%(errorDetail)s).": "Vyskytla sa chyba (%(errorDetail)s).",
|
||||
"Checking for an update...": "Kontrola dostupnosti aktualizácie...",
|
||||
"No update available.": "K dispozícii nie je žiadna aktualizácia.",
|
||||
"Downloading update...": "Sťahovanie aktualizácie...",
|
||||
"Warning": "Upozornenie",
|
||||
"Error": "Chyba",
|
||||
"You cannot delete this image. (%(code)s)": "Nemôžete vymazať tento obrázok. (%(code)s)",
|
||||
"Uploaded on %(date)s by %(user)s": "Nahral používateľ %(user)s dňa %(date)s",
|
||||
"Remove": "Odstrániť",
|
||||
"Close": "Zatvoriť",
|
||||
"Download this file": "Stiahnuť tento súbor",
|
||||
"Please describe the bug and/or send logs.": "Prosím, popíšte problém a / alebo pošlite záznamy.",
|
||||
"Loading bug report module": "Načítanie modulu hlásenia chýb",
|
||||
"Bug report sent": "Hlásenie chyby odoslané",
|
||||
"Thank you!": "Ďakujeme!",
|
||||
"Failed to send report: ": "Nepodarilo sa odoslať hlásenie: ",
|
||||
"Cancel": "Zrušiť",
|
||||
"Report a bug": "Ohlásiť chybu",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Prosím, Napíšte text hlásenia. Čo ste práve robili? Čo ste očakávali? Čo sa v skutočnosti udialo?",
|
||||
"Describe your problem here.": "Tu popíšte váš problém.",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "S cieľom lepšej diagnostiky problému sa spolu s vašim hlásením odošlú záznami o činnosti programu Riot. Ak si želáte odoslať len text hlásenia, odškrtnite nasledujúce pole:",
|
||||
"Send logs": "Zahrnúť záznamy",
|
||||
"Send": "Poslať",
|
||||
"Unavailable": "Nedostupné",
|
||||
"Changelog": "Zoznam zmien",
|
||||
"Back": "Naspäť",
|
||||
"You must specify an event type!": "Musíte nastaviť typ udalosti!",
|
||||
"Event sent!": "Udalosť odoslaná!",
|
||||
"Failed to send custom event.": "Odoslanie vlastnej udalosti zlyhalo.",
|
||||
"Event Type": "Typ Udalosti",
|
||||
"Event Content": "Obsah Udalosti",
|
||||
"State Key": "State Key",
|
||||
"Edit": "Upraviť",
|
||||
"Filter results": "Filtrovať výsledky",
|
||||
"Send Custom Event": "Odoslať vlastnú udalosť",
|
||||
"Send Account Data": "Odoslať Údaje Účtu",
|
||||
"Explore Account Data": "Preskúmať Údaje účtu",
|
||||
"Explore Room State": "Preskúmať Stav Miestnosti",
|
||||
"Developer Tools": "Vývojárske Nástroje",
|
||||
"You have successfully set a password!": "Ǔspešne ste si nastavili heslo!",
|
||||
"You have successfully set a password and an email address!": "Úspešne si si nastavili heslo aj emailovú adresu!",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "Odteraz sa budete k svojmu účtu vedieť vrátiť aj po odhlásení, alebo tiež prihlásiť na iných zariadeniach.",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Všimnite si, Emailovú adresu môžete pridať aj neskôr v časti nastavenia, ak zmeníte svoj názor.",
|
||||
"Continue": "Pokračovať",
|
||||
"Failed to change password. Is your password correct?": "Nepodarilo sa zmeniť heslo. Zadali ste správne heslo?",
|
||||
"(HTTP status %(httpStatus)s)": "(HTTP status %(httpStatus)s)",
|
||||
"Please set a password!": "Prosím, nastavte si heslo!",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "Toto vám v budúcnosti umožní vrátiť sa k vašemu účtu aj po odhlásení, alebo tiež prihlásiť sa na iných zariadeniach.",
|
||||
"You cannot delete this message. (%(code)s)": "Nemôžete vymazať túto správu. (%(code)s)",
|
||||
"Resend": "Poslať znovu",
|
||||
"Cancel Sending": "Zrušiť odosielanie",
|
||||
"Forward Message": "Preposlať správu",
|
||||
"Unpin Message": "Zrušiť pripnutie správy",
|
||||
"Pin Message": "Pripnúť správu",
|
||||
"View Source": "Zobraziť zdroj",
|
||||
"View Decrypted Source": "Zobraziť dešifrovaný zdroj",
|
||||
"Unhide Preview": "Zobraziť náhľad",
|
||||
"Permalink": "Trvalý odkaz",
|
||||
"Quote": "Citovať",
|
||||
"Source URL": "Pôvodná URL",
|
||||
"Failed to set Direct Message status of room": "Nepodarilo sa nastaviť stav miestnosti priama konverzácia",
|
||||
"unknown error code": "neznámy kód chyby",
|
||||
"Failed to forget room %(errCode)s": "Nepodarilo sa zabudnuť miestnosť %(errCode)s",
|
||||
"All messages (loud)": "Všetky správy (hlučné)",
|
||||
"All messages": "Všetky správy",
|
||||
"Mentions only": "Len zmienky",
|
||||
"Mute": "Umlčať",
|
||||
"Leave": "Opustiť",
|
||||
"Forget": "Zabudnuť",
|
||||
"Reject": "Odmietnuť",
|
||||
"Favourite": "Obľúbená",
|
||||
"Low Priority": "Nízka priorita",
|
||||
"Direct Chat": "Priama konverzácia",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Prepáčte, vo vašom prehliadači <b>nie je</b> možné spustiť Riot.",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot sa spolieha na mnohé pokročilé vlastnosti prehliadača internetu, a niektoré z nich sú vo vašom prehliadači experimentálne alebo nie sú k dispozícii vôbec.",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Prosím, nainštalujte si <a href=\"https://www.google.com/chrome\">Chrome</a> alebo <a href=\"https://getfirefox.com\">Firefox</a> , aby bol váš zážitok pri používaní Riot čo možno najlepší.",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">Safari</a> a <a href=\"http://opera.com\">Opera</a> tiež fungujú spoľahlivo.",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Vo vašom súčasnom prehliadači nemusí Riot vizerať ani fungovať správne a niektoré alebo všetky vlastnosti môžu chýbať. Ak to chcete vyskúšať, môžete pokračovať, no pri riešení problémov s tým spojených si budete musieť poradiť na vlastnú päsť!",
|
||||
"I understand the risks and wish to continue": "Rozumiem rizikám a želám si pokračovať",
|
||||
"Couldn't load home page": "Nie je možné načítať domovskú stránku",
|
||||
"Login": "Prihlásiť",
|
||||
"Register": "Registrovať",
|
||||
"Invite to this room": "Pozvať do tejto miestnosti",
|
||||
"Members": "Členovia",
|
||||
"Files": "Súbory",
|
||||
"Notifications": "Oznámenia",
|
||||
"Rooms": "Miestnosti",
|
||||
"Hide panel": "Skryť panel",
|
||||
"Invite to this community": "Pozvať do tejto komunity",
|
||||
"Add rooms to this community": "Pridať miestnosti do tejto komunity",
|
||||
"Failed to get protocol list from Home Server": "Nepodarilo sa získať zoznam protokolov z domovského servera",
|
||||
"The Home Server may be too old to support third party networks": "Domovský server môže byť natoľko zastaralý, že nepodporuje siete tretíh strán",
|
||||
"Failed to get public room list": "Nepodarilo sa získať zoznam verejných miestností",
|
||||
"The server may be unavailable or overloaded": "Server môže byť nedostupný alebo preťažený",
|
||||
"Unnamed room": "Nepomenovaná miestnosť",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Vymazať alias %(alias)s a odstrániť miestnosť %(name)s z adresára?",
|
||||
"Remove %(name)s from the directory?": "Odstrániť miestnosť %(name)s z adresára?",
|
||||
"Remove from Directory": "Odstrániť z adresára",
|
||||
"remove %(name)s from the directory.": "odstrániť %(name)s z adresára.",
|
||||
"delete the alias.": "vymazať alias.",
|
||||
"Unable to join network": "Nie je možné sa pripojiť k sieti",
|
||||
"Riot does not know how to join a room on this network": "Riot nedokáže vstúpiť do miestnosti na tejto sieti",
|
||||
"Room not found": "Miestnosť nenájdená",
|
||||
"Couldn't find a matching Matrix room": "Nie je možné nájsť zodpovedajúcu Matrix miestnosť",
|
||||
"Fetching third party location failed": "Nepodarilo sa získať umiestnenie tretej strany",
|
||||
"Unable to look up room ID from server": "Nie je možné vyhľadať ID miestnosti na servery",
|
||||
"World readable": "Viditeľná pre všetkých",
|
||||
"Guests can join": "Pripojiť sa môžu aj hostia",
|
||||
"Directory": "Adresár",
|
||||
"No rooms to show": "Žiadne miestnosti na zobrazenie",
|
||||
"Search for a room": "Vyhľadať miestnosť",
|
||||
"#example": "#príklad",
|
||||
"more": "viac",
|
||||
"Expand panel": "Rozbaliť panel",
|
||||
"Collapse panel": "Zbaliť panel",
|
||||
"Filter room names": "Filtrovať názvy miestností",
|
||||
"Welcome to Riot.im": "Víta vás Riot.im",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentralizovaný, šifrovaný chat a spolupráca na platforme [matrix]",
|
||||
"Search the room directory": "Prehľadať adresár miestností",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Na Matrixe je k dispozícii množstvo nezávislých diskusných miestností a tiež miestnosti prepojené z iných sietí (Slack, IRC, Gitter atď). Pozrite si adresár!",
|
||||
"Chat with Riot Bot": "Konverzácia s Riot Bot",
|
||||
"Get started with some tips from Riot Bot!": "Začnite zopár tipmi v diskusii s Riot Bot!",
|
||||
"General discussion about Matrix and Riot": "Všeobecná diskusia o Matrix a Riot",
|
||||
"Discussion of all things Matrix!": "Diskusia o všetkom okolo Matrix!",
|
||||
"Riot/Web & Desktop chat": "Riot/Web & Desktop chat",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk chat",
|
||||
"Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk chat",
|
||||
"Matrix technical discussions": "Technické diskusie o Matrix",
|
||||
"Running Matrix services": "Prevádzka služieb postavených na Matrix",
|
||||
"Community-run support for Synapse": "Komunitná podpora pre Synapse",
|
||||
"Admin support for Dendrite": "Administrátorská podpora pre Dendrite",
|
||||
"Announcements about Synapse releases": "Oznamy o verziách Synapse",
|
||||
"Support for those using and running matrix-appservice-irc": "Podpora pre používateľov a prevádzkovateľov matrix-appservice-irc",
|
||||
"Building services on Matrix": "Stavba služieb na Matrix",
|
||||
"Support for those using the Matrix spec": "Podpora pre konzumentov špecifikácie Matrix",
|
||||
"Design and implementation of E2E in Matrix": "Návrh a implementácia E2E pre Matrix",
|
||||
"Implementing VR services with Matrix": "Implementácia služieb VR s Matrix",
|
||||
"Implementing VoIP services with Matrix": "Implementácia VoIP služieb s Matrix",
|
||||
"Discussion of the Identity Service API": "Diskusia o API služby totožností",
|
||||
"Support for those using, running and writing other bridges": "Podpora pre používateľov, prevádzkovateľov a tvorcov premostení do ďalších sietí",
|
||||
"Contributing code to Matrix and Riot": "Prispievanie kódu projektom Matrix a Riot",
|
||||
"Dev chat for the Riot/Web dev team": "Diskusia pre tím vývojárov Riot/Web",
|
||||
"Dev chat for the Dendrite dev team": "Diskusia pre tím vývojárov Dendrite",
|
||||
"Co-ordination for Riot/Web translators": "Koordinácia prekladov Riot/Web"
|
||||
}
|
200
src/i18n/strings/sv.json
Normal file
200
src/i18n/strings/sv.json
Normal file
|
@ -0,0 +1,200 @@
|
|||
{
|
||||
"Add an email address above to configure email notifications": "Lägg till en epostadress här för att konfigurera epostaviseringar",
|
||||
"Advanced notification settings": "Avancerade aviseringsinställingar",
|
||||
"All messages": "Alla meddelanden",
|
||||
"All messages (loud)": "Alla meddelanden (högljudd)",
|
||||
"All notifications are currently disabled for all targets.": "Alla aviseringar är för tillfället avstängda för alla mål.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Ett fel uppstod då epostaviseringsinställningarna sparades.",
|
||||
"Call invitation": "Inbjudan till samtal",
|
||||
"Cancel Sending": "Avbryt sändning",
|
||||
"Can't update user notification settings": "Kan inte uppdatera aviseringsinställningarna",
|
||||
"Close": "Stäng",
|
||||
"Couldn't find a matching Matrix room": "Kunde inte hitta ett matchande Matrix-rum",
|
||||
"Custom Server Options": "Egna serverinställningar",
|
||||
"customServer_text": "Du kan använda serverinställningarna för att logga in i en annan Matrix-server genom att specifiera en URL till en annan hemserver.<br/>Så här kan du använda Riot med ett existerande Matrix-konto på en annan hemserver.<br/><br/>Du kan också specifiera en egen identitetsserver, men du kommer inte att kunna bjuda in andra via epostadress, eller bli inbjuden via epostadress.",
|
||||
"delete the alias.": "radera adressen.",
|
||||
"Direct Chat": "Direkt-chatt",
|
||||
"Directory": "Katalog",
|
||||
"Dismiss": "Avvisa",
|
||||
"Download this file": "Ladda ner filen",
|
||||
"Enable audible notifications in web client": "Sätt på högljudda aviseringar i webbklienten",
|
||||
"Enable desktop notifications": "Sätt på skrivbordsaviseringar",
|
||||
"Enable email notifications": "Sätt på epostaviseringar",
|
||||
"Enable notifications for this account": "Sätt på aviseringar för det här kontot",
|
||||
"Enable them now": "Sätt på nu",
|
||||
"Enter keywords separated by a comma:": "Skriv in nyckelord, separerade med kommatecken:",
|
||||
"Error": "Fel",
|
||||
"Error saving email notification preferences": "Ett fel uppstod då epostaviseringsinställningarna sparades",
|
||||
"Failed to add tag %(tagName)s to room": "Det gick inte att lägga till \"%(tagName)s\" till rummet",
|
||||
"Failed to change settings": "Det gick inte att spara inställningarna",
|
||||
"Failed to forget room %(errCode)s": "Det gick inte att glömma bort rummet %(errCode)s",
|
||||
"Failed to update keywords": "Det gick inte att uppdatera nyckelorden",
|
||||
"Failed to get protocol list from Home Server": "Det gick inte att hämta protokollistan från hemservern",
|
||||
"Failed to get public room list": "Det gick inte att hämta listan över offentliga rum",
|
||||
"Failed to remove tag %(tagName)s from room": "Det gick inte att radera taggen %(tagName)s från rummet",
|
||||
"Failed to set direct chat tag": "Det gick inte att markera rummet som direkt chatt",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s via %(browserName)s på %(osName)s",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">Safari</a> och <a href=\"http://opera.com\">Opera</a> fungerar också.",
|
||||
"A new version of Riot is available.": "En ny version av Riot är tillgänglig.",
|
||||
"All Rooms": "Alla rum",
|
||||
"Cancel": "Avbryt",
|
||||
"Changelog": "Ändringslogg",
|
||||
"Collapse panel": "Kollapsa panel",
|
||||
"Describe your problem here.": "Beskriv problemet här.",
|
||||
"Expand panel": "Öppna panel",
|
||||
"Failed to send report: ": "Det gick inte att sända rapporten: ",
|
||||
"Failed to set Direct Message status of room": "Det gick inte att sätta Direkt meddelande-status på rummet",
|
||||
"Favourite": "Favorit",
|
||||
"Files": "Filer",
|
||||
"Filter room names": "Filtrera rumsnamn",
|
||||
"Forget": "Glöm bort",
|
||||
"Forward Message": "Vidarebefordra meddelande",
|
||||
"Guests can join": "Gäster kan bli medlem i rummet",
|
||||
"Hide panel": "Göm panel",
|
||||
"I understand the risks and wish to continue": "Jag förstår riskerna och vill fortsätta",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "För att diagnostisera problem kommer loggar från den här klienten att sändas med rapporten. Om du bara vill sända texten ovan, kryssa av rutan:",
|
||||
"Invite to this room": "Bjud in i rummet",
|
||||
"Keywords": "Nyckelord",
|
||||
"Leave": "Lämna",
|
||||
"Loading bug report module": "Laddar buggrapportsmodul",
|
||||
"Low Priority": "Låg prioritet",
|
||||
"Members": "Medlemmar",
|
||||
"Mentions only": "Endast omnämnande",
|
||||
"Messages containing my display name": "Meddelanden som innehåller mitt namn",
|
||||
"Messages containing <span>keywords</span>": "Meddelanden som innehåller <span>nyckelord</span>",
|
||||
"Messages containing my user name": "Meddelanden som innehåller mitt användarnamn",
|
||||
"Messages in group chats": "Meddelanden i gruppchattar",
|
||||
"Messages in one-to-one chats": "Meddelanden i privata chattar",
|
||||
"Messages sent by bot": "Meddelanden från bottar",
|
||||
"more": "mera",
|
||||
"Mute": "Dämpa",
|
||||
"No rooms to show": "Inga fler rum att visa",
|
||||
"Noisy": "Högljudd",
|
||||
"Notification targets": "Aviseringsmål",
|
||||
"Notifications": "Aviseringar",
|
||||
"Notify for all other messages/rooms": "Avisera för alla andra meddelanden/rum",
|
||||
"Notify me for anything else": "Avisera för allt annat",
|
||||
"Off": "Av",
|
||||
"On": "På",
|
||||
"Permalink": "Permanent länk",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Beskriv buggen. Vad gjorde du? Vad förväntade du dig att ska hända? Vad hände?",
|
||||
"Please describe the bug and/or send logs.": "Beskriv buggen och/eller sänd loggar.",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Installera <a href=\"https://www.google.com/chrome\">Chrome</a> eller <a href=\"https://getfirefox.com\">Firefox</a> för den bästa upplevelsen.",
|
||||
"powered by Matrix": "drivs av Matrix",
|
||||
"Quote": "Citera",
|
||||
"Reject": "Avvisa",
|
||||
"Remove %(name)s from the directory?": "Ta bort %(name)s från katalogen?",
|
||||
"Remove": "Ta bort",
|
||||
"remove %(name)s from the directory.": "ta bort %(name)s från katalogen.",
|
||||
"Remove from Directory": "Ta bort från katalogen",
|
||||
"Report a bug": "Rapportera en bugg",
|
||||
"Resend": "Sänd igen",
|
||||
"Riot Desktop on %(platformName)s": "Riot Desktop på %(platformName)s",
|
||||
"Riot does not know how to join a room on this network": "Riot kan inte gå med i ett rum på det här nätverket",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot stöds inte på mobil-webb. Installera appen?",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot använder flera avancerade webbläsaregenskaper, av vilka alla inte stöds eller är experimentella i din nuvarande webbläsare.",
|
||||
"Room not found": "Rummet hittades inte",
|
||||
"Search": "Sök",
|
||||
"Search…": "Sök…",
|
||||
"Search for a room": "Sök efter rum",
|
||||
"Send": "Sänd",
|
||||
"Send logs": "Sänd loggar",
|
||||
"Source URL": "Käll-URL",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Beklagar, din webbläsare kan <b>inte</b> köra Riot.",
|
||||
"The Home Server may be too old to support third party networks": "Hemservern kan vara för gammal för stöda tredje parters nätverk",
|
||||
"There are advanced notifications which are not shown here": "Det finns avancerade aviseringar som inte visas här",
|
||||
"The server may be unavailable or overloaded": "Servern kan vara överbelastad eller inte tillgänglig",
|
||||
"This Room": "Det här rummet",
|
||||
"Unable to fetch notification target list": "Det gick inte att hämta aviseringsmållistan",
|
||||
"Unable to join network": "Det gick inte att ansluta till nätverket",
|
||||
"Unable to look up room ID from server": "Det gick inte att hämta rums-ID:t från servern",
|
||||
"Unavailable": "Inte tillgänglig",
|
||||
"Unhide Preview": "Visa förhandsvisning",
|
||||
"Unknown device": "Okänd enhet",
|
||||
"unknown error code": "okänd felkod",
|
||||
"Unnamed room": "Namnlöst rum",
|
||||
"Update": "Uppdatera",
|
||||
"Uploaded on %(date)s by %(user)s": "%(user)s laddade upp %(date)s",
|
||||
"Uploading report": "Laddar upp rapport",
|
||||
"View Decrypted Source": "Visa dekrypterad källa",
|
||||
"View Source": "Visa källa",
|
||||
"What's New": "Vad är nytt",
|
||||
"What's new?": "Vad är nytt?",
|
||||
"Waiting for response from server": "Väntar på svar från servern",
|
||||
"When I'm invited to a room": "När jag bjuds in till ett rum",
|
||||
"World readable": "Alla kan läsa",
|
||||
"You cannot delete this image. (%(code)s)": "Du kan inte radera den här bilden. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "Du kan inte radera det här meddelandet. (%(code)s)",
|
||||
"You are not receiving desktop notifications": "Du får inte skrivbordsaviseringar",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Du kan ha konfigurerat dem i en annan klient än Riot. Du kan inte ändra dem i Riot men de tillämpas ändå",
|
||||
"Sunday": "söndag",
|
||||
"Monday": "måndag",
|
||||
"Tuesday": "tisdag",
|
||||
"Wednesday": "onsdag",
|
||||
"Thursday": "torsdag",
|
||||
"Friday": "fredag",
|
||||
"Saturday": "lördag",
|
||||
"Today": "idag",
|
||||
"Yesterday": "igår",
|
||||
"OK": "OK",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Du måste använda HTTPS för att dela din skärm.",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Med din nuvarande webbläsare kan appens utseende vara helt fel, och vissa eller alla egenskaper kommer nödvändigtvis inte att fungera. Om du ändå vill försöka så kan du fortsätta, men gör det på egen risk!",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Radera rumsadressen %(alias)s och ta bort %(name)s från katalogen?",
|
||||
"Collecting logs": "Samlar in loggar",
|
||||
"Collecting app version information": "Samlar in appversionsinformation",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "Aviseringar för följande nyckelord följer regler som inte kan visas här:",
|
||||
"Continue": "Fortsätt",
|
||||
"Failed to change password. Is your password correct?": "Det gick inte att byta lösenord. Är lösenordet rätt?",
|
||||
"Operation failed": "Handlingen misslyckades",
|
||||
"#example": "#exempel",
|
||||
"Fetching third party location failed": "Det gick inte att hämta platsdata från tredje part",
|
||||
"Login": "Logga in",
|
||||
"Warning": "Varning",
|
||||
"Downloading update...": "Laddar ned uppdatering...",
|
||||
"Welcome to Riot.im": "Välkommen till Riot.im",
|
||||
"Chat with Riot Bot": "Chatta med Riot Bot",
|
||||
"Get started with some tips from Riot Bot!": "Kom igång med några tips från Riot Bot!",
|
||||
"General discussion about Matrix and Riot": "Allmän diskussion om Matrix och Riot",
|
||||
"Discussion of all things Matrix!": "Diskussion om allt gällande Matrix!",
|
||||
"Matrix technical discussions": "Teknisk diskussion om Matrix",
|
||||
"Running Matrix services": "Driva Matrix-tjänster",
|
||||
"Community-run support for Synapse": "Gemenskapsdriven användarhjälp för Synapse",
|
||||
"Announcements about Synapse releases": "Meddelanden om Synapse-versioner",
|
||||
"Support for those using and running matrix-appservice-irc": "Hjälp för de som använder och driver matrix-appservice-irc",
|
||||
"Support for those using the Matrix spec": "Hjälp för de som använder Matrix specifikation",
|
||||
"Design and implementation of E2E in Matrix": "Design och implementation av E2E i Matrix",
|
||||
"Implementing VR services with Matrix": "Implementation av VR-tjänster med Matrix",
|
||||
"Implementing VoIP services with Matrix": "Implementation av VoIP-tjänster med Matrix",
|
||||
"Discussion of the Identity Service API": "Diskussion om Identity Service API:n",
|
||||
"Support for those using, running and writing other bridges": "Hjälp för de som använder, driver och utvecklar andra bryggor",
|
||||
"Contributing code to Matrix and Riot": "Bidra med kod till Matrix och Riot",
|
||||
"Dev chat for the Riot/Web dev team": "Chatt för utvecklare av Riot/Web",
|
||||
"Dev chat for the Dendrite dev team": "Chatt för utvecklare av Dendrite",
|
||||
"Co-ordination for Riot/Web translators": "Koordination för översättare av Riot/Web",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Många rum finns redan i Matrix, länkade till andra nätverk (Slack, IRC, Gitter etc.) eller fristående. Kolla in katalogen!",
|
||||
"You have successfully set a password!": "Du har valt ett nytt lösenord!",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "Du kan nu återgå till ditt konto efter att ha loggat ut och logga in på andra enheter.",
|
||||
"Please set a password!": "Vänligen välj ett lösenord!",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "Detta kommer tillåta dig att återgå till ditt konto efter att ha loggat ut, och logga in på andra enheter.",
|
||||
"You have successfully set a password and an email address!": "Du har framgångsrikt valt ett lösenord och en e-postadress!",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Kom ihåg att du alltid kan välja en e-postadress i dina användarinställningar om du ändrar dig.",
|
||||
"To return to your account in future you need to <u>set a password</u>": "För att återgå till ditt konto i framtiden måste du <u>välja ett lösenord</u>",
|
||||
"Set Password": "Välj lösenord",
|
||||
"Couldn't load home page": "Kunde inte ladda startsidan",
|
||||
"(HTTP status %(httpStatus)s)": "(HTTP-status %(httpStatus)s)",
|
||||
"Checking for an update...": "Letar efter uppdateringar...",
|
||||
"Error encountered (%(errorDetail)s).": "Fel påträffat (%(errorDetail)s).",
|
||||
"No update available.": "Ingen uppdatering tillgänglig.",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Decentraliserad, krypterad chatt & samarbete möjliggjort med [matrix]",
|
||||
"Search the room directory": "Sök i rumskatalogen",
|
||||
"Riot/Web & Desktop chat": "Riot/Web & Desktop-chatt",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk-chatt",
|
||||
"Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk-chatt",
|
||||
"Admin support for Dendrite": "Hjälp för administratörer av Dendrite",
|
||||
"Building services on Matrix": "Bygga tjänster med Matrix",
|
||||
"Bug report sent": "Buggraporten skickades",
|
||||
"Thank you!": "Tack!",
|
||||
"Back": "Tillbaka",
|
||||
"Filter results": "Filtrera resultaten",
|
||||
"Explore Room State": "Utforska rumläget"
|
||||
}
|
172
src/i18n/strings/ta.json
Normal file
172
src/i18n/strings/ta.json
Normal file
|
@ -0,0 +1,172 @@
|
|||
{
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">Safari</a>மற்றும்<a href=\"http://opera.com\">Opera</a>விலும் செயல்படும்.",
|
||||
"A new version of Riot is available.": "Riot-ன் புதிய பதிப்பு உள்ளது.",
|
||||
"Add an email address above to configure email notifications": "மின்னஞ்சல் மூலம் அறிவிப்புகளை பெற உங்கள் மின்னஞ்சல் முகவரியை மேலே இணைக்கவும்",
|
||||
"Advanced notification settings": "மேம்பட்ட அறிவிப்பிற்கான அமைப்புகள்",
|
||||
"All messages": "அனைத்து செய்திகள்",
|
||||
"All messages (loud)": "அனைத்து செய்திகள் (உரக்க)",
|
||||
"All Rooms": "அனைத்து அறைகள்",
|
||||
"All notifications are currently disabled for all targets.": "அனைத்து இலக்குகளுக்கான அனைத்து அறிவுப்புகளும் தற்போது முடக்கி வைக்கப்பட்டுள்ளது.",
|
||||
"An error occurred whilst saving your email notification preferences.": "உங்கள் மின்னஞ்சல் அறிவிப்பு விருப்பங்களை சேமிப்பதில் ஏதோ பிழை ஏற்பட்டுள்ளது.",
|
||||
"Cancel": "ரத்து",
|
||||
"Cancel Sending": "அனுப்புதலை ரத்து செய்",
|
||||
"Changelog": "மாற்றப்பதிவு",
|
||||
"Close": "மூடு",
|
||||
"Collapse panel": "பலகத்தை மாற்று",
|
||||
"Collecting app version information": "செயலியின் பதிப்பு தகவல்கள் சேகரிக்கப்படுகிறது",
|
||||
"Collecting logs": "பதிவுகள் சேகரிக்கப்படுகிறது",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(osName)s -ல் %(browserName)s -ன் வழியாக %(appName)s",
|
||||
"Call invitation": "அழைப்பிற்கான விண்ணப்பம்",
|
||||
"Can't update user notification settings": "பயனர் அறிவிப்பு அமைப்புகளை மாற்ற முடியவில்லை",
|
||||
"Couldn't find a matching Matrix room": "பொருத்தமான Matrix அறை கிடைக்கவில்லை",
|
||||
"Custom Server Options": "விருப்பிற்கேற்ற வழங்கி இடப்புகள்",
|
||||
"delete the alias.": "மாற்றை அழி.",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "அறை மாற்று %(alias)s -ஐ அழித்து, %(name)s -ஐ அடைவிலிருந்து நீக்க வேண்டுமா?",
|
||||
"Describe your problem here.": "உங்கள் பிரச்சனையை இங்கு விவரிக்கவும்.",
|
||||
"Direct Chat": "நேரடி அரட்டை",
|
||||
"Directory": "அடைவு",
|
||||
"Dismiss": "நீக்கு",
|
||||
"Download this file": "இந்த கோப்பைத் தரவிறக்கு",
|
||||
"Enable audible notifications in web client": "இணைய வாங்கியில் ஒலி அறிவிப்புகளை ஏதுவாக்கு",
|
||||
"Enable desktop notifications": "திரை அறிவிப்புகளை ஏதுவாக்கு",
|
||||
"Enable email notifications": "மின்னஞ்சல் அறிவிப்புகளை ஏதுவாக்கு",
|
||||
"Enable notifications for this account": "இந்த கணக்கிற்கான அறிவிப்புகளை ஏதுவாக்கு",
|
||||
"Enable them now": "இப்போது அவற்றை ஏதுவாக்கு",
|
||||
"Error": "கோளாறு",
|
||||
"Expand panel": "பலகத்தை விரிவாக்கு",
|
||||
"Failed to add tag %(tagName)s to room": "%(tagName)s எனும் குறிச்சொல்லை அறையில் சேர்ப்பதில் தோல்வி",
|
||||
"Failed to change settings": "அமைப்புகள் மாற்றத்தில் தோல்வி",
|
||||
"Failed to forget room %(errCode)s": "அறையை மறப்பதில் தோல்வி %(errCode)s",
|
||||
"Failed to update keywords": "முக்கிய வார்த்தைகளை புதுப்பித்தலில் தோல்வி",
|
||||
"Failed to get public room list": "பொது அறைப் பட்டியலை பெறுவதில் தோல்வி",
|
||||
"Failed to send report: ": "அறிக்கை அனுப்புதலில் தோல்வி ",
|
||||
"Favourite": "விருப்பமான",
|
||||
"Files": "கோப்புகள்",
|
||||
"Filter room names": "அறை பெயர்களை வடிகட்டு",
|
||||
"Forget": "மற",
|
||||
"Guests can join": "விருந்தினர்கள் சேரலாம்",
|
||||
"Hide panel": "பலகத்தை மறை",
|
||||
"Invite to this room": "இந்த அறைக்கு அழை",
|
||||
"Keywords": "முக்கிய வார்த்தைகள்",
|
||||
"Leave": "வெளியேறு",
|
||||
"Login": "உள்நுழை",
|
||||
"Low Priority": "குறைந்த முன்னுரிமை",
|
||||
"Members": "உறுப்பினர்கள்",
|
||||
"Mentions only": "குறிப்பிடுகள் மட்டும்",
|
||||
"#example": "#உதாரணமாக",
|
||||
"Enter keywords separated by a comma:": "ஒரு comma மூலம் முக்கிய வார்த்தைகளை உள்ளிடவும்:",
|
||||
"Error saving email notification preferences": "மின்னஞ்சல் அறிவிப்பு விருப்பங்களை சேமிப்பதில் கோளாறு",
|
||||
"Failed to get protocol list from Home Server": "முகப்பு சேவையகத்திலிருந்து நெறிமுறை பட்டியலைப் பெறுவதில் தோல்வி",
|
||||
"Failed to remove tag %(tagName)s from room": "அறையில் இருந்து குறிச்சொல் %(tagName)s களை அகற்றுவது தோல்வியடைந்தது",
|
||||
"Failed to set direct chat tag": "நேரடி அரட்டை குறியை அமைப்பதில் தோல்வி",
|
||||
"Failed to set Direct Message status of room": "அறையின் நேரடி செய்தி நிலையை அமைக்க தவறிவிட்டது",
|
||||
"Fetching third party location failed": "மூன்றாம் இடத்தில் உள்ள இடம் தோல்வி",
|
||||
"Forward Message": "முன்னோடி செய்தி",
|
||||
"(HTTP status %(httpStatus)s)": "(HTTP நிலைகள் %(httpStatus)s)",
|
||||
"customServer_text": "நீங்கள் மற்ற Matrix வழங்கிகள் உள்நுழைய உங்கள் விருப்பமான வழங்கி இடப்புகளை உபயோகப்படுத்தலாம்.<br/>இது மற்ற வழங்கியில் உங்கள் Matrix கணக்கிணை Riot மூலம் பயன்படுத்த உதவும்.<br/><br/>நீங்கள் மற்ற அடையாள வழங்கியையும் பயன்படுத்தலாம், ஆனால் நீங்கள் மற்ற பயனர்களை மின்னஞ்சல் மூலம் அழைக்கவோ, நீங்கள் அழைக்கப்படவோ இயலாது.",
|
||||
"I understand the risks and wish to continue": "நான் அபாயங்களைப் புரிந்துகொண்டு தொடர விரும்புகிறேன்",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "சிக்கல்களைக் கண்டறியும் பொருட்டு, இந்த கிளையிலிருந்து வரும் பதிவுகள் இந்த பிழை அறிக்கையுடன் அனுப்பப்படும். மேலே உள்ள உரையை மட்டுமே அனுப்ப விரும்பினால், தயவுசெய்து தட்டச்சு செய்க:",
|
||||
"Loading bug report module": "பிழை அறிக்கை தொகுதி ஏற்றுகிறது",
|
||||
"Messages containing my display name": "என் காட்சி பெயர் கொண்ட செய்திகள்",
|
||||
"more": "அதிகம்",
|
||||
"Mute": "முடக்கு",
|
||||
"No rooms to show": "காண்பிக்க எந்த அறையும் இல்லை",
|
||||
"Messages containing <span>keywords</span>": "<span>முக்கிய</span> கொண்ட செய்திகள்",
|
||||
"Messages containing my user name": "என் பயனர் பெயர் கொண்ட செய்திகள்",
|
||||
"Messages in group chats": "குழு அரட்டைகளில் உள்ள செய்திகள்",
|
||||
"Messages in one-to-one chats": "ஒரு-க்கு-ஒரு அரட்டைகளில் உள்ள செய்திகள்",
|
||||
"Messages sent by bot": "bot மூலம் அனுப்பிய செய்திகள்",
|
||||
"Noisy": "சத்தம்",
|
||||
"Notification targets": "அறிவிப்பு இலக்குகள்",
|
||||
"Notifications": "அறிவிப்புகள்",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "பின்வரும் முக்கிய வார்த்தைகளில் அறிவிப்புகள் இங்கே காட்டப்பட முடியாத விதிகள் பின்பற்றப்படுகின்றன:",
|
||||
"Notify for all other messages/rooms": "மற்ற எல்லா செய்திகளுக்கும் அறைகளுக்கும் தெரிவிக்கவும்",
|
||||
"Notify me for anything else": "வேறு எதையும் எனக்கு தெரிவி",
|
||||
"Off": "அமை",
|
||||
"On": "மீது",
|
||||
"Operation failed": "செயல்பாடு தோல்வியுற்றது",
|
||||
"Permalink": "நிரந்தரத் தொடுப்பு",
|
||||
"powered by Matrix": "Matrix-ஆல் ஆனது",
|
||||
"Quote": "மேற்கோள்",
|
||||
"Reject": "நிராகரி",
|
||||
"Remove %(name)s from the directory?": "அடைவிலிருந்து %(name)s-ஐ நீக்கலாமா?",
|
||||
"Remove": "நீக்கு",
|
||||
"remove %(name)s from the directory.": "அடைவிலிருந்து %(name)s-ஐ நீக்கு.",
|
||||
"Remove from Directory": "அடைவிலிருந்து நீக்கு",
|
||||
"Report a bug": "வழுவைத் தெரியப்படுத்து",
|
||||
"Resend": "மீண்டும் அனுப்பு",
|
||||
"Riot is not supported on mobile web. Install the app?": "கைபேசி உலாவியில் Riot இயங்காது. செயலியை நிறுவ வேண்டுமா?",
|
||||
"Room not found": "அறை காணவில்லை",
|
||||
"Search": "தேடு",
|
||||
"Search…": "தேடு…",
|
||||
"Search for a room": "அறையைத் தேடு",
|
||||
"Send": "அனுப்பு",
|
||||
"Send logs": "பதிவுகளை அனுப்பு",
|
||||
"Source URL": "மூல முகவரி",
|
||||
"This Room": "இந்த அறை",
|
||||
"Unable to join network": "முனையங்களில் சேர இயலவில்லை",
|
||||
"Unavailable": "இல்லை",
|
||||
"Unknown device": "தெரியாத கருவி",
|
||||
"unknown error code": "தெரியாத பிழை குறி",
|
||||
"Unnamed room": "பெயரிடப்படாத அறை",
|
||||
"Update": "புதுப்பி",
|
||||
"Uploaded on %(date)s by %(user)s": "%(date)s அன்று %(user)s ஆல் பதிவேற்றப்பட்டது",
|
||||
"Uploading report": "அறிக்கை பதிவேற்றப்படுகிறது",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "வழுவைப் பற்றி விளக்கவும். நீங்கள் என்ன செய்தீர்கள்? என்ன நடக்க வேண்டி எதிர்ப்பார்த்தீர்கள்? என்ன நடந்தது?",
|
||||
"Please describe the bug and/or send logs.": "வழுவைப் பற்றி விளக்கவும் மேலும்/அல்லது பதிவுகளை அனுப்பவும்.",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "சிறந்த அனுபவத்திற்க்கு <a href=\"https://www.google.com/chrome\">Chrome</a>அல்லது<a href=\"https://getfirefox.com\">Firefox</a>ஐ பயன்படுத்தவும்.",
|
||||
"Riot Desktop on %(platformName)s": "%(platformName)s ற்க்கான Riot",
|
||||
"Riot does not know how to join a room on this network": "இந்த வலையமைப்பில் உள்ள அறையில் எப்படி சேர்வதென்று Riotற்க்கு தெரியவில்லை",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot பல மேம்பட்ட உலாவி வசதிகளைப் பயன்படுத்துகிறது, அதில் சிலவற்றைக் காணவில்லை அல்லது உங்கள் உலாவியில் பரிசோதனைக்காக உள்ளது.",
|
||||
"There are advanced notifications which are not shown here": "இங்கு காண்பிக்கப்படாத மேம்பட்ட அறிவிப்புகள் உள்ளது",
|
||||
"The server may be unavailable or overloaded": "வழங்கி அளவுமீறிய சுமையில் உள்ளது அல்லது செயல்பாட்டில் இல்லை",
|
||||
"Unable to fetch notification target list": "அறிவிப்பு பட்டியலை பெற முடியவில்லை",
|
||||
"Unable to look up room ID from server": "வழங்கியிலிருந்து அறை ID யை காண முடியவில்லை",
|
||||
"Unhide Preview": "முன்னோட்டத்தைக் காண்பி",
|
||||
"View Decrypted Source": "மறையீடு நீக்கப்பட்ட மூலத்தைக் காண்பி",
|
||||
"View Source": "மூலத்தைக் காட்டு",
|
||||
"What's New": "புதிதாக வந்தவை",
|
||||
"What's new?": "புதிதாக என்ன?",
|
||||
"Waiting for response from server": "வழங்கியின் பதிலுக்காக காத்திருக்கிறது",
|
||||
"When I'm invited to a room": "நான் அறைக்கு அழைக்கப்பட்ட போது",
|
||||
"World readable": "உலகமே படிக்கும்படி",
|
||||
"You cannot delete this image. (%(code)s)": "இந்த படத்தை நீங்கள் அழிக்க முடியாது. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "இந்த செய்தியை நீங்கள் அழிக்க முடியாது. (%(code)s)",
|
||||
"You are not receiving desktop notifications": "திரை அறிவிப்புகளை நீங்கள் பெறவில்லை",
|
||||
"Bug report sent": "வழு அறிக்கை அனுப்பப்பட்டது",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "நீங்கள் திரைபகிர்வு அழைப்பை மேற்க்கொள்ள HTTPS-ஐ பயன்படுத்த வேண்டும்.",
|
||||
"OK": "சரி",
|
||||
"Show message in desktop notification": "திரை அறிவிப்புகளில் செய்தியை காண்பிக்கவும்",
|
||||
"Sunday": "ஞாயிறு",
|
||||
"Monday": "திங்கள்",
|
||||
"Tuesday": "செவ்வாய்",
|
||||
"Wednesday": "புதன்",
|
||||
"Thursday": "வியாழன்",
|
||||
"Friday": "வெள்ளி",
|
||||
"Saturday": "சனி",
|
||||
"Today": "இன்று",
|
||||
"Yesterday": "நேற்று",
|
||||
"No update available.": "எந்த புதுப்பிப்பும் இல்லை.",
|
||||
"Warning": "எச்சரிக்கை",
|
||||
"Thank you!": "உங்களுக்கு நன்றி",
|
||||
"Back": "பின்",
|
||||
"Event sent!": "நிகழ்வு அனுப்பப்பட்டது",
|
||||
"Event Type": "நிகழ்வு வகை",
|
||||
"Event Content": "நிகழ்வு உள்ளடக்கம்",
|
||||
"Edit": "தொகு",
|
||||
"You have successfully set a password!": "நீங்கள் வெற்றிகரமாக கடவுச்சொல்லை அமைத்துவிட்டீர்கள்",
|
||||
"You have successfully set a password and an email address!": "நீங்கள் வெற்றிகரமாக கடவுச்சொல் மற்றும் மின்னஞ்சல் முகவரியை அமைத்துவிட்டீர்கள்",
|
||||
"Continue": "தொடரவும்",
|
||||
"Please set a password!": "தயவு செய்து கடவுச்சொல்லை அமைக்கவும்",
|
||||
"Couldn't load home page": "முதற்பக்கத்தை நிரலேற்ற முடியவில்லை",
|
||||
"Register": "பதிவு செய்",
|
||||
"Rooms": "அறைகள்",
|
||||
"Add rooms to this community": "அறைகளை இந்த சமூகத்தில் சேர்க்கவும்",
|
||||
"Welcome to Riot.im": "Riot.im -ற்க்கு வரவேற்க்கிறோம்",
|
||||
"Search the room directory": "அறை அடைவில் தேடவும்",
|
||||
"Chat with Riot Bot": "Riot இயங்கியிடம் உரையாடவும்",
|
||||
"Matrix technical discussions": "Matrix தொழில்நுட்ப விவாதங்கள்",
|
||||
"Running Matrix services": "இருப்பிலிருக்கும் Matrix சேவைகள்",
|
||||
"Building services on Matrix": "Matrix- ல் சேவைகளைக் கட்டமைக்க",
|
||||
"Contributing code to Matrix and Riot": "Matrix மற்றும் Riot -ற்க்கு நிரல் பங்களிக்க"
|
||||
}
|
121
src/i18n/strings/te.json
Normal file
121
src/i18n/strings/te.json
Normal file
|
@ -0,0 +1,121 @@
|
|||
{
|
||||
"Close": "ముసివెయండి",
|
||||
"Continue": "కొనసాగించు",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s %(browserName)s ద్వర %(osName)s కి",
|
||||
"Friday": "శుక్రువారం",
|
||||
"Cancel": "రద్దు",
|
||||
"Monday": "సోమవారం",
|
||||
"Tuesday": "మంగళవారం",
|
||||
"Wednesday": "బుధవారం",
|
||||
"Thursday": "గురువారం",
|
||||
"Saturday": "శనివారం",
|
||||
"Sunday": "ఆదివారం",
|
||||
"Failed to forget room %(errCode)s": "గది మర్చిపోవడం విఫలమైంది %(errCode)s",
|
||||
"unknown error code": "తెలియని కోడ్ లోపం",
|
||||
"A new version of Riot is available.": "కొత్త రిమోట్ వివరణము అందుబాటులో ఉంది.",
|
||||
"Add an email address above to configure email notifications": "ఇమెయిల్ ప్రకటనలను రూపశిల్పం చేయడానికి ఎగువ ఇమెయిల్ చిరునామాను జోడించండి",
|
||||
"Advanced notification settings": "ఆధునిక తాఖీదు అమరిక",
|
||||
"All messages": "అన్ని సందేశాలు",
|
||||
"All messages (loud)": "అన్ని సందేశాలు (గట్టిగ)",
|
||||
"All Rooms": "అన్ని గదులు",
|
||||
"Call invitation": "మాట్లాడడానికి ఆహ్వానం",
|
||||
"Cancel Sending": "పంపడాన్ని ఆపేయండి",
|
||||
"Can't update user notification settings": "వినియోగదారు ప్రకటన ప్రాదాన్యాలు నవీకరించదడానేకి రాదు",
|
||||
"Changelog": "మార్పు వివరణ",
|
||||
"Collapse panel": "ప్యానెల్ కుదించు",
|
||||
"Collecting app version information": "అనువర్తన సంస్కరణ సమాచారాన్ని సేకరించడం",
|
||||
"Collecting logs": "నమోదు సేకరించడం",
|
||||
"Couldn't find a matching Matrix room": "సరిపోలిక మ్యాట్రిక్స్ గదిని కనుగొనలేకపోయాము",
|
||||
"Custom Server Options": "మలచిన సేవిక ఎంపికలు",
|
||||
"delete the alias.": "అలియాస్ తొలగించండి.",
|
||||
"Describe your problem here.": "ఇక్కడ మీ సమస్యను వివరించండి.",
|
||||
"Direct Chat": "ప్రత్యక్ష మాటామంతి",
|
||||
"Directory": "వివరం",
|
||||
"Dismiss": "రద్దుచేసే",
|
||||
"Download this file": "ఈ దస్త్రం దిగుమతి చేయండి",
|
||||
"Enable audible notifications in web client": "వెబ్ బంట్రౌతు వినిపించే నోటిఫికేషన్లను ప్రారంభించండి",
|
||||
"Enable desktop notifications": "రంగస్థల తాఖీదు ప్రారంభించండి",
|
||||
"Enable email notifications": "ఇమెయిల్ ప్రకటనలను ప్రారంభించండి",
|
||||
"Enable notifications for this account": "ఈ ఖాతా కోసం తాఖీదు ప్రారంభించండి",
|
||||
"Enable them now": "ఇప్పుడే వాటిని ప్రారంభించండి",
|
||||
"Enter keywords separated by a comma:": "కామాతో వేరు చేయబడిన కీలక పదాలను నమోదు చేయండి:",
|
||||
"Error": "లోపం",
|
||||
"Error saving email notification preferences": "ఇమెయిల్ ప్రకటనలను ప్రాధాన్యతలను దాచు చేయడంలో లోపం",
|
||||
"#example": "#ఉదాహరణ",
|
||||
"Expand panel": "ప్యానెల్ను విస్తరింపజేయండి",
|
||||
"Failed to add tag %(tagName)s to room": "%(tagName)s ను బొందు జోడించడంలో విఫలమైంది",
|
||||
"Failed to change settings": "అమరిక మార్చడం విఫలమైంది",
|
||||
"Failed to update keywords": "కీలక పదాలను నవీకరించడంలో విఫలమైంది",
|
||||
"Failed to get protocol list from Home Server": "హోమ్ సర్వర్ నుండి ప్రోటోకాల్ జాబితాను పొందడం విఫలమైంది",
|
||||
"Failed to get public room list": "ప్రజా గది జాబితాను పొందడం విఫలమైంది",
|
||||
"Failed to remove tag %(tagName)s from room": "గది నుండి బొందు %(tagName)s తొలగించడంలో విఫలమైంది",
|
||||
"Failed to send report: ": "నివేదికను పంపడంలో విఫలమైంది: ",
|
||||
"Failed to set direct chat tag": "ప్రత్యక్ష మాటామంతి బొందు సెట్ చేయడంలో విఫలమైంది",
|
||||
"Failed to set Direct Message status of room": "గది యొక్క ప్రత్యక్ష సందేశ స్థితి సెట్ చేయడంలో విఫలమైంది",
|
||||
"Favourite": "గుర్తుంచు",
|
||||
"Fetching third party location failed": "మూడవ పార్టీ స్థానాన్ని పొందడం విఫలమైంది",
|
||||
"Files": "దస్ర్తాలు",
|
||||
"Filter room names": "గది పేర్లను ఫిల్టర్ చేయండి",
|
||||
"Forget": "మర్చిపో",
|
||||
"Forward Message": "సందేశాన్ని మునుముందుకు చేయండి",
|
||||
"Guests can join": "అతిథులు చేరవచ్చు",
|
||||
"Hide panel": "ప్యానెల్ను దాచు",
|
||||
"(HTTP status %(httpStatus)s)": "(HTTP స్థితి %(httpStatus)s)",
|
||||
"I understand the risks and wish to continue": "నేను నష్టాలను అర్థం చేసుకుంటాను మరియు కొనసాగించాలని కోరుకుంటున్నాను",
|
||||
"Invite to this room": "ఈ గదికి ఆహ్వానించండి",
|
||||
"Keywords": "ముఖ్యపదాలు",
|
||||
"Leave": "వదిలి",
|
||||
"Login": "ప్రవేశ ద్వారం",
|
||||
"Loading bug report module": "దోష నివేదిక అధిభాగం లోడ్ చేస్తోంది",
|
||||
"Low Priority": "తక్కువ ప్రాధాన్యత",
|
||||
"Members": "సభ్యులు",
|
||||
"Mentions only": "మాత్రమే ప్రస్తావిస్తుంది",
|
||||
"Messages containing my display name": "నా ప్రదర్శన పేరును కలిగి ఉన్న సందేశాలు",
|
||||
"Messages containing <span>keywords</span>": "కీలక పదాలను</span>కలిగి ఉన్న సందేశం<span>",
|
||||
"Messages containing my user name": "నా వినియోగదారు పేరు కలిగి ఉన్న సందేశాలు",
|
||||
"Messages in group chats": "సమూహ మాటామంతిలో సందేశాలు",
|
||||
"Messages in one-to-one chats": "సందేశాలు నుండి ఒకరికి ఒకటి మాటామంతి",
|
||||
"Messages sent by bot": "బాట్ పంపిన సందేశాలు",
|
||||
"more": "మరింత",
|
||||
"Mute": "నిశబ్ధము",
|
||||
"No rooms to show": "చూపించడానికి గదులు లేవు",
|
||||
"Noisy": "శబ్దం",
|
||||
"Notification targets": "తాఖీదు లక్ష్యాలు",
|
||||
"Notifications": "ప్రకటనలు",
|
||||
"Notify for all other messages/rooms": "అన్ని ఇతర సందేశాలు / గదులు కోసం తెలియజేయండి",
|
||||
"Off": "ఆపు",
|
||||
"On": "వేయుము",
|
||||
"Operation failed": "కార్యం విఫలమైంది",
|
||||
"Reject": "తిరస్కరించు",
|
||||
"Remove %(name)s from the directory?": "వివరము నుండి %(name)s తొలిగించు?",
|
||||
"Remove": "తొలగించు",
|
||||
"remove %(name)s from the directory.": "వివరము నుండి %(name)s ను తొలిగించు.",
|
||||
"Remove from Directory": "`వివరము నుండి తొలిగించు",
|
||||
"Report a bug": "లోపమును నివేదించు",
|
||||
"Resend": "మళ్ళి పంపుము",
|
||||
"Riot Desktop on %(platformName)s": "రియట్ రంగస్థలం లో %(platformName)s",
|
||||
"Room not found": "గది కనుగొనబడలేదు",
|
||||
"Search": "శోధన",
|
||||
"Search…": "శోధన…",
|
||||
"Search for a room": "గది కోసం శోధించండి",
|
||||
"Send": "పంపండి",
|
||||
"Send logs": "నమోదును పంపు",
|
||||
"Source URL": "మూల URL",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "క్షమించండి, మీ బ్రౌజర్ <b>రియట్ని అమలు చేయలేరు</b>.",
|
||||
"Today": "ఈ రోజు",
|
||||
"Yesterday": "నిన్న",
|
||||
"Warning": "హెచ్చరిక",
|
||||
"Checking for an update...": "నవీకరణ కోసం చూస్తోంది...",
|
||||
"Error encountered (%(errorDetail)s).": "లోపం సంభవించింది (%(errorDetail)s).",
|
||||
"No update available.": "ఏ నవీకరణ అందుబాటులో లేదు.",
|
||||
"Downloading update...": "నవీకరణను దిగుమతి చేస్తోంది...",
|
||||
"Welcome to Riot.im": "రిమోట్.ఇం కి స్వగతం",
|
||||
"Search the room directory": "గది వివరాన్ని శోధించండి",
|
||||
"Chat with Riot Bot": "రియోట్ బొట్తో మాటామంతి చేయండి",
|
||||
"Please set a password!": "దయచేసి మీ రహస్యపదాన్నీ అమర్చండి!",
|
||||
"Set Password": "రహస్యపదాన్నీ అమర్చండి",
|
||||
"Couldn't load home page": "హోమ్ పేజీని లోడ్ చేయలేకపోయాము",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">సఫరి</a>ఇంక<a href=\"http://opera.com\">ఒపెర</a>కుద పని చెసతయి.",
|
||||
"All notifications are currently disabled for all targets.": "ప్రస్తుతానికి అన్ని చోట్లనుంచి అన్ని ప్రకటనలు ఆగి వున్నాయి.",
|
||||
"An error occurred whilst saving your email notification preferences.": "మీ ఇమెయిల్ ప్రకటన ప్రాధాన్యాలు బద్రపరిచేతప్పుడు ఎదో తప్పు జరిగింది."
|
||||
}
|
194
src/i18n/strings/th.json
Normal file
194
src/i18n/strings/th.json
Normal file
|
@ -0,0 +1,194 @@
|
|||
{
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s ผ่านทาง %(browserName)s บน %(osName)s",
|
||||
"All messages": "ทุกข้อความ",
|
||||
"Cancel": "ยกเลิก",
|
||||
"Close": "ปิด",
|
||||
"Error": "ข้อผิดพลาด",
|
||||
"#example": "#example",
|
||||
"Files": "ไฟล์",
|
||||
"Forward Message": "ส่งต่อข้อความ",
|
||||
"Low Priority": "ความสำคัญต่ำ",
|
||||
"Members": "สมาชิก",
|
||||
"more": "เพิ่มเติม",
|
||||
"Off": "ปิด",
|
||||
"Report a bug": "รายงานจุดบกพร่อง",
|
||||
"powered by Matrix": "ใช้เทคโนโลยี Matrix",
|
||||
"Quote": "อ้างอิง",
|
||||
"Resend": "ส่งใหม่",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">Safari</a> หรือ <a href=\"http://opera.com\">Opera</a> ก็ใช้ได้",
|
||||
"A new version of Riot is available.": "มี Riot เวอร์ชั่นใหม่",
|
||||
"All Rooms": "ทุกห้อง",
|
||||
"Cancel Sending": "ยกเลิกการส่ง",
|
||||
"Changelog": "บันทึกการเปลี่ยนแปลง",
|
||||
"Describe your problem here.": "อธิบายปัญหาที่นี่",
|
||||
"Download this file": "ดาวน์โหลดไฟล์นี้",
|
||||
"Dismiss": "ไม่สนใจ",
|
||||
"Messages sent by bot": "ข้อความจากบอท",
|
||||
"Mute": "เงียบ",
|
||||
"No rooms to show": "ไม่มีห้องที่จะแสดง",
|
||||
"Notifications": "การแจ้งเตือน",
|
||||
"On": "เปิด",
|
||||
"Permalink": "ลิงก์ถาวร",
|
||||
"Operation failed": "การดำเนินการล้มเหลว",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "กรุณาอธิบายจุดบกพร่อง คุณทำอะไร? ควรจะเกิดอะไรขึ้น? แล้วอะไรคือสิ่งที่เกิดขึ้นจริง?",
|
||||
"Please describe the bug and/or send logs.": "กรุณาอธิบายจุดบกพร่อง และ/หรือ ส่งล็อก",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "กรุณาติดตั้ง <a href=\"https://www.google.com/chrome\">Chrome</a> หรือ <a href=\"https://getfirefox.com\">Firefox</a> เพื่อประสบการณ์ที่ดีที่สุด",
|
||||
"Reject": "ปฏิเสธ",
|
||||
"Remove": "ลบ",
|
||||
"Messages containing <span>keywords</span>": "ข้อความที่มี<span>คีย์เวิร์ด</span>",
|
||||
"Messages containing my user name": "ข้อความที่มีชื่อผู้ใช้ของฉัน",
|
||||
"Search": "ค้นหา",
|
||||
"Search…": "ค้นหา…",
|
||||
"Room not found": "ไม่พบห้อง",
|
||||
"Search for a room": "ค้นหาห้อง",
|
||||
"Send": "ส่ง",
|
||||
"Send logs": "ส่งล็อก",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "ขออภัย เบราว์เซอร์ของคุณ<b>ไม่</b>สามารถ run Riot ได้",
|
||||
"This Room": "ห้องนี้",
|
||||
"Unavailable": "ไม่มี",
|
||||
"Unknown device": "อุปกรณ์ที่ไม่รู้จัก",
|
||||
"unknown error code": "รหัสข้อผิดพลาดที่ไม่รู้จัก",
|
||||
"Update": "อัปเดต",
|
||||
"Uploaded on %(date)s by %(user)s": "อัปโหลดเมื่อ %(date)s โดย %(user)s",
|
||||
"Yesterday": "เมื่อวานนี้",
|
||||
"Today": "วันนี้",
|
||||
"Saturday": "วันเสาร์",
|
||||
"Friday": "วันศุกร์",
|
||||
"Thursday": "วันพฤหัสบดี",
|
||||
"Wednesday": "วันพุธ",
|
||||
"Tuesday": "วันอังคาร",
|
||||
"Monday": "วันจันทร์",
|
||||
"Sunday": "วันอาทิตย์",
|
||||
"You cannot delete this image. (%(code)s)": "คุณไม่สามารถลบรูปนี้ได้ (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "คุณไม่สามารถลบข้อความนี้ได้ (%(code)s)",
|
||||
"What's New": "มีอะไรใหม่",
|
||||
"What's new?": "มีอะไรใหม่?",
|
||||
"View Source": "ดูซอร์ส",
|
||||
"Uploading report": "กำลังอัปโหลดรายงาน",
|
||||
"Advanced notification settings": "ตั้งค่าการแจ้งเตือนขั้นสูง",
|
||||
"Can't update user notification settings": "ไม่สามารถอัปเดตการตั้งค่าการแจ้งเตือนของผู้ใช้",
|
||||
"Collecting logs": "กำลังรวบรวมล็อก",
|
||||
"Collapse panel": "ซ่อนหน้าต่าง",
|
||||
"Collecting app version information": "กำลังรวบรวมข้อมูลเวอร์ชันแอป",
|
||||
"OK": "ตกลง",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "คุณต้องใช้ HTTPS เพื่อเริ่มติดต่อแบบแบ่งปันหน้าจอ",
|
||||
"You are not receiving desktop notifications": "การแจ้งเตือนบนเดสก์ทอปถูกปิดอยู่",
|
||||
"Waiting for response from server": "กำลังรอการตอบสนองจากเซิร์ฟเวอร์",
|
||||
"View Decrypted Source": "ดูซอร์สที่ถอดรหัสแล้ว",
|
||||
"Unnamed room": "ห้องที่ไม่มีชื่อ",
|
||||
"Source URL": "URL ต้นฉบับ",
|
||||
"Riot Desktop on %(platformName)s": "Riot เดสก์ทอปบน %(platformName)s",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot ไม่รองรับเว็บบนอุปกรณ์พกพา ติดตั้งแอป?",
|
||||
"Riot does not know how to join a room on this network": "Riot ไม่รู้วิธีเข้าร่วมห้องในเครือข่ายนี้",
|
||||
"Direct Chat": "แชทโดยตรง",
|
||||
"All messages (loud)": "ทุกข้อความ (เสียงดัง)",
|
||||
"Custom Server Options": "กำหนดเซิร์ฟเวอร์เอง",
|
||||
"Directory": "ไดเรกทอรี",
|
||||
"Enable audible notifications in web client": "เปิดใช้งานเสียงแจ้งเตือนบนเว็บไคลเอนต์",
|
||||
"Enable desktop notifications": "เปิดใช้งานการแจ้งเตือนบนเดสก์ทอป",
|
||||
"Enable email notifications": "เปิดใช้งานการแจ้งเตือนทางอีเมล",
|
||||
"Enable notifications for this account": "เปิดใช้งานการแจ้งเตือนสำหรับบัญชีนี้",
|
||||
"Enable them now": "เปิดใช้งานเดี๋ยวนี้",
|
||||
"Enter keywords separated by a comma:": "กรอกคีย์เวิร์ดทั้งหมด คั่นด้วยเครื่องหมายจุลภาค:",
|
||||
"Expand panel": "ขยายหน้าต่าง",
|
||||
"Failed to update keywords": "การอัปเดตคีย์เวิร์ดล้มเหลว",
|
||||
"Failed to remove tag %(tagName)s from room": "การลบแท็ก %(tagName)s จากห้องล้มเหลว",
|
||||
"Failed to send report: ": "การส่งรายงานล้มเหลว: ",
|
||||
"Filter room names": "กรองชื่อห้อง",
|
||||
"Guests can join": "แขกเข้าร่วมได้",
|
||||
"Hide panel": "ซ่อนหน้าต่าง",
|
||||
"I understand the risks and wish to continue": "ฉันเข้าใจความเสี่ยงและต้องการดำเนินการต่อ",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "ล็อกจากไคลเอนต์จะถูกแนบพร้อมกับรายงานนี้เพื่อวินิจฉัยปัญหา หากคุณต้องการส่งเฉพาะข้อความด้านบน กรุณาเอาเครื่องหมายออก:",
|
||||
"Invite to this room": "เชิญเข้าห้องนี้",
|
||||
"Keywords": "คีย์เวิร์ด",
|
||||
"Leave": "ออกจากห้อง",
|
||||
"Loading bug report module": "กำลังโหลดโมดูลรายงานจุดบกพร่อง",
|
||||
"Mentions only": "เมื่อถูกกล่าวถึงเท่านั้น",
|
||||
"Messages containing my display name": "ข้อความที่มีชื่อของฉัน",
|
||||
"Messages in group chats": "ข้อความในแชทกลุ่ม",
|
||||
"Messages in one-to-one chats": "ข้อความในแชทตัวต่อตัว",
|
||||
"Noisy": "เสียงดัง",
|
||||
"Notification targets": "เป้าหมายการแจ้งเตือน",
|
||||
"Notify for all other messages/rooms": "แจ้งเตือนจากห้อง/ข้อความอื่น ๆ ทั้งหมด",
|
||||
"Notify me for anything else": "แจ้งเตือนสำหรับอย่างอื่นทั้งหมด",
|
||||
"Remove %(name)s from the directory?": "ถอด %(name)s ออกจากไดเรกทอรี?",
|
||||
"remove %(name)s from the directory.": "ถอด %(name)s ออกจากไดเรกทอรี",
|
||||
"Remove from Directory": "ถอดออกจากไดเรกทอรี",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot ใช้คุณสมบัติขั้นสูงในเบราว์เซอร์หลายประการ คุณสมบัติบางอย่างอาจยังไม่พร้อมใช้งานหรืออยู่ในขั้นทดลองในเบราว์เซอร์ปัจจุบันของคุณ",
|
||||
"There are advanced notifications which are not shown here": "มีการแจ้งเตือนขั้นสูงที่ไม่ได้แสดงที่นี่",
|
||||
"Unable to join network": "ไม่สามารถเข้าร่วมเครือข่ายได้",
|
||||
"Unable to look up room ID from server": "ไม่สามารถหา ID ห้องจากเซิร์ฟเวอร์ได้",
|
||||
"Unhide Preview": "แสดงตัวอย่าง",
|
||||
"World readable": "ทุกคนอ่านได้",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "คุณอาจมีการตั้งค่าจากไคลเอนต์อื่นนอกจาก Riot การตั้งต่าเหล่านั้นยังถูกใช้งานอยู่แต่คุณจะปรับแต่งจากใน Riot ไม่ได้",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "การแสดงผลของโปรแกรมอาจผิดพลาด ฟังก์ชันบางอย่างหรือทั้งหมดอาจไม่ทำงานในเบราว์เซอร์ปัจจุบันของคุณ หากคุณต้องการลองดำเนินการต่อ คุณต้องรับมือกับปัญหาที่อาจจะเกิดขึ้นด้วยตัวคุณเอง!",
|
||||
"Add an email address above to configure email notifications": "เพิ่มที่อยู่อีเมลข้างบนเพื่อตั้งค่าการแจ้งเตือนทางอีเมล",
|
||||
"All notifications are currently disabled for all targets.": "การแจ้งเตือนทั้งหมดถูกปิดใช้งานสำหรับทุกอุปกรณ์",
|
||||
"An error occurred whilst saving your email notification preferences.": "เกิดข้อผิดพลาดระหว่างบันทึกการตั้งค่าการแจ้งเตือนทางอีเมล",
|
||||
"Couldn't find a matching Matrix room": "ไม่พบห้อง Matrix ที่ตรงกับคำค้นหา",
|
||||
"customServer_text": "คุณสามารถกำหนดเซิร์ฟเวอร์บ้านเองได้โดยใส่ URL ของเซิร์ฟเวอร์นั้น เพื่อเข้าสู่ระบบของเซิร์ฟเวอร์ Matrix อื่น<br/>ทั้งนี่เพื่อให้คุณสามารถใช้ Riot กับบัญชี Matrix ที่มีอยู่แล้วบนเซิร์ฟเวอร์บ้านอื่น ๆ ได้<br/><br/>คุณอาจเลือกเซิร์ฟเวอร์ระบุตัวตนเองด้วยก็ได้ แต่คุณจะไม่สามารถเชิญผู้ใช้อื่นด้วยที่อยู่อีเมล หรือรับคำเชิญจากผู้ใช้อื่นทางที่อยู่อีเมลได้",
|
||||
"delete the alias.": "ลบนามแฝง",
|
||||
"Error saving email notification preferences": "การบันทึกการตั้งค่าการแจ้งเตือนทางอีเมลผิดพลาด",
|
||||
"Failed to add tag %(tagName)s to room": "การเพิ่มแท็ก %(tagName)s ของห้องนี้ล้มเหลว",
|
||||
"Failed to change settings": "การแก้ไขการตั้งค่าล้มเหลว",
|
||||
"Failed to get protocol list from Home Server": "การขอรายชื่อโปรโตคอลจากเซิร์ฟเวอร์บ้านล้มเหลว",
|
||||
"Failed to get public room list": "การขอรายชื่อห้องสาธารณะล้มเหลว",
|
||||
"Failed to set direct chat tag": "การติดแท็กแชทตรงล้มเหลว",
|
||||
"Failed to set Direct Message status of room": "การตั้งสถานะข้อความตรงของห้องล้มเหลว",
|
||||
"Favourite": "รายการโปรด",
|
||||
"Fetching third party location failed": "การเรียกข้อมูลตำแหน่งจากบุคคลที่สามล้มเหลว",
|
||||
"The Home Server may be too old to support third party networks": "เซิร์ฟเวอร์บ้านอาจเก่าเกินกว่าจะรองรับเครือข่ายของบุคคลที่สาม",
|
||||
"The server may be unavailable or overloaded": "เซิร์ฟเวอร์อาจไม่พร้อมใช้งานหรือทำงานหนักเกินไป",
|
||||
"Unable to fetch notification target list": "ไม่สามารถรับรายชื่ออุปกรณ์แจ้งเตือน",
|
||||
"When I'm invited to a room": "เมื่อฉันได้รับคำเชิญเข้าห้อง",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "ลบนามแฝง %(alias)s ของห้องและถอด %(name)s ออกจากไดเรกทอรี?",
|
||||
"Call invitation": "คำเชิญเข้าร่วมการโทร",
|
||||
"Failed to forget room %(errCode)s": "การลืมห้องล้มเหลว %(errCode)s",
|
||||
"Forget": "ลืม",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "การแจ้งเตือนจากคีย์เวิร์ดเหล่านี้ เป็นไปตามกฏที่ไม่สามารถแสดงที่นี่ได้:",
|
||||
"Login": "เข้าสู่ระบบ",
|
||||
"Welcome to Riot.im": "ยินดีต้อนรับสู่ Riot.im",
|
||||
"Search the room directory": "ค้นหาในไดเรกทอรีห้อง",
|
||||
"Chat with Riot Bot": "แชทกับบอท Riot",
|
||||
"Get started with some tips from Riot Bot!": "มาเริ่มกันด้วยเคล็ดลับเล็กน้อยจากบอท Riot!",
|
||||
"Discussion of all things Matrix!": "พูดคุยทุกเรื่อง เรื่อง Matrix!",
|
||||
"Riot/Web & Desktop chat": "แชทเกี่ยวกับ Riot บนเว็บและเดสก์ทอป",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "แชทเกี่ยวกับ Riot บน iOS และ matrix-ios-sdk",
|
||||
"Riot/Android & matrix-android-sdk chat": "แชทเกี่ยวกับ Riot บน Android และ matrix-android-sdk",
|
||||
"Matrix technical discussions": "พูดคุยเรื่อง Matrix เชิงเทคนิค",
|
||||
"Running Matrix services": "การติดตั้งบริการ Matrix",
|
||||
"Community-run support for Synapse": "ฝ่ายสนับสนุน Synapse โดยชุมชนผู้ใช้",
|
||||
"Admin support for Dendrite": "ฝ่ายสนับสนุน Dendrite จากผู้ดูแล",
|
||||
"Announcements about Synapse releases": "ประกาศเกี่ยวกับ Synapse รุ่นใหม่",
|
||||
"Support for those using and running matrix-appservice-irc": "ฝ่ายสนับสนุนสำหรับผู้ใช้ matrix-appservice-irc",
|
||||
"Building services on Matrix": "การพัฒนาบริการบน Matrix",
|
||||
"Support for those using the Matrix spec": "ฝ่ายสนับสนุนสำหรับผู้ใช้สเปค Matrix",
|
||||
"Implementing VR services with Matrix": "การอิมพลีเมนต์บริการ VR ด้วย Matrix",
|
||||
"Implementing VoIP services with Matrix": "การอิมพลีเมนต์บริการ VoIP ด้วย Matrix",
|
||||
"Support for those using, running and writing other bridges": "ฝ่ายสนับสนุนสำหรับผู้ใช้หรือพัฒนาตัวเชื่อมอื่น ๆ",
|
||||
"Contributing code to Matrix and Riot": "สมทบโค๊ดให้ Matrix และ Riot",
|
||||
"Dev chat for the Riot/Web dev team": "แชทสำหรับทีมพัฒนา Riot บนเว็บ",
|
||||
"Dev chat for the Dendrite dev team": "แชทสำหรับทีมพัฒนา Dendrite",
|
||||
"Co-ordination for Riot/Web translators": "แชทสำหรับประสานงานการแปล Riot บนเว็บ",
|
||||
"Failed to change password. Is your password correct?": "การเปลี่ยนรหัสผ่านล้มเหลว รหัสผ่านของคุณถูกต้องหรือไม่?",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "มีห้องอยู่มากมายใน Matrix ทั้งห้องที่เชื่อมไปยังเครือข่ายอื่น (Slack, IRC, Gitter ฯลฯ) และห้องที่อยู่ด้วยตัวเอง ลองดูไดเรกทอรีสิ!",
|
||||
"You have successfully set a password!": "การตั้งรหัสผ่านเสร็จสมบูรณ์!",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "คุณสามารถกลับไปยังบัญชีของคุณหลังจากออกจากระบบ แล้วกลับเขาสู่ระบบบนอุปกรณ์อื่น ๆ",
|
||||
"Continue": "ดำเนินการต่อ",
|
||||
"Please set a password!": "กรุณาตั้งรหัสผ่าน!",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "เพื่อคุณจะได้กลับมายังบัญชีเดิมของคุณได้ หลังจากออกจากระบบ แล้วกลับเข้าสู่ระบบในอุปกรณ์อื่น ๆ",
|
||||
"Design and implementation of E2E in Matrix": "การออกแบบและใช้งาน E2E ใน Matrix",
|
||||
"Discussion of the Identity Service API": "พูดคุยเกี่ยวกับ Identity Service API",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "ระบบแชทและประสานงาน ไร้ศูนย์กลางและเข้ารหัสได้ โดยใช้เทคโนโลยีจาก [matrix]",
|
||||
"General discussion about Matrix and Riot": "พูดคุยเรื่องทั่วไป ทั้ง Matrix และ Riot",
|
||||
"(HTTP status %(httpStatus)s)": "(สถานะ HTTP %(httpStatus)s)",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "อย่าลืม คุณสามารถตั้งที่อยู่อีเมลในการตั้งค่าผู้ใช้ได้ทุกเมื่อหากคุณเปลี่ยนใจ",
|
||||
"You have successfully set a password and an email address!": "ตั้งรหัสผ่านและที่อยู่อีเมลสำเร็จแล้ว!",
|
||||
"Warning": "คำเตือน",
|
||||
"Checking for an update...": "กำลังตรวจหาอัปเดต...",
|
||||
"Error encountered (%(errorDetail)s).": "เกิดข้อผิดพลาด (%(errorDetail)s)",
|
||||
"No update available.": "ไม่มีอัปเดตที่ใหม่กว่า",
|
||||
"Downloading update...": "กำลังดาวน์โหลดอัปเดต...",
|
||||
"To return to your account in future you need to <u>set a password</u>": "คุณต้อง<u>ตั้งรหัสผ่าน</u>เพื่อจะกลับมาที่บัญชีนี้ในอนาคต",
|
||||
"Set Password": "ตั้งรหัสผ่าน"
|
||||
}
|
187
src/i18n/strings/tr.json
Normal file
187
src/i18n/strings/tr.json
Normal file
|
@ -0,0 +1,187 @@
|
|||
{
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(osName)s işletim sisteminde %(browserName)s ile %(appName)s",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\"> Safari </a> ve<a href=\"http://opera.com\"> Opera </a> da çalışıyor.",
|
||||
"A new version of Riot is available.": "Riot'un yeni bir versiyonu mevcuttur.",
|
||||
"Add an email address above to configure email notifications": "E-posta bildirimlerini yapılandırmak için yukarıya bir e-posta adresi ekleyin",
|
||||
"Advanced notification settings": "Gelişmiş bildirim ayarları",
|
||||
"All messages": "Tüm mesajlar",
|
||||
"All messages (loud)": "Tüm mesajlar (uzun)",
|
||||
"All Rooms": "Tüm Odalar",
|
||||
"All notifications are currently disabled for all targets.": "Tüm bildirimler şu anda tüm hedefler için devre dışı bırakılmıştır.",
|
||||
"An error occurred whilst saving your email notification preferences.": "E-posta bildirim tercihlerinizi kaydetme işlemi sırasında bir hata oluştu.",
|
||||
"Call invitation": "Arama davetiyesi",
|
||||
"Cancel": "İptal Et",
|
||||
"Cancel Sending": "Göndermeyi İptal Et",
|
||||
"Can't update user notification settings": "Kullanıcı bildirim ayarları güncellenemiyor",
|
||||
"Changelog": "Değişiklikler",
|
||||
"Close": "Kapat",
|
||||
"Collapse panel": "Katlanır panel",
|
||||
"Collecting app version information": "Uygulama sürümü bilgileri toplanıyor",
|
||||
"Collecting logs": "Kayıtlar toplanıyor",
|
||||
"Couldn't find a matching Matrix room": "Eşleşen bir Matrix odası bulunamadı",
|
||||
"Custom Server Options": "Özel Sunucu Seçenekleri",
|
||||
"customServer_text": "Farklı bir Ana Sunucu URL'si belirleyerek başka bir Matrix sunucusunda oturum açmak için Özel Sunucu Seçeneklerini kullanabilirsiniz. <br/> Bu , Riot'u mevcut Matrix hesabı ile farklı bir Ana Sunucuda kullanmanıza olanak tanır.<br/> <br/> Ayrıca Özel Kimlik Sunucu'da ayarlayabilirsiniz ama kullanıcıları e-posta adresleriyle veya kendi e-posta adresinizle davet edemezsiniz.",
|
||||
"delete the alias.": "Tüm rumuzları sil.",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "%(alias)s oda rumuzu silinsin ve %(name)s dizinden kaldırılsın mı ?",
|
||||
"Describe your problem here.": "Probleminizi burada açıklayın.",
|
||||
"Direct Chat": "Doğrudan Sohbet",
|
||||
"Directory": "Dizin",
|
||||
"Dismiss": "Uzaklaştır",
|
||||
"Download this file": "Bu dosyayı indir",
|
||||
"Enable audible notifications in web client": "Web istemcisinde sesli bildirimleri etkinleştir",
|
||||
"Enable desktop notifications": "Masaüstü bildirimlerini etkinleştir",
|
||||
"Enable email notifications": "E-posta bildirimlerini etkinleştir",
|
||||
"Enable notifications for this account": "Bu hesap için bildirimleri etkinleştir",
|
||||
"Enable them now": "Onları şimdi etkinleştir",
|
||||
"Enter keywords separated by a comma:": "Anahtar kelimeleri virgül ile ayırarak girin:",
|
||||
"Error": "Hata",
|
||||
"Error saving email notification preferences": "E-posta bildirim tercihlerini kaydetme hatası",
|
||||
"#example": "örnek",
|
||||
"Expand panel": "Genişletme paneli",
|
||||
"Failed to add tag %(tagName)s to room": "%(tagName)s etiketi odaya eklenemedi",
|
||||
"Failed to change settings": "Ayarlar değiştirilemedi",
|
||||
"Failed to forget room %(errCode)s": "Oda unutulması başarısız oldu %(errCode)s",
|
||||
"Failed to update keywords": "Anahtar kelimeler güncellenemedi",
|
||||
"Failed to get protocol list from Home Server": "Ana Sunucu'dan protokol listesi alınamadı",
|
||||
"Failed to get public room list": "Genel odalar listesi alınamadı",
|
||||
"Failed to remove tag %(tagName)s from room": "Odadan %(tagName)s etiketi kaldırılamadı",
|
||||
"Failed to send report: ": "Rapor gönderilemedi: ",
|
||||
"Failed to set direct chat tag": "Direkt sohbet etiketi ayarlanamadı",
|
||||
"Failed to set Direct Message status of room": "Odanın Direkt Mesaj durumu ayarlanamadı",
|
||||
"Favourite": "Favori",
|
||||
"Fetching third party location failed": "Üçüncü parti konumunu çekemedi",
|
||||
"Files": "Dosyalar",
|
||||
"Filter room names": "Oda isimlerini filtrele",
|
||||
"Forget": "Unut",
|
||||
"Forward Message": "Mesajı İlet",
|
||||
"Guests can join": "Misafirler katılabilirler",
|
||||
"Hide panel": "Paneli gizle",
|
||||
"(HTTP status %(httpStatus)s)": "(HTTP durumu %(httpStatus)s)",
|
||||
"I understand the risks and wish to continue": "Riskleri anlıyorum ve devam etmek istiyorum",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "Sorunları teşhis etmek için , bu istemciden kayıtlar hata raporu ile beraber gönderilecek . Yalnızca yukarıdaki metni göndermek isterseniz , lütfen işareti kaldırın:",
|
||||
"Invite to this room": "Bu odaya davet et",
|
||||
"Keywords": "Anahtar kelimeler",
|
||||
"Leave": "Ayrıl",
|
||||
"Login": "Oturum aç",
|
||||
"Loading bug report module": "Hata raporlama modülü yükleniyor",
|
||||
"Low Priority": "Düşük Öncelikli",
|
||||
"Members": "Üyeler",
|
||||
"Mentions only": "Sadece Mention'lar",
|
||||
"Messages containing my display name": "İsmimi içeren mesajlar",
|
||||
"Messages containing <span>keywords</span>": "<span> anahtar kelimeleri </span> içeren mesajlar",
|
||||
"Messages containing my user name": "Kullanıcı ismimi içeren mesajlar",
|
||||
"Messages in group chats": "Grup sohbetlerindeki mesajlar",
|
||||
"Messages in one-to-one chats": "Bire bir sohbetlerdeki mesajlar",
|
||||
"Messages sent by bot": "Bot tarafından gönderilen mesajlar",
|
||||
"more": "Daha",
|
||||
"Mute": "Sessiz",
|
||||
"No rooms to show": "Gösterilecek oda yok",
|
||||
"Noisy": "Gürültülü",
|
||||
"Notification targets": "Bildirim hedefleri",
|
||||
"Notifications": "Bildirimler",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "Aşağıdaki anahtar kelimeleri ile ilgili bildirimler burada gösterilemeyen kuralları takip eder:",
|
||||
"Notify for all other messages/rooms": "Diğer tüm mesajlar / odalar için bildirim yapın",
|
||||
"Notify me for anything else": "Başka herhangi bir şey için bana bildirim yap",
|
||||
"Off": "Kapalı",
|
||||
"On": "Açık",
|
||||
"Operation failed": "Operasyon başarısız oldu",
|
||||
"Permalink": "Kalıcı Bağlantı(permalink)",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Lütfen hatayı tanımlayın. Ne yaptınız ? Ne gerçekleşmesini beklediniz ? Ne gerçekleşti ?",
|
||||
"Please describe the bug and/or send logs.": "Lütfen hatayı tanımlayın ve/veya kayıtları gönderin.",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Lütfen <a href=\"https://www.google.com/chrome\"> Chrome </a> ya da <a href=\"https://getfirefox.com\"> Firefox </a> 'u en iyi deneyim için yükleyin.",
|
||||
"powered by Matrix": "Matrix tarafından desteklenmektedir",
|
||||
"Quote": "Alıntı",
|
||||
"Reject": "Reddet",
|
||||
"Remove %(name)s from the directory?": "%(name)s'i dizinden kaldırılsın mı ?",
|
||||
"Remove": "Kaldır",
|
||||
"remove %(name)s from the directory.": "%(name)s'i dizinden kaldır.",
|
||||
"Remove from Directory": "Dizinden Kaldır",
|
||||
"Report a bug": "Hata Bildir",
|
||||
"Resend": "Yeniden Gönder",
|
||||
"Riot Desktop on %(platformName)s": "%(platformName)s platformunda Riot Masaüstü",
|
||||
"Riot does not know how to join a room on this network": "Riot bu ağdaki bir odaya nasıl gireceğini bilmiyor",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot mobil web'de desteklenmiyor . Uygulamayı yükle ?",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot geçerli tarayıcınızda mevcut olmayan veya denemelik olan birçok gelişmiş tarayıcı özelliği kullanıyor.",
|
||||
"Room not found": "Oda bulunamadı",
|
||||
"Search": "Ara",
|
||||
"Search…": "Arama…",
|
||||
"Search for a room": "Oda ara",
|
||||
"Send": "Gönder",
|
||||
"Send logs": "Kayıtları gönder",
|
||||
"Source URL": "Kaynak URL",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Üzgünüz , tarayıcınız Riot'u <b> çalıştıramıyor </b>.",
|
||||
"The Home Server may be too old to support third party networks": "Ana Sunucu 3. parti ağları desteklemek için çok eski olabilir",
|
||||
"There are advanced notifications which are not shown here": "Burada gösterilmeyen gelişmiş bildirimler var",
|
||||
"The server may be unavailable or overloaded": "Sunucu kullanılamıyor veya aşırı yüklenmiş olabilir",
|
||||
"This Room": "Bu Oda",
|
||||
"Unable to fetch notification target list": "Bildirim hedef listesi çekilemedi",
|
||||
"Unable to join network": "Ağa bağlanılamıyor",
|
||||
"Unable to look up room ID from server": "Sunucudan oda ID'si aranamadı",
|
||||
"Unavailable": "Kullanım dışı",
|
||||
"Unhide Preview": "Önizlemeyi Göster",
|
||||
"Unknown device": "Bilinmeyen aygıt",
|
||||
"unknown error code": "bilinmeyen hata kodu",
|
||||
"Unnamed room": "İsimsiz oda",
|
||||
"Update": "Güncelleştirme",
|
||||
"Uploaded on %(date)s by %(user)s": "%(user)s tarafında %(date)s e yüklendi",
|
||||
"Uploading report": "Rapor yükleniyor",
|
||||
"View Decrypted Source": "Şifresi Çözülmüş(Decrypted) Kaynağı Görüntüle",
|
||||
"View Source": "Kaynağı Görüntüle",
|
||||
"What's New": "Yenilikler",
|
||||
"What's new?": "Yeni olan ne ?",
|
||||
"Waiting for response from server": "Sunucudan yanıt bekleniyor",
|
||||
"When I'm invited to a room": "Bir odaya davet edildiğimde",
|
||||
"World readable": "Okunabilir dünya",
|
||||
"You cannot delete this image. (%(code)s)": "Bu resmi silemezsiniz. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "Bu mesajı silemezsiniz (%(code)s)",
|
||||
"You are not receiving desktop notifications": "Masaüstü bildirimleri almıyorsunuz",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Onları Riot dışında bir istemciden yapılandırmış olabilirsiniz . Onları Riot içersinide ayarlayamazsınız ama hala geçerlidirler",
|
||||
"Sunday": "Pazar",
|
||||
"Monday": "Pazartesi",
|
||||
"Tuesday": "Salı",
|
||||
"Wednesday": "Çarşamba",
|
||||
"Thursday": "Perşembe",
|
||||
"Friday": "Cuma",
|
||||
"Saturday": "Cumartesi",
|
||||
"Today": "Bugün",
|
||||
"Yesterday": "Dün",
|
||||
"OK": "Tamam",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Ekran paylaşımlı arama yapmak için HTTPS kullanıyor olmalısınız.",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Geçerli tarayıcınız ile birlikte , uygulamanın görünüş ve kullanım hissi tamamen hatalı olabilir ve bazı ya da tüm özellikler çalışmayabilir. Yine de denemek isterseniz devam edebilirsiniz ancak karşılaşabileceğiniz sorunlar karşısında kendi başınasınız !",
|
||||
"Welcome to Riot.im": "Riot.im'e Hoş Geldiniz",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Dağıtık , şifreli sohbet & işbirliği ile Matrix tarafından desteklenmektedir",
|
||||
"Search the room directory": "Oda dizinini ara",
|
||||
"Chat with Riot Bot": "Riot Bot ile Sohbet Et",
|
||||
"Get started with some tips from Riot Bot!": "Bazı Riot Bot ipuçları ile başlayın !",
|
||||
"General discussion about Matrix and Riot": "Matrix ve Riot hakkında genel tartışma",
|
||||
"Discussion of all things Matrix!": "Matrix'in tüm tartışması!",
|
||||
"Riot/Web & Desktop chat": "Riot/Web & Masaüstü sohbet",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk sohbet",
|
||||
"Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk sohbet",
|
||||
"Matrix technical discussions": "Matrix teknik tartışmalar",
|
||||
"Running Matrix services": "Çalışan Matrix hizmetleri",
|
||||
"Community-run support for Synapse": "Synapse için topluluk tarafından işlenen destek",
|
||||
"Admin support for Dendrite": "Dendrite için Admin desteği",
|
||||
"Announcements about Synapse releases": "Synapse sürümleri hakkında duyurular",
|
||||
"Support for those using and running matrix-appservice-irc": "matrix-appservice-irc kullanan ve çalıştıran kullanıcılar için destek",
|
||||
"Building services on Matrix": "Matrix üzerinde Yapı hizmetleri",
|
||||
"Support for those using the Matrix spec": "Matrix teknik özelliklerini kullananlar için destek",
|
||||
"Design and implementation of E2E in Matrix": "Matrix'te E2E ' nin Tasarım ve İmplementasyonu",
|
||||
"Implementing VR services with Matrix": "Matrix'te VR hizmetlerini implement etmek",
|
||||
"Implementing VoIP services with Matrix": "Matrix'te VoIP hizmetlerini implement etmek",
|
||||
"Discussion of the Identity Service API": "Kimlik Hizmet API ( Identity Service API ) Tartışması",
|
||||
"Support for those using, running and writing other bridges": "Diğer köprüleri kullanan , çalıştıran ve yazanlar için destek",
|
||||
"Contributing code to Matrix and Riot": "Matrix ve Riot'a kod katkısı (contribution) sağla",
|
||||
"Dev chat for the Riot/Web dev team": "Riot/Web Geliştirici takımı için Geliştirici sohbeti",
|
||||
"Dev chat for the Dendrite dev team": "Dendrite Geliştirici Takımı için Geliştirici sohbeti",
|
||||
"Co-ordination for Riot/Web translators": "Riot/Web çevirmenleri için koordinasyon",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Matrix'te varolan ağlara (Slack , IRC , Gitter vb.) bağlı ya da bağımsız bir çok oda var . Dizini kontrol edin!",
|
||||
"Failed to change password. Is your password correct?": "Şifreniz değiştirilemedi . Şifreniz doğru mu ?",
|
||||
"You have successfully set a password!": "Başarıyla bir şifre ayarladınız!",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "Şimdi oturumunuzu iptal ettikten sonra başka cihazda oturum açarak hesabınıza dönebilirsiniz.",
|
||||
"Continue": "Devam Et",
|
||||
"Please set a password!": "Lütfen bir şifre ayarlayın !",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "Bu oturumunuzu kapattıktan sonra hesabınıza dönmenizi ve diğer cihazlarda oturum açmanızı sağlar.",
|
||||
"You have successfully set a password and an email address!": "Başarıyla bir şifre ve e-posta adresi ayarladın !",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Unutmayın , fikrinizi değiştirirseniz her zaman bir şifre ve e-posta adresi ayarlayabilirsiniz."
|
||||
}
|
220
src/i18n/strings/uk.json
Normal file
220
src/i18n/strings/uk.json
Normal file
|
@ -0,0 +1,220 @@
|
|||
{
|
||||
"A new version of Riot is available.": "Доступне оновлення для Riot.",
|
||||
"All messages": "Усі повідомлення",
|
||||
"All messages (loud)": "Усі повідомлення (гучно)",
|
||||
"All Rooms": "Усі кімнати",
|
||||
"All notifications are currently disabled for all targets.": "Сповіщення для усіх цілей на даний момент вимкнені.",
|
||||
"An error occurred whilst saving your email notification preferences.": "Під час збереження налаштувань сповіщень е-поштою трапилася помилка.",
|
||||
"Cancel": "Скасувати",
|
||||
"Cancel Sending": "Скасувати надсилання",
|
||||
"Can't update user notification settings": "Неможливо оновити налаштування користувацьких сповіщень",
|
||||
"Changelog": "Журнал змін",
|
||||
"Close": "Закрити",
|
||||
"Collapse panel": "Згорнути панель",
|
||||
"Collecting app version information": "Збір інформації про версію застосунка",
|
||||
"Collecting logs": "Збір журналів",
|
||||
"Couldn't find a matching Matrix room": "Неможливо знайти відповідну кімнату",
|
||||
"Custom Server Options": "Нетипові параметри сервера",
|
||||
"customServer_text": "Ви можете скористатись нетиповими параметрами сервера щоб увійти в інші сервери Matrix, зазначивши посилання на окремий Домашній сервер<br/>Це дозволяє вам використовувати Riot із вже існуючою обліковкою Matrix на іншому Домашньому сервері.<br/><br/>Ви також можете зазначити нетиповий сервер ідентифікації, але ви не матимете змоги ані запрошувати користувачів за е-поштою, ані бути запрошеними за е-поштою самі.",
|
||||
"delete the alias.": "видалити псевдонім.",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s через %(browserName)s на %(osName)s",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">Safari</a> та <a href=\"http://opera.com\">Opera</a> також підтримуються.",
|
||||
"Add an email address above to configure email notifications": "Додайте вище адресу е-пошти щоб налаштувати сповіщення е-поштою",
|
||||
"Advanced notification settings": "Додаткові налаштування сповіщень",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "Видалити псевдонім %(alias)s та прибрати з каталогу %(name)s?",
|
||||
"Describe your problem here.": "Опишіть вашу проблему тут.",
|
||||
"Direct Chat": "Прямий чат",
|
||||
"Directory": "Каталог",
|
||||
"Dismiss": "Відхилити",
|
||||
"Download this file": "Звантажити цей файл",
|
||||
"Enable audible notifications in web client": "Увімкнути звукові сповіщення у мережевому застосунку",
|
||||
"Enable desktop notifications": "Увімкнути сповіщення на стільниці",
|
||||
"Enable email notifications": "Увімкнути сповіщення е-поштою",
|
||||
"Enable notifications for this account": "Увімкнути сповіщення для цієї обліковки",
|
||||
"Enable them now": "Увімкнути їх зараз",
|
||||
"Enter keywords separated by a comma:": "Введіть ключові слова через кому:",
|
||||
"Error": "Помилка",
|
||||
"Error saving email notification preferences": "Помилка при збереженні параметрів сповіщень е-поштою",
|
||||
"#example": "#зразок",
|
||||
"Expand panel": "Розгорнути панель",
|
||||
"Failed to add tag %(tagName)s to room": "Не вдалось додати до кімнати мітку %(tagName)s",
|
||||
"Failed to change settings": "Не вдалось змінити налаштування",
|
||||
"Failed to forget room %(errCode)s": "Не вдалось видалити кімнату %(errCode)s",
|
||||
"Failed to update keywords": "Не вдалось оновити ключові слова",
|
||||
"Failed to get protocol list from Home Server": "Не вдалось отримати перелік протоколів з Домашнього серверу",
|
||||
"Failed to get public room list": "Не вдалось отримати перелік прилюдних кімнат",
|
||||
"Failed to remove tag %(tagName)s from room": "Не вдалося прибрати з кімнати мітку %(tagName)s",
|
||||
"Failed to send report: ": "Не вдалося надіслати звіт: ",
|
||||
"Failed to set direct chat tag": "Не вдалося встановити мітку прямого чату",
|
||||
"Favourite": "Вибране",
|
||||
"Fetching third party location failed": "Не вдалось отримати стороннє місцеперебування",
|
||||
"Files": "Файли",
|
||||
"Filter room names": "Відфільтрувати назви кімнат",
|
||||
"Forget": "Забути",
|
||||
"Forward Message": "Переслати повідомлення",
|
||||
"Guests can join": "Гості можуть приєднуватися",
|
||||
"Hide panel": "Сховати панель",
|
||||
"(HTTP status %(httpStatus)s)": "(статус HTTP %(httpStatus)s)",
|
||||
"I understand the risks and wish to continue": "Я ознайомлений з ризиками і хочу продовжити",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "З метою діагностики проблем журнали з цього застосунку будуть надіслані разом зі звітом про вади. Якщо ви бажаєте надіслати лише вищенаведений текст, відозначте, будь ласка:",
|
||||
"Invite to this room": "Запросити до цієї кімнати",
|
||||
"Keywords": "Ключові слова",
|
||||
"Leave": "Вийти",
|
||||
"Login": "Зайти",
|
||||
"Loading bug report module": "Завантаження модуля звітів про вади",
|
||||
"Low Priority": "Неважливі",
|
||||
"Members": "Члени",
|
||||
"Mentions only": "Тільки згадки",
|
||||
"Messages containing <span>keywords</span>": "Повідомлення, що містять <span>ключові слова</span>",
|
||||
"Messages containing my user name": "Повідомлення, що містять моє ім'я користувача",
|
||||
"Messages in group chats": "Повідомлення у групових чатах",
|
||||
"Messages sent by bot": "Повідомлення, надіслані ботом",
|
||||
"more": "докладніше",
|
||||
"Mute": "Стишити",
|
||||
"Notification targets": "Цілі сповіщень",
|
||||
"Notifications": "Сповіщення",
|
||||
"Notify for all other messages/rooms": "Сповіщати щодо всіх повідомлень/кімнат",
|
||||
"Notify me for anything else": "Сповіщати мене про будь-що інше",
|
||||
"Off": "Вимкнено",
|
||||
"On": "Увімкнено",
|
||||
"Operation failed": "Не вдалося виконати дію",
|
||||
"Permalink": "Постійне посилання",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "Опишіть, будь ласка, ваду. Що ви зробили? На що ви очікували? Що трапилось натомість?",
|
||||
"Please describe the bug and/or send logs.": "Опишіть, будь ласка, ваду та/або надішліть журнали.",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "Для більшої зручності у використанні встановіть, будь ласка, <a href=\"https://www.google.com/chrome\">Chrome</a> або <a href=\"https://getfirefox.com\">Firefox</a>.",
|
||||
"powered by Matrix": "працює на Matrix",
|
||||
"Quote": "Цитувати",
|
||||
"Reject": "Відмовитись",
|
||||
"Remove %(name)s from the directory?": "Прибрати %(name)s з каталогу?",
|
||||
"Remove": "Прибрати",
|
||||
"remove %(name)s from the directory.": "прибрати %(name)s з каталогу.",
|
||||
"Remove from Directory": "Прибрати з каталогу",
|
||||
"Report a bug": "Звітувати про вади",
|
||||
"Resend": "Перенадіслати",
|
||||
"Riot Desktop on %(platformName)s": "Riot Desktop на %(platformName)s",
|
||||
"Call invitation": "Запрошення до виклику",
|
||||
"Riot does not know how to join a room on this network": "Riot не знає як приєднатись до кімнати у цій мережі",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot не працює через оглядач на мобільних пристроях. Встановити застосунок?",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot використовує багато новітніх функцій, деякі з яких не доступні або є експериментальними у вашому оглядачі.",
|
||||
"Room not found": "Кімнату не знайдено",
|
||||
"Search": "Пошук",
|
||||
"Search…": "Пошук…",
|
||||
"Search for a room": "Пошук кімнати",
|
||||
"Send": "Надіслати",
|
||||
"Send logs": "Надіслати журнали",
|
||||
"Source URL": "Джерельне посилання",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "Вибачте, ваш оглядач <b>не</b> спроможний запустити Riot.",
|
||||
"The Home Server may be too old to support third party networks": "Домашній сервер може бути застарим для підтримки сторонніх мереж",
|
||||
"There are advanced notifications which are not shown here": "Є додаткові сповіщення, що не показуються тут",
|
||||
"The server may be unavailable or overloaded": "Сервер може бути недосяжним або перевантаженим",
|
||||
"This Room": "Ця кімната",
|
||||
"Unable to fetch notification target list": "Неможливо отримати перелік цілей сповіщення",
|
||||
"Unable to join network": "Неможливо приєднатись до мережі",
|
||||
"Unable to look up room ID from server": "Неможливо знайти ID кімнати на сервері",
|
||||
"Unknown device": "Невідомий пристрій",
|
||||
"unknown error code": "невідомий код помилки",
|
||||
"Unnamed room": "Неназвана кімната",
|
||||
"Update": "Оновити",
|
||||
"Uploaded on %(date)s by %(user)s": "Завантажено %(date)s користувачем %(user)s",
|
||||
"Uploading report": "Завантаження звіту",
|
||||
"View Decrypted Source": "Переглянути розшифроване джерело",
|
||||
"View Source": "Переглянути джерело",
|
||||
"What's New": "Що нового",
|
||||
"What's new?": "Що нового?",
|
||||
"Waiting for response from server": "Очікується відповідь від сервера",
|
||||
"When I'm invited to a room": "Коли мене запрошено до кімнати",
|
||||
"World readable": "Відкрито для світу",
|
||||
"You cannot delete this image. (%(code)s)": "Ви не можете видалити це зображення. (%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "Ви не можете видалити це повідомлення. (%(code)s)",
|
||||
"You are not receiving desktop notifications": "Ви не отримуєте сповіщення на стільниці",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "Можливо, ви налаштували їх не у Riot, а у іншому застосунку. Ви не можете регулювати їх у Riot, але вони все ще мають силу",
|
||||
"Sunday": "Неділя",
|
||||
"Monday": "Понеділок",
|
||||
"Tuesday": "Вівторок",
|
||||
"Wednesday": "Середа",
|
||||
"Thursday": "Четвер",
|
||||
"Friday": "П'ятниця",
|
||||
"Saturday": "Субота",
|
||||
"Today": "Сьогодні",
|
||||
"Yesterday": "Вчора",
|
||||
"OK": "Гаразд",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "Ви маєте використовувати HTTPS щоб зробити виклик із поширенням екрану.",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "У вашому оглядачі вигляд застосунку може бути повністю іншим, а деякі або навіть усі функції можуть не працювати. Якщо ви наполягаєте, то можете продовжити користування, але ви маєте впоратись з усіма можливими проблемами власноруч!",
|
||||
"Welcome to Riot.im": "Ласкаво просимо до Riot.im",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "Децентралізований, шифрований чат та засіб для співробітництва, що працює на [matrix]",
|
||||
"Search the room directory": "Шукати у каталозі кімнат",
|
||||
"Chat with Riot Bot": "Розмовляти з Riot-ботом",
|
||||
"Get started with some tips from Riot Bot!": "Розпочніть за допомогою декількох підказок від Riot-боту!",
|
||||
"General discussion about Matrix and Riot": "Загальне обговорення Matrix та Riot",
|
||||
"Discussion of all things Matrix!": "Обговорення усіх деталей про Matrix!",
|
||||
"Riot/Web & Desktop chat": "Обговорення Riot для оглядачів та стільниці",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Обговорення Riot/iOS та matrix-ios-sdk",
|
||||
"Riot/Android & matrix-android-sdk chat": "Обговорення Riot/Android та matrix-android-sdk",
|
||||
"Matrix technical discussions": "Технічні обговорення Matrix",
|
||||
"Community-run support for Synapse": "Спільнота підтримки Synapse",
|
||||
"Admin support for Dendrite": "Адміністрування Dendrite",
|
||||
"Announcements about Synapse releases": "Оголошення випусків Synapse",
|
||||
"Support for those using and running matrix-appservice-irc": "Підтримка користувачів matrix-appservice-irc",
|
||||
"Building services on Matrix": "Створення служб на основі Matrix",
|
||||
"Support for those using the Matrix spec": "Підтримка користувачів специфікацій Matrix",
|
||||
"Design and implementation of E2E in Matrix": "Планування та впровадження E2E шифрування у Matrix",
|
||||
"Implementing VR services with Matrix": "Впровадження служб віртуальної реальності в рамках Matrix",
|
||||
"Implementing VoIP services with Matrix": "Впровадження служб VoIP через Matrix",
|
||||
"Discussion of the Identity Service API": "Обговорення Identity Service API",
|
||||
"Support for those using, running and writing other bridges": "Підтримка користувачів, адміністраторів та розробників інших Matrix-мостів",
|
||||
"Contributing code to Matrix and Riot": "Тим, хто хоче долучитись до розробки Matrix та Riot",
|
||||
"Dev chat for the Riot/Web dev team": "Чат команди розробників Riot/Web",
|
||||
"Dev chat for the Dendrite dev team": "Чат команди розробників Dendrite",
|
||||
"Co-ordination for Riot/Web translators": "Координація для перекладачів Riot/Web",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "У мережі Matrix вже існує багато кімнат, що з'єднані як з існуючими мережами (Slack, IRC, Gitter тощо), так і незалежними. Подивіться у каталозі кімнат!",
|
||||
"Failed to change password. Is your password correct?": "Не вдалось змінити пароль. Ви впевнені, що пароль введено правильно?",
|
||||
"You have successfully set a password!": "Пароль успішно встановлено!",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "Тепер ви можете повернутися до своєї обліковки після виходу з неї, та зайти з інших пристроїв.",
|
||||
"Continue": "Продовжити",
|
||||
"Please set a password!": "Встановіть пароль, будь ласка!",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "Це дозволить вам повернутися до своєї обліковки після виходу з неї, та заходити з інших пристроїв.",
|
||||
"You have successfully set a password and an email address!": "Пароль та адресу е-пошти успішно встановлено!",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "Пам'ятайте, що ви завжди можете встановити адресу е-пошти у налаштуваннях, якщо передумаєте.",
|
||||
"Messages in one-to-one chats": "Повідомлення у чатах \"сам на сам\"",
|
||||
"No rooms to show": "Кімнати відсутні",
|
||||
"Noisy": "Шумний",
|
||||
"Unavailable": "Нема в наявності",
|
||||
"Unhide Preview": "Відкрити попередній перегляд",
|
||||
"Failed to set Direct Message status of room": "Не вдалось встановити статус прямого спілкування в кімнаті",
|
||||
"Messages containing my display name": "Повідомлення, вміщає моє ім'я",
|
||||
"Running Matrix services": "Запуск служби Matrix",
|
||||
"Set Password": "Задати пароль",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "Сповіщення з наступних ключових слів дотримуються правил, що не можуть бути показані тут:",
|
||||
"To return to your account in future you need to <u>set a password</u>": "Щоб мати змогу використовувати вашу обліковку у майбутньому, <u>зазначте пароль</u>",
|
||||
"Warning": "Попередження",
|
||||
"Checking for an update...": "Перевірка оновлень…",
|
||||
"Error encountered (%(errorDetail)s).": "Трапилась помилка (%(errorDetail)s).",
|
||||
"No update available.": "Оновлення відсутні.",
|
||||
"Downloading update...": "Звантаженя оновлення…",
|
||||
"Couldn't load home page": "Не вдалось завантажити домівку",
|
||||
"Back": "Назад",
|
||||
"Bug report sent": "Звіт про помилки відправлений",
|
||||
"Developer Tools": "Інструменти розробника",
|
||||
"Failed to send custom event.": "Не вдалося відправити приватний захід.",
|
||||
"Filter results": "Фільтр результатів",
|
||||
"Send Custom Event": "Відправити приватний захід",
|
||||
"Send Custom State Event": "Відправити статус приватного заходу",
|
||||
"Explore Room State": "Перегляд статуса кімнати",
|
||||
"You must specify an event type!": "Необхідно вказати тип захода!",
|
||||
"Thank you!": "Дякую!",
|
||||
"Event sent!": "Захід відправлено!",
|
||||
"Event Type": "Тип західу",
|
||||
"Event Content": "Зміст заходу",
|
||||
"State Key": "Ключ стану",
|
||||
"Show message in desktop notification": "Показати повідомлення в сповіщення на робочому столі",
|
||||
"Edit": "Редактувати",
|
||||
"Unpin Message": "Відкріпити повідомлення",
|
||||
"Pin Message": "Прикріпити повідомлення",
|
||||
"Register": "Зарегіструватись",
|
||||
"Rooms": "Кімнати",
|
||||
"Invite to this community": "Запросити в це суспільство",
|
||||
"Add rooms to this community": "Добавити кімнати в це суспільство",
|
||||
"Toolbox": "Панель інструментів",
|
||||
"Send Account Data": "Відправити данні аккаунта",
|
||||
"Explore Account Data": "Продивитись данні аккаунта"
|
||||
}
|
207
src/i18n/strings/zh_Hans.json
Normal file
207
src/i18n/strings/zh_Hans.json
Normal file
|
@ -0,0 +1,207 @@
|
|||
{
|
||||
"Close": "关闭",
|
||||
"Mute": "静音",
|
||||
"Notifications": "通知",
|
||||
"OK": "确定",
|
||||
"Operation failed": "操作失败",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "应用 %(appName)s 通过 %(osName)s 上的 %(browserName)s 浏览器运行",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">Safari</a> 和 <a href=\"http://opera.com\">Opera</a> 均可运行。",
|
||||
"A new version of Riot is available.": "Riot 有更新可用。",
|
||||
"Add an email address above to configure email notifications": "请在上方输入电子邮件地址以接收邮件通知",
|
||||
"Advanced notification settings": "通知高级设置",
|
||||
"All messages": "全部消息",
|
||||
"All messages (loud)": "全部消息(高亮)",
|
||||
"All Rooms": "全部聊天室",
|
||||
"All notifications are currently disabled for all targets.": "当前所有目标的通知均已禁用。",
|
||||
"An error occurred whilst saving your email notification preferences.": "保存邮件通知首选项设定时出现错误。",
|
||||
"Call invitation": "语音邀请",
|
||||
"Cancel": "取消",
|
||||
"Cancel Sending": "取消发送",
|
||||
"Can't update user notification settings": "不能更新用户通知设置",
|
||||
"Changelog": "变更日志",
|
||||
"Collecting app version information": "正在收集应用版本信息",
|
||||
"Collecting logs": "正在收集日志",
|
||||
"Couldn't find a matching Matrix room": "未找到符合的 Matrix 聊天室",
|
||||
"Custom Server Options": "自定义服务器选项",
|
||||
"customServer_text": "你可以通过指定自定义服务器选项中的其他主服务器的 URL 来登录其他 Matrix 服务器。<br/>该选项允许你在 Riot 上使用其他主服务器上的帐号。<br/><br/>你也可以自定义身份验证服务器,但你将不能通过邮件邀请其他用户,同样的,你也不能通过邮件被其他用户邀请。",
|
||||
"delete the alias.": "删除别名。",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "确定要删除聊天室别名 %(alias)s 并将 %(name)s 从列表中删除吗?",
|
||||
"Describe your problem here.": "在这里描述你的问题。",
|
||||
"Directory": "聊天室目录",
|
||||
"Dismiss": "设为已读",
|
||||
"Download this file": "下载该文件",
|
||||
"Collapse panel": "折叠面板",
|
||||
"Direct Chat": "私聊",
|
||||
"Enable audible notifications in web client": "在网页客户端启用音频通知",
|
||||
"Enable desktop notifications": "启用桌面通知",
|
||||
"Enable email notifications": "启用电子邮件通知",
|
||||
"Enable notifications for this account": "为本账号启用通知",
|
||||
"Enable them now": "现在启用",
|
||||
"Enter keywords separated by a comma:": "输入以逗号间隔的关键字:",
|
||||
"Error": "错误",
|
||||
"Error saving email notification preferences": "保存电子邮件通知的首选项时出错",
|
||||
"#example": "#例子",
|
||||
"Expand panel": "展开面板",
|
||||
"Failed to add tag %(tagName)s to room": "无法为聊天室新增标签 %(tagName)s",
|
||||
"Failed to change settings": "变更设置失败",
|
||||
"Failed to forget room %(errCode)s": "无法忘记聊天室 %(errCode)s",
|
||||
"Failed to update keywords": "无法更新关键字",
|
||||
"Failed to get protocol list from Home Server": "无法从主服务器取得协议列表",
|
||||
"Failed to get public room list": "无法取得公开的聊天室列表",
|
||||
"Failed to remove tag %(tagName)s from room": "移除聊天室标签 %(tagName)s 失败",
|
||||
"Failed to send report: ": "无法发送报告: ",
|
||||
"Failed to set direct chat tag": "无法设定私聊标签",
|
||||
"Failed to set Direct Message status of room": "无法设置聊天室的私聊状态",
|
||||
"Favourite": "收藏",
|
||||
"Fetching third party location failed": "获取第三方位置失败",
|
||||
"Files": "文件",
|
||||
"Filter room names": "过滤聊天室名称",
|
||||
"Forget": "忘记",
|
||||
"Forward Message": "转发消息",
|
||||
"Guests can join": "访客可以加入",
|
||||
"Hide panel": "隐藏面板",
|
||||
"(HTTP status %(httpStatus)s)": "(HTTP 状态 %(httpStatus)s)",
|
||||
"I understand the risks and wish to continue": "我了解这些风险并愿意继续",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "为了诊断问题,来自客户端的活动记录会随着这个程序 bug 报告一并发出。如果你只想送出以上文字,请取消勾选:",
|
||||
"Invite to this room": "邀请加入此聊天室",
|
||||
"Keywords": "关键字",
|
||||
"Leave": "离开",
|
||||
"Login": "登录",
|
||||
"Loading bug report module": "正在载入 bug 报告模块",
|
||||
"Low Priority": "低优先级",
|
||||
"Members": "成员",
|
||||
"Mentions only": "只限提及",
|
||||
"Messages containing my display name": "消息中含有我的显示名称",
|
||||
"Messages containing <span>keywords</span>": "消息包含 <span>关键字</span>",
|
||||
"Messages containing my user name": "消息中包含我的用户名",
|
||||
"Messages in group chats": "群组聊天中的消息",
|
||||
"Messages in one-to-one chats": "一对一聊天种的消息",
|
||||
"Messages sent by bot": "由机器人发出的消息",
|
||||
"more": "更多",
|
||||
"No rooms to show": "无聊天室",
|
||||
"Noisy": "吵闹",
|
||||
"Notification targets": "通知目标",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "以下关键字依照规则将不会在此显示:",
|
||||
"Notify for all other messages/rooms": "为所有其他消息/聊天室显示通知",
|
||||
"Notify me for anything else": "所有消息都通知我",
|
||||
"Off": "关闭",
|
||||
"On": "打开",
|
||||
"Permalink": "永久链接",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "请描述这个 bug,您做了什么动作?预期会发生的状况?以及实际发生的?",
|
||||
"Please describe the bug and/or send logs.": "请描述这个 bug 和/或发送日志。",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "请安装 <a href=\"https://www.google.com/chrome\">Chrome</a> 或 <a href=\"https://getfirefox.com\">Firefox</a> 来得到最佳体验。",
|
||||
"powered by Matrix": "由 Matrix 提供",
|
||||
"Quote": "引述",
|
||||
"Reject": "拒绝",
|
||||
"Remove %(name)s from the directory?": "从目录中移除 %(name)s 吗?",
|
||||
"Remove": "移除",
|
||||
"remove %(name)s from the directory.": "从目录中移除 %(name)s。",
|
||||
"Remove from Directory": "从目录中移除",
|
||||
"Report a bug": "报告一个 bug",
|
||||
"Resend": "重新发送",
|
||||
"Riot Desktop on %(platformName)s": "Riot 桌面版在 %(platformName)s",
|
||||
"Riot does not know how to join a room on this network": "Riot 不知道如何在此网络中加入聊天室",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot 不支持浏览器网页,要安装 app 吗?",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot 使用了许多先进的浏览器功能,有些在你目前所用的浏览器上无法使用或仅为实验性的功能。",
|
||||
"Room not found": "找不到聊天室",
|
||||
"Search": "搜索",
|
||||
"Search…": "搜索…",
|
||||
"Search for a room": "搜索聊天室",
|
||||
"Send": "发送",
|
||||
"Send logs": "发送日志",
|
||||
"Source URL": "源网址",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "抱歉,您的浏览器 <b>无法</b> 运行 Riot.",
|
||||
"The Home Server may be too old to support third party networks": "主服务器可能太老旧无法支持第三方网络",
|
||||
"There are advanced notifications which are not shown here": "更多的通知并没有在此显示出来",
|
||||
"The server may be unavailable or overloaded": "服务器可能无法使用或超过负载",
|
||||
"This Room": "此聊天室",
|
||||
"Unable to fetch notification target list": "无法获取通知目标列表",
|
||||
"Unable to join network": "无法加入网络",
|
||||
"Unable to look up room ID from server": "无法在服务器上找到聊天室 ID",
|
||||
"Unavailable": "无法获得",
|
||||
"Unhide Preview": "取消隐藏预览",
|
||||
"Unknown device": "未知设备",
|
||||
"unknown error code": "未知错误代码",
|
||||
"Unnamed room": "未命名的聊天室",
|
||||
"Update": "更新",
|
||||
"Uploaded on %(date)s by %(user)s": "由 %(user)s 在 %(date)s 上传",
|
||||
"Uploading report": "上传报告",
|
||||
"View Decrypted Source": "查看解密的来源",
|
||||
"View Source": "查看源码",
|
||||
"What's New": "新鲜事",
|
||||
"What's new?": "有什么新闻?",
|
||||
"Waiting for response from server": "正在等待来自服务器的回应",
|
||||
"When I'm invited to a room": "当我被邀请进入聊天室",
|
||||
"World readable": "公开可读",
|
||||
"You cannot delete this image. (%(code)s)": "您不能删除这个图片。(%(code)s)",
|
||||
"You cannot delete this message. (%(code)s)": "您不能删除此消息。(%(code)s)",
|
||||
"You are not receiving desktop notifications": "您将不会收到桌面通知",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "您也许不曾在其他 Riot 之外的客户端设置它们。在 Riot 下你无法调整他们但仍然可用",
|
||||
"Sunday": "星期日",
|
||||
"Monday": "星期一",
|
||||
"Tuesday": "星期二",
|
||||
"Wednesday": "星期三",
|
||||
"Thursday": "星期四",
|
||||
"Friday": "星期五",
|
||||
"Saturday": "星期六",
|
||||
"Today": "今天",
|
||||
"Yesterday": "昨天",
|
||||
"Warning": "警告",
|
||||
"Checking for an update...": "正在检查更新…",
|
||||
"Error encountered (%(errorDetail)s).": "遇到错误 (%(errorDetail)s)。",
|
||||
"No update available.": "没有可用更新。",
|
||||
"Downloading update...": "正在下载更新…",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "你需要使用 HTTPS 来放置屏幕分享通话。",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "您目前的浏览器,应用程序的外观和感觉完全不正确,有些或全部功能可能无法使用。如果您仍想继续尝试,可以继续,但请自行负担其后果!",
|
||||
"Welcome to Riot.im": "欢迎来到 Riot.im",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "去中心化,加密聊天 & 由 [matrix] 提供",
|
||||
"Search the room directory": "搜索聊天室目录",
|
||||
"Chat with Riot Bot": "与 Riot 机器人聊天",
|
||||
"Get started with some tips from Riot Bot!": "使用从 Riot 机器人学来的小窍门开始!",
|
||||
"General discussion about Matrix and Riot": "关于 Matrix 与 Riot 的一般讨论",
|
||||
"Discussion of all things Matrix!": "讨论所有关于 Matrix 的事情!",
|
||||
"Riot/Web & Desktop chat": "Riot/Web & 桌面聊天",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk 聊天",
|
||||
"Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk 聊天",
|
||||
"Matrix technical discussions": "Matrix 技术讨论",
|
||||
"Running Matrix services": "正在运行 Matrix 服务",
|
||||
"Community-run support for Synapse": "运行 Synapse 的社区支持",
|
||||
"Admin support for Dendrite": "Dendrite 的管理员支持",
|
||||
"Announcements about Synapse releases": "Synapse 的发布公告",
|
||||
"Support for those using and running matrix-appservice-irc": "使用与执行 matrix-appservice-irc 的支持",
|
||||
"Building services on Matrix": "正在 Matrix 上建立服务",
|
||||
"Support for those using the Matrix spec": "使用 Matrix 规范的支持",
|
||||
"Design and implementation of E2E in Matrix": "在 Matrix 中 E2E 的设计与实现",
|
||||
"Implementing VR services with Matrix": "使用 Matrix 实现虚拟现实服务",
|
||||
"Implementing VoIP services with Matrix": "使用 Matrix 实现 VoIP 服务",
|
||||
"Discussion of the Identity Service API": "识别服务 API 的讨论",
|
||||
"Support for those using, running and writing other bridges": "那些使用、运行并撰写其他桥接应用的支持",
|
||||
"Contributing code to Matrix and Riot": "贡献程序代码给 Matrix 与 Riot",
|
||||
"Dev chat for the Riot/Web dev team": "Riot/Web 开发团队的开发聊天",
|
||||
"Dev chat for the Dendrite dev team": "Dendrite 的开发团队的开发聊天",
|
||||
"Co-ordination for Riot/Web translators": "Riot/Web 翻译者的协调区",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Matrix 中已有许多聊天室,连接到已有的网络(Slack、IRC 与 Gitter 等)或独立的网络,请查看目录!",
|
||||
"Failed to change password. Is your password correct?": "修改密码失败。确认原密码输入正确吗?",
|
||||
"You have successfully set a password!": "您已成功设置密码!",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "您可以在注销后回到您的账号,并在其他设备上登录。",
|
||||
"Continue": "继续",
|
||||
"Please set a password!": "请设置密码!",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "这让您可以在注销后回到您的账号,并在其他设备上登录。",
|
||||
"You have successfully set a password and an email address!": "您已经成功设置了密码和电子邮件地址!",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "请记住,如果您改变想法,您永远可以在用户设置中设置电子邮件。",
|
||||
"To return to your account in future you need to <u>set a password</u>": "要在未来回到您的账号,您需要 <u>设置密码</u>",
|
||||
"Set Password": "设置密码",
|
||||
"Couldn't load home page": "不能加载首页",
|
||||
"Bug report sent": "发送DEBUG报告",
|
||||
"Thank you!": "谢谢!",
|
||||
"Developer Tools": "开发者工具",
|
||||
"Failed to send custom event.": "发送自定义事件失败。",
|
||||
"Filter results": "过滤结果",
|
||||
"Send Custom Event": "发送自定义事件",
|
||||
"Send Custom State Event": "发送自定义状态事件",
|
||||
"You must specify an event type!": "你必须制定一个事件类型!",
|
||||
"Event sent!": "事件已发出!",
|
||||
"Event Type": "事件类型",
|
||||
"Event Content": "事件内容",
|
||||
"State Key": "状态密钥"
|
||||
}
|
221
src/i18n/strings/zh_Hant.json
Normal file
221
src/i18n/strings/zh_Hant.json
Normal file
|
@ -0,0 +1,221 @@
|
|||
{
|
||||
"Direct Chat": "私人聊天",
|
||||
"Error": "錯誤",
|
||||
"Failed to forget room %(errCode)s": "無法忘記聊天室 %(errCode)s",
|
||||
"Favourite": "我的最愛",
|
||||
"Search": "搜尋",
|
||||
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s 透過 %(browserName)s 在 %(osName)s",
|
||||
"<a href=\"http://apple.com/safari\">Safari</a> and <a href=\"http://opera.com\">Opera</a> work too.": "<a href=\"http://apple.com/safari\">Safari</a> 與 <a href=\"http://opera.com\">Opera</a> 也能使用。",
|
||||
"Advanced notification settings": "進階通知設定",
|
||||
"All messages": "所有訊息",
|
||||
"All messages (loud)": "所有訊息(吵鬧)",
|
||||
"All Rooms": "所有的聊天室",
|
||||
"Call invitation": "通話邀請",
|
||||
"Cancel": "取消",
|
||||
"Cancel Sending": "取消傳送",
|
||||
"Can't update user notification settings": "無法更新使用者的通知設定",
|
||||
"Changelog": "變更記錄",
|
||||
"Close": "關閉",
|
||||
"Collapse panel": "摺疊面板",
|
||||
"Collecting logs": "收集記錄",
|
||||
"Couldn't find a matching Matrix room": "不能找到符合 Matrix 的聊天室",
|
||||
"Custom Server Options": "自訂伺服器選項",
|
||||
"delete the alias.": "刪除別名。",
|
||||
"Describe your problem here.": "在此描述你的問題。",
|
||||
"Directory": "目錄",
|
||||
"Dismiss": "無視",
|
||||
"Download this file": "下載這個檔案",
|
||||
"Enable desktop notifications": "啟用桌面通知",
|
||||
"Enable email notifications": "啟用電子郵件通知",
|
||||
"Enable notifications for this account": "本帳號啟用通知",
|
||||
"Enable them now": "現在啟用它們",
|
||||
"#example": "#範例",
|
||||
"Expand panel": "展開面板",
|
||||
"Failed to change settings": "變更設定失敗",
|
||||
"Failed to update keywords": "無法更新關鍵字",
|
||||
"Members": "成員",
|
||||
"Mentions only": "僅提及",
|
||||
"Messages containing my display name": "訊息中有包含我的顯示名稱",
|
||||
"Messages containing <span>keywords</span>": "訊息包含 <span>關鍵字</span>",
|
||||
"Messages containing my user name": "訊息中有我的使用者名稱",
|
||||
"Messages in group chats": "在群組聊天中的訊息",
|
||||
"Messages in one-to-one chats": "在一對一聊天中的訊息",
|
||||
"Messages sent by bot": "由機器人送出的訊息",
|
||||
"more": "更多",
|
||||
"Mute": "靜音",
|
||||
"No rooms to show": "無聊天室可顯示",
|
||||
"Noisy": "吵鬧",
|
||||
"Notifications": "通知",
|
||||
"Off": "關閉",
|
||||
"On": "開啟",
|
||||
"Operation failed": "操作失敗",
|
||||
"powered by Matrix": "由 Matrix 架設",
|
||||
"Quote": "引述",
|
||||
"Remove": "移除",
|
||||
"Resend": "重新傳送",
|
||||
"Room not found": "找不到聊天室",
|
||||
"Search…": "搜尋…",
|
||||
"Search for a room": "搜尋聊天室",
|
||||
"Send": "傳送",
|
||||
"Send logs": "傳送記錄",
|
||||
"Source URL": "來源網址",
|
||||
"This Room": "這個聊天室",
|
||||
"Unable to join network": "無法加入網路",
|
||||
"Unable to look up room ID from server": "無法從伺服器找到聊天室 ID",
|
||||
"Unavailable": "無法取得",
|
||||
"Unhide Preview": "取消隱藏預覽",
|
||||
"Unknown device": "未知裝置",
|
||||
"unknown error code": "未知的錯誤代碼",
|
||||
"Unnamed room": "無命名的聊天室",
|
||||
"Update": "更新",
|
||||
"Uploaded on %(date)s by %(user)s": "由 %(user)s 在 %(date)s 上傳",
|
||||
"Uploading report": "上傳報告",
|
||||
"View Decrypted Source": "檢視解密的來源",
|
||||
"View Source": "檢視來源",
|
||||
"What's New": "新鮮事",
|
||||
"What's new?": "有什麼新聞?",
|
||||
"Waiting for response from server": "正在等待來自伺服器的回應",
|
||||
"When I'm invited to a room": "當我被邀請加入聊天室",
|
||||
"You cannot delete this message. (%(code)s)": "你不能刪除這個訊息。(%(code)s)",
|
||||
"Sunday": "星期日",
|
||||
"Monday": "星期一",
|
||||
"Tuesday": "星期二",
|
||||
"Wednesday": "星期三",
|
||||
"Thursday": "星期四",
|
||||
"Friday": "星期五",
|
||||
"Saturday": "星期六",
|
||||
"Today": "今天",
|
||||
"Yesterday": "昨天",
|
||||
"OK": "確定",
|
||||
"You need to be using HTTPS to place a screen-sharing call.": "你需要使用 HTTPS 來放置螢幕分享的通話。",
|
||||
"A new version of Riot is available.": "Riot 釋出了新版本。",
|
||||
"Add an email address above to configure email notifications": "在上面新增電子郵件以設定電子郵件通知",
|
||||
"All notifications are currently disabled for all targets.": "目前所有的通知功能已停用。",
|
||||
"An error occurred whilst saving your email notification preferences.": "在儲存你的電子郵件通知偏好時發生錯誤。",
|
||||
"Collecting app version information": "收集應用程式版本資訊",
|
||||
"Delete the room alias %(alias)s and remove %(name)s from the directory?": "刪除聊天室別名 %(alias)s 並從目錄移除 %(name)s?",
|
||||
"Enable audible notifications in web client": "在網頁客戶端啟用音訊通知",
|
||||
"Enter keywords separated by a comma:": "輸入以逗號隔開的關鍵字:",
|
||||
"Error saving email notification preferences": "儲存電子郵件通知偏好設定時出錯",
|
||||
"Failed to add tag %(tagName)s to room": "無法為聊天室新增標籤 %(tagName)s",
|
||||
"Failed to get protocol list from Home Server": "無法從主機伺服器取得協定清單",
|
||||
"Failed to get public room list": "無法取得公開的聊天室清單",
|
||||
"Failed to remove tag %(tagName)s from room": "移除聊天室的標籤 %(tagName)s 失敗",
|
||||
"Failed to send report: ": "無法傳送報告: ",
|
||||
"Failed to set direct chat tag": "無法設定私人聊天標籤",
|
||||
"Failed to set Direct Message status of room": "無法設定聊天室的私人訊息狀態",
|
||||
"Fetching third party location failed": "抓取第三方位置失敗",
|
||||
"Files": "檔案",
|
||||
"Filter room names": "過濾聊天室名稱",
|
||||
"Forget": "忘記",
|
||||
"Forward Message": "轉寄訊息",
|
||||
"Guests can join": "訪客可以加入",
|
||||
"Hide panel": "隱藏面板",
|
||||
"I understand the risks and wish to continue": "我了解這些風險並願意繼續",
|
||||
"Invite to this room": "邀請加入這個聊天室",
|
||||
"Keywords": "關鍵字",
|
||||
"Leave": "離開",
|
||||
"Loading bug report module": "正在載入程式臭蟲報告模組",
|
||||
"Low Priority": "低優先度",
|
||||
"Notify for all other messages/rooms": "通知其他所有的訊息/聊天室",
|
||||
"Notify me for anything else": "所有消息都通知我",
|
||||
"Permalink": "永久連結",
|
||||
"Please install <a href=\"https://www.google.com/chrome\">Chrome</a> or <a href=\"https://getfirefox.com\">Firefox</a> for the best experience.": "諘安裝 <a href=\"https://www.google.com/chrome\">Chrome</a> 或 <a href=\"https://getfirefox.com\">Firefox</a> 來取得最佳體驗。",
|
||||
"Reject": "拒絕",
|
||||
"Remove %(name)s from the directory?": "自目錄中移除 %(name)s?",
|
||||
"remove %(name)s from the directory.": "自目錄中移除 %(name)s。",
|
||||
"Remove from Directory": "自目錄中移除",
|
||||
"Report a bug": "回報程式臭蟲",
|
||||
"Riot Desktop on %(platformName)s": "Riot 桌面版在 %(platformName)s",
|
||||
"Riot does not know how to join a room on this network": "Riot 不知道如何在此網路中加入聊天室",
|
||||
"Sorry, your browser is <b>not</b> able to run Riot.": "可惜,您的瀏覽器 <b>無法</b> 執行 Riot.",
|
||||
"The Home Server may be too old to support third party networks": "主機伺服器可能太老舊無法支援第三方網路",
|
||||
"The server may be unavailable or overloaded": "伺服器可能無法使用或是超過負載",
|
||||
"Unable to fetch notification target list": "無法抓取通知的目標清單",
|
||||
"customServer_text": "你可以使用自訂伺服器選項來登入其它的 Matrix 伺服器,只要在在主機伺服器網址上指定其網址資料。<br/>這可讓你透過已有的 Matrix 帳號在不同的主機伺服器上使用 Riot。<br/><br/>你也可以設定自定的識別伺服器但你將無法透過電子郵件來邀請用戶或是以自己的電子郵件來接受別人的邀請。",
|
||||
"In order to diagnose problems, logs from this client will be sent with this bug report. If you would prefer to only send the text above, please untick:": "為了診斷問題,來自客戶端的活動記錄會隨著這個程式臭蟲報告一起送出。如果你只想送出以上文字,請取消勾選:",
|
||||
"Notification targets": "通知目標",
|
||||
"Notifications on the following keywords follow rules which can’t be displayed here:": "以下關鍵字依照規則其通知將不會顯示在此:",
|
||||
"Please describe the bug. What did you do? What did you expect to happen? What actually happened?": "請描述這個程式臭蟲,您做了什麼動作?您預期會發生什麼狀況?以及實際發生的狀況為何?",
|
||||
"Please describe the bug and/or send logs.": "請描述這個程式臭蟲以及/或送出活動記錄。",
|
||||
"Riot is not supported on mobile web. Install the app?": "Riot 不支援行動版網頁,要安裝應用程式嗎?",
|
||||
"Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Roit 使用了許多先進的瀏覽器功能,有些在你目前所用的瀏覽器上無法使用或僅為實驗中的功能。",
|
||||
"There are advanced notifications which are not shown here": "有些進階的通知並未在此顯示",
|
||||
"World readable": "公開可讀",
|
||||
"You cannot delete this image. (%(code)s)": "你不能刪除這個圖片。(%(code)s)",
|
||||
"You are not receiving desktop notifications": "你將不會收到桌面通知",
|
||||
"You might have configured them in a client other than Riot. You cannot tune them in Riot but they still apply": "你也許不曾在其它 Riot 之外的客戶端設定它們。在 Riot 底下你無法調整它們但其仍然可用",
|
||||
"With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "您目前的瀏覽器,其應用程式的外觀和感覺可能完全不正確,有些或全部功能可以無法使用。如果您仍想要繼續嘗試,可以繼續,但必須自行承擔後果!",
|
||||
"(HTTP status %(httpStatus)s)": "(HTTP 狀態 %(httpStatus)s)",
|
||||
"Login": "登入",
|
||||
"Warning": "警告",
|
||||
"Checking for an update...": "正在檢查更新...",
|
||||
"Error encountered (%(errorDetail)s).": "遇到錯誤 (%(errorDetail)s)。",
|
||||
"No update available.": "沒有可用的更新。",
|
||||
"Downloading update...": "正在下䵧更新...",
|
||||
"Welcome to Riot.im": "歡迎來到 Riot.im",
|
||||
"Decentralised, encrypted chat & collaboration powered by [matrix]": "去中心化、加密聊天 & 由 [matrix] 提供協作",
|
||||
"Search the room directory": "搜尋聊天室目錄",
|
||||
"Chat with Riot Bot": "與 Riot 機器人聊天",
|
||||
"Get started with some tips from Riot Bot!": "使用從 Riot 機器人來的一些訣竅開始!",
|
||||
"General discussion about Matrix and Riot": "關於 Matrix 與 Riot 的一般討論",
|
||||
"Discussion of all things Matrix!": "討論所有關於 Matrix 的事情!",
|
||||
"Riot/Web & Desktop chat": "Riot/網路 & 桌面聊天",
|
||||
"Riot/iOS & matrix-ios-sdk chat": "Riot/iOS & matrix-ios-sdk 聊天",
|
||||
"Riot/Android & matrix-android-sdk chat": "Riot/Android & matrix-android-sdk 聊天",
|
||||
"Matrix technical discussions": "Matrix 技術討論",
|
||||
"Running Matrix services": "正在執行 Matrix 服務",
|
||||
"Community-run support for Synapse": "Synapse 的社群支援",
|
||||
"Admin support for Dendrite": "Dendrite 的管理員支援",
|
||||
"Announcements about Synapse releases": "關於 Synapse 釋出的公告",
|
||||
"Support for those using and running matrix-appservice-irc": "使用與執行 matrix-appservice-irc 的支援",
|
||||
"Building services on Matrix": "正在 Matrix 上建立服務",
|
||||
"Support for those using the Matrix spec": "那些使用 Matrix 規範的支援",
|
||||
"Design and implementation of E2E in Matrix": "在 Matrix 中 E2E 的設計與實作",
|
||||
"Implementing VR services with Matrix": "使用 Matrix 實作虛擬實境服務",
|
||||
"Implementing VoIP services with Matrix": "使用 Matrix 實作 VoIP 服務",
|
||||
"Discussion of the Identity Service API": "識別服務 API 的討論",
|
||||
"Support for those using, running and writing other bridges": "那些使用、執行與撰寫其他橋接的支援",
|
||||
"Contributing code to Matrix and Riot": "貢獻程式碼給 Matrix 與 Riot",
|
||||
"Dev chat for the Riot/Web dev team": "Riot/Web 開發團隊的開發聊天",
|
||||
"Dev chat for the Dendrite dev team": "Dendrite 開發團隊的開發聊天",
|
||||
"Co-ordination for Riot/Web translators": "Riot/Web 翻譯者的協調區",
|
||||
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Matrix 中已有許多聊天室,連結到已有的網路(Slack、IRC 與 Gitter 等等)或是獨立的網路。看看目錄!",
|
||||
"Failed to change password. Is your password correct?": "變更密碼失敗。您的密碼正確嗎?",
|
||||
"You have successfully set a password!": "您已經成功設定密碼!",
|
||||
"You can now return to your account after signing out, and sign in on other devices.": "您可以在登出後回到您的帳號,並在其他裝置上登入。",
|
||||
"Continue": "繼續",
|
||||
"Please set a password!": "請設定密碼!",
|
||||
"This will allow you to return to your account after signing out, and sign in on other devices.": "這讓您可以在登入後回到您帳號,並在其他裝置上登入。",
|
||||
"You have successfully set a password and an email address!": "您已經成功設定密碼與電子郵件地址!",
|
||||
"Remember, you can always set an email address in user settings if you change your mind.": "記住,如果您改變心意了,您永遠可以在使用者設定中設定電子郵件地址。",
|
||||
"To return to your account in future you need to <u>set a password</u>": "要在未來回到您的帳號,您需要 <u>設定密碼</u>",
|
||||
"Set Password": "設定密碼",
|
||||
"Couldn't load home page": "無法載入首頁",
|
||||
"Bug report sent": "已傳送臭蟲回報",
|
||||
"Thank you!": "感謝您!",
|
||||
"Back": "返回",
|
||||
"Developer Tools": "開發者工具",
|
||||
"Failed to send custom event.": "傳送自訂式件失敗。",
|
||||
"Send Custom Event": "傳送自訂事件",
|
||||
"Send Custom State Event": "傳送自訂狀態事件",
|
||||
"Explore Room State": "探索聊天室狀態",
|
||||
"Event sent!": "事件已傳送!",
|
||||
"Event Type": "事件類型",
|
||||
"Event Content": "事件內容",
|
||||
"State Key": "狀態金鑰",
|
||||
"Filter results": "過濾結果",
|
||||
"You must specify an event type!": "您必須指定事件類型!",
|
||||
"Show message in desktop notification": "在桌面通知中顯示訊息",
|
||||
"Pin Message": "釘選訊息",
|
||||
"Unpin Message": "取消釘選訊息",
|
||||
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "您可以使用自訂的伺服器選項,並指定不同的家伺服器 URL 來登入其他的 Matrix 伺服器。<br/>這讓您可以在不同的伺服器上以既有的 Matrix 帳號使用 Riot。<br/><br/>您也可以設定一個自訂的識別伺服器,但您可能無法透過電子郵件地址來邀請使用者,或是讓別人透過電子郵件邀請您。",
|
||||
"Edit": "編輯",
|
||||
"Register": "註冊",
|
||||
"Rooms": "聊天室",
|
||||
"Invite to this community": "邀請至此社群",
|
||||
"Add rooms to this community": "新增聊天室到此社群",
|
||||
"Toolbox": "工具箱",
|
||||
"Send Account Data": "傳送帳號資料",
|
||||
"Explore Account Data": "探索帳號資料"
|
||||
}
|
|
@ -16,6 +16,8 @@ limitations under the License.
|
|||
|
||||
'use strict';
|
||||
|
||||
import { _td } from 'matrix-react-sdk/lib/languageHandler';
|
||||
|
||||
var StandardActions = require('./StandardActions');
|
||||
var PushRuleVectorState = require('./PushRuleVectorState');
|
||||
|
||||
|
@ -63,10 +65,20 @@ class VectorPushRuleDefinition {
|
|||
*/
|
||||
module.exports = {
|
||||
// Messages containing user's display name
|
||||
// (skip contains_user_name which is too geeky)
|
||||
".m.rule.contains_display_name": new VectorPushRuleDefinition({
|
||||
kind: "override",
|
||||
description: "Messages containing my name",
|
||||
description: _td("Messages containing my display name"), // passed through _t() translation in src/components/views/settings/Notifications.js
|
||||
vectorStateToActions: { // The actions for each vector state, or null to disable the rule.
|
||||
on: StandardActions.ACTION_NOTIFY,
|
||||
loud: StandardActions.ACTION_HIGHLIGHT_DEFAULT_SOUND,
|
||||
off: StandardActions.ACTION_DISABLED
|
||||
}
|
||||
}),
|
||||
|
||||
// Messages containing user's username (localpart/MXID)
|
||||
".m.rule.contains_user_name": new VectorPushRuleDefinition({
|
||||
kind: "override",
|
||||
description: _td("Messages containing my user name"), // passed through _t() translation in src/components/views/settings/Notifications.js
|
||||
vectorStateToActions: { // The actions for each vector state, or null to disable the rule.
|
||||
on: StandardActions.ACTION_NOTIFY,
|
||||
loud: StandardActions.ACTION_HIGHLIGHT_DEFAULT_SOUND,
|
||||
|
@ -77,7 +89,7 @@ module.exports = {
|
|||
// Messages just sent to the user in a 1:1 room
|
||||
".m.rule.room_one_to_one": new VectorPushRuleDefinition({
|
||||
kind: "underride",
|
||||
description: "Messages in one-to-one chats",
|
||||
description: _td("Messages in one-to-one chats"), // passed through _t() translation in src/components/views/settings/Notifications.js
|
||||
vectorStateToActions: {
|
||||
on: StandardActions.ACTION_NOTIFY,
|
||||
loud: StandardActions.ACTION_NOTIFY_DEFAULT_SOUND,
|
||||
|
@ -90,7 +102,7 @@ module.exports = {
|
|||
// By opposition, all other room messages are from group chat rooms.
|
||||
".m.rule.message": new VectorPushRuleDefinition({
|
||||
kind: "underride",
|
||||
description: "Messages in group chats",
|
||||
description: _td("Messages in group chats"), // passed through _t() translation in src/components/views/settings/Notifications.js
|
||||
vectorStateToActions: {
|
||||
on: StandardActions.ACTION_NOTIFY,
|
||||
loud: StandardActions.ACTION_NOTIFY_DEFAULT_SOUND,
|
||||
|
@ -101,7 +113,7 @@ module.exports = {
|
|||
// Invitation for the user
|
||||
".m.rule.invite_for_me": new VectorPushRuleDefinition({
|
||||
kind: "underride",
|
||||
description: "When I'm invited to a room",
|
||||
description: _td("When I'm invited to a room"), // passed through _t() translation in src/components/views/settings/Notifications.js
|
||||
vectorStateToActions: {
|
||||
on: StandardActions.ACTION_NOTIFY,
|
||||
loud: StandardActions.ACTION_NOTIFY_DEFAULT_SOUND,
|
||||
|
@ -112,7 +124,7 @@ module.exports = {
|
|||
// Incoming call
|
||||
".m.rule.call": new VectorPushRuleDefinition({
|
||||
kind: "underride",
|
||||
description: "Call invitation",
|
||||
description: _td("Call invitation"), // passed through _t() translation in src/components/views/settings/Notifications.js
|
||||
vectorStateToActions: {
|
||||
on: StandardActions.ACTION_NOTIFY,
|
||||
loud: StandardActions.ACTION_NOTIFY_RING_SOUND,
|
||||
|
@ -123,7 +135,7 @@ module.exports = {
|
|||
// Notifications from bots
|
||||
".m.rule.suppress_notices": new VectorPushRuleDefinition({
|
||||
kind: "override",
|
||||
description: "Messages sent by bot",
|
||||
description: _td("Messages sent by bot"), // passed through _t() translation in src/components/views/settings/Notifications.js
|
||||
vectorStateToActions: {
|
||||
// .m.rule.suppress_notices is a "negative" rule, we have to invert its enabled value for vector UI
|
||||
on: StandardActions.ACTION_DISABLED,
|
||||
|
|
|
@ -1,5 +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.
|
||||
|
@ -22,26 +24,22 @@ html {
|
|||
}
|
||||
|
||||
body {
|
||||
/* Open Sans lacks combining diacritics, so these will fall through
|
||||
to the next font. Helevetica's diacritics however do not combine
|
||||
nicely with Open Sans (on OSX, at least) and result in a huge
|
||||
horizontal mess. Arial empirically gets it right, hence prioritising
|
||||
Arial here. */
|
||||
font-family: 'Open Sans', Arial, Helvetica, Sans-Serif;
|
||||
font-family: $font-family;
|
||||
font-size: 15px;
|
||||
color: #454545;
|
||||
background-color: $primary-bg-color;
|
||||
color: $primary-fg-color;
|
||||
border: 0px;
|
||||
margin: 0px;
|
||||
/* This should render the fonts the same accross browsers */
|
||||
-webkit-font-smoothing: subpixel-antialiased;
|
||||
}
|
||||
|
||||
div.error {
|
||||
color: red;
|
||||
div.error, div.warning {
|
||||
color: $warning-color;
|
||||
}
|
||||
|
||||
h2 {
|
||||
color: #454545;
|
||||
color: $primary-fg-color;
|
||||
font-weight: 400;
|
||||
font-size: 18px;
|
||||
margin-top: 16px;
|
||||
|
@ -51,22 +49,27 @@ h2 {
|
|||
a:hover,
|
||||
a:link,
|
||||
a:visited {
|
||||
color: #76cfa6;
|
||||
color: $accent-color;
|
||||
}
|
||||
|
||||
input[type=text], input[type=password], textarea {
|
||||
background-color: transparent;
|
||||
color: $primary-fg-color;
|
||||
}
|
||||
|
||||
input[type=text].error, input[type=password].error {
|
||||
border: 1px solid red;
|
||||
border: 1px solid $warning-color;
|
||||
}
|
||||
|
||||
input[type=text]:focus, textarea:focus {
|
||||
border: 1px solid #76CFA6;
|
||||
input[type=text]:focus, input[type=password]:focus, textarea:focus {
|
||||
border: 1px solid $accent-color;
|
||||
outline: none;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
/* Required by Firefox */
|
||||
textarea {
|
||||
font-family: 'Open Sans', Arial, Helvetica, Sans-Serif;
|
||||
font-family: $font-family;
|
||||
}
|
||||
|
||||
/* Prevent ugly dotted highlight around selected elements in Firefox */
|
||||
|
@ -77,10 +80,12 @@ textarea {
|
|||
/* applied to side-panels and messagepanel when in RoomSettings */
|
||||
.mx_fadable {
|
||||
opacity: 1;
|
||||
-webkit-transition: opacity 0.2s ease-in-out;
|
||||
-moz-transition: opacity 0.2s ease-in-out;
|
||||
-ms-transition: opacity 0.2s ease-in-out;
|
||||
-o-transition: opacity 0.2s ease-in-out;
|
||||
transition: opacity 0.2s ease-in-out;
|
||||
}
|
||||
|
||||
.mx_fadable.mx_fadable_faded {
|
||||
opacity: 0.3;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
/* XXX: critical hack to GeminiScrollbar to allow them to work in FF 42 and Chrome 48.
|
||||
|
@ -114,6 +119,23 @@ textarea {
|
|||
transition: height 120ms ease-out ! important;
|
||||
}
|
||||
|
||||
// These are magic constants which are excluded from tinting, to let themes
|
||||
// (which only have CSS, unlike skins) tell the app what their non-tinted
|
||||
// colourscheme is by inspecting the stylesheet DOM.
|
||||
//
|
||||
// They are not used for layout!!
|
||||
#mx_theme_accentColor {
|
||||
color: $accent-color;
|
||||
}
|
||||
|
||||
#mx_theme_secondaryAccentColor {
|
||||
color: $secondary-accent-color;
|
||||
}
|
||||
|
||||
#mx_theme_tertiaryAccentColor {
|
||||
color: $roomsublist-label-bg-color;
|
||||
}
|
||||
|
||||
.mx_Dialog_wrapper {
|
||||
position: fixed;
|
||||
z-index: 4000;
|
||||
|
@ -122,14 +144,8 @@ textarea {
|
|||
width: 100%;
|
||||
height: 100%;
|
||||
|
||||
display: -webkit-box;
|
||||
display: -moz-box;
|
||||
display: -ms-flexbox;
|
||||
display: -webkit-flex;
|
||||
display: flex;
|
||||
-webkit-align-items: center;
|
||||
align-items: center;
|
||||
-webkit-justify-content: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
|
@ -137,7 +153,7 @@ textarea {
|
|||
.mx_Dialog_wrapper.mx_Dialog_spinner .mx_Dialog {
|
||||
width: auto;
|
||||
border-radius: 8px;
|
||||
padding-left: 0px;
|
||||
padding: 0px;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
|
@ -148,13 +164,14 @@ textarea {
|
|||
}
|
||||
|
||||
.mx_Dialog {
|
||||
background-color: #fff;
|
||||
color: #747474;
|
||||
background-color: $primary-bg-color;
|
||||
color: $light-fg-color;
|
||||
z-index: 4010;
|
||||
font-weight: 300;
|
||||
font-size: 15px;
|
||||
position: relative;
|
||||
padding-left: 58px;
|
||||
padding-bottom: 36px;
|
||||
width: 60%;
|
||||
max-width: 704px;
|
||||
box-shadow: 0 1px 0 0 rgba(0, 0, 0, 0.2);
|
||||
|
@ -168,13 +185,13 @@ textarea {
|
|||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: #e9e9e9;
|
||||
background-color: $dialog-background-bg-color;
|
||||
opacity: 0.8;
|
||||
}
|
||||
|
||||
.mx_Dialog_lightbox .mx_Dialog_background {
|
||||
opacity: 0.85;
|
||||
background-color: #000;
|
||||
background-color: $lightbox-background-bg-color;
|
||||
}
|
||||
|
||||
.mx_Dialog_lightbox .mx_Dialog {
|
||||
|
@ -187,51 +204,57 @@ textarea {
|
|||
pointer-events: none;
|
||||
}
|
||||
|
||||
.mx_Dialog_cancelButton {
|
||||
position: absolute;
|
||||
right: 11px;
|
||||
top: 13px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.mx_Dialog_cancelButton object {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.mx_Dialog_content {
|
||||
margin: 24px 58px 68px 0;
|
||||
font-size: 14px;
|
||||
color: #4a4a4a;
|
||||
color: $primary-fg-color;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
.mx_Dialog_buttons {
|
||||
padding-bottom: 36px;
|
||||
}
|
||||
|
||||
.mx_Dialog button, .mx_Dialog input[type="submit"] {
|
||||
border: 0px;
|
||||
height: 36px;
|
||||
border-radius: 40px;
|
||||
border: solid 1px #76cfa6;
|
||||
font-weight: 600;
|
||||
font-size: 14px;
|
||||
font-family: 'Open Sans', Arial, Helvetica, Sans-Serif;
|
||||
@mixin mx_DialogButton;
|
||||
margin-left: 0px;
|
||||
margin-right: 8px;
|
||||
padding-left: 1.5em;
|
||||
padding-right: 1.5em;
|
||||
outline: none;
|
||||
cursor: pointer;
|
||||
color: #76cfa6;
|
||||
background-color: #fff;
|
||||
|
||||
/* align images in buttons (eg spinners) */
|
||||
vertical-align: middle;
|
||||
// flip colours for the secondary ones
|
||||
font-weight: 600;
|
||||
border: 1px solid $accent-color ! important;
|
||||
color: $accent-color;
|
||||
background-color: $accent-fg-color;
|
||||
}
|
||||
|
||||
.mx_Dialog button:hover, .mx_Dialog input[type="submit"]:hover {
|
||||
@mixin mx_DialogButton_hover;
|
||||
}
|
||||
|
||||
.mx_Dialog button:focus, .mx_Dialog input[type="submit"]:focus {
|
||||
filter: brightness($focus-brightness);
|
||||
}
|
||||
|
||||
.mx_Dialog button.mx_Dialog_primary, .mx_Dialog input[type="submit"].mx_Dialog_primary {
|
||||
color: #fff;
|
||||
background-color: #76cfa6;
|
||||
color: $accent-fg-color;
|
||||
background-color: $accent-color;
|
||||
}
|
||||
|
||||
.mx_Dialog button.danger, .mx_Dialog input[type="submit"].danger {
|
||||
background-color: #ff0064;
|
||||
border: solid 1px #ff0064;
|
||||
background-color: $warning-color;
|
||||
border: solid 1px $warning-color;
|
||||
}
|
||||
|
||||
.mx_Dialog button:disabled, .mx_Dialog input[type="submit"]:disabled {
|
||||
background-color: #777777;
|
||||
border: solid 1px #777777;
|
||||
background-color: $light-fg-color;
|
||||
border: solid 1px $light-fg-color;
|
||||
opacity: 0.7;
|
||||
}
|
||||
|
||||
|
@ -241,11 +264,11 @@ textarea {
|
|||
font-weight: bold;
|
||||
font-size: 22px;
|
||||
line-height: 1.4;
|
||||
color: #454545;
|
||||
color: $primary-fg-color;
|
||||
}
|
||||
|
||||
.mx_Dialog_title.danger {
|
||||
color: #ff0064;
|
||||
color: $warning-color;
|
||||
}
|
||||
|
||||
.mx_TextInputDialog_label {
|
||||
|
@ -256,10 +279,10 @@ textarea {
|
|||
.mx_TextInputDialog_input {
|
||||
font-size: 15px;
|
||||
border-radius: 3px;
|
||||
border: 1px solid #f0f0f0;
|
||||
border: 1px solid $input-border-color;
|
||||
padding: 9px;
|
||||
color: #454545;
|
||||
background-color: #fff;
|
||||
color: $primary-fg-color;
|
||||
background-color: $primary-bg-color;
|
||||
}
|
||||
|
||||
.mx_emojione {
|
||||
|
@ -268,27 +291,71 @@ textarea {
|
|||
}
|
||||
|
||||
::-moz-selection {
|
||||
background-color: #76CFA6;
|
||||
color: white;
|
||||
background-color: $accent-color;
|
||||
color: $selection-fg-color;
|
||||
}
|
||||
|
||||
::selection {
|
||||
background-color: #76CFA6;
|
||||
color: white;
|
||||
background-color: $accent-color;
|
||||
color: $selection-fg-color;
|
||||
}
|
||||
|
||||
/** green button with rounded corners */
|
||||
.mx_textButton {
|
||||
color: #fff;
|
||||
background-color: #76cfa6;
|
||||
border-radius: 17px;
|
||||
text-align: center;
|
||||
padding-left: 1em;
|
||||
padding-right: 1em;
|
||||
cursor: pointer;
|
||||
display: inline;
|
||||
@mixin mx_DialogButton_small;
|
||||
}
|
||||
|
||||
.changelog_text {
|
||||
font-family: 'Open Sans', Arial, Helvetica, Sans-Serif;
|
||||
.mx_textButton:hover {
|
||||
@mixin mx_DialogButton_hover;
|
||||
}
|
||||
|
||||
.mx_button_row {
|
||||
margin-top: 69px;
|
||||
}
|
||||
|
||||
.mx_Beta {
|
||||
color: red;
|
||||
margin-right: 10px;
|
||||
position: relative;
|
||||
top: -3px;
|
||||
background-color: white;
|
||||
padding: 0 4px;
|
||||
border-radius: 3px;
|
||||
border: 1px solid darkred;
|
||||
cursor: help;
|
||||
transition-duration: 200ms;
|
||||
font-size: smaller;
|
||||
filter: opacity(0.5);
|
||||
}
|
||||
|
||||
.mx_Beta:hover {
|
||||
color: white;
|
||||
border: 1px solid gray;
|
||||
background-color: darkred;
|
||||
}
|
||||
|
||||
.mx_TintableSvgButton {
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
align-content: center;
|
||||
}
|
||||
|
||||
.mx_TintableSvgButton object {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
max-width: 100%;
|
||||
max-height: 100%;
|
||||
}
|
||||
|
||||
.mx_TintableSvgButton span {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
opacity: 0;
|
||||
cursor: pointer;
|
||||
}
|
104
src/skins/vector/css/_components.scss
Normal file
104
src/skins/vector/css/_components.scss
Normal file
|
@ -0,0 +1,104 @@
|
|||
// autogenerated by rethemendex.sh
|
||||
@import "./_common.scss";
|
||||
@import "./matrix-react-sdk/structures/_ContextualMenu.scss";
|
||||
@import "./matrix-react-sdk/structures/_CreateRoom.scss";
|
||||
@import "./matrix-react-sdk/structures/_FilePanel.scss";
|
||||
@import "./matrix-react-sdk/structures/_GroupView.scss";
|
||||
@import "./matrix-react-sdk/structures/_LoginBox.scss";
|
||||
@import "./matrix-react-sdk/structures/_MatrixChat.scss";
|
||||
@import "./matrix-react-sdk/structures/_MyGroups.scss";
|
||||
@import "./matrix-react-sdk/structures/_NotificationPanel.scss";
|
||||
@import "./matrix-react-sdk/structures/_RoomStatusBar.scss";
|
||||
@import "./matrix-react-sdk/structures/_RoomView.scss";
|
||||
@import "./matrix-react-sdk/structures/_SearchBox.scss";
|
||||
@import "./matrix-react-sdk/structures/_TagPanel.scss";
|
||||
@import "./matrix-react-sdk/structures/_UploadBar.scss";
|
||||
@import "./matrix-react-sdk/structures/_UserSettings.scss";
|
||||
@import "./matrix-react-sdk/structures/login/_Login.scss";
|
||||
@import "./matrix-react-sdk/views/avatars/_BaseAvatar.scss";
|
||||
@import "./matrix-react-sdk/views/avatars/_MemberPresenceAvatar.scss";
|
||||
@import "./matrix-react-sdk/views/dialogs/_BugReportDialog.scss";
|
||||
@import "./matrix-react-sdk/views/dialogs/_ChatCreateOrReuseChatDialog.scss";
|
||||
@import "./matrix-react-sdk/views/dialogs/_ChatInviteDialog.scss";
|
||||
@import "./matrix-react-sdk/views/dialogs/_ConfirmUserActionDialog.scss";
|
||||
@import "./matrix-react-sdk/views/dialogs/_CreateGroupDialog.scss";
|
||||
@import "./matrix-react-sdk/views/dialogs/_CreateRoomDialog.scss";
|
||||
@import "./matrix-react-sdk/views/dialogs/_EncryptedEventDialog.scss";
|
||||
@import "./matrix-react-sdk/views/dialogs/_GroupAddressPicker.scss";
|
||||
@import "./matrix-react-sdk/views/dialogs/_QuestionDialog.scss";
|
||||
@import "./matrix-react-sdk/views/dialogs/_SetMxIdDialog.scss";
|
||||
@import "./matrix-react-sdk/views/dialogs/_UnknownDeviceDialog.scss";
|
||||
@import "./matrix-react-sdk/views/elements/_AccessibleButton.scss";
|
||||
@import "./matrix-react-sdk/views/elements/_AddressSelector.scss";
|
||||
@import "./matrix-react-sdk/views/elements/_AddressTile.scss";
|
||||
@import "./matrix-react-sdk/views/elements/_DirectorySearchBox.scss";
|
||||
@import "./matrix-react-sdk/views/elements/_Dropdown.scss";
|
||||
@import "./matrix-react-sdk/views/elements/_EditableItemList.scss";
|
||||
@import "./matrix-react-sdk/views/elements/_MemberEventListSummary.scss";
|
||||
@import "./matrix-react-sdk/views/elements/_ProgressBar.scss";
|
||||
@import "./matrix-react-sdk/views/elements/_RichText.scss";
|
||||
@import "./matrix-react-sdk/views/elements/_RoleButton.scss";
|
||||
@import "./matrix-react-sdk/views/elements/_ToolTipButton.scss";
|
||||
@import "./matrix-react-sdk/views/groups/_GroupPublicityToggle.scss";
|
||||
@import "./matrix-react-sdk/views/groups/_GroupRoomList.scss";
|
||||
@import "./matrix-react-sdk/views/groups/_GroupUserSettings.scss";
|
||||
@import "./matrix-react-sdk/views/login/_InteractiveAuthEntryComponents.scss";
|
||||
@import "./matrix-react-sdk/views/login/_ServerConfig.scss";
|
||||
@import "./matrix-react-sdk/views/messages/_MEmoteBody.scss";
|
||||
@import "./matrix-react-sdk/views/messages/_MImageBody.scss";
|
||||
@import "./matrix-react-sdk/views/messages/_MNoticeBody.scss";
|
||||
@import "./matrix-react-sdk/views/messages/_MTextBody.scss";
|
||||
@import "./matrix-react-sdk/views/messages/_RoomAvatarEvent.scss";
|
||||
@import "./matrix-react-sdk/views/messages/_TextualEvent.scss";
|
||||
@import "./matrix-react-sdk/views/messages/_UnknownBody.scss";
|
||||
@import "./matrix-react-sdk/views/rooms/_AppsDrawer.scss";
|
||||
@import "./matrix-react-sdk/views/rooms/_Autocomplete.scss";
|
||||
@import "./matrix-react-sdk/views/rooms/_EntityTile.scss";
|
||||
@import "./matrix-react-sdk/views/rooms/_EventTile.scss";
|
||||
@import "./matrix-react-sdk/views/rooms/_LinkPreviewWidget.scss";
|
||||
@import "./matrix-react-sdk/views/rooms/_MemberDeviceInfo.scss";
|
||||
@import "./matrix-react-sdk/views/rooms/_MemberInfo.scss";
|
||||
@import "./matrix-react-sdk/views/rooms/_MemberList.scss";
|
||||
@import "./matrix-react-sdk/views/rooms/_MessageComposer.scss";
|
||||
@import "./matrix-react-sdk/views/rooms/_PinnedEventTile.scss";
|
||||
@import "./matrix-react-sdk/views/rooms/_PinnedEventsPanel.scss";
|
||||
@import "./matrix-react-sdk/views/rooms/_PresenceLabel.scss";
|
||||
@import "./matrix-react-sdk/views/rooms/_RoomHeader.scss";
|
||||
@import "./matrix-react-sdk/views/rooms/_RoomList.scss";
|
||||
@import "./matrix-react-sdk/views/rooms/_RoomPreviewBar.scss";
|
||||
@import "./matrix-react-sdk/views/rooms/_RoomSettings.scss";
|
||||
@import "./matrix-react-sdk/views/rooms/_RoomTile.scss";
|
||||
@import "./matrix-react-sdk/views/rooms/_SearchableEntityList.scss";
|
||||
@import "./matrix-react-sdk/views/rooms/_TopUnreadMessagesBar.scss";
|
||||
@import "./matrix-react-sdk/views/settings/_DevicesPanel.scss";
|
||||
@import "./matrix-react-sdk/views/settings/_IntegrationsManager.scss";
|
||||
@import "./matrix-react-sdk/views/voip/_CallView.scss";
|
||||
@import "./matrix-react-sdk/views/voip/_IncomingCallbox.scss";
|
||||
@import "./matrix-react-sdk/views/voip/_VideoView.scss";
|
||||
@import "./vector-web/_fonts.scss";
|
||||
@import "./vector-web/structures/_CompatibilityPage.scss";
|
||||
@import "./vector-web/structures/_HomePage.scss";
|
||||
@import "./vector-web/structures/_LeftPanel.scss";
|
||||
@import "./vector-web/structures/_RightPanel.scss";
|
||||
@import "./vector-web/structures/_RoomDirectory.scss";
|
||||
@import "./vector-web/structures/_RoomSubList.scss";
|
||||
@import "./vector-web/structures/_ViewSource.scss";
|
||||
@import "./vector-web/views/context_menus/_MessageContextMenu.scss";
|
||||
@import "./vector-web/views/context_menus/_PresenceContextMenuOption.scss";
|
||||
@import "./vector-web/views/context_menus/_RoomTileContextMenu.scss";
|
||||
@import "./vector-web/views/dialogs/_ChangelogDialog.scss";
|
||||
@import "./vector-web/views/dialogs/_DevtoolsDialog.scss";
|
||||
@import "./vector-web/views/dialogs/_SetEmailDialog.scss";
|
||||
@import "./vector-web/views/dialogs/_SetPasswordDialog.scss";
|
||||
@import "./vector-web/views/directory/_NetworkDropdown.scss";
|
||||
@import "./vector-web/views/elements/_ImageView.scss";
|
||||
@import "./vector-web/views/elements/_InlineSpinner.scss";
|
||||
@import "./vector-web/views/elements/_Spinner.scss";
|
||||
@import "./vector-web/views/globals/_MatrixToolbar.scss";
|
||||
@import "./vector-web/views/messages/_DateSeparator.scss";
|
||||
@import "./vector-web/views/messages/_MessageTimestamp.scss";
|
||||
@import "./vector-web/views/messages/_SenderProfile.scss";
|
||||
@import "./vector-web/views/rooms/_RoomDropTarget.scss";
|
||||
@import "./vector-web/views/rooms/_RoomTooltip.scss";
|
||||
@import "./vector-web/views/rooms/_SearchBar.scss";
|
||||
@import "./vector-web/views/settings/_Notifications.scss";
|
|
@ -30,10 +30,10 @@ limitations under the License.
|
|||
}
|
||||
|
||||
.mx_ContextualMenu {
|
||||
border: solid 1px rgba(187, 187, 187, 0.5);
|
||||
border: solid 1px $menu-border-color;
|
||||
border-radius: 4px;
|
||||
background-color: #f6f6f6;
|
||||
color: #4a4a4a;
|
||||
background-color: $menu-bg-color;
|
||||
color: $primary-fg-color;
|
||||
position: absolute;
|
||||
padding: 6px;
|
||||
font-size: 14px;
|
||||
|
@ -51,7 +51,7 @@ limitations under the License.
|
|||
width: 0;
|
||||
height: 0;
|
||||
border-top: 8px solid transparent;
|
||||
border-left: 8px solid rgba(187, 187, 187, 0.5);
|
||||
border-left: 8px solid $menu-border-color;
|
||||
border-bottom: 8px solid transparent;
|
||||
}
|
||||
|
||||
|
@ -60,7 +60,7 @@ limitations under the License.
|
|||
width: 0;
|
||||
height: 0;
|
||||
border-top: 7px solid transparent;
|
||||
border-left: 7px solid #f6f6f6;
|
||||
border-left: 7px solid $menu-bg-color;
|
||||
border-bottom: 7px solid transparent;
|
||||
position:absolute;
|
||||
top: -7px;
|
||||
|
@ -78,7 +78,7 @@ limitations under the License.
|
|||
width: 0;
|
||||
height: 0;
|
||||
border-top: 8px solid transparent;
|
||||
border-right: 8px solid rgba(187, 187, 187, 0.5);
|
||||
border-right: 8px solid $menu-border-color;
|
||||
border-bottom: 8px solid transparent;
|
||||
}
|
||||
|
||||
|
@ -87,13 +87,67 @@ limitations under the License.
|
|||
width: 0;
|
||||
height: 0;
|
||||
border-top: 7px solid transparent;
|
||||
border-right: 7px solid #f6f6f6;
|
||||
border-right: 7px solid $menu-bg-color;
|
||||
border-bottom: 7px solid transparent;
|
||||
position:absolute;
|
||||
top: -7px;
|
||||
left: 1px;
|
||||
}
|
||||
|
||||
.mx_ContextualMenu.mx_ContextualMenu_top {
|
||||
top: 8px;
|
||||
}
|
||||
|
||||
.mx_ContextualMenu_chevron_top {
|
||||
position: absolute;
|
||||
left: 0px;
|
||||
top: -8px;
|
||||
width: 0;
|
||||
height: 0;
|
||||
border-left: 8px solid transparent;
|
||||
border-bottom: 8px solid $menu-border-color;
|
||||
border-right: 8px solid transparent;
|
||||
}
|
||||
|
||||
.mx_ContextualMenu_chevron_top:after{
|
||||
content:'';
|
||||
width: 0;
|
||||
height: 0;
|
||||
border-left: 7px solid transparent;
|
||||
border-bottom: 7px solid $menu-bg-color;
|
||||
border-right: 7px solid transparent;
|
||||
position:absolute;
|
||||
left: -7px;
|
||||
top: 1px;
|
||||
}
|
||||
|
||||
.mx_ContextualMenu.mx_ContextualMenu_bottom {
|
||||
bottom: 8px;
|
||||
}
|
||||
|
||||
.mx_ContextualMenu_chevron_bottom {
|
||||
position: absolute;
|
||||
left: 0px;
|
||||
bottom: -8px;
|
||||
width: 0;
|
||||
height: 0;
|
||||
border-left: 8px solid transparent;
|
||||
border-top: 8px solid $menu-border-color;
|
||||
border-right: 8px solid transparent;
|
||||
}
|
||||
|
||||
.mx_ContextualMenu_chevron_bottom:after{
|
||||
content:'';
|
||||
width: 0;
|
||||
height: 0;
|
||||
border-left: 7px solid transparent;
|
||||
border-top: 7px solid $menu-bg-color;
|
||||
border-right: 7px solid transparent;
|
||||
position:absolute;
|
||||
left: -7px;
|
||||
bottom: 1px;
|
||||
}
|
||||
|
||||
.mx_ContextualMenu_field {
|
||||
padding: 3px 6px 3px 6px;
|
||||
cursor: pointer;
|
|
@ -18,13 +18,13 @@ limitations under the License.
|
|||
width: 960px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
color: #4a4a4a;
|
||||
color: $primary-fg-color;
|
||||
}
|
||||
|
||||
.mx_CreateRoom input,
|
||||
.mx_CreateRoom textarea {
|
||||
border-radius: 3px;
|
||||
border: 1px solid #c7c7c7;
|
||||
border: 1px solid $strong-input-border-color;
|
||||
font-weight: 300;
|
||||
font-size: 13px;
|
||||
padding: 9px;
|
|
@ -15,13 +15,8 @@ limitations under the License.
|
|||
*/
|
||||
|
||||
.mx_FilePanel {
|
||||
-webkit-box-ordinal-group: 2;
|
||||
-moz-box-ordinal-group: 2;
|
||||
-ms-flex-order: 2;
|
||||
-webkit-order: 2;
|
||||
order: 2;
|
||||
|
||||
-webkit-flex: 1 1 0;
|
||||
flex: 1 1 0;
|
||||
|
||||
width: 100%;
|
||||
|
@ -58,12 +53,12 @@ limitations under the License.
|
|||
.mx_FilePanel .mx_EventTile .mx_MImageBody_download {
|
||||
display: flex;
|
||||
font-size: 14px;
|
||||
color: #acacac;
|
||||
color: $event-timestamp-color;
|
||||
}
|
||||
|
||||
.mx_FilePanel .mx_EventTile .mx_MImageBody_downloadLink {
|
||||
flex: 1 1 auto;
|
||||
color: #747474;
|
||||
color: $light-fg-color;
|
||||
}
|
||||
|
||||
.mx_FilePanel .mx_EventTile .mx_MImageBody_size {
|
||||
|
@ -90,7 +85,7 @@ limitations under the License.
|
|||
padding: 0px;
|
||||
font-size: 11px;
|
||||
opacity: 1.0;
|
||||
color: #acacac;
|
||||
color: $event-timestamp-color;
|
||||
}
|
||||
|
||||
.mx_FilePanel .mx_EventTile .mx_MessageTimestamp {
|
||||
|
@ -100,7 +95,7 @@ limitations under the License.
|
|||
position: initial;
|
||||
font-size: 11px;
|
||||
opacity: 1.0;
|
||||
color: #acacac;
|
||||
color: $event-timestamp-color;
|
||||
}
|
||||
|
||||
/* Overrides for the wrappers around the body tile */
|
||||
|
@ -111,10 +106,9 @@ limitations under the License.
|
|||
}
|
||||
|
||||
.mx_FilePanel .mx_EventTile:hover .mx_EventTile_line {
|
||||
background-color: #fff;
|
||||
background-color: $primary-bg-color;
|
||||
}
|
||||
|
||||
.mx_FilePanel .mx_EventTile_selected .mx_EventTile_line {
|
||||
padding-left: 0px;
|
||||
}
|
||||
|
324
src/skins/vector/css/matrix-react-sdk/structures/_GroupView.scss
Normal file
324
src/skins/vector/css/matrix-react-sdk/structures/_GroupView.scss
Normal file
|
@ -0,0 +1,324 @@
|
|||
/*
|
||||
Copyright 2017 Vector Creations Ltd
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
.mx_GroupView {
|
||||
max-width: 960px;
|
||||
width: 100%;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.mx_GroupView_error {
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.mx_GroupView_header {
|
||||
max-width: 960px;
|
||||
min-height: 70px;
|
||||
align-items: center;
|
||||
display: flex;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
|
||||
.mx_GroupView_header_view {
|
||||
border-bottom: 1px solid $primary-hairline-color;
|
||||
padding-bottom: 0px;
|
||||
}
|
||||
|
||||
.mx_GroupView_header_avatar, .mx_GroupView_header_info {
|
||||
display: table-cell;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.mx_GroupHeader_button {
|
||||
margin-left: 12px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.mx_GroupHeader_button object {
|
||||
// prevents clicks from being swallowed by svg in 'object' tag
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.mx_GroupView_editable {
|
||||
border-bottom: 1px solid $strong-input-border-color ! important;
|
||||
min-width: 150px;
|
||||
cursor: text;
|
||||
}
|
||||
|
||||
.mx_GroupView_editable:focus {
|
||||
border-bottom: 1px solid $accent-color ! important;
|
||||
outline: none;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.mx_GroupView_header_isUserMember .mx_GroupView_header_name:hover div:not(.mx_GroupView_editable) {
|
||||
color: $accent-color;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.mx_GroupView_avatarPicker {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.mx_GroupView_avatarPicker_edit {
|
||||
position: absolute;
|
||||
top: 50px;
|
||||
left: 15px;
|
||||
}
|
||||
|
||||
.mx_GroupView_avatarPicker .mx_Spinner {
|
||||
width: 48px;
|
||||
height: 48px ! important;
|
||||
}
|
||||
|
||||
.mx_GroupView_header_leftCol {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.mx_GroupView_header_rightCol {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.mx_GroupView_textButton {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.mx_GroupView_header_groupid {
|
||||
font-weight: normal;
|
||||
font-size: initial;
|
||||
padding-left: 10px;
|
||||
}
|
||||
|
||||
.mx_GroupView_header_name {
|
||||
vertical-align: middle;
|
||||
width: 100%;
|
||||
height: 31px;
|
||||
overflow: hidden;
|
||||
color: $primary-fg-color;
|
||||
font-weight: bold;
|
||||
font-size: 22px;
|
||||
padding-left: 19px;
|
||||
padding-right: 16px;
|
||||
/* why isn't text-overflow working? */
|
||||
text-overflow: ellipsis;
|
||||
border-bottom: 1px solid transparent;
|
||||
}
|
||||
|
||||
.mx_GroupView_header_shortDesc {
|
||||
vertical-align: bottom;
|
||||
float: left;
|
||||
max-height: 42px;
|
||||
color: $settings-grey-fg-color;
|
||||
font-weight: 300;
|
||||
font-size: 13px;
|
||||
padding-left: 19px;
|
||||
margin-right: 16px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
border-bottom: 1px solid transparent;
|
||||
}
|
||||
|
||||
.mx_GroupView_avatarPicker_label {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.mx_GroupView_cancelButton {
|
||||
padding-left: 8px;
|
||||
}
|
||||
|
||||
.mx_GroupView_cancelButton img {
|
||||
position: relative;
|
||||
top: 5px;
|
||||
}
|
||||
|
||||
.mx_GroupView_body {
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.mx_GroupView_rooms {
|
||||
flex-grow: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
min-height: 200px;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.mx_GroupView h3 {
|
||||
text-transform: uppercase;
|
||||
color: $h3-color;
|
||||
font-weight: 600;
|
||||
font-size: 13px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.mx_GroupView_rooms_header .mx_AccessibleButton {
|
||||
padding-left: 14px;
|
||||
margin-bottom: 14px;
|
||||
height: 24px;
|
||||
}
|
||||
|
||||
.mx_GroupView_group {
|
||||
border-top: 1px solid $primary-hairline-color;
|
||||
}
|
||||
|
||||
.mx_GroupView_group_disabled {
|
||||
opacity: 0.3;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.mx_GroupView_rooms_header_addRow_button {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.mx_GroupView_rooms_header_addRow_button object {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.mx_GroupView_rooms_header_addRow_label {
|
||||
display: inline-block;
|
||||
vertical-align: top;
|
||||
line-height: 24px;
|
||||
padding-left: 28px;
|
||||
color: $accent-color;
|
||||
}
|
||||
|
||||
.mx_GroupView_rooms .mx_RoomDetailList {
|
||||
flex-grow: 1;
|
||||
border-top: 1px solid $primary-hairline-color;
|
||||
padding-top: 10px;
|
||||
word-break: break-word;
|
||||
}
|
||||
|
||||
.mx_GroupView .mx_RoomView_messageListWrapper {
|
||||
justify-content: flex-start;
|
||||
}
|
||||
|
||||
.mx_GroupView_membershipSection {
|
||||
color: $greyed-fg-color;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.mx_GroupView_membershipSubSection {
|
||||
justify-content: space-between;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.mx_GroupView_membershipSection_description {
|
||||
/* To match textButton */
|
||||
line-height: 34px;
|
||||
}
|
||||
|
||||
.mx_GroupView_membershipSection_description .mx_BaseAvatar {
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.mx_GroupView_membershipSection .mx_GroupView_textButton {
|
||||
margin-right: 0px;
|
||||
margin-top: 0px;
|
||||
margin-left: 8px;
|
||||
}
|
||||
|
||||
.mx_GroupView_memberSettings_toggle label {
|
||||
cursor: pointer;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.mx_GroupView_memberSettings input {
|
||||
margin-right: 6px;
|
||||
}
|
||||
|
||||
.mx_GroupView_featuredThings {
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.mx_GroupView_featuredThings_header {
|
||||
font-weight: bold;
|
||||
font-size: 120%;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.mx_GroupView_featuredThings_category {
|
||||
font-weight: bold;
|
||||
font-size: 110%;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.mx_GroupView_featuredThings_container {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.mx_GroupView_featuredThings_addButton,
|
||||
.mx_GroupView_featuredThing {
|
||||
display: table-cell;
|
||||
text-align: center;
|
||||
|
||||
width: 100px;
|
||||
margin: 0px 20px;
|
||||
}
|
||||
|
||||
.mx_GroupView_featuredThing {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.mx_GroupView_featuredThing .mx_GroupView_featuredThing_deleteButton {
|
||||
position: absolute;
|
||||
top: -7px;
|
||||
right: 11px;
|
||||
opacity: 0.4;
|
||||
}
|
||||
|
||||
.mx_GroupView_featuredThing .mx_BaseAvatar {
|
||||
/* To prevent misalignment with mx_TintableSvg (in addButton) */
|
||||
vertical-align: initial;
|
||||
}
|
||||
|
||||
.mx_GroupView_featuredThings_addButton object {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.mx_GroupView_featuredThing_name {
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
.mx_GroupView_uploadInput {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.mx_GroupView_body .gm-scroll-view > *{
|
||||
margin: 11px 50px 0px 68px;
|
||||
}
|
||||
|
||||
.mx_GroupView_groupDesc textarea {
|
||||
width: 100%;
|
||||
max-width: 100%;
|
||||
height: 150px;
|
||||
}
|
||||
|
||||
.mx_GroupView_groupDesc_placeholder {
|
||||
background-color: $info-plinth-bg-color;
|
||||
color: $info-plinth-fg-color;
|
||||
border-radius: 10px;
|
||||
text-align: center;
|
||||
|
||||
cursor: pointer;
|
||||
padding: 100px 20px;
|
||||
margin: 20px 0px;
|
||||
}
|
|
@ -0,0 +1,47 @@
|
|||
/*
|
||||
Copyright 2017 OpenMarket 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.
|
||||
*/
|
||||
|
||||
.mx_LoginBox {
|
||||
min-height: 24px;
|
||||
height: unset !important;
|
||||
padding-top: 13px !important;
|
||||
padding-bottom: 14px !important;
|
||||
}
|
||||
|
||||
.mx_LoginBox_loginButton_wrapper {
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.mx_LoginBox_loginButton,
|
||||
.mx_LoginBox_registerButton {
|
||||
margin-top: 3px;
|
||||
height: 40px;
|
||||
border: 0px;
|
||||
border-radius: 40px;
|
||||
margin-left: 4px;
|
||||
margin-right: 4px;
|
||||
min-width: 80px;
|
||||
|
||||
background-color: $accent-color;
|
||||
color: $primary-bg-color;
|
||||
|
||||
cursor: pointer;
|
||||
|
||||
font-size: 15px;
|
||||
padding: 0 11px;
|
||||
word-break: break-word;
|
||||
}
|
|
@ -27,34 +27,15 @@ limitations under the License.
|
|||
}
|
||||
|
||||
.mx_MatrixChat_wrapper {
|
||||
display: -webkit-box;
|
||||
display: -moz-box;
|
||||
display: -ms-flexbox;
|
||||
display: -webkit-flex;
|
||||
display: flex;
|
||||
|
||||
flex-direction: column;
|
||||
-webkit-flex-direction: column;
|
||||
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.mx_MatrixToolbar {
|
||||
-webkit-box-ordinal-group: 1;
|
||||
-moz-box-ordinal-group: 1;
|
||||
-ms-flex-order: 1;
|
||||
-webkit-order: 1;
|
||||
order: 1;
|
||||
|
||||
height: 40px;
|
||||
}
|
||||
|
||||
.mx_GuestWarningBar {
|
||||
-webkit-box-ordinal-group: 1;
|
||||
-moz-box-ordinal-group: 1;
|
||||
-ms-flex-order: 1;
|
||||
-webkit-order: 1;
|
||||
order: 1;
|
||||
|
||||
height: 40px;
|
||||
|
@ -68,52 +49,32 @@ limitations under the License.
|
|||
width: 100%;
|
||||
height: 100%;
|
||||
|
||||
display: -webkit-box;
|
||||
display: -moz-box;
|
||||
display: -ms-flexbox;
|
||||
display: -webkit-flex;
|
||||
display: flex;
|
||||
|
||||
-webkit-box-ordinal-group: 2;
|
||||
-moz-box-ordinal-group: 2;
|
||||
-ms-flex-order: 2;
|
||||
-webkit-order: 2;
|
||||
order: 2;
|
||||
|
||||
-webkit-flex: 1;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.mx_MatrixChat .mx_LeftPanel {
|
||||
-webkit-box-ordinal-group: 1;
|
||||
-moz-box-ordinal-group: 1;
|
||||
-ms-flex-order: 1;
|
||||
-webkit-order: 1;
|
||||
order: 1;
|
||||
|
||||
background-color: #eaf5f0;
|
||||
background-color: $secondary-accent-color;
|
||||
|
||||
-webkit-flex: 0 0 235px;
|
||||
flex: 0 0 235px;
|
||||
}
|
||||
|
||||
.mx_MatrixChat .mx_LeftPanel.collapsed {
|
||||
-webkit-flex: 0 0 60px;
|
||||
flex: 0 0 60px;
|
||||
}
|
||||
|
||||
.mx_MatrixChat .mx_MatrixChat_middlePanel {
|
||||
-webkit-box-ordinal-group: 2;
|
||||
-moz-box-ordinal-group: 2;
|
||||
-ms-flex-order: 2;
|
||||
-webkit-order: 2;
|
||||
order: 2;
|
||||
|
||||
padding-left: 20px;
|
||||
padding-right: 22px;
|
||||
background-color: #fff;
|
||||
background-color: $primary-bg-color;
|
||||
|
||||
-webkit-flex: 1;
|
||||
flex: 1;
|
||||
|
||||
/* Experimental fix for https://github.com/vector-im/vector-web/issues/947
|
||||
|
@ -123,34 +84,21 @@ limitations under the License.
|
|||
*/
|
||||
overflow-x: auto;
|
||||
|
||||
/* XXX: Hack: apparently if you try to nest a flex-box
|
||||
* within a non-flex-box within a flex-box, the height
|
||||
* of the innermost element gets miscalculated if the
|
||||
* parents are both auto. Height has to be auto here
|
||||
* for RoomView to correctly fit when the Toolbar is shown.
|
||||
* Ideally we'd launch straight into the RoomView at this
|
||||
* point, but instead we fudge it and make the middlePanel
|
||||
* flex itself.
|
||||
*/
|
||||
display: -webkit-box;
|
||||
display: -moz-box;
|
||||
display: -ms-flexbox;
|
||||
display: -webkit-flex;
|
||||
display: flex;
|
||||
|
||||
/* To fix https://github.com/vector-im/riot-web/issues/3298 where Safari
|
||||
needed height 100% all the way down to the HomePage. Height does not
|
||||
have to be auto, empirically.
|
||||
*/
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.mx_MatrixChat .mx_RightPanel {
|
||||
-webkit-box-ordinal-group: 3;
|
||||
-moz-box-ordinal-group: 3;
|
||||
-ms-flex-order: 3;
|
||||
-webkit-order: 3;
|
||||
order: 3;
|
||||
|
||||
-webkit-flex: 0 0 235px;
|
||||
flex: 0 0 235px;
|
||||
}
|
||||
|
||||
.mx_MatrixChat .mx_RightPanel.collapsed {
|
||||
-webkit-flex: 0 0 122px;
|
||||
flex: 0 0 122px;
|
||||
}
|
151
src/skins/vector/css/matrix-react-sdk/structures/_MyGroups.scss
Normal file
151
src/skins/vector/css/matrix-react-sdk/structures/_MyGroups.scss
Normal file
|
@ -0,0 +1,151 @@
|
|||
/*
|
||||
Copyright 2017 Vector Creations Ltd
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
.mx_MyGroups {
|
||||
max-width: 960px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.mx_MyGroups .mx_RoomHeader_simpleHeader {
|
||||
margin-left: 0px;
|
||||
}
|
||||
|
||||
.mx_MyGroups_header {
|
||||
/* Keep mid-point of create button aligned with icon in page header */
|
||||
margin-left: 2px;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.mx_MyGroups_headerCard {
|
||||
flex: 1 0 50%;
|
||||
margin-bottom: 30px;
|
||||
min-width: 400px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.mx_MyGroups_headerCard .mx_MyGroups_headerCard_button {
|
||||
margin-right: 13px;
|
||||
height: 50px;
|
||||
}
|
||||
|
||||
.mx_MyGroups_headerCard_button object {
|
||||
/* Otherwise the SVG object absorbs clicks and the button doesn't work */
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.mx_MyGroups_headerCard_header {
|
||||
font-weight: bold;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.mx_MyGroups_headerCard_content {
|
||||
padding-right: 15px;
|
||||
}
|
||||
|
||||
/* Until the button is wired up */
|
||||
.mx_MyGroups_joinBox {
|
||||
visibility: hidden;
|
||||
|
||||
/* When joinBox wraps onto its own row, it should take up zero height so
|
||||
that there isn't an awkward gap between MyGroups_createBox and
|
||||
MyGroups_content.
|
||||
*/
|
||||
height: 0px;
|
||||
margin: 0px;
|
||||
}
|
||||
|
||||
.mx_MyGroups_content {
|
||||
margin-left: 2px;
|
||||
|
||||
flex: 1 0 0;
|
||||
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.mx_MyGroups_content h3 {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.mx_MyGroups_placeholder {
|
||||
background-color: $info-plinth-bg-color;
|
||||
color: $info-plinth-fg-color;
|
||||
line-height: 400px;
|
||||
border-radius: 10px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.mx_MyGroups_joinedGroups .gm-scroll-view {
|
||||
border-top: 1px solid $primary-hairline-color;
|
||||
overflow-x: hidden;
|
||||
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
flex-flow: wrap;
|
||||
align-content: flex-start;
|
||||
}
|
||||
|
||||
.mx_MyGroups_joinedGroups .gm-scroll-view .mx_GroupTile {
|
||||
min-width: 300px;
|
||||
max-width: 33%;
|
||||
flex: 1 0 300px;
|
||||
height: 75px;
|
||||
margin: 10px 0px;
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.mx_GroupTile_profile {
|
||||
margin-left: 10px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.mx_GroupTile_profile .mx_GroupTile_name,
|
||||
.mx_GroupTile_profile .mx_GroupTile_groupId,
|
||||
.mx_GroupTile_profile .mx_GroupTile_desc {
|
||||
padding-right: 10px;
|
||||
}
|
||||
|
||||
.mx_GroupTile_profile .mx_GroupTile_name {
|
||||
margin: 0px;
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
.mx_GroupTile_profile .mx_GroupTile_groupId {
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.mx_GroupTile_profile .mx_GroupTile_desc {
|
||||
display: -webkit-box;
|
||||
-webkit-line-clamp: 2;
|
||||
-webkit-box-orient: vertical;
|
||||
font-size: 13px;
|
||||
max-height: 36px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.mx_GroupTile_profile .mx_GroupTile_groupId {
|
||||
opacity: 0.7;
|
||||
}
|
|
@ -15,13 +15,8 @@ limitations under the License.
|
|||
*/
|
||||
|
||||
.mx_NotificationPanel {
|
||||
-webkit-box-ordinal-group: 2;
|
||||
-moz-box-ordinal-group: 2;
|
||||
-ms-flex-order: 2;
|
||||
-webkit-order: 2;
|
||||
order: 2;
|
||||
|
||||
-webkit-flex: 1 1 0;
|
||||
flex: 1 1 0;
|
||||
|
||||
width: 100%;
|
||||
|
@ -51,7 +46,7 @@ limitations under the License.
|
|||
}
|
||||
|
||||
.mx_NotificationPanel .mx_EventTile_roomName a {
|
||||
color: #4a4a4a;
|
||||
color: $primary-fg-color;
|
||||
}
|
||||
|
||||
.mx_NotificationPanel .mx_EventTile_avatar {
|
||||
|
@ -61,8 +56,7 @@ limitations under the License.
|
|||
|
||||
.mx_NotificationPanel .mx_EventTile .mx_SenderProfile,
|
||||
.mx_NotificationPanel .mx_EventTile .mx_MessageTimestamp {
|
||||
color: #000;
|
||||
opacity: 0.3;
|
||||
color: $primary-fg-color;
|
||||
font-size: 12px;
|
||||
display: inline;
|
||||
padding-left: 0px;
|
||||
|
@ -94,7 +88,7 @@ limitations under the License.
|
|||
}
|
||||
|
||||
.mx_NotificationPanel .mx_EventTile:hover .mx_EventTile_line {
|
||||
background-color: #fff;
|
||||
background-color: $primary-bg-color;
|
||||
}
|
||||
|
||||
.mx_NotificationPanel .mx_EventTile_selected .mx_EventTile_line {
|
|
@ -16,15 +16,15 @@ limitations under the License.
|
|||
|
||||
.mx_RoomStatusBar {
|
||||
margin-left: 65px;
|
||||
min-height: 34px;
|
||||
min-height: 50px;
|
||||
}
|
||||
|
||||
/* position the indicator in the same place horizontally as .mx_EventTile_avatar. */
|
||||
.mx_RoomStatusBar_indicator {
|
||||
padding-left: 18px;
|
||||
padding-left: 17px;
|
||||
padding-right: 12px;
|
||||
margin-left: -73px;
|
||||
margin-top: 13px;
|
||||
margin-top: 15px;
|
||||
float: left;
|
||||
width: 24px;
|
||||
text-align: center;
|
||||
|
@ -36,16 +36,16 @@ limitations under the License.
|
|||
}
|
||||
|
||||
.mx_RoomStatusBar_placeholderIndicator span {
|
||||
color: #4a4a4a;
|
||||
color: $primary-fg-color;
|
||||
opacity: 0.5;
|
||||
position: relative;
|
||||
top: -4px;
|
||||
/*
|
||||
/*
|
||||
animation-duration: 1s;
|
||||
animation-name: bounce;
|
||||
animation-direction: alternate;
|
||||
animation-iteration-count: infinite;
|
||||
*/
|
||||
*/
|
||||
}
|
||||
|
||||
.mx_RoomStatusBar_placeholderIndicator span:nth-child(1) {
|
||||
|
@ -70,19 +70,51 @@ limitations under the License.
|
|||
}
|
||||
}
|
||||
|
||||
.mx_RoomStatusBar_typingIndicatorAvatars {
|
||||
width: 52px;
|
||||
margin-top: -1px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.mx_RoomStatusBar_typingIndicatorAvatars .mx_BaseAvatar_image {
|
||||
margin-right: -12px;
|
||||
border: 1px solid $primary-bg-color;
|
||||
}
|
||||
|
||||
.mx_RoomStatusBar_typingIndicatorAvatars .mx_BaseAvatar_initial {
|
||||
padding-left: 1px;
|
||||
padding-top: 1px;
|
||||
}
|
||||
|
||||
.mx_RoomStatusBar_typingIndicatorRemaining {
|
||||
display: inline-block;
|
||||
color: #acacac;
|
||||
background-color: #ddd;
|
||||
border: 1px solid $primary-bg-color;
|
||||
border-radius: 40px;
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
line-height: 24px;
|
||||
font-size: 0.8em;
|
||||
vertical-align: top;
|
||||
text-align: center;
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
.mx_RoomStatusBar_scrollDownIndicator {
|
||||
cursor: pointer;
|
||||
padding-left: 1px;
|
||||
}
|
||||
|
||||
.mx_RoomStatusBar_unreadMessagesBar {
|
||||
padding-top: 10px;
|
||||
color: #ff0064;
|
||||
color: $warning-color;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.mx_RoomStatusBar_connectionLostBar {
|
||||
margin-top: 19px;
|
||||
height: 58px;
|
||||
min-height: 58px;
|
||||
}
|
||||
|
||||
.mx_RoomStatusBar_connectionLostBar img {
|
||||
|
@ -93,54 +125,57 @@ limitations under the License.
|
|||
}
|
||||
|
||||
.mx_RoomStatusBar_connectionLostBar_title {
|
||||
color: #ff0064;
|
||||
color: $warning-color;
|
||||
}
|
||||
|
||||
.mx_RoomStatusBar_connectionLostBar_desc {
|
||||
color: #454545;
|
||||
color: $primary-fg-color;
|
||||
font-size: 13px;
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
.mx_RoomStatusBar_resend_link {
|
||||
color: #454545 ! important;
|
||||
color: $primary-fg-color ! important;
|
||||
text-decoration: underline ! important;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.mx_RoomStatusBar_tabCompleteBar {
|
||||
padding-top: 10px;
|
||||
color: #4a4a4a;
|
||||
}
|
||||
|
||||
.mx_RoomStatusBar_typingBar {
|
||||
padding-top: 10px;
|
||||
color: #4a4a4a;
|
||||
height: 50px;
|
||||
line-height: 50px;
|
||||
|
||||
color: $primary-fg-color;
|
||||
opacity: 0.5;
|
||||
overflow-y: hidden;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.mx_RoomStatusBar_tabCompleteWrapper {
|
||||
display: flex;
|
||||
display: -webkit-flex;
|
||||
height: 26px;
|
||||
.mx_RoomStatusBar_isAlone {
|
||||
height: 50px;
|
||||
line-height: 50px;
|
||||
|
||||
color: $primary-fg-color;
|
||||
opacity: 0.5;
|
||||
overflow-y: hidden;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.mx_RoomStatusBar_tabCompleteWrapper .mx_TabCompleteBar {
|
||||
flex: 1 1 auto;
|
||||
-webkit-flex: 1 1 auto;
|
||||
}
|
||||
.mx_MatrixChat_useCompactLayout {
|
||||
.mx_RoomStatusBar {
|
||||
min-height: 40px;
|
||||
}
|
||||
|
||||
.mx_RoomStatusBar_tabCompleteEol {
|
||||
flex: 0 0 auto;
|
||||
-webkit-flex: 0 0 auto;
|
||||
color: #76CFA6;
|
||||
}
|
||||
.mx_RoomStatusBar_indicator {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.mx_RoomStatusBar_tabCompleteEol object {
|
||||
vertical-align: middle;
|
||||
margin-right: 8px;
|
||||
margin-top: -2px;
|
||||
}
|
||||
.mx_RoomStatusBar_callBar {
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
}
|
||||
|
||||
.mx_RoomStatusBar_typingBar {
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
}
|
||||
}
|
|
@ -18,25 +18,15 @@ limitations under the License.
|
|||
word-wrap: break-word;
|
||||
position: relative;
|
||||
|
||||
display: -webkit-box;
|
||||
display: -moz-box;
|
||||
display: -ms-flexbox;
|
||||
display: -webkit-flex;
|
||||
display: flex;
|
||||
width: 100%;
|
||||
|
||||
flex-direction: column;
|
||||
-webkit-flex-direction: column;
|
||||
}
|
||||
|
||||
.mx_RoomView .mx_RoomHeader {
|
||||
-webkit-box-ordinal-group: 1;
|
||||
-moz-box-ordinal-group: 1;
|
||||
-ms-flex-order: 1;
|
||||
-webkit-order: 1;
|
||||
order: 1;
|
||||
|
||||
-webkit-flex: 0 0 70px;
|
||||
flex: 0 0 70px;
|
||||
}
|
||||
|
||||
|
@ -53,14 +43,10 @@ limitations under the License.
|
|||
padding-right: 12px;
|
||||
margin-left: -12px;
|
||||
|
||||
-webkit-border-top-left-radius: 10px;
|
||||
-webkit-border-top-right-radius: 10px;
|
||||
-moz-border-radius-topleft: 10px;
|
||||
-moz-border-radius-topright: 10px;
|
||||
border-top-left-radius: 10px;
|
||||
border-top-right-radius: 10px;
|
||||
|
||||
background-color: rgba(255, 255, 255, 0.9);
|
||||
background-color: $droptarget-bg-color;
|
||||
border: 2px #e1dddd solid;
|
||||
border-bottom: none;
|
||||
position: absolute;
|
||||
|
@ -77,44 +63,49 @@ limitations under the License.
|
|||
}
|
||||
|
||||
.mx_RoomView_auxPanel {
|
||||
-webkit-box-ordinal-group: 2;
|
||||
-moz-box-ordinal-group: 2;
|
||||
-ms-flex-order: 2;
|
||||
-webkit-order: 2;
|
||||
order: 2;
|
||||
|
||||
min-width: 0px;
|
||||
max-width: 960px;
|
||||
width: 100%;
|
||||
margin: auto;
|
||||
margin: 0px auto;
|
||||
|
||||
overflow: auto;
|
||||
border-bottom: 1px solid #e5e5e5;
|
||||
border-bottom: 1px solid $primary-hairline-color;
|
||||
|
||||
-webkit-flex: 0 0 auto;
|
||||
flex: 0 0 auto;
|
||||
}
|
||||
|
||||
.mx_RoomView_topUnreadMessagesBar {
|
||||
-webkit-box-ordinal-group: 3;
|
||||
-moz-box-ordinal-group: 3;
|
||||
-ms-flex-order: 3;
|
||||
-webkit-order: 3;
|
||||
.mx_RoomView_auxPanel_apps {
|
||||
max-width: 1920px ! important;
|
||||
}
|
||||
|
||||
|
||||
.mx_RoomView_body {
|
||||
order: 3;
|
||||
flex: 1 1 0;
|
||||
flex-direction: column;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.mx_RoomView_body .mx_RoomView_topUnreadMessagesBar {
|
||||
order: 1;
|
||||
}
|
||||
|
||||
.mx_RoomView_body .mx_RoomView_messagePanel {
|
||||
order: 2;
|
||||
}
|
||||
|
||||
.mx_RoomView_body .mx_RoomView_statusArea {
|
||||
order: 3;
|
||||
}
|
||||
|
||||
.mx_RoomView_messagePanel {
|
||||
-webkit-box-ordinal-group: 4;
|
||||
-moz-box-ordinal-group: 4;
|
||||
-ms-flex-order: 4;
|
||||
-webkit-order: 4;
|
||||
.mx_RoomView_body .mx_MessageComposer {
|
||||
order: 4;
|
||||
}
|
||||
|
||||
-webkit-flex: 1 1 0;
|
||||
flex: 1 1 0;
|
||||
|
||||
.mx_RoomView_messagePanel {
|
||||
width: 100%;
|
||||
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
|
@ -124,22 +115,25 @@ limitations under the License.
|
|||
|
||||
min-height: 100%;
|
||||
|
||||
display: -webkit-box;
|
||||
display: -moz-box;
|
||||
display: -ms-flexbox;
|
||||
display: -webkit-flex;
|
||||
display: flex;
|
||||
|
||||
flex-direction: column;
|
||||
-webkit-flex-direction: column;
|
||||
|
||||
justify-content: flex-end;
|
||||
-webkit-justify-content: flex-end;
|
||||
}
|
||||
|
||||
.mx_RoomView_searchResultsPanel .mx_RoomView_messageListWrapper {
|
||||
justify-content: flex-start;
|
||||
-webkit-justify-content: flex-start;
|
||||
}
|
||||
|
||||
.mx_RoomView_empty {
|
||||
flex: 1 1 auto;
|
||||
font-size: 13px;
|
||||
padding-left: 3em;
|
||||
padding-right: 3em;
|
||||
margin-right: 20px;
|
||||
margin-top: 33%;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.mx_RoomView_MessageList {
|
||||
|
@ -152,31 +146,6 @@ limitations under the License.
|
|||
clear: both;
|
||||
}
|
||||
|
||||
.mx_RoomView_MessageList h2 {
|
||||
clear: both;
|
||||
margin-top: 32px;
|
||||
margin-bottom: 8px;
|
||||
margin-left: 63px;
|
||||
padding-bottom: 6px;
|
||||
border-bottom: 1px solid #e5e5e5;
|
||||
}
|
||||
|
||||
.mx_RoomView_invitePrompt {
|
||||
-webkit-box-ordinal-group: 2;
|
||||
-moz-box-ordinal-group: 2;
|
||||
-ms-flex-order: 2;
|
||||
-webkit-order: 2;
|
||||
order: 2;
|
||||
|
||||
min-width: 0px;
|
||||
max-width: 960px;
|
||||
width: 100%;
|
||||
margin: auto;
|
||||
|
||||
margin-top: 12px;
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
li.mx_RoomView_myReadMarker_container {
|
||||
height: 0px;
|
||||
margin: 0px;
|
||||
|
@ -185,23 +154,31 @@ li.mx_RoomView_myReadMarker_container {
|
|||
}
|
||||
|
||||
hr.mx_RoomView_myReadMarker {
|
||||
border-top: solid 1px #76cfa6;
|
||||
border-bottom: solid 1px #76cfa6;
|
||||
border-top: solid 1px $accent-color;
|
||||
border-bottom: solid 1px $accent-color;
|
||||
margin-top: 0px;
|
||||
position: relative;
|
||||
top: 5px;
|
||||
top: -1px;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.mx_RoomView_statusArea {
|
||||
-webkit-box-ordinal-group: 5;
|
||||
-moz-box-ordinal-group: 5;
|
||||
-ms-flex-order: 5;
|
||||
-webkit-order: 5;
|
||||
order: 5;
|
||||
|
||||
width: 100%;
|
||||
-webkit-flex: 0 0 auto;
|
||||
flex: 0 0 auto;
|
||||
|
||||
max-height: 0px;
|
||||
background-color: $primary-bg-color;
|
||||
z-index: 1000;
|
||||
overflow: hidden;
|
||||
|
||||
-webkit-transition: all .2s ease-out;
|
||||
-moz-transition: all .2s ease-out;
|
||||
-ms-transition: all .2s ease-out;
|
||||
-o-transition: all .2s ease-out;
|
||||
}
|
||||
|
||||
.mx_RoomView_statusArea_expanded {
|
||||
max-height: 100px;
|
||||
}
|
||||
|
||||
.mx_RoomView_statusAreaBox {
|
||||
|
@ -212,30 +189,33 @@ hr.mx_RoomView_myReadMarker {
|
|||
|
||||
.mx_RoomView_statusAreaBox_line {
|
||||
margin-left: 65px;
|
||||
border-top: 1px solid #e5e5e5;
|
||||
border-top: 1px solid $primary-hairline-color;
|
||||
height: 1px;
|
||||
}
|
||||
|
||||
.mx_RoomView_callStatusBar .mx_UploadBar_uploadProgressInner {
|
||||
background-color: #fff;
|
||||
background-color: $primary-bg-color;
|
||||
}
|
||||
|
||||
.mx_RoomView_callStatusBar .mx_UploadBar_uploadFilename {
|
||||
color: #fff;
|
||||
color: $accent-fg-color;
|
||||
opacity: 1.0;
|
||||
}
|
||||
|
||||
.mx_RoomView_inCall .mx_RoomView_statusAreaBox_line {
|
||||
border-top: 1px hidden;
|
||||
margin-top: 2px;
|
||||
border: none;
|
||||
height: 0px;
|
||||
}
|
||||
|
||||
.mx_RoomView_inCall .mx_MessageComposer_wrapper {
|
||||
border-top: 2px hidden;
|
||||
padding-top: 1px;
|
||||
}
|
||||
|
||||
.mx_RoomView_inCall .mx_RoomView_statusAreaBox {
|
||||
background-color: #76CFA6;
|
||||
color: #fff;
|
||||
background-color: $accent-color;
|
||||
color: $accent-fg-color;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
|
@ -257,14 +237,7 @@ hr.mx_RoomView_myReadMarker {
|
|||
}
|
||||
|
||||
.mx_RoomView .mx_MessageComposer {
|
||||
-webkit-box-ordinal-group: 6;
|
||||
-moz-box-ordinal-group: 6;
|
||||
-ms-flex-order: 6;
|
||||
-webkit-order: 6;
|
||||
order: 6;
|
||||
|
||||
width: 100%;
|
||||
-webkit-flex: 0 0 auto;
|
||||
flex: 0 0 auto;
|
||||
margin-right: 2px;
|
||||
}
|
||||
|
@ -272,13 +245,23 @@ hr.mx_RoomView_myReadMarker {
|
|||
.mx_RoomView_ongoingConfCallNotification {
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
background-color: #ff0064;
|
||||
color: #fff;
|
||||
background-color: $warning-color;
|
||||
color: $accent-fg-color;
|
||||
font-weight: bold;
|
||||
padding: 6px 0;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.mx_RoomView_ongoingConfCallNotification a {
|
||||
color: #fff ! important;
|
||||
}
|
||||
color: $accent-fg-color ! important;
|
||||
}
|
||||
|
||||
.mx_MatrixChat_useCompactLayout {
|
||||
.mx_RoomView_MessageList {
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
.mx_RoomView_statusAreaBox {
|
||||
min-height: 42px;
|
||||
}
|
||||
}
|
|
@ -21,8 +21,9 @@ limitations under the License.
|
|||
padding-top: 24px;
|
||||
padding-bottom: 22px;
|
||||
|
||||
border-bottom: 1px solid $panel-divider-color;
|
||||
|
||||
display: flex;
|
||||
display: -webkit-flex;
|
||||
}
|
||||
|
||||
.mx_SearchBox_searchButton {
|
||||
|
@ -38,15 +39,13 @@ limitations under the License.
|
|||
|
||||
.mx_SearchBox_search {
|
||||
flex: 1 1 auto;
|
||||
-webkit-flex: 1 1 auto;
|
||||
width: 0px;
|
||||
font-family: 'Open Sans', Arial, Helvetica, Sans-Serif;
|
||||
font-family: $font-family;
|
||||
font-size: 12px;
|
||||
margin-top: -2px;
|
||||
height: 24px;
|
||||
border: 0px ! important;
|
||||
/* border-bottom: 1px solid rgba(0, 0, 0, 0.1) ! important; */
|
||||
background-color: transparent;
|
||||
border: 0px;
|
||||
}
|
||||
|
|
@ -0,0 +1,77 @@
|
|||
/*
|
||||
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.
|
||||
*/
|
||||
|
||||
.mx_TagPanel {
|
||||
width: 60px;
|
||||
background-color: $tertiary-accent-color;
|
||||
cursor: pointer;
|
||||
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.mx_TagPanel .mx_TagPanel_tagTileContainer {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
margin-top: 65px;
|
||||
}
|
||||
|
||||
.mx_TagPanel .mx_TagTile {
|
||||
margin: 6px 0px;
|
||||
opacity: 0.5;
|
||||
}
|
||||
.mx_TagPanel .mx_TagTile:focus,
|
||||
.mx_TagPanel .mx_TagTile:hover,
|
||||
.mx_TagPanel .mx_TagTile.mx_TagTile_selected {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.mx_TagPanel .mx_TagTile.mx_TagTile_selected {
|
||||
/* To offset border of mx_TagTile_avatar */
|
||||
margin: 3px 0px;
|
||||
}
|
||||
|
||||
.mx_TagPanel .mx_TagTile.mx_TagTile_selected .mx_TagTile_avatar {
|
||||
border: 3px solid $accent-color;
|
||||
border-radius: 60px;
|
||||
}
|
||||
|
||||
.mx_TagPanel .mx_TagTile.mx_AccessibleButton:focus {
|
||||
filter: none;
|
||||
}
|
||||
|
||||
.mx_TagTile_tooltip {
|
||||
position: relative;
|
||||
top: -30px;
|
||||
left: 5px;
|
||||
}
|
||||
|
||||
.mx_TagPanel_createGroupButton {
|
||||
opacity: 0.5;
|
||||
margin-bottom: 17px;
|
||||
height: 25px;
|
||||
}
|
||||
|
||||
.mx_TagPanel_createGroupButton:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.mx_TagPanel_createGroupButton object {
|
||||
pointer-events: none;
|
||||
}
|
|
@ -26,7 +26,7 @@ limitations under the License.
|
|||
}
|
||||
|
||||
.mx_UploadBar_uploadProgressInner {
|
||||
background-color: #76cfa6;
|
||||
background-color: $accent-color;
|
||||
height: 5px;
|
||||
}
|
||||
|
||||
|
@ -34,7 +34,7 @@ limitations under the License.
|
|||
margin-top: 5px;
|
||||
margin-left: 65px;
|
||||
opacity: 0.5;
|
||||
color: #4a4a4a;
|
||||
color: $primary-fg-color;
|
||||
}
|
||||
|
||||
.mx_UploadBar_uploadIcon {
|
||||
|
@ -57,5 +57,5 @@ limitations under the License.
|
|||
float: right;
|
||||
margin-top: 5px;
|
||||
margin-right: 30px;
|
||||
color: #76cfa6;
|
||||
color: $accent-color;
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue