Merge remote-tracking branch 'origin/develop' into dbkr/group_userlist
commit
9efa604706
|
@ -6,7 +6,6 @@ src/autocomplete/Autocompleter.js
|
|||
src/autocomplete/Components.js
|
||||
src/autocomplete/DuckDuckGoProvider.js
|
||||
src/autocomplete/EmojiProvider.js
|
||||
src/autocomplete/RoomProvider.js
|
||||
src/autocomplete/UserProvider.js
|
||||
src/CallHandler.js
|
||||
src/component-index.js
|
||||
|
@ -35,7 +34,6 @@ src/components/views/create_room/RoomAlias.js
|
|||
src/components/views/dialogs/ChatCreateOrReuseDialog.js
|
||||
src/components/views/dialogs/DeactivateAccountDialog.js
|
||||
src/components/views/dialogs/InteractiveAuthDialog.js
|
||||
src/components/views/dialogs/SetMxIdDialog.js
|
||||
src/components/views/dialogs/UnknownDeviceDialog.js
|
||||
src/components/views/elements/AccessibleButton.js
|
||||
src/components/views/elements/ActionButton.js
|
||||
|
@ -89,7 +87,6 @@ src/components/views/rooms/MemberList.js
|
|||
src/components/views/rooms/MemberTile.js
|
||||
src/components/views/rooms/MessageComposer.js
|
||||
src/components/views/rooms/MessageComposerInput.js
|
||||
src/components/views/rooms/MessageComposerInputOld.js
|
||||
src/components/views/rooms/PresenceLabel.js
|
||||
src/components/views/rooms/ReadReceiptMarker.js
|
||||
src/components/views/rooms/RoomList.js
|
||||
|
@ -100,7 +97,6 @@ src/components/views/rooms/RoomTile.js
|
|||
src/components/views/rooms/RoomTopicEditor.js
|
||||
src/components/views/rooms/SearchableEntityList.js
|
||||
src/components/views/rooms/SearchResultTile.js
|
||||
src/components/views/rooms/TabCompleteBar.js
|
||||
src/components/views/rooms/TopUnreadMessagesBar.js
|
||||
src/components/views/rooms/UserTile.js
|
||||
src/components/views/settings/AddPhoneNumber.js
|
||||
|
@ -128,8 +124,6 @@ src/Roles.js
|
|||
src/Rooms.js
|
||||
src/ScalarAuthClient.js
|
||||
src/ScalarMessaging.js
|
||||
src/TabComplete.js
|
||||
src/TabCompleteEntries.js
|
||||
src/TextForEvent.js
|
||||
src/Tinter.js
|
||||
src/UiEffects.js
|
||||
|
@ -142,7 +136,7 @@ src/utils/Receipt.js
|
|||
src/Velociraptor.js
|
||||
src/VelocityBounce.js
|
||||
src/WhoIsTyping.js
|
||||
src/wrappers/WithMatrixClient.js
|
||||
src/wrappers/withMatrixClient.js
|
||||
test/all-tests.js
|
||||
test/components/structures/login/Registration-test.js
|
||||
test/components/structures/MessagePanel-test.js
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
/*
|
||||
Copyright 2015, 2016 OpenMarket Ltd
|
||||
Copyright 2017 Vector Creations Ltd
|
||||
Copyright 2017 New Vector Ltd
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
|
@ -101,11 +102,11 @@ const Notifier = {
|
|||
},
|
||||
|
||||
start: function() {
|
||||
this.boundOnRoomTimeline = this.onRoomTimeline.bind(this);
|
||||
this.boundOnEvent = this.onEvent.bind(this);
|
||||
this.boundOnSyncStateChange = this.onSyncStateChange.bind(this);
|
||||
this.boundOnRoomReceipt = this.onRoomReceipt.bind(this);
|
||||
this.boundOnEventDecrypted = this.onEventDecrypted.bind(this);
|
||||
MatrixClientPeg.get().on('Room.timeline', this.boundOnRoomTimeline);
|
||||
MatrixClientPeg.get().on('event', this.boundOnEvent);
|
||||
MatrixClientPeg.get().on('Room.receipt', this.boundOnRoomReceipt);
|
||||
MatrixClientPeg.get().on('Event.decrypted', this.boundOnEventDecrypted);
|
||||
MatrixClientPeg.get().on("sync", this.boundOnSyncStateChange);
|
||||
|
@ -115,7 +116,7 @@ const Notifier = {
|
|||
|
||||
stop: function() {
|
||||
if (MatrixClientPeg.get() && this.boundOnRoomTimeline) {
|
||||
MatrixClientPeg.get().removeListener('Room.timeline', this.boundOnRoomTimeline);
|
||||
MatrixClientPeg.get().removeListener('Event', this.boundOnEvent);
|
||||
MatrixClientPeg.get().removeListener('Room.receipt', this.boundOnRoomReceipt);
|
||||
MatrixClientPeg.get().removeListener('Event.decrypted', this.boundOnEventDecrypted);
|
||||
MatrixClientPeg.get().removeListener('sync', this.boundOnSyncStateChange);
|
||||
|
@ -246,12 +247,9 @@ const Notifier = {
|
|||
}
|
||||
},
|
||||
|
||||
onRoomTimeline: function(ev, room, toStartOfTimeline, removed, data) {
|
||||
if (toStartOfTimeline) return;
|
||||
if (!room) return;
|
||||
onEvent: function(ev) {
|
||||
if (!this.isSyncing) return; // don't alert for any messages initially
|
||||
if (ev.sender && ev.sender.userId === MatrixClientPeg.get().credentials.userId) return;
|
||||
if (data.timeline.getTimelineSet() !== room.getUnfilteredTimelineSet()) return;
|
||||
|
||||
// If it's an encrypted event and the type is still 'm.room.encrypted',
|
||||
// it hasn't yet been decrypted, so wait until it is.
|
||||
|
|
|
@ -244,15 +244,16 @@ function textForPowerEvent(event) {
|
|||
}
|
||||
return _t('%(senderName)s changed the power level of %(powerLevelDiffText)s.', {
|
||||
senderName: senderName,
|
||||
powerLevelDiffText: diff.join(", ")
|
||||
powerLevelDiffText: diff.join(", "),
|
||||
});
|
||||
}
|
||||
|
||||
function textForWidgetEvent(event) {
|
||||
const senderName = event.sender ? event.sender.name : event.getSender();
|
||||
const previousContent = event.getPrevContent() || {};
|
||||
const senderName = event.getSender();
|
||||
const {name: prevName, type: prevType, url: prevUrl} = event.getPrevContent();
|
||||
const {name, type, url} = event.getContent() || {};
|
||||
let widgetName = name || previousContent.name || type || previousContent.type || '';
|
||||
|
||||
let widgetName = name || prevName || type || prevType || '';
|
||||
// Apply sentence case to widget name
|
||||
if (widgetName && widgetName.length > 0) {
|
||||
widgetName = widgetName[0].toUpperCase() + widgetName.slice(1) + ' ';
|
||||
|
@ -261,9 +262,15 @@ function textForWidgetEvent(event) {
|
|||
// If the widget was removed, its content should be {}, but this is sufficiently
|
||||
// equivalent to that condition.
|
||||
if (url) {
|
||||
return _t('%(widgetName)s widget added by %(senderName)s', {
|
||||
widgetName, senderName,
|
||||
});
|
||||
if (prevUrl) {
|
||||
return _t('%(widgetName)s widget modified by %(senderName)s', {
|
||||
widgetName, senderName,
|
||||
});
|
||||
} else {
|
||||
return _t('%(widgetName)s widget added by %(senderName)s', {
|
||||
widgetName, senderName,
|
||||
});
|
||||
}
|
||||
} else {
|
||||
return _t('%(widgetName)s widget removed by %(senderName)s', {
|
||||
widgetName, senderName,
|
||||
|
|
|
@ -65,7 +65,7 @@ module.exports = React.createClass({
|
|||
suppressFirstDateSeparator: React.PropTypes.bool,
|
||||
|
||||
// whether to show read receipts
|
||||
manageReadReceipts: React.PropTypes.bool,
|
||||
showReadReceipts: React.PropTypes.bool,
|
||||
|
||||
// true if updates to the event list should cause the scroll panel to
|
||||
// scroll down when we are at the bottom of the window. See ScrollPanel
|
||||
|
@ -491,7 +491,7 @@ module.exports = React.createClass({
|
|||
var scrollToken = mxEv.status ? undefined : eventId;
|
||||
|
||||
var readReceipts;
|
||||
if (this.props.manageReadReceipts) {
|
||||
if (this.props.showReadReceipts) {
|
||||
readReceipts = this._getReadReceiptsForEvent(mxEv);
|
||||
}
|
||||
ret.push(
|
||||
|
|
|
@ -20,6 +20,8 @@ limitations under the License.
|
|||
// - Drag and drop
|
||||
// - File uploading - uploadFile()
|
||||
|
||||
import shouldHideEvent from "../../shouldHideEvent";
|
||||
|
||||
var React = require("react");
|
||||
var ReactDOM = require("react-dom");
|
||||
import Promise from 'bluebird';
|
||||
|
@ -143,6 +145,8 @@ module.exports = React.createClass({
|
|||
MatrixClientPeg.get().on("RoomMember.membership", this.onRoomMemberMembership);
|
||||
MatrixClientPeg.get().on("accountData", this.onAccountData);
|
||||
|
||||
this._syncedSettings = UserSettingsStore.getSyncedSettings();
|
||||
|
||||
// Start listening for RoomViewStore updates
|
||||
this._roomStoreToken = RoomViewStore.addListener(this._onRoomViewStoreUpdate);
|
||||
this._onRoomViewStoreUpdate(true);
|
||||
|
@ -497,8 +501,7 @@ module.exports = React.createClass({
|
|||
// update unread count when scrolled up
|
||||
if (!this.state.searchResults && this.state.atEndOfLiveTimeline) {
|
||||
// no change
|
||||
}
|
||||
else {
|
||||
} else if (!shouldHideEvent(ev, this._syncedSettings)) {
|
||||
this.setState((state, props) => {
|
||||
return {numUnreadMessages: state.numUnreadMessages + 1};
|
||||
});
|
||||
|
@ -1716,7 +1719,8 @@ module.exports = React.createClass({
|
|||
var messagePanel = (
|
||||
<TimelinePanel ref={this._gatherTimelinePanelRef}
|
||||
timelineSet={this.state.room.getUnfilteredTimelineSet()}
|
||||
manageReadReceipts={!UserSettingsStore.getSyncedSetting('hideReadReceipts', false)}
|
||||
showReadReceipts={!UserSettingsStore.getSyncedSetting('hideReadReceipts', false)}
|
||||
manageReadReceipts={true}
|
||||
manageReadMarkers={true}
|
||||
hidden={hideMessagePanel}
|
||||
highlightedEventId={highlightedEventId}
|
||||
|
|
|
@ -59,6 +59,7 @@ var TimelinePanel = React.createClass({
|
|||
// that room.
|
||||
timelineSet: React.PropTypes.object.isRequired,
|
||||
|
||||
showReadReceipts: React.PropTypes.bool,
|
||||
// Enable managing RRs and RMs. These require the timelineSet to have a room.
|
||||
manageReadReceipts: React.PropTypes.bool,
|
||||
manageReadMarkers: React.PropTypes.bool,
|
||||
|
@ -1140,8 +1141,8 @@ var TimelinePanel = React.createClass({
|
|||
readMarkerEventId={ this.state.readMarkerEventId }
|
||||
readMarkerVisible={ this.state.readMarkerVisible }
|
||||
suppressFirstDateSeparator={ this.state.canBackPaginate }
|
||||
showUrlPreview = { this.props.showUrlPreview }
|
||||
manageReadReceipts = { this.props.manageReadReceipts }
|
||||
showUrlPreview={ this.props.showUrlPreview }
|
||||
showReadReceipts={ this.props.showReadReceipts }
|
||||
ourUserId={ MatrixClientPeg.get().credentials.userId }
|
||||
stickyBottom={ stickyBottom }
|
||||
onScroll={ this.onMessageListScroll }
|
||||
|
|
|
@ -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.
|
||||
|
@ -136,16 +137,15 @@ module.exports = React.createClass({
|
|||
});
|
||||
},
|
||||
|
||||
onHsUrlChanged: function(newHsUrl) {
|
||||
this.setState({
|
||||
enteredHomeserverUrl: newHsUrl
|
||||
});
|
||||
},
|
||||
|
||||
onIsUrlChanged: function(newIsUrl) {
|
||||
this.setState({
|
||||
enteredIdentityServerUrl: newIsUrl
|
||||
});
|
||||
onServerConfigChange: function(config) {
|
||||
const newState = {};
|
||||
if (config.hsUrl !== undefined) {
|
||||
newState.enteredHomeserverUrl = config.hsUrl;
|
||||
}
|
||||
if (config.isUrl !== undefined) {
|
||||
newState.enteredIdentityServerUrl = config.isUrl;
|
||||
}
|
||||
this.setState(newState);
|
||||
},
|
||||
|
||||
showErrorDialog: function(body, title) {
|
||||
|
@ -170,7 +170,7 @@ module.exports = React.createClass({
|
|||
else if (this.state.progress === "sent_email") {
|
||||
resetPasswordJsx = (
|
||||
<div>
|
||||
{ _t('An email has been sent to') } {this.state.email}. { _t('Once you've followed the link it contains, click below') }.
|
||||
{ _t('An email has been sent to') } {this.state.email}. { _t("Once you've followed the link it contains, click below") }.
|
||||
<br />
|
||||
<input className="mx_Login_submit" type="button" onClick={this.onVerify}
|
||||
value={ _t('I have verified my email address') } />
|
||||
|
@ -221,8 +221,7 @@ module.exports = React.createClass({
|
|||
defaultIsUrl={this.props.defaultIsUrl}
|
||||
customHsUrl={this.props.customHsUrl}
|
||||
customIsUrl={this.props.customIsUrl}
|
||||
onHsUrlChanged={this.onHsUrlChanged}
|
||||
onIsUrlChanged={this.onIsUrlChanged}
|
||||
onServerConfigChange={this.onServerConfigChange}
|
||||
delayTimeMs={0}/>
|
||||
<div className="mx_Login_error">
|
||||
</div>
|
||||
|
|
|
@ -72,8 +72,17 @@ export default React.createClass({
|
|||
|
||||
// Returns true if props.url is a scalar URL, typically https://scalar.vector.im/api
|
||||
isScalarUrl: function() {
|
||||
const scalarUrl = SdkConfig.get().integrations_rest_url;
|
||||
return scalarUrl && this.props.url.startsWith(scalarUrl);
|
||||
let scalarUrls = SdkConfig.get().integrations_widgets_urls;
|
||||
if (!scalarUrls || scalarUrls.length == 0) {
|
||||
scalarUrls = [SdkConfig.get().integrations_rest_url];
|
||||
}
|
||||
|
||||
for (let i = 0; i < scalarUrls.length; i++) {
|
||||
if (this.props.url.startsWith(scalarUrls[i])) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
},
|
||||
|
||||
isMixedContent: function() {
|
||||
|
|
|
@ -123,7 +123,19 @@ module.exports = React.createClass({
|
|||
}
|
||||
|
||||
var newElement = ReactDOM.findDOMNode(this);
|
||||
var startTopOffset = oldTop - newElement.offsetParent.getBoundingClientRect().top;
|
||||
let startTopOffset;
|
||||
if (!newElement.offsetParent) {
|
||||
// this seems to happen sometimes for reasons I don't understand
|
||||
// the docs for `offsetParent` say it may be null if `display` is
|
||||
// `none`, but I can't see why that would happen.
|
||||
console.warn(
|
||||
`ReadReceiptMarker for ${this.props.member.userId} in ` +
|
||||
`${this.props.member.roomId} has no offsetParent`,
|
||||
);
|
||||
startTopOffset = 0;
|
||||
} else {
|
||||
startTopOffset = oldTop - newElement.offsetParent.getBoundingClientRect().top;
|
||||
}
|
||||
|
||||
var startStyles = [];
|
||||
var enterTransitionOpts = [];
|
||||
|
@ -131,13 +143,12 @@ module.exports = React.createClass({
|
|||
if (oldInfo && oldInfo.left) {
|
||||
// start at the old height and in the old h pos
|
||||
|
||||
var leftOffset = oldInfo.left;
|
||||
startStyles.push({ top: startTopOffset+"px",
|
||||
left: oldInfo.left+"px" });
|
||||
|
||||
var reorderTransitionOpts = {
|
||||
duration: 100,
|
||||
easing: 'easeOut'
|
||||
easing: 'easeOut',
|
||||
};
|
||||
|
||||
enterTransitionOpts.push(reorderTransitionOpts);
|
||||
|
@ -175,7 +186,7 @@ module.exports = React.createClass({
|
|||
if (this.props.timestamp) {
|
||||
title = _t(
|
||||
"Seen by %(userName)s at %(dateTime)s",
|
||||
{userName: this.props.member.userId, dateTime: DateUtils.formatDate(new Date(this.props.timestamp), this.props.showTwelveHour)}
|
||||
{userName: this.props.member.userId, dateTime: DateUtils.formatDate(new Date(this.props.timestamp), this.props.showTwelveHour)},
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -571,6 +571,7 @@ module.exports = React.createClass({
|
|||
label={ _t('Invites') }
|
||||
editable={ false }
|
||||
order="recent"
|
||||
isInvite={true}
|
||||
selectedRoom={ self.props.selectedRoom }
|
||||
incomingCall={ self.state.incomingCall }
|
||||
collapsed={ self.props.collapsed }
|
||||
|
|
|
@ -179,7 +179,7 @@
|
|||
"Profile": "Profil",
|
||||
"Refer a friend to Riot:": "Freunde zu Riot einladen:",
|
||||
"rejected": "abgelehnt",
|
||||
"Once you've followed the link it contains, click below": "Nachdem du dem darin enthaltenen Link gefolgt bist, klicke unten",
|
||||
"Once you've followed the link it contains, click below": "Nachdem du dem darin enthaltenen Link gefolgt bist, klicke unten",
|
||||
"rejected the invitation.": "lehnte die Einladung ab.",
|
||||
"Reject invitation": "Einladung ablehnen",
|
||||
"Remove Contact Information?": "Kontakt-Informationen entfernen?",
|
||||
|
|
|
@ -688,7 +688,7 @@
|
|||
"No display name": "Χωρίς όνομα",
|
||||
"No users have specific privileges in this room": "Κανένας χρήστης δεν έχει συγκεκριμένα δικαιώματα σε αυτό το δωμάτιο",
|
||||
"Once encryption is enabled for a room it cannot be turned off again (for now)": "Μόλις ενεργοποιηθεί η κρυπτογράφηση για ένα δωμάτιο, δεν μπορεί να απενεργοποιηθεί ξανά (για τώρα)",
|
||||
"Once you've followed the link it contains, click below": "Μόλις ακολουθήσετε τον σύνδεσμο που περιέχει, κάντε κλικ παρακάτω",
|
||||
"Once you've followed the link it contains, click below": "Μόλις ακολουθήσετε τον σύνδεσμο που περιέχει, κάντε κλικ παρακάτω",
|
||||
"Only people who have been invited": "Μόνο άτομα που έχουν προσκληθεί",
|
||||
"Otherwise, <a>click here</a> to send a bug report.": "Διαφορετικά, κάντε <a>κλικ εδώ</a> για να αποστείλετε μια αναφορά σφάλματος.",
|
||||
"%(senderName)s placed a %(callType)s call.": "Ο %(senderName)s πραγματοποίησε μια %(callType)s κλήση.",
|
||||
|
|
|
@ -444,7 +444,7 @@
|
|||
"OK": "OK",
|
||||
"olm version:": "olm version:",
|
||||
"Once encryption is enabled for a room it cannot be turned off again (for now)": "Once encryption is enabled for a room it cannot be turned off again (for now)",
|
||||
"Once you've followed the link it contains, click below": "Once you've followed the link it contains, click below",
|
||||
"Once you've followed the link it contains, click below": "Once you've followed the link it contains, click below",
|
||||
"Only people who have been invited": "Only people who have been invited",
|
||||
"Operation failed": "Operation failed",
|
||||
"Otherwise, <a>click here</a> to send a bug report.": "Otherwise, <a>click here</a> to send a bug report.",
|
||||
|
@ -977,6 +977,7 @@
|
|||
"Hide avatars in user and room mentions": "Hide avatars in user and room mentions",
|
||||
"%(widgetName)s widget added by %(senderName)s": "%(widgetName)s widget added by %(senderName)s",
|
||||
"%(widgetName)s widget removed by %(senderName)s": "%(widgetName)s widget removed by %(senderName)s",
|
||||
"%(widgetName)s widget modified by %(senderName)s": "%(widgetName)s widget modified by %(senderName)s",
|
||||
"Robot check is currently unavailable on desktop - please use a <a>web browser</a>": "Robot check is currently unavailable on desktop - please use a <a>web browser</a>",
|
||||
"Description": "Description",
|
||||
"Filter group members": "Filter group members",
|
||||
|
|
|
@ -404,7 +404,7 @@
|
|||
"OK": "OK",
|
||||
"olm version:": "olm version:",
|
||||
"Once encryption is enabled for a room it cannot be turned off again (for now)": "Once encryption is enabled for a room it cannot be turned off again (for now)",
|
||||
"Once you've followed the link it contains, click below": "Once you've followed the link it contains, click below",
|
||||
"Once you've followed the link it contains, click below": "Once you've followed the link it contains, click below",
|
||||
"Only people who have been invited": "Only people who have been invited",
|
||||
"Operation failed": "Operation failed",
|
||||
"Password": "Password",
|
||||
|
|
|
@ -660,7 +660,7 @@
|
|||
"Hide join/leave messages (invites/kicks/bans unaffected)": "Ocultar mensajes de entrada/salida (no afecta invitaciones/kicks/bans)",
|
||||
"Hide avatar and display name changes": "Ocultar cambios de avatar y nombre visible",
|
||||
"Matrix Apps": "Aplicaciones Matrix",
|
||||
"Once you've followed the link it contains, click below": "Cuando haya seguido el enlace que contiene, haga click debajo",
|
||||
"Once you've followed the link it contains, click below": "Cuando haya seguido el enlace que contiene, haga click debajo",
|
||||
"Sets the room topic": "Configura el tema de la sala",
|
||||
"Show Apps": "Mostrar aplicaciones",
|
||||
"To get started, please pick a username!": "Para empezar, ¡por favor elija un nombre de usuario!",
|
||||
|
|
|
@ -495,7 +495,7 @@
|
|||
"No users have specific privileges in this room": "Ez dago gela honetan baimen zehatzik duen erabiltzailerik",
|
||||
"olm version:": "olm bertsioa:",
|
||||
"Once encryption is enabled for a room it cannot be turned off again (for now)": "Behin gela batean zifratzea gaituta ezin da gero desgaitu (oraingoz)",
|
||||
"Once you've followed the link it contains, click below": "Behin dakarren esteka jarraitu duzula, egin klik azpian",
|
||||
"Once you've followed the link it contains, click below": "Behin dakarren esteka jarraitu duzula, egin klik azpian",
|
||||
"Otherwise, <a>click here</a> to send a bug report.": "Bestela, <a>bidali arazte-txosten bat</a>.",
|
||||
"Server may be unavailable, overloaded, or you hit a bug.": "Agian zerbitzaria ez dago eskuragarri, edo gainezka dago, edo akats bat aurkitu duzu.",
|
||||
"Changing password will currently reset any end-to-end encryption keys on all devices, making encrypted chat history unreadable, unless you first export your room keys and re-import them afterwards. In future this will be improved.": "Oraingoz pasahitza aldatzeak gailu guztietako muturretik muturrerako zifratze-gakoak berrezarriko ditu, eta ezin izango dituzu zifratutako txatetako historialak irakurri ez badituzu aurretik zure gelako gakoak esportatzen eta aldaketa eta gero berriro inportatzen. Etorkizunean hau hobetuko da.",
|
||||
|
|
|
@ -395,7 +395,7 @@
|
|||
"Mute": "Couper le son",
|
||||
"No users have specific privileges in this room": "Aucun utilisateur n’a de privilège spécifique dans ce salon",
|
||||
"olm version:": "version de olm :",
|
||||
"Once you've followed the link it contains, click below": "Une fois que vous aurez suivi le lien qu’il contient, cliquez ci-dessous",
|
||||
"Once you've followed the link it contains, click below": "Une fois que vous aurez suivi le lien qu’il contient, cliquez ci-dessous",
|
||||
"%(senderName)s placed a %(callType)s call.": "%(senderName)s a placé un appel %(callType)s.",
|
||||
"Please check your email and click on the link it contains. Once this is done, click continue.": "Veuillez vérifier vos e-mails et cliquer sur le lien que vous avez reçu. Puis cliquez sur continuer.",
|
||||
"Power level must be positive integer.": "Le niveau d'autorité doit être un entier positif.",
|
||||
|
|
|
@ -443,7 +443,7 @@
|
|||
"No users have specific privileges in this room": "Egy felhasználónak sincsenek specifikus jogosultságai ebben a szobában",
|
||||
"olm version:": "olm verzió:",
|
||||
"Once encryption is enabled for a room it cannot be turned off again (for now)": "Ha egyszer bekapcsolod a titkosítást a szobába utána nem lehet kikapcsolni (egyenlőre)",
|
||||
"Once you've followed the link it contains, click below": "Miután a linket követted, kattints alulra",
|
||||
"Once you've followed the link it contains, click below": "Miután a linket követted, kattints alulra",
|
||||
"Only people who have been invited": "Csak akiket meghívtak",
|
||||
"Otherwise, <a>click here</a> to send a bug report.": "Különben hiba jelentés küldéséhez <a>kattints ide</a>.",
|
||||
"Password": "Jelszó",
|
||||
|
|
|
@ -452,7 +452,7 @@
|
|||
"People": "사람들",
|
||||
"Phone": "전화",
|
||||
"Once encryption is enabled for a room it cannot be turned off again (for now)": "방을 암호화하면 암호화를 도중에 끌 수 없어요. (현재로서는)",
|
||||
"Once you've followed the link it contains, click below": "포함된 주소를 따라가서, 아래를 누르세요",
|
||||
"Once you've followed the link it contains, click below": "포함된 주소를 따라가서, 아래를 누르세요",
|
||||
"Only people who have been invited": "초대받은 사람만",
|
||||
"Otherwise, <a>click here</a> to send a bug report.": "그 밖에는, <a>여기를 눌러</a> 오류 보고서를 보내주세요.",
|
||||
"%(senderName)s placed a %(callType)s call.": "%(senderName)s님이 %(callType)s 전화를 걸었어요.",
|
||||
|
|
|
@ -427,7 +427,7 @@
|
|||
"OK": "LABI",
|
||||
"olm version:": "olm versija:",
|
||||
"Once encryption is enabled for a room it cannot be turned off again (for now)": "Tiklīdz istabai tiks iespējota šifrēšana, tā vairs nebūs atslēdzama (pašlaik)",
|
||||
"Once you've followed the link it contains, click below": "Tiklīdz sekoji saturā esošajai saitei, noklikšķini zemāk",
|
||||
"Once you've followed the link it contains, click below": "Tiklīdz sekoji saturā esošajai saitei, noklikšķini zemāk",
|
||||
"Only people who have been invited": "Vienīgi personas, kuras ir tikušas uzaicinātas",
|
||||
"Operation failed": "Darbība neizdevās",
|
||||
"Otherwise, <a>click here</a> to send a bug report.": "pretējā gadījumā, <a>klikšķini šeit</a>, lai nosūtītu paziņojumu par kļūdu.",
|
||||
|
|
|
@ -504,7 +504,7 @@
|
|||
"New passwords don't match": "Nieuwe wachtwoorden komen niet overeen",
|
||||
"New passwords must match each other.": "Nieuwe wachtwoorden moeten overeenkomen.",
|
||||
"Once encryption is enabled for a room it cannot be turned off again (for now)": "Zodra versleuteling in een kamer is ingeschakeld kan het niet meer worden uitgeschakeld (voor nu)",
|
||||
"Once you've followed the link it contains, click below": "Zodra je de link dat het bevat hebt gevolgd, klik hieronder",
|
||||
"Once you've followed the link it contains, click below": "Zodra je de link dat het bevat hebt gevolgd, klik hieronder",
|
||||
"Only people who have been invited": "Alleen personen die zijn uitgenodigd",
|
||||
"Otherwise, <a>click here</a> to send a bug report.": "Klik anders <a>hier</a> om een foutmelding te versturen.",
|
||||
"Please check your email and click on the link it contains. Once this is done, click continue.": "Bekijk je e-mail en klik op de link die het bevat. Zodra dit klaar is, klik op verder gaan.",
|
||||
|
|
|
@ -149,7 +149,7 @@
|
|||
"No users have specific privileges in this room": "Nenhum/a usuário/a possui privilégios específicos nesta sala",
|
||||
"olm version: ": "Versão do olm: ",
|
||||
"Once encryption is enabled for a room it cannot be turned off again (for now)": "Assim que a criptografia é ativada para uma sala, ela não poderá ser desativada novamente (ainda)",
|
||||
"Once you've followed the link it contains, click below": "Quando você tiver clicado no link que está no email, clique o botão abaixo",
|
||||
"Once you've followed the link it contains, click below": "Quando você tiver clicado no link que está no email, clique o botão abaixo",
|
||||
"Only people who have been invited": "Apenas pessoas que tenham sido convidadas",
|
||||
"or": "ou",
|
||||
"other": "outro",
|
||||
|
|
|
@ -149,7 +149,7 @@
|
|||
"No users have specific privileges in this room": "Nenhum/a usuário/a possui privilégios específicos nesta sala",
|
||||
"olm version: ": "Versão do olm: ",
|
||||
"Once encryption is enabled for a room it cannot be turned off again (for now)": "Assim que a criptografia é ativada para uma sala, ela não poderá ser desativada novamente (ainda)",
|
||||
"Once you've followed the link it contains, click below": "Quando você tiver clicado no link que está no email, clique o botão abaixo",
|
||||
"Once you've followed the link it contains, click below": "Quando você tiver clicado no link que está no email, clique o botão abaixo",
|
||||
"Only people who have been invited": "Apenas pessoas que tenham sido convidadas",
|
||||
"or": "ou",
|
||||
"other": "outro",
|
||||
|
|
|
@ -704,7 +704,7 @@
|
|||
"Jump to first unread message.": "Перейти к первому непрочитанному сообщению.",
|
||||
"Message not sent due to unknown devices being present": "Сообщение не отправлено из-за присутствия неизвестных устройств",
|
||||
"Mobile phone number (optional)": "Номер мобильного телефона (не обязательно)",
|
||||
"Once you've followed the link it contains, click below": "После перехода по ссылке, нажмите на кнопку ниже",
|
||||
"Once you've followed the link it contains, click below": "После перехода по ссылке, нажмите на кнопку ниже",
|
||||
"Password:": "Пароль:",
|
||||
"Privacy warning": "Предупреждение о конфиденциальности",
|
||||
"Privileged Users": "Привилегированные пользователи",
|
||||
|
|
|
@ -429,7 +429,7 @@
|
|||
"OK": "OK",
|
||||
"olm version:": "olm-version:",
|
||||
"Once encryption is enabled for a room it cannot be turned off again (for now)": "När kryptering aktiveras i ett rum kan det inte deaktiveras (tills vidare)",
|
||||
"Once you've followed the link it contains, click below": "När du har följt länken i meddelandet, klicka här",
|
||||
"Once you've followed the link it contains, click below": "När du har följt länken i meddelandet, klicka här",
|
||||
"Only people who have been invited": "Endast inbjudna",
|
||||
"Operation failed": "Handlingen misslyckades",
|
||||
"Otherwise, <a>click here</a> to send a bug report.": "Annars kan du <a>klicka här</a> för att skicka en buggrapport.",
|
||||
|
|
|
@ -251,7 +251,7 @@
|
|||
"NOT verified": "ยังไม่ได้ยืนยัน",
|
||||
"No more results": "ไม่มีผลลัพธ์อื่น",
|
||||
"No results": "ไม่มีผลลัพธ์",
|
||||
"Once you've followed the link it contains, click below": "หลังจากคุณเปิดลิงก์ข้างในแล้ว คลิกข้างล่าง",
|
||||
"Once you've followed the link it contains, click below": "หลังจากคุณเปิดลิงก์ข้างในแล้ว คลิกข้างล่าง",
|
||||
"Passwords can't be empty": "รหัสผ่านต้องไม่ว่าง",
|
||||
"People": "บุคคล",
|
||||
"Permissions": "สิทธิ์",
|
||||
|
|
|
@ -424,7 +424,7 @@
|
|||
"OK": "Tamam",
|
||||
"olm version:": "olm versiyon:",
|
||||
"Once encryption is enabled for a room it cannot be turned off again (for now)": "Bu oda için şifreleme etkinleştirildikten sonra tekrar kapatılamaz (şimdilik)",
|
||||
"Once you've followed the link it contains, click below": "Bir kere ' içerdiği bağlantıyı takip ettikten sonra , aşağıya tıklayın",
|
||||
"Once you've followed the link it contains, click below": "Bir kere ' içerdiği bağlantıyı takip ettikten sonra , aşağıya tıklayın",
|
||||
"Only people who have been invited": "Sadece davet edilmiş insanlar",
|
||||
"Operation failed": "Operasyon başarısız oldu",
|
||||
"Otherwise, <a>click here</a> to send a bug report.": "Aksi taktirde , bir hata raporu göndermek için <a> buraya tıklayın </a>.",
|
||||
|
|
|
@ -556,7 +556,7 @@
|
|||
"No users have specific privileges in this room": "此房間中沒有使用者有指定的權限",
|
||||
"olm version:": "olm 版本:",
|
||||
"Once encryption is enabled for a room it cannot be turned off again (for now)": "這個房間只要啟用加密就不能再關掉了(從現在開始)",
|
||||
"Once you've followed the link it contains, click below": "一旦您跟著它所包含的連結,點選下方",
|
||||
"Once you've followed the link it contains, click below": "一旦您跟著它所包含的連結,點選下方",
|
||||
"Only people who have been invited": "僅有被邀請的夥伴",
|
||||
"Otherwise, <a>click here</a> to send a bug report.": "否則,請<a>點選此處</a>來傳送錯誤報告。",
|
||||
"Password": "密碼",
|
||||
|
|
Loading…
Reference in New Issue