diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3ae2711e25..881669a1a2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,177 @@
+Changes in [2.0.0](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v2.0.0) (2020-01-27)
+===================================================================================================
+[Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v2.0.0-rc.2...v2.0.0)
+
+ * Ensure a plaintext version of the composer ends up on the clipboard
+ [\#3923](https://github.com/matrix-org/matrix-react-sdk/pull/3923)
+ * Move & upgrade babel runtime into dependencies (like it wants)
+ [\#3921](https://github.com/matrix-org/matrix-react-sdk/pull/3921)
+ * Don't list every single alias when there's many
+ [\#3919](https://github.com/matrix-org/matrix-react-sdk/pull/3919)
+
+Changes in [2.0.0-rc.2](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v2.0.0-rc.2) (2020-01-20)
+=============================================================================================================
+[Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v2.0.0-rc.1...v2.0.0-rc.2)
+
+ * Add prepublish script
+ [\#3877](https://github.com/matrix-org/matrix-react-sdk/pull/3877)
+
+Changes in [2.0.0-rc.1](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v2.0.0-rc.1) (2020-01-20)
+=============================================================================================================
+[Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v1.7.6...v2.0.0-rc.1)
+
+BREAKING CHANGES
+================
+ * The react-sdk node module now exports ES6 rather than ES5. If you
+ wish to supports target that aren't compatible with ES6, you
+ will need to transpile the react-sdk to a suitable dialect.
+
+All Changes
+===========
+ * Fix arrows keys moving through edit history
+ [\#3874](https://github.com/matrix-org/matrix-react-sdk/pull/3874)
+ * Fix error about MessagePanel not being available for read markers
+ [\#3867](https://github.com/matrix-org/matrix-react-sdk/pull/3867)
+ * Adjust secret storage to work before sync
+ [\#3864](https://github.com/matrix-org/matrix-react-sdk/pull/3864)
+ * Update from Weblate
+ [\#3872](https://github.com/matrix-org/matrix-react-sdk/pull/3872)
+ * Remove unused deps and dev-deps
+ [\#3870](https://github.com/matrix-org/matrix-react-sdk/pull/3870)
+ * Tidy Jest test stuff and dependencies
+ [\#3869](https://github.com/matrix-org/matrix-react-sdk/pull/3869)
+ * Move feature flag check for new session toast
+ [\#3865](https://github.com/matrix-org/matrix-react-sdk/pull/3865)
+ * Catch exception in checkTerms if no ID server
+ [\#3863](https://github.com/matrix-org/matrix-react-sdk/pull/3863)
+ * Catch exception if passphrase dialog cancelled
+ [\#3862](https://github.com/matrix-org/matrix-react-sdk/pull/3862)
+ * Disable key request dialogs with cross-signing
+ [\#3860](https://github.com/matrix-org/matrix-react-sdk/pull/3860)
+ * Toasts for new, unverified sessions
+ [\#3859](https://github.com/matrix-org/matrix-react-sdk/pull/3859)
+ * Check for a matrixclient before trying to use it
+ [\#3861](https://github.com/matrix-org/matrix-react-sdk/pull/3861)
+ * Room header & message box shields now reflect cross-signing state
+ [\#3850](https://github.com/matrix-org/matrix-react-sdk/pull/3850)
+ * Fix Array.concat undefined
+ [\#3857](https://github.com/matrix-org/matrix-react-sdk/pull/3857)
+ * Update chokidar to fix reskindex not working
+ [\#3856](https://github.com/matrix-org/matrix-react-sdk/pull/3856)
+ * Make the new DM invite dialog work for regular invites too
+ [\#3854](https://github.com/matrix-org/matrix-react-sdk/pull/3854)
+ * Fix event handler leak in MemberStatusMessageAvatar
+ [\#3855](https://github.com/matrix-org/matrix-react-sdk/pull/3855)
+ * Move DM creation logic into DMInviteDialog
+ [\#3843](https://github.com/matrix-org/matrix-react-sdk/pull/3843)
+ * Remove all text when cutting in the composer
+ [\#3848](https://github.com/matrix-org/matrix-react-sdk/pull/3848)
+ * Add a ToastStore
+ [\#3853](https://github.com/matrix-org/matrix-react-sdk/pull/3853)
+ * 'Members' button always toggle the right panel
+ [\#3804](https://github.com/matrix-org/matrix-react-sdk/pull/3804)
+ * Fix timing of when Composer considers itself to be modified
+ [\#3842](https://github.com/matrix-org/matrix-react-sdk/pull/3842)
+ * Compute download file icon immediately
+ [\#3851](https://github.com/matrix-org/matrix-react-sdk/pull/3851)
+ * Fix not being able to open profiles from the timeline
+ [\#3852](https://github.com/matrix-org/matrix-react-sdk/pull/3852)
+ * Add post-login complete security flow
+ [\#3847](https://github.com/matrix-org/matrix-react-sdk/pull/3847)
+ * Added cut/copy and pasting user pills from editor.
+ [\#3828](https://github.com/matrix-org/matrix-react-sdk/pull/3828)
+ * Fix imports for help & support tab
+ [\#3846](https://github.com/matrix-org/matrix-react-sdk/pull/3846)
+ * Humanize the recent DM rooms ourselves for translations
+ [\#3841](https://github.com/matrix-org/matrix-react-sdk/pull/3841)
+ * Improve the quality of invite suggestions by filtering out DMs
+ [\#3840](https://github.com/matrix-org/matrix-react-sdk/pull/3840)
+ * Fix linter and tests on develop
+ [\#3845](https://github.com/matrix-org/matrix-react-sdk/pull/3845)
+ * Fix sourcemaps by refactoring the build system
+ [\#3839](https://github.com/matrix-org/matrix-react-sdk/pull/3839)
+ * Don't error on unverified/unknown devices.
+ [\#3837](https://github.com/matrix-org/matrix-react-sdk/pull/3837)
+ * Padlock icons in room header
+ [\#3835](https://github.com/matrix-org/matrix-react-sdk/pull/3835)
+ * Don't allow upgrade from untrusted key backup.
+ [\#3822](https://github.com/matrix-org/matrix-react-sdk/pull/3822)
+ * Emoji verification: Change name of đ to lock
+ [\#3825](https://github.com/matrix-org/matrix-react-sdk/pull/3825)
+ * Room padlock decorations only if cross-signing is enabled
+ [\#3838](https://github.com/matrix-org/matrix-react-sdk/pull/3838)
+ * Enable end-to-end tests for sourcemaps (+Windows instructions)
+ [\#3827](https://github.com/matrix-org/matrix-react-sdk/pull/3827)
+ * Repair community member info panel
+ [\#3832](https://github.com/matrix-org/matrix-react-sdk/pull/3832)
+ * Add feature flag around the presence indicator in room list
+ [\#3831](https://github.com/matrix-org/matrix-react-sdk/pull/3831)
+ * Display a padlock icon beside invite-only rooms in the room list
+ [\#3821](https://github.com/matrix-org/matrix-react-sdk/pull/3821)
+ * Update from Weblate
+ [\#3830](https://github.com/matrix-org/matrix-react-sdk/pull/3830)
+ * Fix listener leak on RoomView
+ [\#3826](https://github.com/matrix-org/matrix-react-sdk/pull/3826)
+ * Regenerate i18n for sourcemaps branch
+ [\#3824](https://github.com/matrix-org/matrix-react-sdk/pull/3824)
+ * Fix tests for sourcemaps branch
+ [\#3823](https://github.com/matrix-org/matrix-react-sdk/pull/3823)
+ * Jest
+ [\#3724](https://github.com/matrix-org/matrix-react-sdk/pull/3724)
+ * Sourcemaps: develop -> feature branch
+ [\#3817](https://github.com/matrix-org/matrix-react-sdk/pull/3817)
+ * Support pasting a bunch of identifiers into the invite dialog
+ [\#3820](https://github.com/matrix-org/matrix-react-sdk/pull/3820)
+ * Support 3PIDs (email addresses) in the invite dialog
+ [\#3819](https://github.com/matrix-org/matrix-react-sdk/pull/3819)
+ * Placeholder PR for cleaner diffs: ES6
+ [\#3765](https://github.com/matrix-org/matrix-react-sdk/pull/3765)
+ * Misc fixes for ES6 imports/exports
+ [\#3766](https://github.com/matrix-org/matrix-react-sdk/pull/3766)
+ * Wire up the invite targets dialog to a real composer and show selections
+ [\#3815](https://github.com/matrix-org/matrix-react-sdk/pull/3815)
+ * Change ref handling in TextualBody to prevent it parsing generated nodes
+ [\#3711](https://github.com/matrix-org/matrix-react-sdk/pull/3711)
+ * Render encoded html entities in og:description
+ [\#3789](https://github.com/matrix-org/matrix-react-sdk/pull/3789)
+ * Update package.json for new build process + cosmetics
+ [\#3767](https://github.com/matrix-org/matrix-react-sdk/pull/3767)
+ * Convert CommonJS exports to ES6 exports
+ [\#3761](https://github.com/matrix-org/matrix-react-sdk/pull/3761)
+ * Round 2 of CommonJS to ES6 imports
+ [\#3764](https://github.com/matrix-org/matrix-react-sdk/pull/3764)
+ * Strip all variation selectors on emoji
+ [\#3814](https://github.com/matrix-org/matrix-react-sdk/pull/3814)
+ * Use the new js-sdk imports and import from src
+ [\#3763](https://github.com/matrix-org/matrix-react-sdk/pull/3763)
+ * Convert many imports to handle ES6 exports
+ [\#3762](https://github.com/matrix-org/matrix-react-sdk/pull/3762)
+ * Fix userinfo for users not in the room
+ [\#3812](https://github.com/matrix-org/matrix-react-sdk/pull/3812)
+ * Attempt to fix e2e tests
+ [\#3811](https://github.com/matrix-org/matrix-react-sdk/pull/3811)
+ * Add bunch of null-guards and similar to fix React Errors/complaints
+ [\#3752](https://github.com/matrix-org/matrix-react-sdk/pull/3752)
+ * Delegate all room alias validation to the RoomAliasField validator
+ [\#3807](https://github.com/matrix-org/matrix-react-sdk/pull/3807)
+ * Support filtering and searching for users to invite in DMs
+ [\#3802](https://github.com/matrix-org/matrix-react-sdk/pull/3802)
+ * Add suggestions for which users to invite to chat
+ [\#3801](https://github.com/matrix-org/matrix-react-sdk/pull/3801)
+ * Use `flex-start` instead of `start` for postcss
+ [\#3760](https://github.com/matrix-org/matrix-react-sdk/pull/3760)
+ * Define getLanguageFromBrowser() for LanguageDropdown
+ [\#3769](https://github.com/matrix-org/matrix-react-sdk/pull/3769)
+ * Introduce babel's export-default-from plugin to fix build errors
+ [\#3768](https://github.com/matrix-org/matrix-react-sdk/pull/3768)
+ * Add a bit of debugging to incorrect components in the Skinner
+ [\#3770](https://github.com/matrix-org/matrix-react-sdk/pull/3770)
+ * [BREAKING] Refactor the entire build process for babel@7 and TypeScript
+ (chunk 1 of many)
+ [\#3722](https://github.com/matrix-org/matrix-react-sdk/pull/3722)
+ * Implementation of new potential skinning mechanism
+ [\#3723](https://github.com/matrix-org/matrix-react-sdk/pull/3723)
+
Changes in [1.7.6](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v1.7.6) (2020-01-13)
===================================================================================================
[Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v1.7.6-rc.2...v1.7.6)
diff --git a/package.json b/package.json
index 0c1d66058a..f0b7e04c73 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "matrix-react-sdk",
- "version": "1.7.6",
+ "version": "2.0.0",
"description": "SDK for matrix.org using React",
"author": "matrix.org",
"repository": {
@@ -80,7 +80,7 @@
"is-ip": "^2.0.0",
"linkifyjs": "^2.1.6",
"lodash": "^4.17.14",
- "matrix-js-sdk": "3.0.0",
+ "matrix-js-sdk": "4.0.0",
"pako": "^1.0.5",
"png-chunks-extract": "^1.0.0",
"prop-types": "^15.5.8",
diff --git a/res/css/_common.scss b/res/css/_common.scss
index abc57a95ed..b92a618504 100644
--- a/res/css/_common.scss
+++ b/res/css/_common.scss
@@ -386,7 +386,13 @@ input[type=text]:focus, input[type=password]:focus, textarea:focus {
text-align: right;
}
-.mx_Dialog button, .mx_Dialog input[type="submit"] {
+/* XXX: Our button style are a mess: buttons that happen to appear in dialogs get special styles applied
+ * to them that no button anywhere else in the app gets by default. In practice, buttons in other places
+ * in the app look the same by being AccessibleButtons, or possibly by having explict button classes.
+ * We should go through and have one consistent set of styles for buttons throughout the app.
+ * For now, I am duplicating the selectors here for mx_Dialog and mx_DialogButtons.
+ */
+.mx_Dialog button, .mx_Dialog input[type="submit"], .mx_Dialog_buttons button, .mx_Dialog_buttons input[type="submit"] {
@mixin mx_DialogButton;
margin-left: 0px;
margin-right: 8px;
@@ -402,27 +408,27 @@ input[type=text]:focus, input[type=password]:focus, textarea:focus {
margin-right: 0px;
}
-.mx_Dialog button:hover, .mx_Dialog input[type="submit"]:hover {
+.mx_Dialog button:hover, .mx_Dialog input[type="submit"]:hover, .mx_Dialog_buttons button:hover, .mx_Dialog_buttons input[type="submit"]:hover {
@mixin mx_DialogButton_hover;
}
-.mx_Dialog button:focus, .mx_Dialog input[type="submit"]:focus {
+.mx_Dialog button:focus, .mx_Dialog input[type="submit"]:focus, .mx_Dialog_buttons button:focus, .mx_Dialog_buttons input[type="submit"]:focus {
filter: brightness($focus-brightness);
}
-.mx_Dialog button.mx_Dialog_primary, .mx_Dialog input[type="submit"].mx_Dialog_primary {
+.mx_Dialog button.mx_Dialog_primary, .mx_Dialog input[type="submit"].mx_Dialog_primary, .mx_Dialog_buttons button.mx_Dialog_primary, .mx_Dialog_buttons input[type="submit"].mx_Dialog_primary {
color: $accent-fg-color;
background-color: $accent-color;
min-width: 156px;
}
-.mx_Dialog button.danger, .mx_Dialog input[type="submit"].danger {
+.mx_Dialog button.danger, .mx_Dialog input[type="submit"].danger, .mx_Dialog_buttons button.danger, .mx_Dialog_buttons input[type="submit"].danger {
background-color: $warning-color;
border: solid 1px $warning-color;
color: $accent-fg-color;
}
-.mx_Dialog button:disabled, .mx_Dialog input[type="submit"]:disabled {
+.mx_Dialog button:disabled, .mx_Dialog input[type="submit"]:disabled, .mx_Dialog_buttons button:disabled, .mx_Dialog_buttons input[type="submit"]:disabled {
background-color: $light-fg-color;
border: solid 1px $light-fg-color;
opacity: 0.7;
diff --git a/res/css/views/auth/_AuthBody.scss b/res/css/views/auth/_AuthBody.scss
index d342de6d75..51b9775811 100644
--- a/res/css/views/auth/_AuthBody.scss
+++ b/res/css/views/auth/_AuthBody.scss
@@ -15,13 +15,10 @@ limitations under the License.
*/
.mx_AuthBody {
- width: 500px;
background-color: $authpage-body-bg-color;
border-radius: 0 4px 4px 0;
padding: 25px 60px;
box-sizing: border-box;
- font-size: 12px;
- color: $authpage-secondary-color;
h2 {
font-size: 24px;
@@ -99,6 +96,12 @@ limitations under the License.
border-radius: 4px;
}
+.mx_AuthBody_loginRegister {
+ width: 500px;
+ font-size: 12px;
+ color: $authpage-secondary-color;
+}
+
.mx_AuthBody_editServerDetails {
padding-left: 1em;
font-size: 12px;
diff --git a/res/css/views/dialogs/secretstorage/_CreateSecretStorageDialog.scss b/res/css/views/dialogs/secretstorage/_CreateSecretStorageDialog.scss
index ed5aaa05a3..53e82670e1 100644
--- a/res/css/views/dialogs/secretstorage/_CreateSecretStorageDialog.scss
+++ b/res/css/views/dialogs/secretstorage/_CreateSecretStorageDialog.scss
@@ -78,6 +78,10 @@ limitations under the License.
align-items: center;
}
+.mx_CreateSecretStorageDialog_recoveryKeyButtons .mx_AccessibleButton {
+ margin-right: 10px;
+}
+
.mx_CreateSecretStorageDialog_recoveryKeyButtons button {
flex: 1;
white-space: nowrap;
diff --git a/res/css/views/right_panel/_UserInfo.scss b/res/css/views/right_panel/_UserInfo.scss
index 8aad5240aa..9db636ae6b 100644
--- a/res/css/views/right_panel/_UserInfo.scss
+++ b/res/css/views/right_panel/_UserInfo.scss
@@ -109,7 +109,7 @@ limitations under the License.
justify-content: center;
// override the calculated sizes so that the letter isn't HUGE
- font-size: 26px !important;
+ font-size: 56px !important;
width: 100% !important;
}
diff --git a/src/DeviceListener.js b/src/DeviceListener.js
index a4c5785db4..630d1a61c0 100644
--- a/src/DeviceListener.js
+++ b/src/DeviceListener.js
@@ -20,10 +20,13 @@ import * as sdk from './index';
import { _t } from './languageHandler';
import ToastStore from './stores/ToastStore';
-function toastKey(device) {
- return 'newsession_' + device.deviceId;
+function toastKey(deviceId) {
+ return 'newsession_' + deviceId;
}
+const KEY_BACKUP_POLL_INTERVAL = 5 * 60 * 1000;
+const THIS_DEVICE_TOAST_KEY = 'setupencryption';
+
export default class DeviceListener {
static sharedInstance() {
if (!global.mx_DeviceListener) global.mx_DeviceListener = new DeviceListener();
@@ -31,44 +34,120 @@ export default class DeviceListener {
}
constructor() {
+ // set of device IDs we're currently showing toasts for
+ this._activeNagToasts = new Set();
// device IDs for which the user has dismissed the verify toast ('Later')
this._dismissed = new Set();
+ // has the user dismissed any of the various nag toasts to setup encryption on this device?
+ this._dismissedThisDeviceToast = false;
+
+ // cache of the key backup info
+ this._keyBackupInfo = null;
+ this._keyBackupFetchedAt = null;
}
start() {
MatrixClientPeg.get().on('crypto.devicesUpdated', this._onDevicesUpdated);
MatrixClientPeg.get().on('deviceVerificationChanged', this._onDeviceVerificationChanged);
- this.recheck();
+ MatrixClientPeg.get().on('userTrustStatusChanged', this._onUserTrustStatusChanged);
+ this._recheck();
}
stop() {
if (MatrixClientPeg.get()) {
MatrixClientPeg.get().removeListener('crypto.devicesUpdated', this._onDevicesUpdated);
MatrixClientPeg.get().removeListener('deviceVerificationChanged', this._onDeviceVerificationChanged);
+ MatrixClientPeg.get().removeListener('userTrustStatusChanged', this._onUserTrustStatusChanged);
}
this._dismissed.clear();
}
dismissVerification(deviceId) {
this._dismissed.add(deviceId);
- this.recheck();
+ this._recheck();
+ }
+
+ dismissEncryptionSetup() {
+ this._dismissedThisDeviceToast = true;
+ this._recheck();
}
_onDevicesUpdated = (users) => {
if (!users.includes(MatrixClientPeg.get().getUserId())) return;
- this.recheck();
+ this._recheck();
}
_onDeviceVerificationChanged = (users) => {
if (!users.includes(MatrixClientPeg.get().getUserId())) return;
- this.recheck();
+ this._recheck();
}
- async recheck() {
+ _onUserTrustStatusChanged = (userId, trustLevel) => {
+ if (userId !== MatrixClientPeg.get().getUserId()) return;
+ this._recheck();
+ }
+
+ // The server doesn't tell us when key backup is set up, so we poll
+ // & cache the result
+ async _getKeyBackupInfo() {
+ const now = (new Date()).getTime();
+ if (!this._keyBackupInfo || this._keyBackupFetchedAt < now - KEY_BACKUP_POLL_INTERVAL) {
+ this._keyBackupInfo = await MatrixClientPeg.get().getKeyBackupVersion();
+ this._keyBackupFetchedAt = now;
+ }
+ return this._keyBackupInfo;
+ }
+
+ async _recheck() {
if (!SettingsStore.isFeatureEnabled("feature_cross_signing")) return;
const cli = MatrixClientPeg.get();
- if (!cli.isCryptoEnabled()) return false;
+ if (!cli.isCryptoEnabled()) return;
+ if (!cli.getCrossSigningId()) {
+ if (this._dismissedThisDeviceToast) {
+ ToastStore.sharedInstance().dismissToast(THIS_DEVICE_TOAST_KEY);
+ return;
+ }
+
+ // cross signing isn't enabled - nag to enable it
+ // There are 3 different toasts for:
+ if (cli.getStoredCrossSigningForUser(cli.getUserId())) {
+ // Cross-signing on account but this device doesn't trust the master key (verify this session)
+ ToastStore.sharedInstance().addOrReplaceToast({
+ key: THIS_DEVICE_TOAST_KEY,
+ title: _t("Verify this session"),
+ icon: "verification_warning",
+ props: {kind: 'verify_this_session'},
+ component: sdk.getComponent("toasts.SetupEncryptionToast"),
+ });
+ } else {
+ const backupInfo = await this._getKeyBackupInfo();
+ if (backupInfo) {
+ // No cross-signing on account but key backup available (upgrade encryption)
+ ToastStore.sharedInstance().addOrReplaceToast({
+ key: THIS_DEVICE_TOAST_KEY,
+ title: _t("Encryption upgrade available"),
+ icon: "verification_warning",
+ props: {kind: 'upgrade_encryption'},
+ component: sdk.getComponent("toasts.SetupEncryptionToast"),
+ });
+ } else {
+ // No cross-signing or key backup on account (set up encryption)
+ ToastStore.sharedInstance().addOrReplaceToast({
+ key: THIS_DEVICE_TOAST_KEY,
+ title: _t("Set up encryption"),
+ icon: "verification_warning",
+ props: {kind: 'set_up_encryption'},
+ component: sdk.getComponent("toasts.SetupEncryptionToast"),
+ });
+ }
+ }
+ return;
+ } else {
+ ToastStore.sharedInstance().dismissToast(THIS_DEVICE_TOAST_KEY);
+ }
+
+ const newActiveToasts = new Set();
const devices = await cli.getStoredDevicesForUser(cli.getUserId());
for (const device of devices) {
@@ -76,16 +155,24 @@ export default class DeviceListener {
const deviceTrust = await cli.checkDeviceTrust(cli.getUserId(), device.deviceId);
if (deviceTrust.isCrossSigningVerified() || this._dismissed.has(device.deviceId)) {
- ToastStore.sharedInstance().dismissToast(toastKey(device));
+ ToastStore.sharedInstance().dismissToast(toastKey(device.deviceId));
} else {
+ this._activeNagToasts.add(device.deviceId);
ToastStore.sharedInstance().addOrReplaceToast({
- key: toastKey(device),
+ key: toastKey(device.deviceId),
title: _t("New Session"),
icon: "verification_warning",
props: {deviceId: device.deviceId},
component: sdk.getComponent("toasts.NewSessionToast"),
});
+ newActiveToasts.add(device.deviceId);
}
}
+
+ // clear any other outstanding toasts (eg. logged out devices)
+ for (const deviceId of this._activeNagToasts) {
+ if (!newActiveToasts.has(deviceId)) ToastStore.sharedInstance().dismissToast(toastKey(deviceId));
+ }
+ this._activeNagToasts = newActiveToasts;
}
}
diff --git a/src/TextForEvent.js b/src/TextForEvent.js
index 6a2744109b..cdfea45ad7 100644
--- a/src/TextForEvent.js
+++ b/src/TextForEvent.js
@@ -444,10 +444,19 @@ function textForHistoryVisibilityEvent(event) {
function textForEncryptionEvent(event) {
const senderName = event.sender ? event.sender.name : event.getSender();
- return _t('%(senderName)s turned on end-to-end encryption (algorithm %(algorithm)s).', {
- senderName,
- algorithm: event.getContent().algorithm,
- });
+ if (event.getContent().algorithm === "m.megolm.v1.aes-sha2") {
+ return _t('%(senderName)s turned on end-to-end encryption.', {
+ senderName,
+ });
+ }
+ return _t(
+ '%(senderName)s turned on end-to-end encryption ' +
+ '(unrecognised algorithm %(algorithm)s).',
+ {
+ senderName,
+ algorithm: event.getContent().algorithm,
+ },
+ );
}
// Currently will only display a change if a user's power level is changed
diff --git a/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js b/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js
index 8fd881fc32..0867cae6f4 100644
--- a/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js
+++ b/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js
@@ -16,6 +16,7 @@ limitations under the License.
*/
import React from 'react';
+import PropTypes from 'prop-types';
import * as sdk from '../../../../index';
import {MatrixClientPeg} from '../../../../MatrixClientPeg';
import { scorePassword } from '../../../../utils/PasswordScorer';
@@ -52,6 +53,15 @@ function selectText(target) {
* Secret Storage in account data.
*/
export default class CreateSecretStorageDialog extends React.PureComponent {
+ static propTypes = {
+ hasCancel: PropTypes.bool,
+ accountPassword: PropTypes.string,
+ };
+
+ defaultProps = {
+ hasCancel: true,
+ };
+
constructor(props) {
super(props);
@@ -73,7 +83,7 @@ export default class CreateSecretStorageDialog extends React.PureComponent {
// does the server offer a UI auth flow with just m.login.password
// for /keys/device_signing/upload?
canUploadKeysWithPasswordOnly: null,
- accountPassword: '',
+ accountPassword: props.accountPassword,
accountPasswordCorrect: null,
// set if we are 'upgrading' encryption (making an SSSS store from
// an existing key backup secret).
@@ -82,9 +92,12 @@ export default class CreateSecretStorageDialog extends React.PureComponent {
this._fetchBackupInfo();
this._queryKeyUploadAuth();
+
+ MatrixClientPeg.get().on('crypto.keyBackupStatus', this._onKeyBackupStatusChange);
}
componentWillUnmount() {
+ MatrixClientPeg.get().removeListener('crypto.keyBackupStatus', this._onKeyBackupStatusChange);
if (this._setZxcvbnResultTimeout !== null) {
clearTimeout(this._setZxcvbnResultTimeout);
}
@@ -92,7 +105,10 @@ export default class CreateSecretStorageDialog extends React.PureComponent {
async _fetchBackupInfo() {
const backupInfo = await MatrixClientPeg.get().getKeyBackupVersion();
- const backupSigStatus = await MatrixClientPeg.get().isKeyBackupTrusted(backupInfo);
+ const backupSigStatus = (
+ // we may not have started crypto yet, in which case we definitely don't trust the backup
+ MatrixClientPeg.get().isCryptoEnabled() && await MatrixClientPeg.get().isKeyBackupTrusted(backupInfo)
+ );
const phase = backupInfo ?
(backupSigStatus.usable ? PHASE_MIGRATE : PHASE_RESTORE_KEY_BACKUP) :
@@ -127,6 +143,10 @@ export default class CreateSecretStorageDialog extends React.PureComponent {
}
}
+ _onKeyBackupStatusChange = () => {
+ this._fetchBackupInfo();
+ }
+
_collectRecoveryKeyNode = (n) => {
this._recoveryKeyNode = n;
}
@@ -229,7 +249,7 @@ export default class CreateSecretStorageDialog extends React.PureComponent {
_onRestoreKeyBackupClick = () => {
const RestoreKeyBackupDialog = sdk.getComponent('dialogs.keybackup.RestoreKeyBackupDialog');
Modal.createTrackedDialog(
- 'Restore Backup', '', RestoreKeyBackupDialog, null, null,
+ 'Restore Backup', '', RestoreKeyBackupDialog, {showSummary: false}, null,
/* priority = */ false, /* static = */ true,
);
}
@@ -411,6 +431,7 @@ export default class CreateSecretStorageDialog extends React.PureComponent {
_renderPhasePassPhrase() {
const DialogButtons = sdk.getComponent('views.elements.DialogButtons');
const Field = sdk.getComponent('views.elements.Field');
+ const AccessibleButton = sdk.getComponent('elements.AccessibleButton');
let strengthMeter;
let helpText;
@@ -472,9 +493,9 @@ export default class CreateSecretStorageDialog extends React.PureComponent {
{_t("Advanced")}
-
+
{_t(
"Your recovery key is a safety net - you can use it to restore " +
@@ -572,12 +594,12 @@ export default class CreateSecretStorageDialog extends React.PureComponent {
{this._encodedRecoveryKey}
{_t("Restored %(sessionCount)s session keys", {sessionCount: this.state.recoverInfo.imported})}
{failedToDecrypt} +/help
to list available commands. Did you mean to send this as a message?": "/help
erabili dezakezu agindu erabilgarrien zerrenda ikusteko. Ala mezu gisa bidali nahi zenuen hau?",
+ "Hint: Begin your message with //
to start it with a slash.": "Aholkua: Hasi zure mezua //
idatziz barra batekin hasi nahi baduzu.",
+ "Send as message": "Bidali mezu gisa",
+ "Verify User": "Egiaztatu erabiltzailea",
+ "For extra security, verify this user by checking a one-time code on both of your devices.": "Segurtasun gehiagorako, egiaztatu erabiltzaile hau aldi-bakarrerako kode bat bi gailuetan egiaztatuz.",
+ "For maximum security, do this in person.": "Segurtasun gorenerako, egin hau aurrez aurre.",
+ "Start Verification": "Hasi egiaztaketa",
+ "If you can't find someone, ask them for their username, share your username (%(userId)s) or profile link.": "Ez baduzu baten bat aurkitzen, eskatu bere erabiltzaile-izena, partekatu zurea (%(userId)s) edo partekatu profilaren esteka.",
+ "Enter your account password to confirm the upgrade:": "Sartu zure kontuaren pasa-hitza eguneraketa baieztatzeko:",
+ "You'll need to authenticate with the server to confirm the upgrade.": "Zerbitzariarekin autentifikatu beharko duzu eguneraketa baieztatzeko.",
+ "Upgrade this device to allow it to verify other devices, granting them access to encrypted messages and marking them as trusted for other users.": "Eguneratu gailu hau honek beste gailuak egiaztatu ahal izateko, horrela zifratutako mezuetara sarbidea emanez eta beste erabiltzaileentzat fidagarri gisa markatzeko.",
+ "Set up encryption on this device to allow it to verify other devices, granting them access to encrypted messages and marking them as trusted for other users.": "Ezarri zifratzea gailu honetan honek beste gailuak egiaztatu ahal izateko, horrela zifratutako mezuetara sarbidea emanez eta beste erabiltzaileentzat fidagarri gisa markatzeko.",
+ "Secure your encryption keys with a passphrase. For maximum security this should be different to your account password:": "Babestu zure zifratze gakoak pasa-esaldi batekin. Segurtasun gorenerako hau eta zure kontuaren pasahitza desberdinak izan beharko lukete:",
+ "Enter a passphrase": "Sartu pasa-esaldia",
+ "Enter your passphrase a second time to confirm it.": "Sartu zure pasa-esaldia berriro hau baieztatzeko.",
+ "This device can now verify other devices, granting them access to encrypted messages and marking them as trusted for other users.": "Gailu honek beste gailuak egiaztatu ditzake, horrela zifratutako mezuetara sarbidea emanez eta beste erabiltzaileentzat fidagarri gisa markatuz.",
+ "Verify other users in their profile.": "Egiaztatu beste erabiltzaileak bere profiletan.",
+ "Upgrade your encryption": "Eguneratu zure zifratzea",
+ "Set up encryption": "Ezarri zifratzea",
+ "Encryption upgraded": "Zifratzea eguneratuta",
+ "Encryption setup complete": "Zifratzearen ezarpena egina"
}
diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json
index d1c4f7379c..1ddcc55544 100644
--- a/src/i18n/strings/fr.json
+++ b/src/i18n/strings/fr.json
@@ -2075,5 +2075,41 @@
"Secret Storage will be set up using your existing key backup details. Your secret storage passphrase and recovery key will be the same as they were for your key backup.": "Le coffre secret sera configurĂ© en utilisant les dĂ©tails existants de votre sauvegarde de clĂ©s. Votre phrase de passe et votre clĂ© de rĂ©cupĂ©ration seront les mĂȘmes que celles de votre sauvegarde de clĂ©s.",
"New Session": "Nouvelle session",
"Other users may not trust it": "Dâautres utilisateurs pourraient ne pas lui faire confiance",
- "Later": "Plus tard"
+ "Later": "Plus tard",
+ "Verify User": "VĂ©rifier lâutilisateur",
+ "For extra security, verify this user by checking a one-time code on both of your devices.": "Pour une meilleure sécurité, vérifiez cet utilisateur en comparant un code à usage unique sur vos deux appareils.",
+ "For maximum security, do this in person.": "Pour une sécurité maximale, faites-le en personne.",
+ "Start Verification": "Commencer la vérification",
+ "Encrypted by a deleted device": "Chiffré par un appareil supprimé",
+ "Unknown Command": "Commande inconnue",
+ "Unrecognised command: %(commandText)s": "Commande non reconnue : %(commandText)s",
+ "You can use /help
to list available commands. Did you mean to send this as a message?": "Vous pouvez utiliser /help
pour obtenir la liste des commandes disponibles. Vouliez-vous envoyer un message ?",
+ "Hint: Begin your message with //
to start it with a slash.": "Astuce : Votre message doit démarrer par //
pour commencer par une barre oblique.",
+ "Send as message": "Envoyer comme message",
+ "%(senderName)s added %(addedAddresses)s and %(count)s other addresses to this room|other": "%(senderName)s a ajouté %(addedAddresses)s et %(count)s autres adresses à ce salon",
+ "%(senderName)s removed %(removedAddresses)s and %(count)s other addresses from this room|other": "%(senderName)s a supprimé %(removedAddresses)s et %(count)s autres adresses de ce salon",
+ "%(senderName)s removed %(countRemoved)s and added %(countAdded)s addresses to this room": "%(senderName)s a supprimé %(countRemoved)s et ajouté %(countAdded)s adresses à ce salon",
+ "Reject & Ignore user": "Rejeter et ignorer lâutilisateur",
+ "Enter your account password to confirm the upgrade:": "Saisissez le mot de passe de votre compte pour confirmer la mise à niveau :",
+ "You'll need to authenticate with the server to confirm the upgrade.": "Vous devrez vous identifier avec le serveur pour confirmer la mise Ă niveau.",
+ "Upgrade this device to allow it to verify other devices, granting them access to encrypted messages and marking them as trusted for other users.": "Mettez Ă niveau cet appareil pour lui permettre de vĂ©rifier dâautres appareils, qui pourront alors accĂ©der aux messages chiffrĂ©s et seront vus comme fiables par les autres utilisateurs.",
+ "Set up encryption on this device to allow it to verify other devices, granting them access to encrypted messages and marking them as trusted for other users.": "Configurez le chiffrement sur cet appareil pour lui permettre de vĂ©rifier dâautres appareils, qui pourront alors accĂ©der aux messages chiffrĂ©s et seront vus comme fiables par les autres utilisateurs.",
+ "Secure your encryption keys with a passphrase. For maximum security this should be different to your account password:": "SĂ©curisez vos clĂ©s de chiffrement avec une phrase de passe. Pour une sĂ©curitĂ© maximale, elle devrait ĂȘtre diffĂ©rente du mot de passe de votre compte :",
+ "Enter a passphrase": "Saisissez une phrase de passe",
+ "Enter your passphrase a second time to confirm it.": "Saisissez votre phrase de passe une seconde fois pour la confirmer.",
+ "This device can now verify other devices, granting them access to encrypted messages and marking them as trusted for other users.": "Cet appareil peut Ă prĂ©sent vĂ©rifier dâautres appareils, qui pourront alors accĂ©der aux messages chiffrĂ©s et seront vus comme fiables par les autres utilisateurs.",
+ "Verify other users in their profile.": "VĂ©rifiez dâautres utilisateurs dans leur profil.",
+ "Upgrade your encryption": "Mettre Ă niveau votre chiffrement",
+ "Set up encryption": "Configurer le chiffrement",
+ "Encryption upgraded": "Chiffrement mis Ă niveau",
+ "Encryption setup complete": "Configuration du chiffrement terminé",
+ "%(senderName)s turned on end-to-end encryption.": "%(senderName)s a activé le chiffrement de bout en bout.",
+ "%(senderName)s turned on end-to-end encryption (unrecognised algorithm %(algorithm)s).": "%(senderName)s a activé le chiffrement de bout en bout (algorithme %(algorithm)s non reconnu).",
+ "Someone is using an unknown device": "Quelqu'un utilise un appareil inconnu",
+ "This room is end-to-end encrypted": "Ce salon est chiffré de bout en bout",
+ "Everyone in this room is verified": "Tout le monde dans ce salon est vérifié",
+ "Invite only": "Uniquement sur invitation",
+ "Send a replyâŠ": "Envoyer une rĂ©ponseâŠ",
+ "Send a messageâŠ": "Envoyer un messageâŠ",
+ "If you can't find someone, ask them for their username, share your username (%(userId)s) or profile link.": "Si vous nâarrivez pas Ă trouver quelquâun, demandez-lui son nom dâutilisateur, partagez votre nom dâutilisateur (%(userId)s) ou votre lien de profil."
}
diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json
index e5b9f637f1..d2b877a8de 100644
--- a/src/i18n/strings/hu.json
+++ b/src/i18n/strings/hu.json
@@ -138,7 +138,7 @@
"Failed to toggle moderator status": "ModerĂĄtor stĂĄtuszt nem sikerĂŒlt ĂĄtĂĄllĂtani",
"Failed to unban": "KizĂĄrĂĄs visszavonĂĄsa sikertelen",
"Failed to upload profile picture!": "Profil kép feltöltése sikertelen!",
- "Failed to verify email address: make sure you clicked the link in the email": "E-mail cĂm ellenĆrzĂ©se sikertelen: ellenĆrizd, hogy az e-mailnĂ©l lĂ©vĆ linkre rĂĄkattintottĂĄl",
+ "Failed to verify email address: make sure you clicked the link in the email": "E-mail cĂm ellenĆrzĂ©se sikertelen: ellenĆrizd, hogy az e-mailben lĂ©vĆ hivatkozĂĄsra kattintottĂĄl",
"Failure to create room": "Szoba létrehozåsa sikertelen",
"Favourites": "Kedvencek",
"Fill screen": "KĂ©pernyĆ kitöltĂ©se",
@@ -355,7 +355,7 @@
"You need to be able to invite users to do that.": "Hogy ezt csinĂĄlhasd meg kell tudnod hĂvni felhasznĂĄlĂłkat.",
"You need to be logged in.": "Be kell jelentkezz.",
"Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "Ez az e-mail cĂm, Ășgy nĂ©z ki, nincs összekötve a Matrix azonosĂtĂłval ezen a Matrix szerveren.",
- "Your password was successfully changed. You will not receive push notifications on other devices until you log back in to them": "A jelszavadat sikeresen megvĂĄltoztattuk. Nem kapsz \"push\" Ă©rtesĂtĂ©seket amĂg a többi eszközön vissza nem jelentkezel",
+ "Your password was successfully changed. You will not receive push notifications on other devices until you log back in to them": "A jelszavadat sikeresen megvĂĄltoztattuk. Addig nem fogsz lekĂŒldĂ©ses Ă©rtesĂtĂ©seket kapni, amĂg a többi eszközön vissza nem jelentkezel",
"You seem to be in a call, are you sure you want to quit?": "Ăgy tƱnik hĂvĂĄsban vagy, biztosan kilĂ©psz?",
"You seem to be uploading files, are you sure you want to quit?": "Ăgy tƱnik fĂĄjlokat töltesz fel, biztosan kilĂ©psz?",
"You will not be able to undo this change as you are promoting the user to have the same power level as yourself.": "Nem leszel képes visszavonni ezt a våltoztatåst mivel a felhasznålót ugyanarra a szintre emeled amin te vagy.",
@@ -451,7 +451,7 @@
"Username available": "Szabad felhasznålói név",
"Username not available": "A felhasznålói név foglalt",
"Something went wrong!": "Valami tönkrement!",
- "If you already have a Matrix account you can log in instead.": "Ha mår van Matrix fiókod akkor beléphetsz helyette.",
+ "If you already have a Matrix account you can log in instead.": "Ha mår van Matrix fiókod, akkor beléphetsz helyette.",
"Your browser does not support the required cryptography extensions": "A böngĂ©szĆd nem tĂĄmogatja a szĂŒksĂ©ges titkosĂtĂĄsi kiterjesztĂ©st",
"Not a valid Riot keyfile": "Nem érvényes Riot kulcsfåjl",
"Authentication check failed: incorrect password?": "AzonosĂtĂĄs sikertelen: hibĂĄs jelszĂł?",
@@ -929,7 +929,7 @@
"To continue using the %(homeserverDomain)s homeserver you must review and agree to our terms and conditions.": "A %(homeserverDomain)s szerver hasznĂĄlatĂĄnak folytatĂĄsĂĄhoz el kell olvasnod Ă©s el kell fogadnod az ĂĄltalĂĄnos szerzĆdĂ©si feltĂ©teleket.",
"Review terms and conditions": "ĂltalĂĄnos SzerzĆdĂ©si FeltĂ©telek elolvasĂĄsa",
"To continue, please enter your password:": "FolytatĂĄshoz add meg a jelszavad:",
- "This will make your account permanently unusable. You will not be able to log in, and no one will be able to re-register the same user ID. This will cause your account to leave all rooms it is participating in, and it will remove your account details from your identity server. This action is irreversible.": "Ez vĂ©gleg hasznĂĄlhatatlannĂĄ teszi a fiĂłkodat. EzutĂĄn nem fogsz tudni bejelentkezni, Ă©s mĂĄs sem tud majd ezzel az azonosĂtĂłval fiĂłkot lĂ©trehozni. Minden szobĂĄbĂłl amibe belĂ©ptĂ©l ki fogsz lĂ©pni, Ă©s törölni fogja minden fiĂłk adatod az \"identity\" szerverrĆl. Ez a mƱvelet visszafordĂthatatlan.",
+ "This will make your account permanently unusable. You will not be able to log in, and no one will be able to re-register the same user ID. This will cause your account to leave all rooms it is participating in, and it will remove your account details from your identity server. This action is irreversible.": "Ez vĂ©gleg hasznĂĄlhatatlannĂĄ teszi a fiĂłkodat. EzutĂĄn nem fogsz tudni bejelentkezni, Ă©s mĂĄs sem tud majd ezzel az azonosĂtĂłval fiĂłkot lĂ©trehozni. Minden szobĂĄbĂłl amibe belĂ©ptĂ©l ki fogsz lĂ©pni, Ă©s törölni fogja minden fiĂłk adatod az szemĂ©lyazonossĂĄgod biztosĂtĂł szerverrĆl. Ez a mƱvelet visszafordĂthatatlan.",
"Deactivating your account does not by default cause us to forget messages you have sent. If you would like us to forget your messages, please tick the box below.": "A fiĂłkod felfĂŒggesztĂ©se nem jelenti alapĂ©rtelmezetten azt, hogy az ĂĄltalad kĂŒldött ĂŒzenetek elfelejtĆdnek. Ha törölni szeretnĂ©d az ĂĄltalad kĂŒldött ĂŒzeneteket, pipĂĄld be a jelölĆnĂ©gyzetet alul.",
"Message visibility in Matrix is similar to email. Our forgetting your messages means that messages you have sent will not be shared with any new or unregistered users, but registered users who already have access to these messages will still have access to their copy.": "Az ĂŒzenetek lĂĄthatĂłsĂĄga a Matrix-ban hasonlĂt az emailhez. Az ĂĄltalad kĂŒldött ĂŒzenet törlĂ©se azt jelenti, hogy nem osztjuk meg Ășj-, vagy vendĂ©g felhasznĂĄlĂłval de a mĂĄr regisztrĂĄlt felhasznĂĄlĂłk akik mĂĄr hozzĂĄfĂ©rtek az ĂŒzenethez tovĂĄbbra is elĂ©rik a sajĂĄt mĂĄsolatukat.",
"Please forget all messages I have sent when my account is deactivated (Warning: this will cause future users to see an incomplete view of conversations)": "KĂ©rlek töröld az összes ĂĄltalam kĂŒldött ĂŒzenetet amikor a fiĂłkomat felfĂŒggesztem (Figyelem: ez azt eredmĂ©nyezheti, hogy a jövĆbeni felhasznĂĄlĂłk csak rĂ©szleges beszĂ©lgetĂ©st lĂĄtnak majd)",
@@ -981,7 +981,7 @@
"Please contact your service administrator to get this limit increased.": "A korlåt emelése érdekében kérlek vedd fel a kapcsolatot a szolgåltatås adminisztråtoråval.",
"This homeserver has hit its Monthly Active User limit so some users will not be able to log in.": "Ez a Matrix szerver elĂ©rte a havi aktĂv felhasznĂĄlĂłi korlĂĄtjĂĄt nĂ©hĂĄny felhasznĂĄlĂł nem fog tudni bejelentkezni.",
"This homeserver has exceeded one of its resource limits so some users will not be able to log in.": "Ez a Matrix szerver tĂșllĂ©pte valamelyik erĆforrĂĄs korlĂĄtjĂĄt Ăgy nĂ©hĂĄny felhasznĂĄlĂł nem tud majd bejelentkezni.",
- "Upgrade Room Version": "Szoba verziĂłjĂĄnak frissĂtĂ©se",
+ "Upgrade Room Version": "Szoba verziójånak fejlesztése",
"Create a new room with the same name, description and avatar": "KĂ©szĂts egy Ășj szobĂĄt ugyanazzal a nĂ©vvel, leĂrĂĄssal Ă©s profilkĂ©ppel",
"Update any local room aliases to point to the new room": "ĂllĂts ĂĄt minden helyi alternatĂv nevet erre a szobĂĄra",
"Stop users from speaking in the old version of the room, and post a message advising users to move to the new room": "A felhasznĂĄlĂłknak tiltsd meg, hogy a rĂ©gi szobĂĄban beszĂ©lgessenek. KĂŒldj egy ĂŒzenetet amiben megkĂ©red a felhasznĂĄlĂłkat, hogy menjenek ĂĄt az Ășj szobĂĄba",
@@ -996,9 +996,9 @@
"The conversation continues here.": "A beszélgetés itt folytatódik.",
"This room is a continuation of another conversation.": "Ebben a szobåban folytatódik egy måsik beszélgetés.",
"Click here to see older messages.": "Ide kattintva megnĂ©zheted a rĂ©gi ĂŒzeneteket.",
- "Failed to upgrade room": "A szoba frissĂtĂ©se sikertelen",
- "The room upgrade could not be completed": "A szoba frissĂtĂ©sĂ©t nem sikerĂŒlt befejezni",
- "Upgrade this room to version %(version)s": "A szoba frissĂtĂ©se %(version)s verziĂłra",
+ "Failed to upgrade room": "A szoba fejlesztése sikertelen",
+ "The room upgrade could not be completed": "A szoba fejlesztĂ©sĂ©t nem sikerĂŒlt befejezni",
+ "Upgrade this room to version %(version)s": "A szoba fejlesztése %(version)s verzióra",
"Forces the current outbound group session in an encrypted room to be discarded": "A jelenlegi csoport munkamenet törlĂ©sĂ©t kikĂ©nyszerĂti a titkosĂtott szobĂĄban",
"Registration Required": "Regisztråciót igényel",
"You need to register to do this. Would you like to register now?": "Hogy ezt megtedd regisztrålnod kell. Szeretnél regisztrålni?",
@@ -1053,7 +1053,7 @@
"Print it and store it somewhere safe": "Nyomtad ki Ă©s tĂĄrold biztonsĂĄgos helyen",
"Save it on a USB key or backup drive": "Mentsd el egy Pendrive-ra vagy a biztonsågi mentésekhez",
"Copy it to your personal cloud storage": "MĂĄsold fel a szemĂ©lyes felhĆdbe",
- "Without setting up Secure Message Recovery, you won't be able to restore your encrypted message history if you log out or use another device.": "A BiztonsĂĄgos Ăzenet VisszaĂĄllĂtĂĄs beĂĄllĂtĂĄsa nĂ©lkĂŒl ha kijelentkezel vagy mĂĄsik eszközt hasznĂĄlsz, akkor nem tudod visszaĂĄllĂtani a rĂ©gi titkosĂtott ĂŒzeneteidet.",
+ "Without setting up Secure Message Recovery, you won't be able to restore your encrypted message history if you log out or use another device.": "A BiztonsĂĄgos ĂŒzenet-visszaĂĄllĂtĂĄs beĂĄllĂtĂĄsa nĂ©lkĂŒl ha kijelentkezel vagy mĂĄsik eszközt hasznĂĄlsz, akkor nem tudod visszaĂĄllĂtani a rĂ©gi titkosĂtott ĂŒzeneteidet.",
"Set up Secure Message Recovery": "BiztonsĂĄgos Ăzenet VisszaĂĄllĂtĂĄs beĂĄllĂtĂĄsa",
"Keep it safe": "Tartsd biztonsĂĄgban",
"Create Key Backup": "Kulcs mentĂ©s kĂ©szĂtĂ©se",
@@ -1140,9 +1140,9 @@
"Invite anyway and never warn me again": "MindenkĂ©ppen meghĂv Ă©s ne figyelmeztess többet",
"Invite anyway": "MindenkĂ©ppen meghĂv",
"Whether or not you're logged in (we don't record your username)": "Se akkor ha bejelentkezel se akkor ha nem; mi nem tĂĄroljuk a felhasznĂĄlĂłi nevedet",
- "Upgrades a room to a new version": "Szoba frissĂtĂ©se Ășj verziĂłra",
+ "Upgrades a room to a new version": "Szoba fejlesztĂ©se Ășj verziĂłra",
"Sets the room name": "SzobanĂ©v beĂĄllĂtĂĄsa",
- "%(senderDisplayName)s upgraded this room.": "%(senderDisplayName)s frissĂtette a szobĂĄt.",
+ "%(senderDisplayName)s upgraded this room.": "%(senderDisplayName)s fejlesztette a szobĂĄt.",
"%(displayName)s is typing âŠ": "%(displayName)s gĂ©pel âŠ",
"%(names)s and %(count)s others are typing âŠ|other": "%(names)s Ă©s %(count)s mĂĄsik gĂ©pelnek âŠ",
"%(names)s and %(count)s others are typing âŠ|one": "%(names)s Ă©s mĂ©g valaki gĂ©pelnek âŠ",
@@ -1156,7 +1156,7 @@
"Show avatars in user and room mentions": "ProfilkĂ©p mutatĂĄsa a felhasznĂĄlĂł Ă©s szoba emlĂtĂ©seknĂ©l",
"Enable big emoji in chat": "Nagy Emojik engedélyezése a csevegésekben",
"Send typing notifications": "GĂ©pelĂ©s visszajelzĂ©s kĂŒldĂ©se",
- "Enable Community Filter Panel": "KözössĂ©gi szƱrĆ panel engedĂ©lyezĂ©se",
+ "Enable Community Filter Panel": "KözössĂ©gi szƱrĆ panel bekapcsolĂĄsa",
"Messages containing my username": "Ăzenetek amik a nevemet tartalmazzĂĄk",
"The other party cancelled the verification.": "A mĂĄsik fĂ©l törölte az ellenĆrzĂ©st.",
"Verified!": "EllenĆrizve!",
@@ -1460,9 +1460,9 @@
"%(senderName)s revoked the invitation for %(targetDisplayName)s to join the room.": "%(senderName)s visszavonta %(targetDisplayName)s a szobĂĄba valĂł belĂ©pĂ©sĂ©hez szĂŒksĂ©ges meghĂvĂłjĂĄt.",
"Enable desktop notifications for this device": "Asztali Ă©rtesĂtĂ©sek engedĂ©lyezĂ©se ehhez az eszközhöz",
"Enable audible notifications for this device": "HallhatĂł Ă©rtesĂtĂ©sek engedĂ©lyezĂ©se ehhez az eszközhöz",
- "Upgrade this room to the recommended room version": "A szoba frissĂtĂ©se a javasolt verziĂłra",
+ "Upgrade this room to the recommended room version": "A szoba fejlesztése a javasolt verzióra",
"This room is running room version /help
to list available commands. Did you mean to send this as a message?": "HasznĂĄlhatod a /help
-et az elĂ©rhetĆ parancsok kilistĂĄzĂĄsĂĄhoz. Ezt ĂŒzenetkĂ©nt akartad kĂŒldeni?",
+ "Hint: Begin your message with //
to start it with a slash.": "Tipp: Ez ĂŒzenetedet kezd ezzel: //
, ha perjellel szeretnéd kezdeni.",
+ "Send as message": "Ăzenet kĂŒldĂ©se",
+ "%(senderName)s added %(addedAddresses)s and %(count)s other addresses to this room|other": "%(senderName)s szoba cĂmnek, %(count)s mĂĄsikkal egyĂŒtt, hozzĂĄadta: %(addedAddresses)s",
+ "%(senderName)s removed %(removedAddresses)s and %(count)s other addresses from this room|other": "%(senderName)s %(count)s mĂĄsikkal egyĂŒtt törölte a szoba cĂmek közĂŒl: %(removedAddresses)s",
+ "%(senderName)s removed %(countRemoved)s and added %(countAdded)s addresses to this room": "%(senderName)s %(countRemoved)s darabot törölt Ă©s %(countAdded)s darabot hozzĂĄadott a szoba cĂmekhez",
+ "Someone is using an unknown device": "Valaki ismeretlen eszközt hasznål",
+ "This room is end-to-end encrypted": "Ez a szoba vĂ©gpontok közötti titkosĂtĂĄst hasznĂĄl",
+ "Everyone in this room is verified": "A szobĂĄba mindenki ellenĆrizve van",
+ "Invite only": "Csak meghĂvĂłval",
+ "Send a replyâŠ": "VĂĄlasz kĂŒldĂ©seâŠ",
+ "Send a messageâŠ": "Ăzenet kĂŒldĂ©seâŠ",
+ "Reject & Ignore user": "FelhasznĂĄlĂł elutasĂtĂĄsa Ă©s figyelmen kĂvĂŒl hagyĂĄsa",
+ "If you can't find someone, ask them for their username, share your username (%(userId)s) or profile link.": "Ha nem talålsz valakit, akkor kérdezd meg a felhasznålói nevét, åruld el neki a felhasznålói nevedet (%(userId)s) vagy a profil hivatkozåsodat.",
+ "Enter your account password to confirm the upgrade:": "A fejlesztĂ©s megerĆsĂtĂ©sĂ©hez add meg a fiĂłk jelszavadat:",
+ "You'll need to authenticate with the server to confirm the upgrade.": "AzonosĂtanod kell magad a szerveren a fejlesztĂ©s megerĆsĂtĂ©sĂ©hez.",
+ "Enter a passphrase": "Jelmondat bevitele",
+ "Enter your passphrase a second time to confirm it.": "Add meg a jelmondatot måsodszor is a biztonsåg kedvéért.",
+ "Verify other users in their profile.": "MĂĄs felhasznĂĄlĂłk ellenĆrzĂ©se a profiljukban.",
+ "Upgrade your encryption": "TitkosĂtĂĄsod fejlesztĂ©se",
+ "Set up encryption": "TitkosĂtĂĄs beĂĄllĂtĂĄsa",
+ "Encryption upgraded": "TitkosĂtĂĄs fejlesztve",
+ "Encryption setup complete": "TitkosĂtĂĄs beĂĄllĂtĂĄsa kĂ©sz"
}
diff --git a/src/i18n/strings/it.json b/src/i18n/strings/it.json
index bb35bd6d69..c8844fb2bb 100644
--- a/src/i18n/strings/it.json
+++ b/src/i18n/strings/it.json
@@ -2055,5 +2055,57 @@
"Key Backup is enabled on your account but has not been set up from this session. To set up secret storage, restore your key backup.": "Il Backup Chiavi Ăš attivo sul tuo account ma non Ăš stato impostato da questa sessione. Per impostare un archivio segreto, ripristina il tuo backup chiavi.",
"Restore": "Ripristina",
"Secret Storage will be set up using your existing key backup details. Your secret storage passphrase and recovery key will be the same as they were for your key backup": "L'archivio segreto verrĂ impostato usando i dettagli esistenti del backup chiavi. La password dell'archivio segreto e la chiave di recupero saranno le stesse del backup chiavi",
- "Restore your Key Backup": "Ripristina il tuo Backup Chiavi"
+ "Restore your Key Backup": "Ripristina il tuo Backup Chiavi",
+ "New Session": "Nuova sessione",
+ "New invite dialog": "Nuova finestra di invito",
+ "Other users may not trust it": "Altri utenti potrebbero non fidarsi",
+ "Later": "PiĂč tardi",
+ "Failed to invite the following users to chat: %(csvUsers)s": "Impossibile invitare i seguenti utenti alla chat: %(csvUsers)s",
+ "We couldn't create your DM. Please check the users you want to invite and try again.": "Impossibile creare il messaggio diretto. Ricontrolla gli utenti che vuoi invitare e riprova.",
+ "Something went wrong trying to invite the users.": "Qualcosa Ăš andato storto provando ad invitare gli utenti.",
+ "We couldn't invite those users. Please check the users you want to invite and try again.": "Impossibile invitare quegli utenti. Ricontrolla gli utenti che vuoi invitare e riprova.",
+ "Recently Direct Messaged": "Contattati direttamente di recente",
+ "If you can't find someone, ask them for their username (e.g. @user:server.com) or share this room.": "Se non riesci a trovare qualcuno, chiedi il nome utente (es. @utente:server.it) o condividi questa stanza.",
+ "Complete security": "Sicurezza completa",
+ "Verify this session to grant it access to encrypted messages.": "Verifica questa sessione per concederle accesso ai messaggi cifrati.",
+ "Start": "Inizia",
+ "Session verified": "Sessione verificata",
+ "Your new session is now verified. It has access to your encrypted messages, and other users will see it as trusted.": "La tua sessione ora Ăš verificata. Ha accesso ai tuoi messaggi cifrati e gli altri utenti la vedranno come fidata.",
+ "Done": "Fatto",
+ "Without completing security on this device, it wonât have access to encrypted messages.": "Se non completi la sicurezza su questo dispositivo, esso non avrĂ accesso ai messaggi cifrati.",
+ "Go Back": "Torna",
+ "Secret Storage will be set up using your existing key backup details. Your secret storage passphrase and recovery key will be the same as they were for your key backup.": "L'archivio segreto verrĂ impostato usando i dettagli del backup chiavi esistente. La password dell'archivio segreto e la chiave di ripristino saranno le stesse del backup chiavi.",
+ "Encrypted by a deleted device": "Cifrato da un dispositivo eliminato",
+ "Verify User": "Verifica utente",
+ "For extra security, verify this user by checking a one-time code on both of your devices.": "Per maggiore sicurezza, verifica questo utente controllando un codice univoco sui vostri dispositivi.",
+ "For maximum security, do this in person.": "Per massima sicurezza, fatelo di persona.",
+ "Start Verification": "Inizia la verifica",
+ "%(senderName)s added %(addedAddresses)s and %(count)s other addresses to this room|other": "%(senderName)s ha aggiunto %(addedAddresses)s e %(count)s altri indirizzi a questa stanza",
+ "%(senderName)s removed %(removedAddresses)s and %(count)s other addresses from this room|other": "%(senderName)s ha rimosso %(removedAddresses)s e %(count)s altri indirizzi da questa stanza",
+ "%(senderName)s removed %(countRemoved)s and added %(countAdded)s addresses to this room": "%(senderName)s ha rimosso %(countRemoved)s e aggiunto %(countAdded)s indirizzi a questa stanza",
+ "Someone is using an unknown device": "Qualcuno sta usando un dispositivo sconosciuto",
+ "This room is end-to-end encrypted": "Questa stanza Ăš cifrata end-to-end",
+ "Everyone in this room is verified": "Tutti in questa stanza sono verificati",
+ "Invite only": "Solo a invito",
+ "Send a replyâŠ": "Invia rispostaâŠ",
+ "Send a messageâŠ": "Invia un messaggioâŠ",
+ "Reject & Ignore user": "Rifiuta e ignora l'utente",
+ "Unknown Command": "Comando sconosciuto",
+ "Unrecognised command: %(commandText)s": "Comando non riconosciuto: %(commandText)s",
+ "You can use /help
to list available commands. Did you mean to send this as a message?": "Puoi usare /help
per elencare i comandi disponibili. Volevo forse inviarlo come messaggio?",
+ "Hint: Begin your message with //
to start it with a slash.": "Suggerimento: anteponi al tuo messaggio //
per farlo iniziare con uno slash.",
+ "Send as message": "Invia come messaggio",
+ "Enter your account password to confirm the upgrade:": "Inserisci la password del tuo account per confermare l'aggiornamento:",
+ "You'll need to authenticate with the server to confirm the upgrade.": "Dovrai autenticarti con il server per confermare l'aggiornamento.",
+ "Upgrade this device to allow it to verify other devices, granting them access to encrypted messages and marking them as trusted for other users.": "Aggiorna il dispositivo per consentirgli di verificare altri dispositivi, dando loro accesso ai messaggi cifrati e contrassegnandoli come fidati per gli altri utenti.",
+ "Set up encryption on this device to allow it to verify other devices, granting them access to encrypted messages and marking them as trusted for other users.": "Imposta la cifratura sul dispositivo per consentirgli di verificare altri dispositivi, dando loro accesso ai messaggi cifrati e contrassegnandoli come fidati per gli altri utenti.",
+ "Secure your encryption keys with a passphrase. For maximum security this should be different to your account password:": "Proteggi le chiavi di cifratura con una password. Per massima sicurezza questa dovrebbe essere diversa da quella del tuo account:",
+ "Enter a passphrase": "Inserisci una password",
+ "Enter your passphrase a second time to confirm it.": "Inserisci di nuovo la tua password per confermarla.",
+ "This device can now verify other devices, granting them access to encrypted messages and marking them as trusted for other users.": "Questo dispositivo ora puĂČ verificare altri dispositivi, dando loro accesso ai messaggi cifrati e contrassegnandoli come fidati per gli altri utenti.",
+ "Verify other users in their profile.": "Verifica gli altri utenti nel loro profilo.",
+ "Upgrade your encryption": "Aggiorna la tua cifratura",
+ "Set up encryption": "Imposta la cifratura",
+ "Encryption upgraded": "Cifratura aggiornata",
+ "Encryption setup complete": "Impostazione cifratura completata"
}
diff --git a/src/i18n/strings/ja.json b/src/i18n/strings/ja.json
index 55cc8782ef..787dcbc4ca 100644
--- a/src/i18n/strings/ja.json
+++ b/src/i18n/strings/ja.json
@@ -601,7 +601,7 @@
"Copied!": "ăłăăŒăăăŸăă!",
"Failed to copy": "ăłăăŒă«ć€±æăăŸăă",
"Add an Integration": "ç”±ćăèżœć ăă",
- "You are about to be taken to a third-party site so you can authenticate your account for use with %(integrationsUrl)s. Do you wish to continue?": "ă”ăŒăăăŒăăŁăźă”ă€ăă«ç§»ćăăŠă%(integationsUrl)s ă§äœżçšăăăăă«ăąă«ăŠăłăăèȘ蚌ă§ăăăăă«ăȘăăŸăăç¶èĄăăŸăăïŒ",
+ "You are about to be taken to a third-party site so you can authenticate your account for use with %(integrationsUrl)s. Do you wish to continue?": "ă”ăŒăăăŒăăŁăźă”ă€ăă«ç§»ćăăŠă%(integrationsUrl)s ă§äœżçšăăăăă«ăąă«ăŠăłăăèȘ蚌ă§ăăăăă«ăȘăăŸăăç¶èĄăăŸăăïŒ",
"Removed or unknown message type": "ćé€ăăăăŸăăŻæȘç„ăźăĄăă»ăŒăžăżă€ă",
"Message removed by %(userId)s": "%(userId)s ă«ăăŁăŠăĄăă»ăŒăžăćé€ăăăŸăă",
"Message removed": "ăĄăă»ăŒăžăćé€ăăă",
@@ -630,7 +630,7 @@
"Are you sure you want to remove '%(roomName)s' from %(groupId)s?": "%(roomName)s ă %(groupId)s ăăćé€ăăŠăăăăăă§ăă?",
"Removing a room from the community will also remove it from the community page.": "ăłăă„ăăăŁăăéšć±ăćé€ăăăšăăłăă„ăăăŁăăŒăžăăăăăźéšć±ăćé€ăăăŸăă",
"Failed to remove room from community": "ăłăă„ăăăŁăăăźéšć±ăźćé€ă«ć€±æăăŸăă",
- "Failed to remove '%(roomName)s' from %(groupId)s": "%(groupName)s ăă '%(roomName)s' ăćé€ă§ăăŸăăă§ăă",
+ "Failed to remove '%(roomName)s' from %(groupId)s": "%(groupId)s ăă '%(roomName)s' ăćé€ă§ăăŸăăă§ăă",
"Something went wrong!": "äœăăééăŁăŠăă!",
"The visibility of '%(roomName)s' in %(groupId)s could not be updated.": "%(groupId)s ăź '%(roomName)s' ăźèĄšç€șăæŽæ°ă§ăăŸăăă§ăăă",
"Visibility in Room List": "ă«ăŒă ăȘăčăăźćŻèŠæ§",
@@ -668,7 +668,7 @@
"%(severalUsers)sjoined %(count)s times|one": "%(severalUsers)s ăćć ăăŸăă",
"%(oneUser)sjoined %(count)s times|other": "%(oneUser)s ă %(count)s ććć ăăŸăă",
"%(oneUser)sjoined %(count)s times|one": "%(oneUser)s ăćć ăăŸăă",
- "%(severalUsers)sleft %(count)s times|other": "%(severalUers)s 㯠%(count)s ćéćșăăŸăă",
+ "%(severalUsers)sleft %(count)s times|other": "%(severalUsers)s 㯠%(count)s ćéćșăăŸăă",
"%(severalUsers)sleft %(count)s times|one": "%(severalUsers)s ăŻéćșăăŸăă",
"%(oneUser)sleft %(count)s times|other": "%(oneUser)s 㯠%(count)s ćéćșăăŸăă",
"%(oneUser)sleft %(count)s times|one": "%(oneUser)s ăŻéćșăăŸăă",
diff --git a/src/i18n/strings/sq.json b/src/i18n/strings/sq.json
index e833009d59..3c04ff85c0 100644
--- a/src/i18n/strings/sq.json
+++ b/src/i18n/strings/sq.json
@@ -1917,11 +1917,11 @@
"%(senderName)s placed a voice call. (not supported by this browser)": "%(senderName)s bëri një thirrje zanore. (e pambuluar nga ky shfletues)",
"%(senderName)s placed a video call.": "%(senderName)s bëri një thirrje video.",
"%(senderName)s placed a video call. (not supported by this browser)": "%(senderName)s bëri një thirrje video. (e pambuluar nga ky shfletues)",
- "Enable cross-signing to verify per-user instead of per-device (in development)": "",
+ "Enable cross-signing to verify per-user instead of per-device (in development)": "Aktivizoni cross-signing për të verifikuar me bazë përdorues në vend se me bazë pajisje (në zhvillim)",
"Enable local event indexing and E2EE search (requires restart)": "Aktivizoni indeksim aktesh vendore dhe kërkim E2EE (lyp rinisje)",
"Match system theme": "Përputhe me temën e sistemit",
- "Send cross-signing keys to homeserver": "",
- "Cross-signing public keys:": "",
+ "Send cross-signing keys to homeserver": "Dërgo te shërbyesi Home kyçe cross-signing",
+ "Cross-signing public keys:": "Kyçe publikë për cross-signing:",
"on device": "në pajisje",
"not found": "sâu gjet",
"in secret storage": "në depozitë të fshehtë",
@@ -2016,5 +2016,88 @@
"Connected to /help
to list available commands. Did you mean to send this as a message?": "Mund të përdorni /help
që të shfaqen urdhrat e gatshëm. Donit vërtet ta dërgoni këtë si një mesazh?",
+ "Hint: Begin your message with //
to start it with a slash.": "Ndihmëz: Fillojeni mesazhin tuaj me //
që të nisë me një pjerrake.",
+ "Send as message": "Dërgoni një mesazh",
+ "Verify User": "Verifikoni PĂ«rdoruesin",
+ "For extra security, verify this user by checking a one-time code on both of your devices.": "Për siguri ekstra, verifikojeni këtë përdorues duke kontrolluar në të dyja pajisjet tuaja një kod njëpërdorimsh.",
+ "For maximum security, do this in person.": "Për siguri maksimum, bëjeni këtë ju vetë.",
+ "Start Verification": "Fillo Verifikimin",
+ "Failed to invite the following users to chat: %(csvUsers)s": "Sâu arrit tĂ« ftoheshin pĂ«r bisedĂ« pĂ«rdoruesit vijues: %(csvUsers)s",
+ "We couldn't create your DM. Please check the users you want to invite and try again.": "Sâe krijuam dot DM-nĂ« tuaj. Ju lutemi, kontrolloni pĂ«rdoruesit qĂ« doni tĂ« ftoni dhe riprovoni.",
+ "Something went wrong trying to invite the users.": "Diç shkoi ters teksa provohej të ftoheshin përdoruesit.",
+ "We couldn't invite those users. Please check the users you want to invite and try again.": "Sâi ftuam dot kĂ«ta pĂ«rdorues. Ju lutemi, kontrolloni pĂ«rdoruesit qĂ« doni tĂ« ftoni dhe riprovoni.",
+ "Failed to find the following users": "Sâu arrit tĂ« gjendeshin pĂ«rdoruesit vijues",
+ "The following users might not exist or are invalid, and cannot be invited: %(csvNames)s": "PĂ«rdoruesit vijues mund tĂ« mos ekzistojnĂ« ose janĂ« tĂ« pavlefshĂ«m, dhe sâmund tĂ« ftohen: %(csvNames)s",
+ "Suggestions": "Sugjerime",
+ "If you can't find someone, ask them for their username, share your username (%(userId)s) or profile link.": "NĂ«se sâgjeni dot dikĂ«, kĂ«rkojini emrin e tij tĂ« pĂ«rdoruesit, tregojuni emrin tuaj tĂ« pĂ«rdoruesit (%(userId)s) ose lidhjen e profilit.",
+ "If you can't find someone, ask them for their username (e.g. @user:server.com) or share this room.": "NĂ«se sâgjeni dot dikĂ«, kĂ«rkojini emrin e tij tĂ« pĂ«rdoruesit (p.sh., @pĂ«rdorues:shĂ«rbyes.com) ose tregojuni kĂ«tĂ« dhomĂ«.",
+ "Access your secure message history and your cross-signing identity for verifying other devices by entering your passphrase.": "Për verifikim pajisjesh të tjera përmes dhënies së frazëkalimit tuaj, hyni te historiku i mesazheve tuaj të sigurt dhe identiteti juaj për cross-signing.",
+ "Access your secure message history and your cross-signing identity for verifying other devices by entering your recovery key.": "Për verifikim pajisjesh të tjera përmes dhënies së kyçit tuaj të rimarrjes, hyni te historiku i mesazheve tuaj të sigurt dhe identiteti juaj për cross-signing.",
+ "Complete security": "Siguri të plotë",
+ "Verify this session to grant it access to encrypted messages.": "Verifikojeni kĂ«tĂ« sesion qĂ« tâi akordohet hyrje te mesazhe tĂ« fshehtĂ«zuar.",
+ "Start": "Nise",
+ "Session verified": "Sesion i verifikuar",
+ "Your new session is now verified. It has access to your encrypted messages, and other users will see it as trusted.": "Sesioni juaj i ri tani është i verifikuar. Ka hyrje te mesazhet tuaj të fshehtëzuar dhe përdoruesit e tjerë do ta shohin si të besuar.",
+ "Done": "U bë",
+ "Without completing security on this device, it wonât have access to encrypted messages.": "Pa plotĂ«suar sigurinĂ« nĂ« kĂ«tĂ« pajisje, sâdo tĂ« ketĂ« hyrje te mesazhe tĂ« fshehtĂ«zuar.",
+ "Go Back": "Shko Mbrapsht",
+ "Key Backup is enabled on your account but has not been set up from this session. To set up secret storage, restore your key backup.": "Kopjeruajtja e Kyçeve është e aktivizuar në llogarinë tuaj, por nuk është ujdisur që nga ky sesion. Që të ujdisni depozitim të fshehtë, riktheni kopjeruajtjen tuaj të kyçeve.",
+ "Restore": "Riktheje",
+ "Enter your account password to confirm the upgrade:": "Që të ripohohet përmirësimi, jepni fjalëkalimin e llogarisë tuaj:",
+ "You'll need to authenticate with the server to confirm the upgrade.": "Do tâju duhet tĂ« bĂ«ni mirĂ«filltĂ«simin me shĂ«rbyesin qĂ« tĂ« ripohohet pĂ«rmirĂ«simi.",
+ "Upgrade this device to allow it to verify other devices, granting them access to encrypted messages and marking them as trusted for other users.": "Përmirësojeni këtë pajisje për ta lejuar të verifikojë pajisje të tjera, duke u akorduar hyrje te mesazhe të fshehtëzuar dhe duke u vënë shenjë si të besuara për përdorues të tjerë.",
+ "Set up encryption on this device to allow it to verify other devices, granting them access to encrypted messages and marking them as trusted for other users.": "Ujdisni fshehtëzim në këtë pajisje që ta lejoni të verifikojë pajisje të tjera, duke u akorduar atyre hyrje te mesazhe të fshehtëzuar dhe duke u vënë shenjë atyre si të besuara për përdorues të tjerë.",
+ "Secure your encryption keys with a passphrase. For maximum security this should be different to your account password:": "Sigurojini kyçet tuaj të fshehtëzimit me një frazëkalim. Për siguri maksimale, ky do të duhej të ishte i ndryshëm nga fjalëkalimi për llogarinë tuaj:",
+ "Enter a passphrase": "Jepni një frazëkalim",
+ "Enter your passphrase a second time to confirm it.": "Që të ripohohet, jepeni edhe një herë frazëkalimin tuaj.",
+ "This device can now verify other devices, granting them access to encrypted messages and marking them as trusted for other users.": "Kjo pajisje mund të verifikojë pajisje të tjera, duke u akorduar hyrje te mesazhe të fshehtëzuar dhe duke u vënë shenjë si të besuara për përdorues të tjerë.",
+ "Verify other users in their profile.": "Verifikoni përdorues të tjerë në profilin e tyre.",
+ "Without setting up secret storage, you won't be able to restore your access to encrypted messages or your cross-signing identity for verifying other devices if you log out or use another device.": "Pa ujdisur depozitim tĂ« fshehtĂ«, sâdo tĂ« jeni nĂ« gjendje tĂ« rimerrni hyrje te mesazhe tĂ« fshehtĂ«zuar apo te identiteti juaj cross-signing pĂ«r verifikim pajisjesh tĂ« tjera, nĂ«se dilni nga llogaria juaj ose pĂ«rdorni njĂ« pajisje tjetĂ«r.",
+ "Restore your Key Backup": "Riktheni Kopjeruajtjen tuaj të Kyçeve",
+ "Upgrade your encryption": "Përmirësoni fshehtëzimin tuaj",
+ "Set up encryption": "Ujdisni fshehtëzim",
+ "Encryption upgraded": "U përmirësua fshehtëzimi",
+ "Encryption setup complete": "Ujdisje fshehtëzimit e plotësuar"
}
diff --git a/src/i18n/strings/tr.json b/src/i18n/strings/tr.json
index 81f0522922..257cb27b42 100644
--- a/src/i18n/strings/tr.json
+++ b/src/i18n/strings/tr.json
@@ -1422,5 +1422,121 @@
"Enable Community Filter Panel": "Toluluk Filtre Panelini Aç",
"Match system theme": "Sistem temasıyla eĆle",
"Allow Peer-to-Peer for 1:1 calls": "1:1 çaÄrılar için eĆten-eĆe izin ver",
- "Missing media permissions, click the button below to request.": "Medya izinleri eksik, alttaki butona tıkayarak talep edin."
+ "Missing media permissions, click the button below to request.": "Medya izinleri eksik, alttaki butona tıkayarak talep edin.",
+ "Credits": "Katkıda Bulunanlar",
+ "Clear cache and reload": "BelleÄi temizle ve yeniden yĂŒkle",
+ "Customise your experience with experimental labs features. Learn more.": "Deneysel laboratuar özellikler ile deneyiminizi özelleĆtirebilirsiniz. Daha fazla.",
+ "Ignored/Blocked": "Yoksayılan/Bloklanan",
+ "Error adding ignored user/server": "Yoksayılan kullanıcı/sunucu eklenirken hata",
+ "Error subscribing to list": "Listeye abone olunurken hata",
+ "Error removing ignored user/server": "Yoksayılan kullanıcı/sunucu silinirken hata",
+ "Error unsubscribing from list": "Listeden abonelikten çıkılırken hata",
+ "You are not subscribed to any lists": "Herhangi bir listeye aboneliÄiniz bulunmuyor",
+ "â These settings are meant for advanced users.": "â Bu ayarlar ileri dĂŒzey kullanıcılar içindir.",
+ "Unignore": "Yoksayma",
+ "This bridge was provisioned by %(homeserverDomain)s
) to configure a TURN server in order for calls to work reliably.": "ĂaÄrıların saÄlıklı bir Ćekide yapılabilmesi için lĂŒtfen anasunucunuzun (%(homeserverDomain)s
) yöneticisinden bir TURN sunucusu yapılandırmasını isteyin.",
+ "%(severalUsers)schanged their name %(count)s times|other": "%(severalUsers)s kullanıcıları isimlerini %(count)s kez deÄiĆtirdiler",
+ "%(oneUser)schanged their name %(count)s times|other": "%(oneUser)s ismini %(count)s kez deÄiĆtirdi",
+ "%(severalUsers)smade no changes %(count)s times|one": "%(severalUsers)s deÄiĆiklik yapmadı",
+ "%(oneUser)smade no changes %(count)s times|other": "%(oneUser)s %(count)s kez deÄiĆiklik yapmadı",
+ "%(oneUser)smade no changes %(count)s times|one": "%(oneUser)s deÄiĆiklik yapmadı",
+ "Room alias": "Oda lakabı",
+ "Please provide a room alias": "LĂŒtfen bir oda lakabı belirtin",
+ "This alias is available to use": "Bu lakap kullanmaya uygun",
+ "This alias is already in use": "Bu lakap zaten kullanımda",
+ "And %(count)s more...|other": "ve %(count)s kez daha...",
+ "Alternatively, you can try to use the public server at turn.matrix.org
, but this will not be as reliable, and it will share your IP address with that server. You can also manage this in Settings.": "Alternatif olarak,turn.matrix.org
adresindeki herkese açık sunucuyu kullanmayı deneyebilirsiniz. Fakat bu gĂŒvenilir olmayabilir. IP adresiniz bu sunucu ile paylaĆılacaktır. Ayarlardan yönetebilirsiniz.",
+ "An error ocurred whilst trying to remove the widget from the room": "Görsel bileĆen odadan silinmeye çalıĆılırken bir hata oluĆtu",
+ "Minimize apps": "Uygulamaları kĂŒĂ§ĂŒlt",
+ "Maximize apps": "Uygulamaları bĂŒyĂŒlt",
+ "Popout widget": "Görsel bileĆeni göster",
+ "Please /help
to list available commands. Did you mean to send this as a message?": "æšćŻä»„äœżçš /help
äŸććșćŻçšçæ什ăæšæŻèŠćłéæ€èšæŻćïŒ",
+ "Hint: Begin your message with //
to start it with a slash.": "æç€șïŒä»„ //
éé èźæšçèšæŻćłéæćŻä»„çšæç·éé ă",
+ "Send as message": "仄èšæŻćłé",
+ "%(senderName)s added %(addedAddresses)s and %(count)s other addresses to this room|other": "%(senderName)s ćæ€è怩柀æ°ćąäș %(addedAddresses)s èć
¶ä» %(count)s ćć°ć",
+ "%(senderName)s removed %(removedAddresses)s and %(count)s other addresses from this room|other": "%(senderName)s ćŸæ€è怩柀移é€äș %(removedAddresses)s èć
¶ä» %(count)s ćć°ć",
+ "%(senderName)s removed %(countRemoved)s and added %(countAdded)s addresses to this room": "%(senderName)s ć°æ€è怩柀移é€äș %(countRemoved)s ć䞊æ°ćąäș %(countAdded)s ć°ćć°æ€è怩柀",
+ "%(senderName)s turned on end-to-end encryption.": "%(senderName)s éćäșç«Żć°ç«Żć ćŻă",
+ "%(senderName)s turned on end-to-end encryption (unrecognised algorithm %(algorithm)s).": "%(senderName)s éćäșç«Żć°ç«Żć ćŻïŒçĄæłèć„çæŒçźæł %(algorithm)sïŒă",
+ "Someone is using an unknown device": "æäșșæŁćšäœżçšæȘç„çèŁçœź",
+ "This room is end-to-end encrypted": "æ€è怩柀ć·Čç«Żć°ç«Żć ćŻ",
+ "Everyone in this room is verified": "æ€è怩柀äžæŻćäșșéœć·Čé©è",
+ "Invite only": "ć
éè«",
+ "Send a replyâŠ": "ćłéćèŠâŠâŠ",
+ "Send a messageâŠ": "ćłéèšæŻâŠâŠ",
+ "Reject & Ignore user": "ćç”äžŠćżœç„äœżçšè
",
+ "If you can't find someone, ask them for their username, share your username (%(userId)s) or profile link.": "ćŠææšæŸäžć°æäșșïŒè«è©ąćä»ć仄ććŸä»ćçäœżçšè
ćçš±ïŒćäș«æšçäœżçšè
ćçš± (%(userId)s) æç°Ąä»éŁç”ă",
+ "Enter your account password to confirm the upgrade:": "茞ć
„æšçćžłèćŻçąŒä»„çąșèȘćçŽïŒ",
+ "You'll need to authenticate with the server to confirm the upgrade.": "æšćż
é ééäŒșæćšé©è仄çąșèȘćçŽă",
+ "Upgrade this device to allow it to verify other devices, granting them access to encrypted messages and marking them as trusted for other users.": "ćçŽæ€èŁçœźä»„ć
èš±ć
¶é©èć
¶ä»èŁçœźïŒäžŠć
èš±ććć ćŻèšæŻä»„ćć°ćźćæšèšçșćć
¶ä»äœżçšè
俥任ă",
+ "Set up encryption on this device to allow it to verify other devices, granting them access to encrypted messages and marking them as trusted for other users.": "ćšæ€èŁçœźäžèšćźć ćŻä»„ć
èš±ć
¶é©èć
¶ä»èŁçœźïŒäžŠć
èš±ććć ćŻèšæŻä»„ćć°ćźćæšèšçșćć
¶ä»äœżçšè
俥任ă",
+ "Secure your encryption keys with a passphrase. For maximum security this should be different to your account password:": "äœżçšééćŻèȘäżè·æšçć ćŻéé°ăçșäșććŸæćŒ·çćźć
šæ§ïŒæ€ééćŻèȘæèæšçćžłèćŻçąŒäžćïŒ",
+ "Enter a passphrase": "茞ć
„ééćŻèȘ",
+ "Enter your passphrase a second time to confirm it.": "茞ć
„æšçééćŻèȘć
©æŹĄä»„çąșèȘă",
+ "This device can now verify other devices, granting them access to encrypted messages and marking them as trusted for other users.": "æ€èŁçœźçŸćšćŻä»„é©èć
¶ä»èŁçœźïŒäžŠć
èš±ććć ćŻèšæŻä»„ćć°ćźćæšèšçșćć
¶ä»äœżçšè
俥任ă",
+ "Verify other users in their profile.": "ééä»ćçç°Ąä»é©èć
¶ä»äœżçšè
ă",
+ "Upgrade your encryption": "ćçŽæšçć ćŻ",
+ "Set up encryption": "èšćźć ćŻ",
+ "Encryption upgraded": "ć ćŻć·ČćçŽ",
+ "Encryption setup complete": "ć ćŻèšćźćźæ"
}
diff --git a/yarn.lock b/yarn.lock
index 576cd019ec..232067a99f 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -5760,11 +5760,12 @@ mathml-tag-names@^2.0.1:
resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.1.tgz#6dff66c99d55ecf739ca53c492e626f1d12a33cc"
integrity sha512-pWB896KPGSGkp1XtyzRBftpTzwSOL0Gfk0wLvxt4f2mgzjY19o0LxJ3U25vNWTzsh7da+KTbuXQoQ3lOJZ8WHw==
-matrix-js-sdk@3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/matrix-js-sdk/-/matrix-js-sdk-3.0.0.tgz#97908f9eda9eeb3ba0333b7e474c45f2b258e50c"
- integrity sha512-lzUMwJAZHw7Dk0K+rubqe6kEpy4+pJ+qCp8n6lisfdKfMDJXdNCkjiiXRnakM1ZD4PFYK8ju89+NfxlyhAAd4A==
+matrix-js-sdk@4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/matrix-js-sdk/-/matrix-js-sdk-4.0.0.tgz#c81bdc905af2ab1634527e5f542f2f15977d31cf"
+ integrity sha512-Xbe36xL443qtEBH4xk0k39JabolqZfloK7fwYGMb/PgWO26VOzvw94XWahnIr5w83oxBAF9nFmP+7EnPG6IHnA==
dependencies:
+ "@babel/runtime" "^7.8.3"
another-json "^0.2.0"
browser-request "^0.3.3"
bs58 "^4.0.1"