diff --git a/res/css/structures/auth/_CompleteSecurity.scss b/res/css/structures/auth/_CompleteSecurity.scss index f742be70e4..b0462db477 100644 --- a/res/css/structures/auth/_CompleteSecurity.scss +++ b/res/css/structures/auth/_CompleteSecurity.scss @@ -98,3 +98,7 @@ limitations under the License. } } } + +.mx_CompleteSecurity_resetText { + padding-top: 20px; +} diff --git a/res/css/views/dialogs/secretstorage/_CreateSecretStorageDialog.scss b/res/css/views/dialogs/secretstorage/_CreateSecretStorageDialog.scss index 63e5a3de09..9f1d0f4998 100644 --- a/res/css/views/dialogs/secretstorage/_CreateSecretStorageDialog.scss +++ b/res/css/views/dialogs/secretstorage/_CreateSecretStorageDialog.scss @@ -73,33 +73,42 @@ limitations under the License. margin-left: 20px; } -.mx_CreateSecretStorageDialog_recoveryKeyHeader { - margin-bottom: 1em; -} - .mx_CreateSecretStorageDialog_recoveryKeyContainer { - display: flex; + width: 380px; + margin-left: auto; + margin-right: auto; } .mx_CreateSecretStorageDialog_recoveryKey { - width: 262px; + font-weight: bold; + text-align: center; padding: 20px; color: $info-plinth-fg-color; background-color: $info-plinth-bg-color; - margin-right: 12px; + border-radius: 6px; + word-spacing: 1em; + margin-bottom: 20px; } .mx_CreateSecretStorageDialog_recoveryKeyButtons { - flex: 1; display: flex; + justify-content: space-between; align-items: center; } .mx_CreateSecretStorageDialog_recoveryKeyButtons .mx_AccessibleButton { - margin-right: 10px; -} - -.mx_CreateSecretStorageDialog_recoveryKeyButtons button { - flex: 1; + width: 160px; + padding-left: 0px; + padding-right: 0px; white-space: nowrap; } + +.mx_CreateSecretStorageDialog_continueSpinner { + margin-top: 33px; + text-align: right; +} + +.mx_CreateSecretStorageDialog_continueSpinner img { + width: 20px; + height: 20px; +} diff --git a/res/css/views/elements/_StyledCheckbox.scss b/res/css/views/elements/_StyledCheckbox.scss index df0b8c6d94..5f5447e861 100644 --- a/res/css/views/elements/_StyledCheckbox.scss +++ b/res/css/views/elements/_StyledCheckbox.scss @@ -25,6 +25,8 @@ limitations under the License. input[type=checkbox] { appearance: none; + margin: 0; + padding: 0; & + label { display: flex; diff --git a/res/css/views/settings/tabs/user/_AppearanceUserSettingsTab.scss b/res/css/views/settings/tabs/user/_AppearanceUserSettingsTab.scss index 7308bb7177..0756e98782 100644 --- a/res/css/views/settings/tabs/user/_AppearanceUserSettingsTab.scss +++ b/res/css/views/settings/tabs/user/_AppearanceUserSettingsTab.scss @@ -44,6 +44,83 @@ limitations under the License. padding-right: 5px; } +.mx_AppearanceUserSettingsTab { + > .mx_SettingsTab_SubHeading { + margin-bottom: 32px; + } +} + +.mx_AppearanceUserSettingsTab_themeSection { + $radio-bg-color: $input-darker-bg-color; + color: $primary-fg-color; + + > .mx_ThemeSelectors { + display: flex; + flex-direction: row; + flex-wrap: wrap; + + margin-top: 4px; + margin-bottom: 30px; + + > .mx_RadioButton { + padding: $font-16px; + box-sizing: border-box; + border-radius: 10px; + width: 180px; + + background: $radio-bg-color; + opacity: 0.4; + + flex-shrink: 1; + flex-grow: 0; + + margin-right: 15px; + margin-top: 10px; + + font-weight: 600; + color: $muted-fg-color; + + > span { + justify-content: center; + } + } + + > .mx_RadioButton_enabled { + opacity: 1; + + // These colors need to be hardcoded because they don't change with the theme + &.mx_ThemeSelector_light { + background-color: #f3f8fd; + color: #2e2f32; + } + + &.mx_ThemeSelector_dark { + background-color: #181b21; + color: #f3f8fd; + + > input > div { + border-color: $input-darker-bg-color; + > div { + border-color: $input-darker-bg-color; + } + } + } + + &.mx_ThemeSelector_black { + background-color: #000000; + color: #f3f8fd; + + > input > div { + border-color: $input-darker-bg-color; + > div { + border-color: $input-darker-bg-color; + } + } + } + } + } +} + .mx_SettingsTab_customFontSizeField { margin-left: calc($font-16px + 10px); } diff --git a/src/CrossSigningManager.js b/src/CrossSigningManager.js index c37d0f8bf5..d40f820ac0 100644 --- a/src/CrossSigningManager.js +++ b/src/CrossSigningManager.js @@ -30,6 +30,8 @@ import {encodeBase64} from "matrix-js-sdk/src/crypto/olmlib"; // operation ends. let secretStorageKeys = {}; let secretStorageBeingAccessed = false; +// Stores the 'passphraseOnly' option for the active storage access operation +let passphraseOnlyOption = null; function isCachingAllowed() { return ( @@ -99,6 +101,7 @@ async function getSecretStorageKey({ keys: keyInfos }, ssssItemName) { const key = await inputToKey(input); return await MatrixClientPeg.get().checkSecretStorageKey(key, info); }, + passphraseOnly: passphraseOnlyOption, }, /* className= */ null, /* isPriorityModal= */ false, @@ -213,19 +216,27 @@ export async function promptForBackupPassphrase() { * * @param {Function} [func] An operation to perform once secret storage has been * bootstrapped. Optional. - * @param {bool} [forceReset] Reset secret storage even if it's already set up + * @param {object} [opts] Named options + * @param {bool} [opts.forceReset] Reset secret storage even if it's already set up + * @param {object} [opts.withKeys] Map of key ID to key for SSSS keys that the client + * already has available. If a key is not supplied here, the user will be prompted. + * @param {bool} [opts.passphraseOnly] If true, do not prompt for recovery key or to reset keys */ -export async function accessSecretStorage(func = async () => { }, forceReset = false) { +export async function accessSecretStorage( + func = async () => { }, opts = {}, +) { const cli = MatrixClientPeg.get(); secretStorageBeingAccessed = true; + passphraseOnlyOption = opts.passphraseOnly; + secretStorageKeys = Object.assign({}, opts.withKeys || {}); try { - if (!await cli.hasSecretStorageKey() || forceReset) { + if (!await cli.hasSecretStorageKey() || opts.forceReset) { // This dialog calls bootstrap itself after guiding the user through // passphrase creation. const { finished } = Modal.createTrackedDialogAsync('Create Secret Storage dialog', '', import("./async-components/views/dialogs/secretstorage/CreateSecretStorageDialog"), { - force: forceReset, + force: opts.forceReset, }, null, /* priority = */ false, /* static = */ true, ); @@ -263,5 +274,6 @@ export async function accessSecretStorage(func = async () => { }, forceReset = f if (!isCachingAllowed()) { secretStorageKeys = {}; } + passphraseOnlyOption = null; } } diff --git a/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js b/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js index d7b79c2cfa..192427d384 100644 --- a/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js +++ b/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js @@ -20,25 +20,23 @@ import PropTypes from 'prop-types'; import * as sdk from '../../../../index'; import {MatrixClientPeg} from '../../../../MatrixClientPeg'; import FileSaver from 'file-saver'; -import {_t, _td} from '../../../../languageHandler'; +import {_t} from '../../../../languageHandler'; import Modal from '../../../../Modal'; import { promptForBackupPassphrase } from '../../../../CrossSigningManager'; import {copyNode} from "../../../../utils/strings"; import {SSOAuthEntry} from "../../../../components/views/auth/InteractiveAuthEntryComponents"; -import PassphraseField from "../../../../components/views/auth/PassphraseField"; +import AccessibleButton from "../../../../components/views/elements/AccessibleButton"; +import DialogButtons from "../../../../components/views/elements/DialogButtons"; +import InlineSpinner from "../../../../components/views/elements/InlineSpinner"; + const PHASE_LOADING = 0; const PHASE_LOADERROR = 1; const PHASE_MIGRATE = 2; -const PHASE_PASSPHRASE = 3; -const PHASE_PASSPHRASE_CONFIRM = 4; -const PHASE_SHOWKEY = 5; -const PHASE_KEEPITSAFE = 6; -const PHASE_STORING = 7; -const PHASE_DONE = 8; -const PHASE_CONFIRM_SKIP = 9; - -const PASSWORD_MIN_SCORE = 4; // So secure, many characters, much complex, wow, etc, etc. +const PHASE_INTRO = 3; +const PHASE_SHOWKEY = 4; +const PHASE_STORING = 5; +const PHASE_CONFIRM_SKIP = 6; /* * Walks the user through the process of creating a passphrase to guard Secure @@ -65,34 +63,32 @@ export default class CreateSecretStorageDialog extends React.PureComponent { this.state = { phase: PHASE_LOADING, - passPhrase: '', - passPhraseValid: false, - passPhraseConfirm: '', - copied: false, downloaded: false, + copied: false, backupInfo: null, + backupInfoFetched: false, + backupInfoFetchError: null, backupSigStatus: null, // does the server offer a UI auth flow with just m.login.password - // for /keys/device_signing/upload? + // for /keys/device_signing/upload? (If we have an account password, we + // assume that it can) canUploadKeysWithPasswordOnly: null, + canUploadKeyCheckInProgress: false, accountPassword: props.accountPassword || "", accountPasswordCorrect: null, - // status of the key backup toggle switch + // No toggle for this: if we really don't want one, remove it & just hard code true useKeyBackup: true, }; + if (props.accountPassword) { + // If we have an account password, we assume we can upload keys with + // just a password (otherwise leave it as null so we poll to check) + this.state.canUploadKeysWithPasswordOnly = true; + } + this._passphraseField = createRef(); - this._fetchBackupInfo(); - if (this.state.accountPassword) { - // If we have an account password in memory, let's simplify and - // assume it means password auth is also supported for device - // signing key upload as well. This avoids hitting the server to - // test auth flows, which may be slow under high load. - this.state.canUploadKeysWithPasswordOnly = true; - } else { - this._queryKeyUploadAuth(); - } + this.loadData(); MatrixClientPeg.get().on('crypto.keyBackupStatus', this._onKeyBackupStatusChange); } @@ -109,13 +105,11 @@ export default class CreateSecretStorageDialog extends React.PureComponent { MatrixClientPeg.get().isCryptoEnabled() && await MatrixClientPeg.get().isKeyBackupTrusted(backupInfo) ); - const { force } = this.props; - const phase = (backupInfo && !force) ? PHASE_MIGRATE : PHASE_PASSPHRASE; - this.setState({ - phase, + backupInfoFetched: true, backupInfo, backupSigStatus, + backupInfoFetchError: null, }); return { @@ -123,20 +117,25 @@ export default class CreateSecretStorageDialog extends React.PureComponent { backupSigStatus, }; } catch (e) { - this.setState({phase: PHASE_LOADERROR}); + this.setState({backupInfoFetchError: e}); } } async _queryKeyUploadAuth() { try { + this.setState({canUploadKeyCheckInProgress: true}); await MatrixClientPeg.get().uploadDeviceSigningKeys(null, {}); // We should never get here: the server should always require // UI auth to upload device signing keys. If we do, we upload // no keys which would be a no-op. console.log("uploadDeviceSigningKeys unexpectedly succeeded without UI auth!"); + this.setState({canUploadKeyCheckInProgress: false}); } catch (error) { if (!error.data || !error.data.flows) { console.log("uploadDeviceSigningKeys advertised no flows!"); + this.setState({ + canUploadKeyCheckInProgress: false, + }); return; } const canUploadKeysWithPasswordOnly = error.data.flows.some(f => { @@ -144,10 +143,18 @@ export default class CreateSecretStorageDialog extends React.PureComponent { }); this.setState({ canUploadKeysWithPasswordOnly, + canUploadKeyCheckInProgress: false, }); } } + async _createRecoveryKey() { + this._recoveryKey = await MatrixClientPeg.get().createRecoveryKeyFromPassphrase(); + this.setState({ + phase: PHASE_SHOWKEY, + }); + } + _onKeyBackupStatusChange = () => { if (this.state.phase === PHASE_MIGRATE) this._fetchBackupInfo(); } @@ -156,12 +163,6 @@ export default class CreateSecretStorageDialog extends React.PureComponent { this._recoveryKeyNode = n; } - _onUseKeyBackupChange = (enabled) => { - this.setState({ - useKeyBackup: enabled, - }); - } - _onMigrateFormSubmit = (e) => { e.preventDefault(); if (this.state.backupSigStatus.usable) { @@ -171,12 +172,15 @@ export default class CreateSecretStorageDialog extends React.PureComponent { } } + _onIntroContinueClick = () => { + this._createRecoveryKey(); + } + _onCopyClick = () => { const successful = copyNode(this._recoveryKeyNode); if (successful) { this.setState({ copied: true, - phase: PHASE_KEEPITSAFE, }); } } @@ -186,10 +190,8 @@ export default class CreateSecretStorageDialog extends React.PureComponent { type: 'text/plain;charset=us-ascii', }); FileSaver.saveAs(blob, 'recovery-key.txt'); - this.setState({ downloaded: true, - phase: PHASE_KEEPITSAFE, }); } @@ -245,7 +247,9 @@ export default class CreateSecretStorageDialog extends React.PureComponent { _bootstrapSecretStorage = async () => { this.setState({ - phase: PHASE_STORING, + // we use LOADING here rather than STORING as STORING still shows the 'show key' + // screen which is not relevant: LOADING is just a generic spinner. + phase: PHASE_LOADING, error: null, }); @@ -286,9 +290,7 @@ export default class CreateSecretStorageDialog extends React.PureComponent { }, }); } - this.setState({ - phase: PHASE_DONE, - }); + this.props.onFinished(true); } catch (e) { if (this.state.canUploadKeysWithPasswordOnly && e.httpStatus === 401 && e.data.flows) { this.setState({ @@ -307,10 +309,6 @@ export default class CreateSecretStorageDialog extends React.PureComponent { this.props.onFinished(false); } - _onDone = () => { - this.props.onFinished(true); - } - _restoreBackup = async () => { // It's possible we'll need the backup key later on for bootstrapping, // so let's stash it here, rather than prompting for it twice. @@ -337,88 +335,41 @@ export default class CreateSecretStorageDialog extends React.PureComponent { } } + _onShowKeyContinueClick = () => { + this._bootstrapSecretStorage(); + } + _onLoadRetryClick = () => { + this.loadData(); + } + + async loadData() { this.setState({phase: PHASE_LOADING}); - this._fetchBackupInfo(); + const proms = []; + + if (!this.state.backupInfoFetched) proms.push(this._fetchBackupInfo()); + if (this.state.canUploadKeysWithPasswordOnly === null) proms.push(this._queryKeyUploadAuth()); + + await Promise.all(proms); + if (this.state.canUploadKeysWithPasswordOnly === null || this.state.backupInfoFetchError) { + this.setState({phase: PHASE_LOADERROR}); + } else if (this.state.backupInfo && !this.props.force) { + this.setState({phase: PHASE_MIGRATE}); + } else { + this.setState({phase: PHASE_INTRO}); + } } _onSkipSetupClick = () => { this.setState({phase: PHASE_CONFIRM_SKIP}); } - _onSetUpClick = () => { - this.setState({phase: PHASE_PASSPHRASE}); - } - - _onSkipPassPhraseClick = async () => { - this._recoveryKey = - await MatrixClientPeg.get().createRecoveryKeyFromPassphrase(); - this.setState({ - copied: false, - downloaded: false, - phase: PHASE_SHOWKEY, - }); - } - - _onPassPhraseNextClick = async (e) => { - e.preventDefault(); - if (!this._passphraseField.current) return; // unmounting - - await this._passphraseField.current.validate({ allowEmpty: false }); - if (!this._passphraseField.current.state.valid) { - this._passphraseField.current.focus(); - this._passphraseField.current.validate({ allowEmpty: false, focused: true }); - return; + _onGoBackClick = () => { + if (this.state.backupInfo && !this.props.force) { + this.setState({phase: PHASE_MIGRATE}); + } else { + this.setState({phase: PHASE_INTRO}); } - - this.setState({phase: PHASE_PASSPHRASE_CONFIRM}); - }; - - _onPassPhraseConfirmNextClick = async (e) => { - e.preventDefault(); - - if (this.state.passPhrase !== this.state.passPhraseConfirm) return; - - this._recoveryKey = - await MatrixClientPeg.get().createRecoveryKeyFromPassphrase(this.state.passPhrase); - this.setState({ - copied: false, - downloaded: false, - phase: PHASE_SHOWKEY, - }); - } - - _onSetAgainClick = () => { - this.setState({ - passPhrase: '', - passPhraseValid: false, - passPhraseConfirm: '', - phase: PHASE_PASSPHRASE, - }); - } - - _onKeepItSafeBackClick = () => { - this.setState({ - phase: PHASE_SHOWKEY, - }); - } - - _onPassPhraseValidate = (result) => { - this.setState({ - passPhraseValid: result.valid, - }); - }; - - _onPassPhraseChange = (e) => { - this.setState({ - passPhrase: e.target.value, - }); - } - - _onPassPhraseConfirmChange = (e) => { - this.setState({ - passPhraseConfirm: e.target.value, - }); } _onAccountPasswordChange = (e) => { @@ -433,12 +384,14 @@ export default class CreateSecretStorageDialog extends React.PureComponent { // Once we're confident enough in this (and it's supported enough) we can do // it automatically. // https://github.com/vector-im/riot-web/issues/11696 - const DialogButtons = sdk.getComponent('views.elements.DialogButtons'); const Field = sdk.getComponent('views.elements.Field'); let authPrompt; let nextCaption = _t("Next"); - if (this.state.canUploadKeysWithPasswordOnly) { + if (!this.state.backupSigStatus.usable) { + authPrompt = null; + nextCaption = _t("Upload"); + } else if (this.state.canUploadKeysWithPasswordOnly && !this.props.accountPassword) { authPrompt =
{_t("Enter your account password to confirm the upgrade:")}
; - } else if (!this.state.backupSigStatus.usable) { - authPrompt =
-
{_t("Restore your key backup to upgrade your encryption")}
-
; - nextCaption = _t("Restore"); } else { authPrompt =

{_t("You'll need to authenticate with the server to confirm the upgrade.")} @@ -463,9 +411,9 @@ export default class CreateSecretStorageDialog extends React.PureComponent { return

{_t( - "Upgrade this session to allow it to verify other sessions, " + - "granting them access to encrypted messages and marking them " + - "as trusted for other users.", + "Upgrade your Recovery Key to store encryption keys & secrets " + + "with your account data. If you lose access to this login you'll " + + "need it to unlock your data.", )}

{authPrompt}
; } - _renderPhasePassPhrase() { - const DialogButtons = sdk.getComponent('views.elements.DialogButtons'); - const AccessibleButton = sdk.getComponent('elements.AccessibleButton'); - const LabelledToggleSwitch = sdk.getComponent('views.elements.LabelledToggleSwitch'); - - return -

{_t( - "Set a recovery passphrase to secure encrypted information and recover it if you log out. " + - "This should be different to your account password:", - )}

- -
- -
- - - - - - - -
- {_t("Advanced")} - - {_t("Set up with a recovery key")} - -
- ; - } - - _renderPhasePassPhraseConfirm() { - const AccessibleButton = sdk.getComponent('elements.AccessibleButton'); - const Field = sdk.getComponent('views.elements.Field'); - - let matchText; - let changeText; - if (this.state.passPhraseConfirm === this.state.passPhrase) { - matchText = _t("That matches!"); - changeText = _t("Use a different passphrase?"); - } else if (!this.state.passPhrase.startsWith(this.state.passPhraseConfirm)) { - // only tell them they're wrong if they've actually gone wrong. - // Security concious readers will note that if you left riot-web unattended - // on this screen, this would make it easy for a malicious person to guess - // your passphrase one letter at a time, but they could get this faster by - // just opening the browser's developer tools and reading it. - // Note that not having typed anything at all will not hit this clause and - // fall through so empty box === no hint. - matchText = _t("That doesn't match."); - changeText = _t("Go back to set it again."); - } - - let passPhraseMatch = null; - if (matchText) { - passPhraseMatch =
-
{matchText}
-
- - {changeText} - -
+ />; + } else { + continueButton =
+
; } - const DialogButtons = sdk.getComponent('views.elements.DialogButtons'); - return
-

{_t( - "Enter your recovery passphrase a second time to confirm it.", - )}

-
- -
- {passPhraseMatch} -
-
- - - -
; - } - _renderPhaseShowKey() { - const AccessibleButton = sdk.getComponent('elements.AccessibleButton'); return

{_t( - "Your recovery key is a safety net - you can use it to restore " + - "access to your encrypted messages if you forget your recovery passphrase.", - )}

-

{_t( - "Keep a copy of it somewhere secure, like a password manager or even a safe.", + "Store your Recovery Key somewhere safe, it can be used to unlock your encrypted messages & data.", )}

-
- {_t("Your recovery key")} -
{this._recoveryKey.encodedPrivateKey}
+ + {_t("Download")} + + {_t("or")} - {_t("Copy")} - - - {_t("Download")} + {this.state.copied ? _t("Copied!") : _t("Copy")}
-
; - } - - _renderPhaseKeepItSafe() { - let introText; - if (this.state.copied) { - introText = _t( - "Your recovery key has been copied to your clipboard, paste it to:", - {}, {b: s => {s}}, - ); - } else if (this.state.downloaded) { - introText = _t( - "Your recovery key is in your Downloads folder.", - {}, {b: s => {s}}, - ); - } - const DialogButtons = sdk.getComponent('views.elements.DialogButtons'); - return
- {introText} -
    -
  • {_t("Print it and store it somewhere safe", {}, {b: s => {s}})}
  • -
  • {_t("Save it on a USB key or backup drive", {}, {b: s => {s}})}
  • -
  • {_t("Copy it to your personal cloud storage", {}, {b: s => {s}})}
  • -
- - - + {continueButton}
; } @@ -671,7 +483,6 @@ export default class CreateSecretStorageDialog extends React.PureComponent { } _renderPhaseLoadError() { - const DialogButtons = sdk.getComponent('views.elements.DialogButtons'); return

{_t("Unable to query secret storage status")}

@@ -684,29 +495,44 @@ export default class CreateSecretStorageDialog extends React.PureComponent {
; } - _renderPhaseDone() { - const DialogButtons = sdk.getComponent('views.elements.DialogButtons'); + _renderPhaseIntro() { + let cancelButton; + if (this.props.force) { + // if this is a forced key reset then aborting will just leave the old keys + // in place, and is thereforece just 'cancel' + cancelButton = ; + } else { + // if it's setting up from scratch then aborting leaves the user without + // crypto set up, so they skipping the setup. + cancelButton = ; + } + return

{_t( - "You can now verify your other devices, " + - "and other users to keep your chats safe.", + "Create a Recovery Key to store encryption keys & secrets with your account data. " + + "If you lose access to this login you’ll need it to unlock your data.", )}

- +
+ + {cancelButton} + +
; } _renderPhaseSkipConfirm() { - const DialogButtons = sdk.getComponent('views.elements.DialogButtons'); return
{_t( "Without completing security on this session, it won’t have " + "access to encrypted messages.", )} @@ -716,21 +542,15 @@ export default class CreateSecretStorageDialog extends React.PureComponent { _titleForPhase(phase) { switch (phase) { + case PHASE_INTRO: + return _t('Create a Recovery Key'); case PHASE_MIGRATE: - return _t('Upgrade your encryption'); - case PHASE_PASSPHRASE: - return _t('Set up encryption'); - case PHASE_PASSPHRASE_CONFIRM: - return _t('Confirm recovery passphrase'); + return _t('Upgrade your Recovery Key'); case PHASE_CONFIRM_SKIP: return _t('Are you sure?'); case PHASE_SHOWKEY: - case PHASE_KEEPITSAFE: - return _t('Make a copy of your recovery key'); case PHASE_STORING: - return _t('Setting up keys'); - case PHASE_DONE: - return _t("You're done!"); + return _t('Store your Recovery Key'); default: return ''; } @@ -741,7 +561,6 @@ export default class CreateSecretStorageDialog extends React.PureComponent { let content; if (this.state.error) { - const DialogButtons = sdk.getComponent('views.elements.DialogButtons'); content =

{_t("Unable to set up secret storage")}

@@ -760,26 +579,15 @@ export default class CreateSecretStorageDialog extends React.PureComponent { case PHASE_LOADERROR: content = this._renderPhaseLoadError(); break; + case PHASE_INTRO: + content = this._renderPhaseIntro(); + break; case PHASE_MIGRATE: content = this._renderPhaseMigrate(); break; - case PHASE_PASSPHRASE: - content = this._renderPhasePassPhrase(); - break; - case PHASE_PASSPHRASE_CONFIRM: - content = this._renderPhasePassPhraseConfirm(); - break; case PHASE_SHOWKEY: - content = this._renderPhaseShowKey(); - break; - case PHASE_KEEPITSAFE: - content = this._renderPhaseKeepItSafe(); - break; case PHASE_STORING: - content = this._renderBusyPhase(); - break; - case PHASE_DONE: - content = this._renderPhaseDone(); + content = this._renderPhaseShowKey(); break; case PHASE_CONFIRM_SKIP: content = this._renderPhaseSkipConfirm(); @@ -797,7 +605,7 @@ export default class CreateSecretStorageDialog extends React.PureComponent { onFinished={this.props.onFinished} title={this._titleForPhase(this.state.phase)} headerImage={headerImage} - hasCancel={this.props.hasCancel && [PHASE_PASSPHRASE].includes(this.state.phase)} + hasCancel={this.props.hasCancel} fixedWidth={false} >
diff --git a/src/components/structures/auth/CompleteSecurity.js b/src/components/structures/auth/CompleteSecurity.js index c73691611d..e38ecd3eac 100644 --- a/src/components/structures/auth/CompleteSecurity.js +++ b/src/components/structures/auth/CompleteSecurity.js @@ -21,6 +21,7 @@ import * as sdk from '../../../index'; import { SetupEncryptionStore, PHASE_INTRO, + PHASE_RECOVERY_KEY, PHASE_BUSY, PHASE_DONE, PHASE_CONFIRM_SKIP, @@ -61,6 +62,9 @@ export default class CompleteSecurity extends React.Component { if (phase === PHASE_INTRO) { icon = ; title = _t("Verify this login"); + } else if (phase === PHASE_RECOVERY_KEY) { + icon = ; + title = _t("Recovery Key"); } else if (phase === PHASE_DONE) { icon = ; title = _t("Session verified"); diff --git a/src/components/structures/auth/SetupEncryptionBody.js b/src/components/structures/auth/SetupEncryptionBody.js index 26534c6e02..7886ed26dd 100644 --- a/src/components/structures/auth/SetupEncryptionBody.js +++ b/src/components/structures/auth/SetupEncryptionBody.js @@ -19,15 +19,26 @@ import PropTypes from 'prop-types'; import { _t } from '../../../languageHandler'; import { MatrixClientPeg } from '../../../MatrixClientPeg'; import * as sdk from '../../../index'; +import withValidation from '../../views/elements/Validation'; +import { decodeRecoveryKey } from 'matrix-js-sdk/src/crypto/recoverykey'; import { SetupEncryptionStore, PHASE_INTRO, + PHASE_RECOVERY_KEY, PHASE_BUSY, PHASE_DONE, PHASE_CONFIRM_SKIP, PHASE_FINISHED, } from '../../../stores/SetupEncryptionStore'; +function keyHasPassphrase(keyInfo) { + return ( + keyInfo.passphrase && + keyInfo.passphrase.salt && + keyInfo.passphrase.iterations + ); +} + export default class SetupEncryptionBody extends React.Component { static propTypes = { onFinished: PropTypes.func.isRequired, @@ -45,6 +56,11 @@ export default class SetupEncryptionBody extends React.Component { // Because of the latter, it lives in the state. verificationRequest: store.verificationRequest, backupInfo: store.backupInfo, + recoveryKey: '', + // whether the recovery key is a valid recovery key + recoveryKeyValid: null, + // whether the recovery key is the correct key or not + recoveryKeyCorrect: null, }; } @@ -67,9 +83,19 @@ export default class SetupEncryptionBody extends React.Component { store.stop(); } - _onUsePassphraseClick = async () => { + _onResetClick = () => { const store = SetupEncryptionStore.sharedInstance(); - store.usePassPhrase(); + store.startKeyReset(); + } + + _onUseRecoveryKeyClick = async () => { + const store = SetupEncryptionStore.sharedInstance(); + store.useRecoveryKey(); + } + + _onRecoveryKeyCancelClick() { + const store = SetupEncryptionStore.sharedInstance(); + store.cancelUseRecoveryKey(); } onSkipClick = () => { @@ -92,6 +118,66 @@ export default class SetupEncryptionBody extends React.Component { store.done(); } + _onUsePassphraseClick = () => { + const store = SetupEncryptionStore.sharedInstance(); + store.usePassPhrase(); + } + + _onRecoveryKeyChange = (e) => { + this.setState({recoveryKey: e.target.value}); + } + + _onRecoveryKeyValidate = async (fieldState) => { + const result = await this._validateRecoveryKey(fieldState); + this.setState({recoveryKeyValid: result.valid}); + return result; + } + + _validateRecoveryKey = withValidation({ + rules: [ + { + key: "required", + test: async (state) => { + try { + const decodedKey = decodeRecoveryKey(state.value); + const correct = await MatrixClientPeg.get().checkSecretStorageKey( + decodedKey, SetupEncryptionStore.sharedInstance().keyInfo, + ); + this.setState({ + recoveryKeyValid: true, + recoveryKeyCorrect: correct, + }); + return correct; + } catch (e) { + this.setState({ + recoveryKeyValid: false, + recoveryKeyCorrect: false, + }); + return false; + } + }, + invalid: function() { + if (this.state.recoveryKeyValid) { + return _t("This isn't the recovery key for your account"); + } else { + return _t("This isn't a valid recovery key"); + } + }, + valid: function() { + return _t("Looks good!"); + }, + }, + ], + }) + + _onRecoveryKeyFormSubmit = (e) => { + e.preventDefault(); + if (!this.state.recoveryKeyCorrect) return; + + const store = SetupEncryptionStore.sharedInstance(); + store.setupWithRecoveryKey(decodeRecoveryKey(this.state.recoveryKey)); + } + render() { const AccessibleButton = sdk.getComponent("elements.AccessibleButton"); @@ -108,6 +194,13 @@ export default class SetupEncryptionBody extends React.Component { member={MatrixClientPeg.get().getUser(this.state.verificationRequest.otherUserId)} />; } else if (phase === PHASE_INTRO) { + const store = SetupEncryptionStore.sharedInstance(); + let recoveryKeyPrompt; + if (keyHasPassphrase(store.keyInfo)) { + recoveryKeyPrompt = _t("Use Recovery Key or Passphrase"); + } else { + recoveryKeyPrompt = _t("Use Recovery Key"); + } return (

{_t( @@ -131,15 +224,67 @@ export default class SetupEncryptionBody extends React.Component {

- - {_t("Use Recovery Passphrase or Key")} + + {recoveryKeyPrompt} {_t("Skip")}
+
{_t( + "If you've forgotten your recovery key you can " + + "", {}, { + button: sub => + {sub} + , + }, + )}
); + } else if (phase === PHASE_RECOVERY_KEY) { + const store = SetupEncryptionStore.sharedInstance(); + let keyPrompt; + if (keyHasPassphrase(store.keyInfo)) { + keyPrompt = _t( + "Enter your Recovery Key or enter a Recovery Passphrase to continue.", {}, + { + a: sub => {sub}, + }, + ); + } else { + keyPrompt = _t("Enter your Recovery Key to continue."); + } + + const Field = sdk.getComponent('elements.Field'); + return
+

{keyPrompt}

+
+ +
+
+ + {_t("Cancel")} + + + {_t("Continue")} + +
+
; } else if (phase === PHASE_DONE) { let message; if (this.state.backupInfo) { diff --git a/src/components/views/dialogs/keybackup/RestoreKeyBackupDialog.js b/src/components/views/dialogs/keybackup/RestoreKeyBackupDialog.js index dd34dfbbf0..87ba6f7396 100644 --- a/src/components/views/dialogs/keybackup/RestoreKeyBackupDialog.js +++ b/src/components/views/dialogs/keybackup/RestoreKeyBackupDialog.js @@ -88,7 +88,7 @@ export default class RestoreKeyBackupDialog extends React.PureComponent { _onResetRecoveryClick = () => { this.props.onFinished(false); - accessSecretStorage(() => {}, /* forceReset = */ true); + accessSecretStorage(() => {}, {forceReset: true}); } _onRecoveryKeyChange = (e) => { diff --git a/src/components/views/dialogs/secretstorage/AccessSecretStorageDialog.js b/src/components/views/dialogs/secretstorage/AccessSecretStorageDialog.js index e2ceadfbb9..43697f8ee7 100644 --- a/src/components/views/dialogs/secretstorage/AccessSecretStorageDialog.js +++ b/src/components/views/dialogs/secretstorage/AccessSecretStorageDialog.js @@ -32,6 +32,9 @@ export default class AccessSecretStorageDialog extends React.PureComponent { keyInfo: PropTypes.object.isRequired, // Function from one of { passphrase, recoveryKey } -> boolean checkPrivateKey: PropTypes.func.isRequired, + // If true, only prompt for a passphrase and do not offer to restore with + // a recovery key or reset keys. + passphraseOnly: PropTypes.bool, } constructor(props) { @@ -58,7 +61,7 @@ export default class AccessSecretStorageDialog extends React.PureComponent { _onResetRecoveryClick = () => { // Re-enter the access flow, but resetting storage this time around. this.props.onFinished(false); - accessSecretStorage(() => {}, /* forceReset = */ true); + accessSecretStorage(() => {}, {forceReset: true}); } _onRecoveryKeyChange = (e) => { @@ -164,7 +167,7 @@ export default class AccessSecretStorageDialog extends React.PureComponent { primaryDisabled={this.state.passPhrase.length === 0} /> - {_t( + {this.props.passphraseOnly ? null : _t( "If you've forgotten your recovery passphrase you can "+ "use your recovery key or " + "set up new recovery options." @@ -234,7 +237,7 @@ export default class AccessSecretStorageDialog extends React.PureComponent { primaryDisabled={!this.state.recoveryKeyValid} /> - {_t( + {this.props.passphraseOnly ? null : _t( "If you've forgotten your recovery key you can "+ "." , {}, { diff --git a/src/components/views/elements/StyledRadioButton.tsx b/src/components/views/elements/StyledRadioButton.tsx index 7d84f68c49..fdedd16230 100644 --- a/src/components/views/elements/StyledRadioButton.tsx +++ b/src/components/views/elements/StyledRadioButton.tsx @@ -29,9 +29,16 @@ export default class StyledRadioButton extends React.PureComponent - + const { children, className, disabled, ...otherProps } = this.props; + const _className = classnames( + 'mx_RadioButton', + className, + { + "mx_RadioButton_disabled": disabled, + "mx_RadioButton_enabled": !disabled, + }); + return
; } @@ -256,17 +258,22 @@ export default class AppearanceUserSettingsTab extends React.Component {_t("Theme")} {systemThemeSection} - +
{orderedThemes.map(theme => { - return ; + return + {theme.name} + ; })} - +
{customThemeForm} - +
); } @@ -309,8 +316,11 @@ export default class AppearanceUserSettingsTab extends React.Component -
{_t("Appearance")}
+
+
{_t("Customise your appearance")}
+
+ {_t("Appearance Settings only affect this Riot session.")} +
{this.renderThemeSection()} {SettingsStore.isFeatureEnabled("feature_font_scaling") ? this.renderFontSection() : null}
diff --git a/src/i18n/strings/bg.json b/src/i18n/strings/bg.json index 3d9bb8653c..89edf90c8b 100644 --- a/src/i18n/strings/bg.json +++ b/src/i18n/strings/bg.json @@ -2324,5 +2324,127 @@ "Show sessions, send anyway or cancel.": "Покажи сесиите, изпрати така или иначе или откажи.", "Verify this login": "Потвърди тази сесия", "Session verified": "Сесията беше потвърдена", - "Changing your password will reset any end-to-end encryption keys on all of your sessions, making encrypted chat history unreadable. Set up Key Backup or export your room keys from another session before resetting your password.": "Промяната на паролата ще нулира всички ключове за шифроване от-край-до-край по всички ваши сесии, правейки шифрованата история на чата нечетима. Настройте резервно копие на ключовете или експортирайте ключовете на стаите от друга сесия преди да промените паролата си." + "Changing your password will reset any end-to-end encryption keys on all of your sessions, making encrypted chat history unreadable. Set up Key Backup or export your room keys from another session before resetting your password.": "Промяната на паролата ще нулира всички ключове за шифроване от-край-до-край по всички ваши сесии, правейки шифрованата история на чата нечетима. Настройте резервно копие на ключовете или експортирайте ключовете на стаите от друга сесия преди да промените паролата си.", + "Your server admin has disabled end-to-end encryption by default in private rooms & Direct Messages.": "Администраторът на сървъра е изключиш шифроване от край-до-край по подразбиране за лични стаи и за директни съобщения.", + "Emoji picker": "Избор на емоджи", + "People": "Хора", + "Show %(n)s more": "Покажи още %(n)s", + "Switch to light mode": "Смени на светъл режим", + "Switch to dark mode": "Смени на тъмен режим", + "Switch theme": "Смени темата", + "Security & privacy": "Сигурност и поверителност", + "All settings": "Всички настройки", + "Archived rooms": "Архивирани стаи", + "Feedback": "Обратна връзка", + "Account settings": "Настройки на профила", + "You have been logged out of all sessions and will no longer receive push notifications. To re-enable notifications, sign in again on each device.": "Излязохте от всички сесии и вече няма да получавате push уведомления. За да включите уведомленията пак, влезте наново от всяко устройство.", + "Syncing...": "Синхронизиране...", + "Signing In...": "Влизане...", + "If you've joined lots of rooms, this might take a while": "Това може да отнеме известно време, ако сте в много стаи", + "Confirm your identity by verifying this login from one of your other sessions, granting it access to encrypted messages.": "Потвърдете идентичността на този вход чрез верифицирането му от някоя от другите ви сесии, давайки достъп до шифрованите съобщения.", + "This requires the latest Riot on your other devices:": "Това изисква най-новата версия на Riot на другите ви устройства:", + "or another cross-signing capable Matrix client": "или друг Matrix клиент поддържащ кръстосано-подписване", + "Use Recovery Passphrase or Key": "Използвай парола за възстановяване или ключ", + "Your new session is now verified. It has access to your encrypted messages, and other users will see it as trusted.": "Сесията ви е потвърдена. Тя има достъп до шифрованите ви съобщения. Други потребители я виждат като доверена.", + "Your new session is now verified. Other users will see it as trusted.": "Новата ви сесия е потвърдена. Другите потребители ще я виждат като доверена.", + "Without completing security on this session, it won’t have access to encrypted messages.": "Без да повишите сигурността на тази сесия, няма да имате достъп до шифрованите съобщения.", + "Go Back": "Върни се", + "Regain access to your account and recover encryption keys stored in this session. Without them, you won’t be able to read all of your secure messages in any session.": "Възвърнете достъп до профила си и до ключовете за шифроване съхранени в тази сесия. Без тях няма да можете да четете всички защитени съобщения в коя да е сесия.", + "Warning: Your personal data (including encryption keys) is still stored in this session. Clear it if you're finished using this session, or want to sign in to another account.": "Внимание: личните ви данни (включително ключове за шифроване) все още се съхраняват в тази сесия. Изчистете ги, ако сте приключили със сесията или искате да влезете в друг профил.", + "Confirm encryption setup": "Потвърждение на настройки за шифроване", + "Click the button below to confirm setting up encryption.": "Кликнете бутона по-долу за да потвърдите настройването на шифроване.", + "Enter your account password to confirm the upgrade:": "Въведете паролата за профила си за да потвърдите обновлението:", + "Restore your key backup to upgrade your encryption": "Възстановете резервното копие на ключа за да обновите шифроването", + "Restore": "Възстанови", + "You'll need to authenticate with the server to confirm the upgrade.": "Ще трябва да се автентикирате пред сървъра за да потвърдите обновяването.", + "Upgrade this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "Обновете тази сесия, за да може да потвърждава други сесии, давайки им достъп до шифрованите съобщения и маркирайки ги като доверени за другите потребители.", + "Set a recovery passphrase to secure encrypted information and recover it if you log out. This should be different to your account password:": "Настройте парола за възстановяване за да защитите шифрованата информация и за да я възстановите, ако излезете от профила. По-добре е да използвате парола различна от тази за профила ви:", + "Enter a recovery passphrase": "Въведете парола за възстановяване", + "Great! This recovery passphrase looks strong enough.": "Чудесно! Тази парола за възстановяване изглежда достатъчно силна.", + "Back up encrypted message keys": "Правене на резервно копие на ключовете за шифроване", + "Use a different passphrase?": "Използвай друга парола?", + "Enter your recovery passphrase a second time to confirm it.": "Въведете паролата за възстановяване още веднъж за да потвърдите.", + "Confirm your recovery passphrase": "Потвърдете паролата за възстановяване", + "Your recovery key is a safety net - you can use it to restore access to your encrypted messages if you forget your recovery passphrase.": "Ключа за възстановяване е допълнителна гаранция - може да го използвате вместо паролата за възстановяване за да възстановите достъп до шифрованите съобщения.", + "Keep a copy of it somewhere secure, like a password manager or even a safe.": "Направете копие на сигурно място, например password manager или сейф.", + "Your recovery key": "Ключът ви за възстановяване", + "Copy": "Копирай", + "Unable to query secret storage status": "Неуспешно допитване за състоянието на секретното складиране", + "You can now verify your other devices, and other users to keep your chats safe.": "Вече може да потвърждавате другите си устройства и другите потребители, за да пазите чатовете си сигурни.", + "Upgrade your encryption": "Обновете шифроването", + "Confirm recovery passphrase": "Потвърдете паролата за възстановяване", + "Make a copy of your recovery key": "Направете копие на ключа за възстановяване", + "You're done!": "Готови сте!", + "We'll store an encrypted copy of your keys on our server. Secure your backup with a recovery passphrase.": "Ще съхраним шифровано копие на ключовете ви на сървъра. Защитете резервното копие с парола за възстановяване.", + "Please enter your recovery passphrase a second time to confirm.": "Въведете паролата за възстановяване отново за да потвърдите.", + "Repeat your recovery passphrase...": "Повторете паролата си за възстановяване...", + "Without setting up Secure Message Recovery, you won't be able to restore your encrypted message history if you log out or use another session.": "Ако не настройте защитено възстановяване на съобщения, няма да можете да възстановите историята на шифрованите си съобщения при излизане от профила или при използване на друга сесия.", + "Secure your backup with a recovery passphrase": "Защитете профила си с парола за възстановяване", + "Create key backup": "Създай резервно копие на ключовете", + "This session is encrypting history using the new recovery method.": "Тази сесия шифрова историята използвайки новия метод за възстановяване.", + "This session has detected that your recovery passphrase and key for Secure Messages have been removed.": "Тази сесия установи, че паролата за възстановяване и ключа за сигурни съобщения са били премахнати.", + "If you did this accidentally, you can setup Secure Messages on this session which will re-encrypt this session's message history with a new recovery method.": "Ако сте направили това без да искате, може да настройте защитени съобщения за тази сесия, което ще зашифрова наново историята на съобщенията използвайки новия метод за възстановяване.", + "If disabled, messages from encrypted rooms won't appear in search results.": "Ако е изключено, съобщения от шифровани стаи няма да се показват в резултатите от търсения.", + "Disable": "Изключи", + "Not currently indexing messages for any room.": "В момента не се индексират съобщения в нито една стая.", + "Currently indexing: %(currentRoom)s": "В момента се индексира: %(currentRoom)s", + "Riot is securely caching encrypted messages locally for them to appear in search results:": "Riot кешира шифровани съобщения локално по сигурен начин, за да може те да се появяват в резултати от търсения:", + "Space used:": "Използвано пространство:", + "Indexed messages:": "Индексирани съобщения:", + "Indexed rooms:": "Индексирани стаи:", + "%(doneRooms)s out of %(totalRooms)s": "%(doneRooms)s от %(totalRooms)s", + "Message downloading sleep time(ms)": "Период на пауза между свалянията на съобщения (ms)", + "Navigation": "Навигация", + "Calls": "Обаждания", + "Room List": "Списък със стаи", + "Autocomplete": "Подсказване", + "Alt": "Alt", + "Alt Gr": "Alt Gr", + "Shift": "Shift", + "Super": "Super", + "Ctrl": "Ctrl", + "Toggle Bold": "Превключи удебеляването", + "Toggle Italics": "Превключи накланянето", + "Toggle Quote": "Превключи цитирането", + "New line": "Нов ред", + "Navigate recent messages to edit": "Движение из скорошни съобщения за редактиране", + "Jump to start/end of the composer": "Прескачане в началото/края на полето за писане", + "Navigate composer history": "Движение из историята на полето за писане", + "Cancel replying to a message": "Отказване на отговарянето на съобщение", + "Toggle microphone mute": "Превключване на заглушаването на микрофона", + "Toggle video on/off": "Превключване на видеото (вкл./изкл.)", + "Scroll up/down in the timeline": "Движение нагоре/надолу из съобщенията", + "Dismiss read marker and jump to bottom": "Игнориране на маркера за прочитане и отиване най-долу", + "Jump to oldest unread message": "Прескачане до най-старото непрочетено съобщение", + "Upload a file": "Качване на файл", + "Jump to room search": "Търсене на стаи", + "Navigate up/down in the room list": "Движение нагоре/надолу в списъка със стаи", + "Select room from the room list": "Избор на стая от списъка", + "Collapse room list section": "Свиване на раздел със стаи", + "Expand room list section": "Разширение на раздел със стаи", + "Clear room list filter field": "Изчистване на полето за филтрирането на списъка със стаи", + "Previous/next unread room or DM": "Предишна/следваща непрочетена стая или директно съобщение", + "Previous/next room or DM": "Предишна/следваща стая или директно съобщение", + "Toggle the top left menu": "Превключва основното меню (горе в ляво)", + "Close dialog or context menu": "Затваряне на прозорец или контекстно меню", + "Activate selected button": "Активиране на избрания бутон", + "Toggle right panel": "Превключване на десния панел", + "Toggle this dialog": "Превключване на този прозорец", + "Move autocomplete selection up/down": "Движение нагоре/надолу из подсказките", + "Cancel autocomplete": "Отказване на подсказките", + "Page Up": "Page Up", + "Page Down": "Page Down", + "Esc": "Esc", + "Enter": "Enter", + "Space": "Space", + "End": "End", + "sent an image.": "изпрати снимка.", + "You: %(message)s": "Вие: %(message)s", + "No recently visited rooms": "Няма наскоро-посетени стаи", + "Sort by": "Подреди по", + "Activity": "Активност", + "A-Z": "Азбучен ред", + "Unread rooms": "Непрочетени стаи", + "Show %(count)s more|other": "Покажи още %(count)s", + "Show %(count)s more|one": "Покажи още %(count)s" } diff --git a/src/i18n/strings/de_DE.json b/src/i18n/strings/de_DE.json index f55d94f8fc..c559447757 100644 --- a/src/i18n/strings/de_DE.json +++ b/src/i18n/strings/de_DE.json @@ -412,7 +412,7 @@ "Seen by %(userName)s at %(dateTime)s": "Gesehen von %(userName)s um %(dateTime)s", "Send anyway": "Trotzdem senden", "Start authentication": "Authentifizierung beginnen", - "This room": "In diesem Raum", + "This room": "diesen Raum", "unknown caller": "Unbekannter Anrufer", "Unnamed Room": "Unbenannter Raum", "Upload new:": "Neue(s) hochladen:", @@ -1569,7 +1569,7 @@ "Your password was successfully changed. You will not receive push notifications on other sessions until you log back in to them": "Ihr Passwort wurde erfolgreich geändert. Sie erhalten keine Push-Benachrichtigungen zu anderen Sitzungen, bis Sie sich wieder bei diesen anmelden", "Sessions": "Sitzungen", "Notification sound": "Benachrichtigungston", - "Set a new custom sound": "Setze einen neuen benutzerdefinierten Sound", + "Set a new custom sound": "Setze einen neuen benutzerdefinierten Ton", "Browse": "Durchsuche", "Direct Messages": "Direktnachrichten", "You can use /help to list available commands. Did you mean to send this as a message?": "Sie können /help benutzen, um verfügbare Befehle aufzulisten. Wollten Sie dies als Nachricht senden?", @@ -1584,8 +1584,8 @@ "To help us prevent this in future, please send us logs.": "Um uns zu helfen, dies in Zukunft zu vermeiden, senden Sie uns bitte Logs.", "We recommend you go through the verification process for each session to confirm they belong to their legitimate owner, but you can resend the message without verifying if you prefer.": "Wir empfehlen Ihnen, den Verifizierungsprozess für jede Sitzung zu durchlaufen, um zu bestätigen, dass sie ihrem rechtmäßigen Eigentümer gehören, aber Sie können die Nachricht auch ohne Verifizierung erneut senden, wenn Sie dies bevorzugen.", "Notification settings": "Benachrichtigungseinstellungen", - "Help": "Hilfe", - "Filter": "Filter", + "Help": "Hilf uns", + "Filter": "Filtern", "Filter rooms…": "Räume filtern…", "You have %(count)s unread notifications in a prior version of this room.|one": "Sie haben %(count)s ungelesene Benachrichtigungen in einer früheren Version dieses Raumes.", "Go Back": "Gehe zurück", @@ -1793,7 +1793,7 @@ "Use Single Sign On to continue": "Benutze „Single Sign-On“ (Einmalanmeldung) um fortzufahren", "Confirm adding this email address by using Single Sign On to prove your identity.": "Bestätige das Hinzufügen dieser E-Mail-Adresse mit „Single Sign-On“, um deine Identität nachzuweisen.", "Single Sign On": "Single Sign-On", - "Confirm adding email": "Bestätige das Hinzufügen der Email-Adresse", + "Confirm adding email": "Hinzufügen der E-Mail-Adresse bestätigen", "Confirm adding this phone number by using Single Sign On to prove your identity.": "Bestätige das Hinzufügen dieser Telefonnummer, indem du deine Identität mittels „Single Sign-On“ nachweist.", "Click the button below to confirm adding this phone number.": "Klicke unten die Schaltfläche, um die hinzugefügte Telefonnummer zu bestätigen.", "If you cancel now, you won't complete your operation.": "Wenn du jetzt abbrichst, wirst du deinen Vorgang nicht fertigstellen.", @@ -1802,7 +1802,7 @@ "Command failed": "Befehl fehlgeschlagen", "Could not find user in room": "Der Benutzer konnte im Raum nicht gefunden werden", "Click the button below to confirm adding this email address.": "Klicke unten auf die Schaltfläche, um die hinzugefügte E-Mail-Adresse zu bestätigen.", - "Confirm adding phone number": "Bestätige das Hinzufügen der Telefonnummer", + "Confirm adding phone number": "Hinzufügen der Telefonnummer bestätigen", "%(senderName)s changed a rule that was banning servers matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s ändert eine Ausschluss-Regel für Server von %(oldGlob)s nach %(newGlob)s wegen %(reason)s", "%(senderName)s updated a ban rule that was matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s erneuert eine Ausschluss-Regel von %(oldGlob)s nach %(newGlob)s wegen %(reason)s", "Not Trusted": "Nicht vertrauenswürdig", @@ -1985,7 +1985,7 @@ "This invite to %(roomName)s was sent to %(email)s": "Diese Einladung zu %(roomName)s wurde an %(email)s gesendet", "Use an identity server in Settings to receive invites directly in Riot.": "Verknüpfe einen Identitätsserver in den Einstellungen um die Einladungen direkt in Riot zu erhalten.", "Share this email in Settings to receive invites directly in Riot.": "Teile diese E-Mail-Adresse in den Einstellungen um Einladungen direkt in Riot zu erhalten.", - "%(roomName)s can't be previewed. Do you want to join it?": "%(roomName)s kann keine Vorschau erzeugt werden. Möchtest du den Raum betreten?", + "%(roomName)s can't be previewed. Do you want to join it?": "Für %(roomName)s kann keine Vorschau erzeugt werden. Möchtest du den Raum betreten?", "This room doesn't exist. Are you sure you're at the right place?": "Dieser Raum existiert nicht. Bist du sicher dass du hier richtig bist?", "Try again later, or ask a room admin to check if you have access.": "Versuche es später erneut oder bitte einen Raum-Administrator deine Zutrittsrechte zu überprüfen.", "%(errcode)s was returned while trying to access the room. If you think you're seeing this message in error, please submit a bug report.": "Beim Betreten des Raums ist ein Fehler aufgetreten %(errcode)s. Wenn du denkst dass diese Meldung nicht korrekt ist sende bitte einen Fehlerbericht.", @@ -2389,5 +2389,65 @@ "Create room": "Raum erstellen", "Jump to oldest unread message": "Zur ältesten ungelesenen Nachricht springen", "Upload a file": "Eine Datei hochladen", - "Dismiss read marker and jump to bottom": "Entferne Lesemarker und springe nach unten" + "Dismiss read marker and jump to bottom": "Entferne Lesemarker und springe nach unten", + "Room name or address": "Raumname oder -adresse", + "Joins room with given address": "Tritt dem Raum unter der angegebenen Adresse bei", + "Unrecognised room address:": "Unbekannte Raumadresse:", + "Help us improve Riot": "Hilf uns Riot zu verbessern", + "Send anonymous usage data which helps us improve Riot. This will use a cookie.": "Hilf uns Riot zu verbessern, indem du anonyme Nutzungsdaten schickst. Dies wird ein Cookie verwenden.", + "I want to help": "Ich möchte helfen", + "Your homeserver has exceeded its user limit.": "Dein Heimserver hat das Benutzerlimit erreicht.", + "Your homeserver has exceeded one of its resource limits.": "Dein Heimserver hat eine seiner Ressourcengrenzen erreicht.", + "Contact your server admin.": "Kontaktiere deinen Heimserver Administrator.", + "Ok": "Ok", + "Set password": "Setze Passwort", + "To return to your account in future you need to set a password": "Um dein Konto zukünftig wieder verwenden zu können, setze ein Passwort", + "Restart": "Neustarten", + "Upgrade your Riot": "Aktualisiere dein Riot", + "A new version of Riot is available!": "Eine neue Version von Riot ist verfügbar!", + "New version available. Update now.": "Neue Version verfügbar. Jetzt aktualisieren.", + "Please verify the room ID or address and try again.": "Bitte überprüfe die Raum-ID oder -adresse und versuche es erneut.", + "To link to this room, please add an address.": "Um den Raum zu verlinken, füge bitte eine Adresse hinzu.", + "Emoji picker": "Emoji Auswahl", + "Show %(n)s more": "%(n)s weitere anzeigen", + "Error creating address": "Fehler beim Anlegen der Adresse", + "There was an error creating that address. It may not be allowed by the server or a temporary failure occurred.": "Es gab einen Fehler beim Anlegen der Adresse. Entweder erlaubt es der Server nicht oder es gab ein temporäres Problem.", + "You don't have permission to delete the address.": "Du hast nicht die Berechtigung die Adresse zu löschen.", + "Error removing address": "Fehler beim Löschen der Adresse", + "Categories": "Kategorien", + "Room address": "Raumadresse", + "Please provide a room address": "Bitte gib eine Raumadresse an", + "This address is available to use": "Diese Adresse ist verfügbar", + "This address is already in use": "Diese Adresse wird bereits verwendet", + "Address (optional)": "Adresse (optional)", + "delete the address.": "lösche die Adresse.", + "Use a different passphrase?": "Eine andere Passphrase verwenden?", + "Your server admin has disabled end-to-end encryption by default in private rooms & Direct Messages.": "Dein Server-Administrator hat die Ende-zu-Ende-Verschlüsselung für private Räume und Direktnachrichten standardmäßig deaktiviert.", + "People": "Personen", + "There was an error removing that address. It may no longer exist or a temporary error occurred.": "Beim Entfernen dieser Adresse ist ein Fehler aufgetreten. Vielleicht existiert diese nicht mehr oder es kam zu einem temporären Fehler.", + "Set a room address to easily share your room with other people.": "Vergebe eine Raum-Adresse, um diesen Raum auf einfache Weise mit anderen Personen teilen zu können.", + "You've previously used a newer version of Riot with this session. To use this version again with end to end encryption, you will need to sign out and back in again.": "Du hast für diese Sitzung zuvor eine neuere Version von Riot verwendet. Um diese Version mit Ende-zu-Ende-Verschlüsselung wieder zu benutzen, musst du dich erst ab- und dann wieder anmelden.", + "Delete the room address %(alias)s and remove %(name)s from the directory?": "Soll die Raum-Adresse %(alias)s gelöscht und %(name)s aus dem Raum-Verzeichnis entfernt werden?", + "Switch to light mode": "Zum Light Mode wechseln", + "Switch to dark mode": "Zum Dark Mode wechseln", + "Switch theme": "Design ändern", + "Security & privacy": "Sicherheit & Datenschutz", + "All settings": "Alle Einstellungen", + "Archived rooms": "Archivierte Räume", + "Feedback": "Feedback", + "Account settings": "Konto-Einstellungen", + "Room ID or address of ban list": "Raum-ID oder Adresse der Verbotsliste", + "sent an image.": "hat ein Bild gesendet.", + "You: %(message)s": "Du: %(message)s", + "No recently visited rooms": "Keine kürzlich besuchten Räume", + "Sort by": "Sortieren nach", + "Unread rooms": "Ungelesene Räume", + "Always show first": "Zeige immer zuerst", + "Show": "Zeige", + "Message preview": "Nachrichtenvorschau", + "List options": "Optionen anzeigen", + "Show %(count)s more|other": "Zeige %(count)s weitere", + "Show %(count)s more|one": "Zeige %(count)s weitere", + "Leave Room": "Verlasse Raum", + "Room options": "Raumoptionen" } diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index 31da52a494..396c3f9111 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -298,8 +298,8 @@ "%(senderName)s changed a rule that was banning rooms matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s changed a rule that was banning rooms matching %(oldGlob)s to matching %(newGlob)s for %(reason)s", "%(senderName)s changed a rule that was banning servers matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s changed a rule that was banning servers matching %(oldGlob)s to matching %(newGlob)s for %(reason)s", "%(senderName)s updated a ban rule that was matching %(oldGlob)s to matching %(newGlob)s for %(reason)s": "%(senderName)s updated a ban rule that was matching %(oldGlob)s to matching %(newGlob)s for %(reason)s", - "Light theme": "Light theme", - "Dark theme": "Dark theme", + "Light": "Light", + "Dark": "Dark", "You signed in to a new session without verifying it:": "You signed in to a new session without verifying it:", "Verify your other session using one of the options below.": "Verify your other session using one of the options below.", "%(name)s (%(userId)s) signed in to a new session without verifying it:": "%(name)s (%(userId)s) signed in to a new session without verifying it:", @@ -779,7 +779,8 @@ "Custom theme URL": "Custom theme URL", "Add theme": "Add theme", "Theme": "Theme", - "Appearance": "Appearance", + "Customise your appearance": "Customise your appearance", + "Appearance Settings only affect this Riot session.": "Appearance Settings only affect this Riot session.", "Flair": "Flair", "Failed to change password. Is your password correct?": "Failed to change password. Is your password correct?", "Success": "Success", @@ -1769,6 +1770,7 @@ "Upload %(count)s other files|one": "Upload %(count)s other file", "Cancel All": "Cancel All", "Upload Error": "Upload Error", + "Appearance": "Appearance", "Verify other session": "Verify other session", "Verification Request": "Verification Request", "A widget would like to verify your identity": "A widget would like to verify your identity", @@ -2066,6 +2068,7 @@ "Account settings": "Account settings", "Could not load user profile": "Could not load user profile", "Verify this login": "Verify this login", + "Recovery Key": "Recovery Key", "Session verified": "Session verified", "Failed to send email": "Failed to send email", "The email address linked to your account must be entered.": "The email address linked to your account must be entered.", @@ -2119,10 +2122,16 @@ "You can now close this window or log in to your new account.": "You can now close this window or log in to your new account.", "Registration Successful": "Registration Successful", "Create your account": "Create your account", + "This isn't the recovery key for your account": "This isn't the recovery key for your account", + "This isn't a valid recovery key": "This isn't a valid recovery key", + "Looks good!": "Looks good!", + "Use Recovery Key or Passphrase": "Use Recovery Key or Passphrase", + "Use Recovery Key": "Use Recovery Key", "Confirm your identity by verifying this login from one of your other sessions, granting it access to encrypted messages.": "Confirm your identity by verifying this login from one of your other sessions, granting it access to encrypted messages.", "This requires the latest Riot on your other devices:": "This requires the latest Riot on your other devices:", "or another cross-signing capable Matrix client": "or another cross-signing capable Matrix client", - "Use Recovery Passphrase or Key": "Use Recovery Passphrase or Key", + "Enter your Recovery Key or enter a Recovery Passphrase to continue.": "Enter your Recovery Key or enter a Recovery Passphrase to continue.", + "Enter your Recovery Key to continue.": "Enter your Recovery Key to continue.", "Your new session is now verified. It has access to your encrypted messages, and other users will see it as trusted.": "Your new session is now verified. It has access to your encrypted messages, and other users will see it as trusted.", "Your new session is now verified. Other users will see it as trusted.": "Your new session is now verified. Other users will see it as trusted.", "Without completing security on this session, it won’t have access to encrypted messages.": "Without completing security on this session, it won’t have access to encrypted messages.", @@ -2166,47 +2175,43 @@ "Confirm encryption setup": "Confirm encryption setup", "Click the button below to confirm setting up encryption.": "Click the button below to confirm setting up encryption.", "Enter your account password to confirm the upgrade:": "Enter your account password to confirm the upgrade:", - "Restore your key backup to upgrade your encryption": "Restore your key backup to upgrade your encryption", - "Restore": "Restore", "You'll need to authenticate with the server to confirm the upgrade.": "You'll need to authenticate with the server to confirm the upgrade.", - "Upgrade this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "Upgrade this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.", - "Set a recovery passphrase to secure encrypted information and recover it if you log out. This should be different to your account password:": "Set a recovery passphrase to secure encrypted information and recover it if you log out. This should be different to your account password:", + "Upgrade your Recovery Key to store encryption keys & secrets with your account data. If you lose access to this login you'll need it to unlock your data.": "Upgrade your Recovery Key to store encryption keys & secrets with your account data. If you lose access to this login you'll need it to unlock your data.", + "Store your Recovery Key somewhere safe, it can be used to unlock your encrypted messages & data.": "Store your Recovery Key somewhere safe, it can be used to unlock your encrypted messages & data.", + "Download": "Download", + "Copy": "Copy", + "Unable to query secret storage status": "Unable to query secret storage status", + "Retry": "Retry", + "Create a Recovery Key to store encryption keys & secrets with your account data. If you lose access to this login you’ll need it to unlock your data.": "Create a Recovery Key to store encryption keys & secrets with your account data. If you lose access to this login you’ll need it to unlock your data.", + "Create a Recovery Key": "Create a Recovery Key", + "Upgrade your Recovery Key": "Upgrade your Recovery Key", + "Store your Recovery Key": "Store your Recovery Key", + "Unable to set up secret storage": "Unable to set up secret storage", + "We'll store an encrypted copy of your keys on our server. Secure your backup with a recovery passphrase.": "We'll store an encrypted copy of your keys on our server. Secure your backup with a recovery passphrase.", + "For maximum security, this should be different from your account password.": "For maximum security, this should be different from your account password.", "Enter a recovery passphrase": "Enter a recovery passphrase", "Great! This recovery passphrase looks strong enough.": "Great! This recovery passphrase looks strong enough.", - "Back up encrypted message keys": "Back up encrypted message keys", "Set up with a recovery key": "Set up with a recovery key", "That matches!": "That matches!", "Use a different passphrase?": "Use a different passphrase?", "That doesn't match.": "That doesn't match.", "Go back to set it again.": "Go back to set it again.", - "Enter your recovery passphrase a second time to confirm it.": "Enter your recovery passphrase a second time to confirm it.", - "Confirm your recovery passphrase": "Confirm your recovery passphrase", + "Please enter your recovery passphrase a second time to confirm.": "Please enter your recovery passphrase a second time to confirm.", + "Repeat your recovery passphrase...": "Repeat your recovery passphrase...", "Your recovery key is a safety net - you can use it to restore access to your encrypted messages if you forget your recovery passphrase.": "Your recovery key is a safety net - you can use it to restore access to your encrypted messages if you forget your recovery passphrase.", "Keep a copy of it somewhere secure, like a password manager or even a safe.": "Keep a copy of it somewhere secure, like a password manager or even a safe.", "Your recovery key": "Your recovery key", - "Copy": "Copy", - "Download": "Download", "Your recovery key has been copied to your clipboard, paste it to:": "Your recovery key has been copied to your clipboard, paste it to:", "Your recovery key is in your Downloads folder.": "Your recovery key is in your Downloads folder.", "Print it and store it somewhere safe": "Print it and store it somewhere safe", "Save it on a USB key or backup drive": "Save it on a USB key or backup drive", "Copy it to your personal cloud storage": "Copy it to your personal cloud storage", - "Unable to query secret storage status": "Unable to query secret storage status", - "Retry": "Retry", - "You can now verify your other devices, and other users to keep your chats safe.": "You can now verify your other devices, and other users to keep your chats safe.", - "Upgrade your encryption": "Upgrade your encryption", - "Confirm recovery passphrase": "Confirm recovery passphrase", - "Make a copy of your recovery key": "Make a copy of your recovery key", - "You're done!": "You're done!", - "Unable to set up secret storage": "Unable to set up secret storage", - "We'll store an encrypted copy of your keys on our server. Secure your backup with a recovery passphrase.": "We'll store an encrypted copy of your keys on our server. Secure your backup with a recovery passphrase.", - "For maximum security, this should be different from your account password.": "For maximum security, this should be different from your account password.", - "Please enter your recovery passphrase a second time to confirm.": "Please enter your recovery passphrase a second time to confirm.", - "Repeat your recovery passphrase...": "Repeat your recovery passphrase...", "Your keys are being backed up (the first backup could take a few minutes).": "Your keys are being backed up (the first backup could take a few minutes).", "Without setting up Secure Message Recovery, you won't be able to restore your encrypted message history if you log out or use another session.": "Without setting up Secure Message Recovery, you won't be able to restore your encrypted message history if you log out or use another session.", "Set up Secure Message Recovery": "Set up Secure Message Recovery", "Secure your backup with a recovery passphrase": "Secure your backup with a recovery passphrase", + "Confirm your recovery passphrase": "Confirm your recovery passphrase", + "Make a copy of your recovery key": "Make a copy of your recovery key", "Starting backup...": "Starting backup...", "Success!": "Success!", "Create key backup": "Create key backup", diff --git a/src/i18n/strings/eo.json b/src/i18n/strings/eo.json index 5252deba23..fa4fe703b6 100644 --- a/src/i18n/strings/eo.json +++ b/src/i18n/strings/eo.json @@ -2455,5 +2455,7 @@ "Restart": "Restartigi", "Upgrade your Riot": "Gradaltigi vian Rioton", "A new version of Riot is available!": "Nova versio de Riot estas disponebla!", - "New version available. Update now.": "Nova versio estas disponebla. Ĝisdatigu nun." + "New version available. Update now.": "Nova versio estas disponebla. Ĝisdatigu nun.", + "Emoji picker": "Elektilo de bildsignoj", + "Show %(n)s more": "Montri %(n)s pliajn" } diff --git a/src/i18n/strings/et.json b/src/i18n/strings/et.json index d00525b420..66bdeb551f 100644 --- a/src/i18n/strings/et.json +++ b/src/i18n/strings/et.json @@ -1276,5 +1276,161 @@ "Keys restored": "Krüptimise võtmed on taastatud", "Failed to decrypt %(failedCount)s sessions!": "%(failedCount)s sessiooni dekrüptimine ei õnnestunud!", "Successfully restored %(sessionCount)s keys": "%(sessionCount)s sessiooni võtme taastamine õnnestus", - "Warning: you should only set up key backup from a trusted computer.": "Hoiatus: sa peaksid võtmete varunduse seadistama vaid usaldusväärsest arvutist." + "Warning: you should only set up key backup from a trusted computer.": "Hoiatus: sa peaksid võtmete varunduse seadistama vaid usaldusväärsest arvutist.", + "eg: @bot:* or example.org": "näiteks: @bot:* või example.org", + "Subscribed lists": "Tellitud loendid", + "Subscribe": "Telli", + "Start automatically after system login": "Käivita automaatselt peale arvutisse sisselogimist", + "Always show the window menu bar": "Näita alati aknas menüüriba", + "Show tray icon and minimize window to it on close": "Näita süsteemisalve ikooni ja Rioti'i akna sulgemisel minimeeri ta salve", + "Preferences": "Eelistused", + "Room list": "Jututubade loend", + "Timeline": "Ajajoon", + "Autocomplete delay (ms)": "Viivitus automaatsel sõnalõpetusel (ms)", + "Server Name": "Serveri nimi", + "Enter password": "Sisesta salasõna", + "Nice, strong password!": "Vahva, see on korralik salasõna!", + "Password is allowed, but unsafe": "Selline salasõna on küll lubatud, kuid üsna ebaturvaline", + "Keep going...": "Jätka...", + "The email field must not be blank.": "E-posti aadressi väli ei tohi olla tühi.", + "The username field must not be blank.": "Kasutajanime väli ei tohi olla tühi.", + "The phone number field must not be blank.": "Telefoninumbri väli ei tohi olla tühi.", + "The password field must not be blank.": "Salasõna väli ei tohi olla tühi.", + "Email": "E-posti aadress", + "Username": "Kasutajanimi", + "Phone": "Telefon", + "Not sure of your password? Set a new one": "Sa ei ole kindel oma salasõnas? Tee uus salasõna", + "Sign in with": "Logi sisse oma kasutajaga", + "No identity server is configured so you cannot add an email address in order to reset your password in the future.": "Ühtegi isikutuvastusserverit pole seadistatud ning sul ei ole võimalik lisada oma e-posti aadressi hilisemaks võimalikuks salasõna muutmiseks.", + "If you don't specify an email address, you won't be able to reset your password. Are you sure?": "Kui sa ei sisesta oma e-posti aadressi, siis sa ei saa hiljem oma salasõnamuuta. Kas sa kindlasti soovid seda?", + "Use an email address to recover your account": "Kasuta e-posti aadressi ligipääsu taastamiseks oma kontole", + "Enter email address (required on this homeserver)": "Sisesta e-posti aadress (nõutav selles koduserveris)", + "Doesn't look like a valid email address": "Ei tundu olema korralik e-posti aadress", + "Passwords don't match": "Salasõnad ei klapi", + "Enter phone number (required on this homeserver)": "Sisesta telefoninumber (nõutav selles koduserveris)", + "Doesn't look like a valid phone number": "Ei tundu olema korralik telefoninumber", + "Use lowercase letters, numbers, dashes and underscores only": "Palun kasuta vaid väiketähti, numbreid, sidekriipsu ja alakriipsu", + "Enter username": "Sisesta kasutajanimi", + "Email (optional)": "E-posti aadress (kui soovid)", + "Phone (optional)": "Telefoninumber (kui soovid)", + "Create your Matrix account on %(serverName)s": "Loo oma Matrixi konto %(serverName)s serveris", + "Create your Matrix account on ": "Loo oma Matrixi konto serveris", + "Register": "Registreeru", + "Set an email for account recovery. Use email or phone to optionally be discoverable by existing contacts.": "Seadista e-posti aadress, mis võimaldaks sul vajadusel taastada ligipääsu oma kontole. Lisaks võid kasutada e-posti aadressi või telefoninumbrit, et need inimesed, kes sind tunnevad, saaks sind leida.", + "Set an email for account recovery. Use email to optionally be discoverable by existing contacts.": "Seadista e-posti aadress, mis võimaldaks sul vajadusel taastada ligipääsu oma kontole. Lisaks võid kasutada e-posti aadressi, et need inimesed, kes sind tunnevad, saaks sind leida.", + "Enter your custom homeserver URL What does this mean?": "Sisesta oma koduserveri aadress Mida see tähendab?", + "Homeserver URL": "Koduserveri aadress", + "Enter your custom identity server URL What does this mean?": "Sisesta kohandatud isikutuvastusserver aadress Mida see tähendab?", + "Identity Server URL": "Isikutuvastusserveri aadress", + "Other servers": "Muud serverid", + "Free": "Tasuta teenus", + "Join millions for free on the largest public server": "Liitu tasuta nende miljonitega, kas kasutavad suurimat avalikku Matrix'i serverit", + "Premium": "Tasuline eriteenus", + "Premium hosting for organisations Learn more": "Tasuline Matrix'i majutusteenus organisatsioonidele Loe lisateavet", + "Find other public servers or use a custom server": "Otsi muid avalikke Matrix'i servereid või kasuta enda määratud serverit", + "Sign in to your Matrix account on %(serverName)s": "Logi sisse on Matrix'i kontole %(serverName)s serveris", + "Sign in to your Matrix account on ": "Logi sisse on Matrix'i kontole serveris", + "Sorry, your browser is not able to run Riot.": "Vabandust, aga Riot ei toimi sinu brauseris.", + "Riot uses many advanced browser features, some of which are not available or experimental in your current browser.": "Riot kasutab mitmeid uusi brauseri-põhiseid tehnoloogiaid ning mitmed neist kas pole veel olemas või on lahendatud sinu brauseris katselisena.", + "With your current browser, the look and feel of the application may be completely incorrect, and some or all features may not function. If you want to try it anyway you can continue, but you are on your own in terms of any issues you may encounter!": "Sinu praeguse brauseriga meie rakenduse välimus ja toimivus võivad olla täitsa valed ning mõni funktsionaalsus ei pruugi toimida üldse. Kui soovid katsetada, siis loomulikult võid jätkata, kuid erinevate tekkivate vigadega pead ise hakkama saama!", + "Fetching third party location failed": "Kolmanda osapoole asukoha tuvastamine ei õnnestunud", + "Unable to look up room ID from server": "Jututoa tunnuse otsimine serverist ei õnnestunud", + "Show sessions, send anyway or cancel.": "Näita sessioone, saada ikkagi või tühista.", + "Your message wasn't sent because this homeserver has exceeded a resource limit. Please contact your service administrator to continue using the service.": "Sinu sõnumit ei saadetud, kuna see koduserver on ületanud on ületanud ressursipiirangu. Teenuse kasutamiseks palun võta ühendust serveri haldajaga.", + "%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|other": "Saada kõik uuesti või tühista kõigi saatmine. Samuti võid sa valida saatmiseks või saatmise tühistamiseks üksikuid sõnumeid.", + "%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|one": "Saada sõnum uuesti või tühista sõnumi saatmine.", + "Connectivity to the server has been lost.": "Ühendus sinu serveriga on katkenud.", + "Sent messages will be stored until your connection has returned.": "Saadetud sõnumid salvestatakse seniks, kuni võrguühendus on taastunud.", + "Active call": "Käsilolev kõne", + "There's no one else here! Would you like to invite others or stop warning about the empty room?": "Siin ei leidu kedagi teist! Kas sa tahaksid kutsuda kedagi jututuppa või lõpetada selle tühja jututoa hoiatuse kuvamise?", + "You have %(count)s unread notifications in a prior version of this room.|other": "Sinul on selle jututoa varasemas versioonis %(count)s lugemata teavitust.", + "You have %(count)s unread notifications in a prior version of this room.|one": "Sinul on selle jututoa varasemas versioonis %(count)s lugemata teavitus.", + "Fill screen": "Täida ekraan", + "No identity server is configured: add one in server settings to reset your password.": "Ühtegi isikutuvastusserverit pole seadistatud: salasõna taastamiseks määra see serveri sätetes.", + "Sign in instead": "Pigem logi sisse", + "A verification email will be sent to your inbox to confirm setting your new password.": "Kontrollimaks, et just sina sina ise sisestasid uue salasõna, siis saadame sulle kinnituskirja.", + "Send Reset Email": "Saada salasõna taastamise e-kiri", + "An email has been sent to %(emailAddress)s. Once you've followed the link it contains, click below.": "Saatsime kirja %(emailAddress)s aadressile. Kui sa oled klõpsinud kirjas olnud linki, siis jätka alljärgnevaga.", + "I have verified my email address": "Ma olen teinud läbi oma e-posti aadressi kontrolli", + "Your password has been reset.": "Sinu salasõna on muudetud.", + "Dismiss read marker and jump to bottom": "Ära arvesta loetud sõnumite järjehoidjat ning mine kõige lõppu", + "Jump to oldest unread message": "Mine vanima lugemata sõnumi juurde", + "Upload a file": "Lae fail üles", + "Read Marker lifetime (ms)": "Lugemise markeri iga (ms)", + "Read Marker off-screen lifetime (ms)": "Lugemise markeri iga, kui Riot pole fookuses (ms)", + "Unignore": "Lõpeta eiramine", + "": "", + "Import E2E room keys": "Impordi E2E läbiva krüptimise võtmed jututubade jaoks", + "Cryptography": "Krüptimine", + "Session ID:": "Sessiooni tunnus:", + "Session key:": "Sessiooni võti:", + "Bulk options": "Masstoimingute seadistused", + "Accept all %(invitedRooms)s invites": "Võta vastu kõik %(invitedRooms)s kutsed", + "Reject all %(invitedRooms)s invites": "Lükka tagasi kõik %(invitedRooms)s kutsed", + "Key backup": "Võtmete varundus", + "Cross-signing": "Risttunnustamine", + "Warning: Upgrading a room will not automatically migrate room members to the new version of the room. We'll post a link to the new room in the old version of the room - room members will have to click this link to join the new room.": "Hoiatus: Jututoa versiooni uuendamine ei koli jututoa liikmeid automaatselt uude jututoa olekusse. Vanas jututoa versioonis saab olema viide uuele versioonile ning kõik liikmed peavad seda viidet klõpsama.", + "Uploaded sound": "Üleslaetud heli", + "Sounds": "Helid", + "Notification sound": "Teavitusheli", + "Reset": "Taasta algolek", + "Set a new custom sound": "Seadista uus kohandatud heli", + "Jump to message": "Mine sõnumi juurde", + "were invited %(count)s times|other": "said kutse %(count)s korda", + "were invited %(count)s times|one": "said kutse", + "was invited %(count)s times|other": "sai kutse %(count)s korda", + "was invited %(count)s times|one": "sai kutse", + "%(severalUsers)schanged their name %(count)s times|other": "Mitu kasutajat %(severalUsers)s muutsid oma nime %(count)s korda", + "%(severalUsers)schanged their name %(count)s times|one": "Mitu kasutajat %(severalUsers)s muutsid oma nime", + "%(oneUser)schanged their name %(count)s times|other": "Kasutaja %(oneUser)s muutis oma nime %(count)s korda", + "You cannot place VoIP calls in this browser.": "Selle brauseriga ei saa VoIP kõnet teha.", + "You cannot place a call with yourself.": "Sa ei saa iseendale helistada.", + "You do not have permission to start a conference call in this room": "Sul ei ole piisavalt õigusi, et selles jututoas alustada konverentsikõnet", + "%(severalUsers)schanged their avatar %(count)s times|other": "Mitu kasutajat %(severalUsers)s muutsid oma tunnuspilti %(count)s korda", + "%(severalUsers)schanged their avatar %(count)s times|one": "Mitu kasutajat %(severalUsers)s muutsid oma tunnuspilti", + "%(oneUser)schanged their avatar %(count)s times|other": "Kasutaja %(oneUser)s muutis oma tunnuspilti %(count)s korda", + "%(oneUser)schanged their avatar %(count)s times|one": "Kasutaja %(oneUser)s muutis oma tunnuspilti", + "Please ask the administrator of your homeserver (%(homeserverDomain)s) to configure a TURN server in order for calls to work reliably.": "Palu oma koduserveri haldajat (%(homeserverDomain)s), et ta seadistaks kõnede kindlamaks toimimiseks TURN serveri.", + "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.": "Alternatiivina võid sa kasutada avalikku serverit turn.matrix.org, kuid see ei pruugi olla piisavalt töökindel ning sa jagaad ka oma IP-aadressi selle serveriga. Täpsemalt saad seda määrata seadistustes.", + "Try using turn.matrix.org": "Proovi kasutada turn.matrix.org serverit", + "OK": "Sobib", + "Unable to capture screen": "Ekraanipildi hõive ei õnnestunud", + "Existing Call": "Käimasolev kõne", + "You are already in a call.": "Sinul on juba kõne pooleli.", + "VoIP is unsupported": "VoIP ei ole toetatud", + "Call in Progress": "Kõne on pooleli", + "A call is currently being placed!": "Kõne algatamine on just käimas!", + "A call is already in progress!": "Kõne on juba pooleli!", + "Permission Required": "Vaja on täiendavaid õigusi", + "At this time it is not possible to reply with a file. Would you like to upload this file without replying?": "Hetkel ei ole võimalik vastata failiga. Kas sa sooviksid seda faili lihtsalt üles laadida?", + "Continue": "Jätka", + "The file '%(fileName)s' failed to upload.": "Faili '%(fileName)s' üleslaadimine ei õnnestunud.", + "The file '%(fileName)s' exceeds this homeserver's size limit for uploads": "Faili '%(fileName)s' suurus ületab serveris seadistatud üleslaadimise piiri", + "Upload Failed": "Üleslaadimine ei õnnestunud", + "Server may be unavailable, overloaded, or you hit a bug.": "Server kas pole võrgus või on üle koormatud, aga võib-olla oled komistanud süsteemivea otsa.", + "The server does not support the room version specified.": "See server ei toeta antud jututoa versiooni.", + "Failure to create room": "Jututoa loomine ei õnnestunud", + "If you cancel now, you won't complete verifying the other user.": "Kui sa katkestad nüüd, siis sul jääb teise kasutaja verifitseerimine lõpetamata.", + "If you cancel now, you won't complete verifying your other session.": "Kui sa katkestad nüüd, siis sul jääb oma muu sessiooni verifitseerimine lõpetamata.", + "If you cancel now, you won't complete your operation.": "Kui sa katkestad nüüd, siis sul jääb pooleliolev tegevus lõpetamata.", + "Cancel entering passphrase?": "Kas katkestame paroolifraasi sisestamise?", + "Enter passphrase": "Sisesta paroolifraas", + "Setting up keys": "Võtamevõtmed kasutusele", + "Room name or address": "Jututoa nimi või aadress", + "Unable to enable Notifications": "Teavituste kasutusele võtmine ei õnnestunud", + "This email address was not found": "Seda e-posti aadressi ei leidunud", + "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "Sinu e-posti aadress ei tundu olema selles koduserveris seotud Matrixi kasutajatunnusega.", + "Add User": "Lisa kasutaja", + "Enter a server name": "Sisesta serveri nimi", + "Looks good": "Tundub õige", + "Use an identity server to invite by email. Use the default (%(defaultIdentityServerName)s) or manage in Settings.": "E-posti teel kutse saatmiseks kasuta isikutuvastusserverit. Võid kasutada vaikimisi serverit (%(defaultIdentityServerName)s) või määrata muud serverid seadistustes.", + "Use an identity server to invite by email. Manage in Settings.": "Kasutajatele e-posti teel kutse saatmiseks pruugi isikutuvastusserverit. Täpsemalt saad seda hallata seadistustes.", + "The following users may not exist": "Järgnevaid kasutajaid ei pruugi olla olemas", + "Invite anyway and never warn me again": "Kutsu siiski ja ära hoiata mind enam", + "Invite anyway": "Kutsu siiski", + "Please tell us what went wrong or, better, create a GitHub issue that describes the problem.": "Palun kirjelda seda, mis läks valesti ja loo GitHub'is veateade.", + "Debug logs contain application usage data including your username, the IDs or aliases of the rooms or groups you have visited and the usernames of other users. They do not contain messages.": "Vigadega seotud logid sisaldavad rakenduse teavet, sealhulgas sinu kasutajanime, külastatud jututubade kasutajatunnuseid või aliasi ning teiste kasutajate kasutajanimesid. Logides ei ole saadetud sõnumite sisu.", + "Before submitting logs, you must create a GitHub issue to describe your problem.": "Enne logide saatmist sa peaksid GitHub'is looma veateate ja kirjeldama seal tekkinud probleemi.", + "GitHub issue": "Veateade GitHub'is", + "Notes": "Märkused" } diff --git a/src/i18n/strings/eu.json b/src/i18n/strings/eu.json index 6624fa99bb..0d1b05987e 100644 --- a/src/i18n/strings/eu.json +++ b/src/i18n/strings/eu.json @@ -2425,5 +2425,66 @@ "Click the button below to confirm setting up encryption.": "Sakatu azpiko botoia zifratze-ezarpena berresteko.", "Dismiss read marker and jump to bottom": "Baztertu irakurtze-marka eta jauzi beheraino", "Jump to oldest unread message": "Jauzi irakurri gabeko mezu zaharrenera", - "Upload a file": "Igo fitxategia" + "Upload a file": "Igo fitxategia", + "Room name or address": "Gelaren izena edo helbidea", + "Joins room with given address": "Emandako helbidea duen gelara elkartzen da", + "Unrecognised room address:": "Gela helbide ezezaguna:", + "sent an image.": "irudi bat bidali du.", + "Help us improve Riot": "Lagundu gaitzazu Riot hobetzen", + "Send anonymous usage data which helps us improve Riot. This will use a cookie.": "Bidali erabilera datu anonimoak Riot hobetzen laguntzeko. Honek cookie bat darabil.", + "I want to help": "Lagundu nahi dut", + "Your homeserver has exceeded its user limit.": "Zure hasiera-zerbitzariak erabiltzaile muga gainditu du.", + "Your homeserver has exceeded one of its resource limits.": "Zure hasiera-zerbitzariak bere baliabide mugetako bat gainditu du.", + "Contact your server admin.": "Jarri kontaktuan zerbitzariaren administratzailearekin.", + "Ok": "Ados", + "Set password": "Ezarri pasahitza", + "To return to your account in future you need to set a password": "Zure kontura etorkizunean itzultzeko pasahitza ezarri behar duzu", + "Restart": "Berrasi", + "Upgrade your Riot": "Eguneratu zure Riot", + "A new version of Riot is available!": "Riot bertsio berria eskuragarri dago!", + "You: %(message)s": "Zu: %(message)s", + "New version available. Update now.": "Bertsio berri eskuragarri. Eguneratu orain.", + "Please verify the room ID or address and try again.": "Egiaztatu gelaren ID-a edo helbidea eta saiatu berriro.", + "Room ID or address of ban list": "Debeku zerrendaren gelaren IDa edo helbidea", + "Your server admin has disabled end-to-end encryption by default in private rooms & Direct Messages.": "Zure zerbitzariko administratzaileak muturretik muturrerako zifratzea desgaitu du lehenetsita gela probatuetan eta mezu zuzenetan.", + "To link to this room, please add an address.": "Gela hau estekatzeko, gehitu helbide bat.", + "Emoji picker": "Emoji hautatzailea", + "No recently visited rooms": "Ez dago azkenaldian bisitatutako gelarik", + "People": "Jendea", + "Sort by": "Ordenatu honela", + "Activity": "Jarduera", + "A-Z": "A-Z", + "Unread rooms": "Irakurri gabeko gelak", + "Always show first": "Erakutsi lehenbizi", + "Show": "Erakutsi", + "Message preview": "Mezu-aurrebista", + "List options": "Zerrenda-aukerak", + "Show %(count)s more|other": "Erakutsi %(count)s gehiago", + "Show %(count)s more|one": "Erakutsi %(count)s gehiago", + "Leave Room": "Atera gelatik", + "Room options": "Gelaren aukerak", + "Error creating address": "Errorea helbidea sortzean", + "There was an error creating that address. It may not be allowed by the server or a temporary failure occurred.": "Errorea gertatu da helbidea sortzean. Agian ez du zerbitzariak onartzen edo behin behineko arazo bat egon da.", + "You don't have permission to delete the address.": "Ez duzu helbidea ezabatzeko baimenik.", + "There was an error removing that address. It may no longer exist or a temporary error occurred.": "Errorea gertatu da helbidea kentzean. Agian ez dago jada edo behin behineko arazo bat egon da.", + "Error removing address": "Errorea helbidea kentzean", + "Categories": "Kategoriak", + "Room address": "Gelaren helbidea", + "Please provide a room address": "Eman gelaren helbidea", + "This address is available to use": "Gelaren helbide hau erabilgarri dago", + "This address is already in use": "Gelaren helbide hau erabilita dago", + "Set a room address to easily share your room with other people.": "Ezarri gelaren helbide bat zure gela besteekin erraz partekatzeko.", + "You've previously used a newer version of Riot with this session. To use this version again with end to end encryption, you will need to sign out and back in again.": "Riot bertsio berriago bat erabili duzu saio honekin. Berriro bertsio hau muturretik muturrerako zifratzearekin erabiltzeko, saioa amaitu eta berriro hasi beharko duzu.", + "Address (optional)": "Helbidea (aukerakoa)", + "Delete the room address %(alias)s and remove %(name)s from the directory?": "Ezabatu %(alias)s gelaren helbidea eta kendu %(name)s direktoriotik?", + "delete the address.": "ezabatu helbidea.", + "Switch to light mode": "Aldatu modu argira", + "Switch to dark mode": "Aldatu modu ilunera", + "Switch theme": "Aldatu azala", + "Security & privacy": "Segurtasuna eta pribatutasuna", + "All settings": "Ezarpen guztiak", + "Archived rooms": "Artxibatutako gelak", + "Feedback": "Iruzkinak", + "Account settings": "Kontuaren ezarpenak", + "Use a different passphrase?": "Erabili pasa-esaldi desberdin bat?" } diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json index 1bd6fd254a..f4445082d8 100644 --- a/src/i18n/strings/fr.json +++ b/src/i18n/strings/fr.json @@ -2481,5 +2481,32 @@ "Restart": "Redémarrer", "Upgrade your Riot": "Mettre à niveau votre Riot", "A new version of Riot is available!": "Une nouvelle version de Riot est disponible !", - "New version available. Update now.": "Nouvelle version disponible. Faire la mise à niveau maintenant." + "New version available. Update now.": "Nouvelle version disponible. Faire la mise à niveau maintenant.", + "Emoji picker": "Sélecteur d’émojis", + "Your server admin has disabled end-to-end encryption by default in private rooms & Direct Messages.": "L’administrateur de votre serveur a désactivé le chiffrement de bout en bout par défaut dans les salons privés et les messages directs.", + "Show %(n)s more": "En montrer %(n)s de plus", + "People": "Personnes", + "Switch to light mode": "Passer au mode clair", + "Switch to dark mode": "Passer au mode sombre", + "Switch theme": "Changer le thème", + "Security & privacy": "Sécurité & vie privée", + "All settings": "Tous les paramètres", + "Archived rooms": "Salons archivés", + "Feedback": "Commentaire", + "Account settings": "Paramètres du compte", + "sent an image.": "a envoyé une image.", + "You: %(message)s": "Vous : %(message)s", + "No recently visited rooms": "Aucun salon visité récemment", + "Sort by": "Trier par", + "Unread rooms": "Salons non lus", + "Always show first": "Toujours afficher en premier", + "Show": "Afficher", + "Message preview": "Aperçu de message", + "List options": "Options de liste", + "Show %(count)s more|other": "En afficher %(count)s de plus", + "Show %(count)s more|one": "En afficher %(count)s de plus", + "Leave Room": "Quitter le salon", + "Room options": "Options du salon", + "Activity": "Activité", + "A-Z": "A-Z" } diff --git a/src/i18n/strings/gl.json b/src/i18n/strings/gl.json index d37abfb890..51b1f7fa25 100644 --- a/src/i18n/strings/gl.json +++ b/src/i18n/strings/gl.json @@ -1253,5 +1253,412 @@ "Add theme": "Engadir decorado", "Theme": "Decorado", "Language and region": "Idioma e rexión", - "Your theme": "O teu decorado" + "Your theme": "O teu decorado", + "Use the improved room list (in development - refresh to apply changes)": "Usar a lista mellorada de salas (en desenvolvemento - actualiza para aplicar)", + "Support adding custom themes": "Permitir engadir decorados personalizados", + "Use IRC layout": "Usar disposición IRC", + "Font size": "Tamaño da letra", + "Custom font size": "Tamaño letra personalizado", + "Enable Emoji suggestions while typing": "Activar suxestión de Emoji ao escribir", + "Show a placeholder for removed messages": "Resaltar o lugar das mensaxes eliminadas", + "Show avatar changes": "Mostrar cambios de avatar", + "Show display name changes": "Mostrar cambios do nome mostrado", + "Show read receipts sent by other users": "Mostrar resgardo de lectura enviados por outras usuarias", + "Show a reminder to enable Secure Message Recovery in encrypted rooms": "Mostrar recordatorio para activar Recuperación Segura de Mensaxes en salas cifradas", + "Show avatars in user and room mentions": "Mostrar avatares nas mencións de salas e usuarias", + "Enable big emoji in chat": "Activar Emojis grandes na conversa", + "Send typing notifications": "Enviar notificación de escritura", + "Show typing notifications": "Mostrar notificacións de escritura", + "Allow Peer-to-Peer for 1:1 calls": "Permitir Par-a-Par para chamadas 1:1", + "Never send encrypted messages to unverified sessions from this session": "Non enviar nunca desde esta sesión mensaxes cifradas a sesións non verificadas", + "Never send encrypted messages to unverified sessions in this room from this session": "Non enviar mensaxes cifradas desde esta sesión a sesións non verificadas nesta sala", + "Prompt before sending invites to potentially invalid matrix IDs": "Avisar antes de enviar convites a IDs de Matrix potencialmente incorrectos", + "Show developer tools": "Mostrar ferramentas de desenvolvemento", + "Order rooms by name": "Ordenar salas por nome", + "Show rooms with unread notifications first": "Mostrar primeiro as salas que teñen notificacións sen ler", + "Show shortcuts to recently viewed rooms above the room list": "Mostrar atallos a salas vistas recentemente enriba da lista de salas", + "Show hidden events in timeline": "Mostrar na cronoloxía eventos ocultos", + "Low bandwidth mode": "Modo de ancho de banda reducido", + "Straight rows of keys are easy to guess": "Palabras de letras contiguas son doadas de adiviñar", + "Short keyboard patterns are easy to guess": "Patróns curtos de teclas son doados de adiviñar", + "Allow fallback call assist server turn.matrix.org when your homeserver does not offer one (your IP address would be shared during a call)": "Permitir o servidor de apoio para chamadas turn.matrix.org cando o servidor propio non ofreza un (o teu IP compartirase durante a chamada)", + "Send read receipts for messages (requires compatible homeserver to disable)": "Enviar resgardos de lectura para as mensaxes (require servidor compatible para desactivar)", + "Show previews/thumbnails for images": "Mostrar miniaturas/vista previa das imaxes", + "Enable message search in encrypted rooms": "Activar a busca de mensaxes en salas cifradas", + "Keep recovery passphrase in memory for this session": "Manter a frase de paso de recuperación en memoria para esta sesión", + "How fast should messages be downloaded.": "Velocidade á que deberían descargarse as mensaxes.", + "Manually verify all remote sessions": "Verificar manualmente todas as sesións remotas", + "IRC display name width": "Ancho do nome mostrado de IRC", + "Messages containing my username": "Mensaxes que conteñen o meu nome de usuaria", + "Messages containing @room": "Mensaxes que conteñen @room", + "Encrypted messages in one-to-one chats": "Mensaxes cifradas en conversas 1:1", + "Encrypted messages in group chats": "Mensaxes cifradas en convesas en grupo", + "When rooms are upgraded": "Cando se actualizan as salas", + "My Ban List": "Listaxe de bloqueo", + "This is your list of users/servers you have blocked - don't leave the room!": "Esta é a listaxe de usuarias/servidores que ti bloqueaches - non deixes a sala!", + "The other party cancelled the verification.": "A outra parte cancelou a verificación.", + "Verified!": "Verificada!", + "You've successfully verified this user.": "Verificaches esta usuaria.", + "Secure messages with this user are end-to-end encrypted and not able to be read by third parties.": "As mensaxes seguras con esta usuaria están cifradas extremo-a-extremo e non son lexibles por terceiras.", + "Got It": "Vale", + "Verify this session by completing one of the following:": "Verifica esta sesión completando un dos seguintes:", + "Scan this unique code": "Escanea este código único", + "or": "ou", + "Compare unique emoji": "Compara os emoji", + "Compare a unique set of emoji if you don't have a camera on either device": "Compara o conxunto único de emoticonas se non tes cámara no outro dispositivo", + "Start": "Comezar", + "Confirm the emoji below are displayed on both sessions, in the same order:": "Confirma que as emoticonas se mostran nas dúas sesións, na mesma orde:", + "Verify this user by confirming the following emoji appear on their screen.": "Verifica a usuaria confirmando que as emoticonas aparecen na súa pantalla.", + "Verify this session by confirming the following number appears on its screen.": "Verifica esta sesión confirmando que o seguinte número aparece na súa pantalla.", + "Verify this user by confirming the following number appears on their screen.": "Verifica esta usuaria confirmando que o seguinte número aparece na súa pantalla.", + "Unable to find a supported verification method.": "Non se atopa un método de verificación válido.", + "Waiting for your other session, %(deviceName)s (%(deviceId)s), to verify…": "Agardando pola outra sesión, %(deviceName)s %(deviceId)s, para verificar…", + "Waiting for your other session to verify…": "Agardando pola túa outra sesión para verificar…", + "Waiting for %(displayName)s to verify…": "Agardando por %(displayName)s para verificar…", + "Cancelling…": "Cancelando…", + "They match": "Concordan", + "They don't match": "Non concordan", + "To be secure, do this in person or use a trusted way to communicate.": "Para estar seguro, fai esto en persoa ou utiliza un xeito seguro para comunicarte.", + "Dog": "Can", + "Cat": "Gato", + "Lion": "León", + "Horse": "Cabalo", + "Unicorn": "Unicorno", + "Pig": "Porco", + "Elephant": "Elefante", + "Rabbit": "Coello", + "Panda": "Panda", + "Rooster": "Galo", + "Penguin": "Pingüino", + "Turtle": "Tartaruga", + "Fish": "Peixe", + "Octopus": "Polbo", + "Butterfly": "Bolboreta", + "Flower": "Flor", + "Tree": "Árbore", + "Cactus": "Cactus", + "Mushroom": "Cogomelo", + "Globe": "Globo", + "Moon": "Lúa", + "Cloud": "Nube", + "Fire": "Lume", + "Banana": "Plátano", + "Apple": "Mazá", + "Strawberry": "Amorodo", + "Corn": "Millo", + "Pizza": "Pizza", + "Cake": "Biscoito", + "Heart": "Corazón", + "Smiley": "Sorriso", + "Robot": "Robot", + "Hat": "Sombreiro", + "Glasses": "Gafas", + "Spanner": "Ferramenta", + "Santa": "Nöel", + "Thumbs up": "Oká", + "Umbrella": "Paraugas", + "Hourglass": "Reloxo area", + "Clock": "Reloxo", + "Gift": "Agasallo", + "Light bulb": "Lámpada", + "Book": "Libro", + "Pencil": "Lápis", + "Paperclip": "Prendedor", + "Scissors": "Tesoiras", + "Lock": "Cadeado", + "Key": "Chave", + "Hammer": "Martelo", + "Telephone": "Teléfono", + "Flag": "Bandeira", + "Train": "Tren", + "Bicycle": "Bicicleta", + "Aeroplane": "Aeroplano", + "Rocket": "Foguete", + "Trophy": "Trofeo", + "Ball": "Bola", + "Guitar": "Guitarra", + "Trumpet": "Trompeta", + "Bell": "Campá", + "Anchor": "Áncora", + "Headphones": "Auriculares", + "Folder": "Cartafol", + "Pin": "Pin", + "From %(deviceName)s (%(deviceId)s)": "Desde %(deviceName)s (%(deviceId)s)", + "Decline (%(counter)s)": "Rexeitar (%(counter)s)", + "Accept to continue:": "Acepta para continuar:", + "Upload": "Subir", + "This bridge was provisioned by .": "Esta ponte está proporcionada por .", + "This bridge is managed by .": "Esta ponte está xestionada por .", + "Workspace: %(networkName)s": "Espazo de traballo: %(networkName)s", + "Channel: %(channelName)s": "Canal: %(channelName)s", + "Show less": "Mostrar menos", + "Show more": "Mostrar máis", + "Changing password will currently reset any end-to-end encryption keys on all sessions, making encrypted chat history unreadable, unless you first export your room keys and re-import them afterwards. In future this will be improved.": "Ao cambiar o contrasinal vas restablecer todas as chaves de cifrado extremo-a-extremo en tódalas sesións, facendo que o historial de conversa cifrado non sexa lexible, a menos que primeiro exportes todas as chaves das salas e as importes posteriormente. No futuro melloraremos o procedemento.", + "Your homeserver does not support cross-signing.": "O teu servidor non soporta a sinatura cruzada.", + "Cross-signing and secret storage are enabled.": "A sinatura cruzada e o almacenaxe segredo está activados.", + "Your account has a cross-signing identity in secret storage, but it is not yet trusted by this session.": "A túa conta ten unha identidade de sinatura cruzada no almacenaxe segredo, pero aínda non confiaches nela nesta sesión.", + "Cross-signing and secret storage are not yet set up.": "A sinatura cruzada e almacenaxe segredo aínda non se configuraron.", + "Reset cross-signing and secret storage": "Restablecer sinatura cruzada e almacenaxe segredo", + "Bootstrap cross-signing and secret storage": "Configurar sinatura cruzada e almacenaxe segredo", + "well formed": "ben formado", + "unexpected type": "tipo non agardado", + "Cross-signing public keys:": "Chaves públicas da sinatura cruzada:", + "in memory": "en memoria", + "not found": "non atopado", + "Cross-signing private keys:": "Chaves privadas da sinatura cruzada:", + "in secret storage": "no almacenaxe segredo", + "Self signing private key:": "Auto asinado da chave privada:", + "cached locally": "na caché local", + "not found locally": "non se atopa localmente", + "User signing private key:": "Chave privada de sinatura da usuaria:", + "Session backup key:": "Chave de apoio da sesión:", + "Secret storage public key:": "Chave pública da almacenaxe segreda:", + "in account data": "nos datos da conta", + "Homeserver feature support:": "Soporte de funcións do servidor:", + "exists": "existe", + "Your homeserver does not support session management.": "O teu servidor non soporta a xestión da sesión.", + "Unable to load session list": "Non se puido cargar a lista de sesións", + "Confirm deleting these sessions": "Confirma o borrado destas sesións", + "Click the button below to confirm deleting these sessions.|other": "Preme no botón inferior para confirmar o borrado das sesións.", + "Click the button below to confirm deleting these sessions.|one": "Preme no botón inferior para confirmar o borrado da sesión.", + "Delete sessions|other": "Borrar sesións", + "Delete sessions|one": "Borrar sesión", + "Delete %(count)s sessions|other": "Borrar %(count)s sesións", + "Delete %(count)s sessions|one": "Borrar %(count)s sesión", + "ID": "ID", + "Public Name": "Nome público", + "Individually verify each session used by a user to mark it as trusted, not trusting cross-signed devices.": "Verificar individualmente cada sesión utilizada pola usuaria para marcala como confiable, non confiando en dispositivos con sinatura cruzada.", + "Securely cache encrypted messages locally for them to appear in search results, using ": "Gardar de xeito seguro na caché mensaxes cifradas para que aparezan nos resultados de busca, usando ", + " to store messages from ": " para gardar mensaxes de ", + "rooms.": "salas.", + "Manage": "Xestionar", + "Securely cache encrypted messages locally for them to appear in search results.": "Gardar de xeito seguro mensaxes cifradas na caché local para que aparezan nos resultados de buscas.", + "Enable": "Activar", + "Riot is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom Riot Desktop with search components added.": "Falta un compoñente de Riot requerido para almacenar localmente mensaxes cifradas na caché. Se queres experimentar con esta función, compila unha versión personalizada de Riot Desktop cos compoñentes de busca engadidos.", + "Riot can't securely cache encrypted messages locally while running in a web browser. Use Riot Desktop for encrypted messages to appear in search results.": "Riot non pode gardar de xeito seguro localmente as mensaxes cifradas se se executa nun navegador. Usa Riot Desktop para que as mensaxes cifradas aparezan nas buscas.", + "Connecting to integration manager...": "Conectando co xestor de integración...", + "Cannot connect to integration manager": "Non se puido conectar co xestor de intregración", + "The integration manager is offline or it cannot reach your homeserver.": "O xestor de integración non está en liña ou non é accesible desde o teu servidor.", + "Delete Backup": "Borrar copia de apoio", + "Are you sure? You will lose your encrypted messages if your keys are not backed up properly.": "Estás seguro? Perderás as mensaxes cifradas se non tes unha copia de apoio das chaves de cifrado.", + "Encrypted messages are secured with end-to-end encryption. Only you and the recipient(s) have the keys to read these messages.": "As mensaxes cifradas están seguras con cifrado de extremo-a-extremo. Só ti e o correpondente(s) tedes as chaves para ler as mensaxes.", + "Unable to load key backup status": "Non se puido cargar o estado das chaves de apoio", + "Restore from Backup": "Restaurar desde copia de apoio", + "This session is backing up your keys. ": "Esta sesión está gardando as túas chaves. ", + "This session is not backing up your keys, but you do have an existing backup you can restore from and add to going forward.": "Esta sesión non está facendo copia das chaves, pero tes unha copia de apoio existente que podes restablecer e engadir para seguir adiante.", + "Connect this session to key backup before signing out to avoid losing any keys that may only be on this session.": "Conecta esta sesión ao gardado das chaves antes de desconectarte para evitar perder calquera chave que só puidese estar nesta sesión.", + "Connect this session to Key Backup": "Conecta esta sesión a Copia de Apoio de chaves", + "not stored": "non gardado", + "Backing up %(sessionsRemaining)s keys...": "Copiando %(sessionsRemaining)s chaves...", + "All keys backed up": "Copiaronse todas as chaves", + "Backup has a valid signature from this user": "A copia ten unha sinatura válida desta usuaria", + "Backup has a invalid signature from this user": "A copia ten una sinatura non válida desta usuaria", + "Backup has a signature from unknown user with ID %(deviceId)s": "A copia ten unha sinatura dunha usuaria descoñecida con ID %(deviceId)s", + "Backup has a signature from unknown session with ID %(deviceId)s": "A copia ten unha sinatura dunha sesión descoñecida con ID %(deviceId)s", + "Backup has a valid signature from this session": "A copia ten unha sinatura válida desde esta sesión", + "Backup has an invalid signature from this session": "A copia ten unha sinatura non válida desde esta sesión", + "Backup has a valid signature from verified session ": "A copia ten unha sinatura válida desde a sesión verificada en ", + "Backup has a valid signature from unverified session ": "A copia ten unha sinatura válida desde a sesión non verificada en ", + "Backup has an invalid signature from verified session ": "A copia ten unha sinatura non válida desde a sesión verificada en ", + "Backup has an invalid signature from unverified session ": "A copia ten unha sinatura non válida desde a sesión non verificada en ", + "Backup is not signed by any of your sessions": "A copia non está asinada por ningunha das túas sesións", + "This backup is trusted because it has been restored on this session": "Esta copia é de confianza porque foi restaurada nesta sesión", + "Backup version: ": "Versión da copia: ", + "Algorithm: ": "Algoritmo: ", + "Backup key stored: ": "Chave de apoio gardada: ", + "Your keys are not being backed up from this session.": "As túas chaves non están a ser copiadas desde esta sesión.", + "Back up your keys before signing out to avoid losing them.": "Fai unha copia de apoio das chaves antes de desconectarte para evitar perdelas.", + "Start using Key Backup": "Fai unha Copia de apoio das chaves", + "Clear notifications": "Eliminar notificacións", + "Add an email address to configure email notifications": "Engade un enderezo de email para configurar as notificacións por email", + "Enable desktop notifications for this session": "Activa as notificacións de escritorio para esta sesión", + "Enable audible notifications for this session": "Activa as notificacións por son para esta sesión", + "Upgrade to your own domain": "Mellora e usa un dominio propio", + "Display Name": "Nome mostrado", + "Profile picture": "Imaxe de perfil", + "Identity Server URL must be HTTPS": "O URL do servidor de identidade debe comezar HTTPS", + "Not a valid Identity Server (status code %(code)s)": "Servidor de Identidade non válido (código de estado %(code)s)", + "Could not connect to Identity Server": "Non hai conexión co Servidor de Identidade", + "Checking server": "Comprobando servidor", + "Change identity server": "Cambiar de servidor de identidade", + "Disconnect from the identity server and connect to instead?": "Desconectar do servidor de identidade e conectar con ?", + "Terms of service not accepted or the identity server is invalid.": "Non se aceptaron os Termos do servizo ou o servidor de identidade non é válido.", + "The identity server you have chosen does not have any terms of service.": "O servidor de identidade escollido non ten establecidos termos do servizo.", + "Disconnect identity server": "Desconectar servidor de identidade", + "Disconnect from the identity server ?": "Desconectar do servidor de identidade ?", + "Disconnect": "Desconectar", + "You should remove your personal data from identity server before disconnecting. Unfortunately, identity server is currently offline or cannot be reached.": "Deberías eliminar os datos personais do servidor de identidade antes de desconectar. Desgraciadamente, o servidor non está en liña e no se pode acceder.", + "You should:": "Deberías:", + "check your browser plugins for anything that might block the identity server (such as Privacy Badger)": "comprobar os engadidos do navegador por algún está bloqueando o servidor de identidade (como Privacy Badger)", + "contact the administrators of identity server ": "contactar coa administración do servidor de identidade ", + "wait and try again later": "agardar e probar máis tarde", + "Disconnect anyway": "Desconectar igualmente", + "You are still sharing your personal data on the identity server .": "Aínda estás compartindo datos personais no servidor de identidade .", + "We recommend that you remove your email addresses and phone numbers from the identity server before disconnecting.": "Recomendámosche que elimines os teus enderezos de email e números de teléfono do servidor de identidade antes de desconectar del.", + "Go back": "Atrás", + "Identity Server (%(server)s)": "Servidor de Identidade (%(server)s)", + "You are currently using to discover and be discoverable by existing contacts you know. You can change your identity server below.": "Neste intre usas para atopar e ser atopado polos contactos existentes que coñeces. Aquí abaixo podes cambiar de servidor de identidade.", + "If you don't want to use to discover and be discoverable by existing contacts you know, enter another identity server below.": "Se non queres usar para atopar e ser atopado polos contactos existentes que coñeces, escribe embaixo outro servidor de identidade.", + "Identity Server": "Servidor de Identidade", + "You are not currently using an identity server. To discover and be discoverable by existing contacts you know, add one below.": "Non estás a usar un servidor de identidade. Para atopar e ser atopado polos contactos existentes que coñeces, engade un embaixo.", + "Disconnecting from your identity server will mean you won't be discoverable by other users and you won't be able to invite others by email or phone.": "Ao desconectar do teu servidor de identidade non te poderán atopar as outras usuarias e non poderás convidar a outras polo seu email ou teléfono.", + "Using an identity server is optional. If you choose not to use an identity server, you won't be discoverable by other users and you won't be able to invite others by email or phone.": "Usar un servidor de identidade é optativo. Se escolles non usar un, non poderás ser atopado por outras usuarias e non poderás convidar a outras polo seu email ou teléfono.", + "Do not use an identity server": "Non usar un servidor de identidade", + "Enter a new identity server": "Escribe o novo servidor de identidade", + "Change": "Cambiar", + "Use an Integration Manager (%(serverName)s) to manage bots, widgets, and sticker packs.": "Usa un Xestor de Integración (%(serverName)s) para xestionar bots, widgets e paquetes de pegatinas.", + "Use an Integration Manager to manage bots, widgets, and sticker packs.": "Usa un Xestor de Integracións para xestionar bots, widgets e paquetes de pegatinas.", + "Manage integrations": "Xestionar integracións", + "Integration Managers receive configuration data, and can modify widgets, send room invites, and set power levels on your behalf.": "Os xestores de integracións reciben datos de configuración, e poden modificar os widgets, enviar convites das salas, e establecer roles no teu nome.", + "New version available. Update now.": "Nova versión dispoñible. Actualiza.", + "Size must be a number": "O tamaño ten que ser un número", + "Custom font size can only be between %(min)s pt and %(max)s pt": "O tamaño da fonte só pode estar entre %(min)s pt e %(max)s pt", + "Use between %(min)s pt and %(max)s pt": "Usa entre %(min)s pt e %(max)s pt", + "Appearance": "Aparencia", + "Your password was successfully changed. You will not receive push notifications on other sessions until you log back in to them": "Cambiouse o contrasinal. Non recibirás notificacións push noutras sesións ata que desconectes e voltes a conectar nelas", + "Email addresses": "Enderezos de email", + "Phone numbers": "Número de teléfono", + "Set a new account password...": "Establecer novo contrasinal da conta...", + "Agree to the identity server (%(serverName)s) Terms of Service to allow yourself to be discoverable by email address or phone number.": "Acepta os Termos do Servizo do servidor (%(serverName)s) para permitir que te atopen polo enderezo de email ou número de teléfono.", + "Account management": "Xestión da conta", + "Deactivating your account is a permanent action - be careful!": "A desactivación da conta será permanente - ten coidado!", + "Credits": "Créditos", + "Chat with Riot Bot": "Chat co Bot Riot", + "Bug reporting": "Informar de fallos", + "Clear cache and reload": "Baleirar caché e recargar", + "To report a Matrix-related security issue, please read the Matrix.org Security Disclosure Policy.": "Para informar dun asunto relacionado coa seguridade de Matrix, le a Política de Revelación de Privacidade de Matrix.org.", + "FAQ": "PMF", + "Keyboard Shortcuts": "Atallos de teclado", + "Versions": "Versións", + "Customise your experience with experimental labs features. Learn more.": "Personaliza a túa experiencia con características experimentais. Coñecer máis.", + "Ignored/Blocked": "Ignorado/Bloqueado", + "Error adding ignored user/server": "Fallo ao engadir a ignorado usuaria/servidor", + "Something went wrong. Please try again or view your console for hints.": "Algo fallou. Inténtao outra vez o mira na consola para ter algunha pista.", + "Error subscribing to list": "Fallo ao subscribirse a lista", + "Please verify the room ID or address and try again.": "Comproba o ID da sala ou enderezo e proba outra vez.", + "Error removing ignored user/server": "Fallo ao eliminar a usuaria/servidor de ignorados", + "Error unsubscribing from list": "Fallo ao retirar a susbscrición a lista", + "Please try again or view your console for hints.": "Inténtao outra vez ou mira na consola para ter algunha pista.", + "None": "Nada", + "Ban list rules - %(roomName)s": "Regras de bloqueo - %(roomName)s", + "Server rules": "Regras do servidor", + "User rules": "Regras da usuaria", + "You have not ignored anyone.": "Non ignoraches a ninguén.", + "You are currently ignoring:": "Estás a ignorar a:", + "You are not subscribed to any lists": "Non estás subscrita a ningunha lista", + "Unsubscribe": "Baixa na subscrición", + "View rules": "Ver regras", + "You are currently subscribed to:": "Estas subscrito a:", + "Ignored users": "Usuarias ignoradas", + "⚠ These settings are meant for advanced users.": "⚠ Estos axustes van dirixidos a usuarias avanzadas.", + "Add users and servers you want to ignore here. Use asterisks to have Riot match any characters. For example, @bot:* would ignore all users that have the name 'bot' on any server.": "Engade aquí usuarias e servidores que desexas ignorar. Usa asterisco que Riot usará como comodín. Exemplo, @bot* ignorará todas as usuarias de calquera servidor que teñan 'bot' no nome.", + "Ignoring people is done through ban lists which contain rules for who to ban. Subscribing to a ban list means the users/servers blocked by that list will be hidden from you.": "Ignorar a persoas faise a través de listaxes de bloqueo que conteñen regras. Subscribíndote a unha listaxe de bloqueo fará que esas usuarias/servidores sexan inaccesibles para ti.", + "Personal ban list": "Lista personal de bloqueo", + "Your personal ban list holds all the users/servers you personally don't want to see messages from. After ignoring your first user/server, a new room will show up in your room list named 'My Ban List' - stay in this room to keep the ban list in effect.": "A túa listaxe personal de bloqueo acolle as usuarias/servidores que personalmente non desexas ver. Tras ignorar a túa primeira usuaria/servidor, unha nova sala chamada 'Listaxe de bloqueos' aparecerá na listaxe de salas - non saias desta sala para que o bloqueo siga surtindo efecto.", + "Server or user ID to ignore": "ID de usuaria ou servidor a ignorar", + "eg: @bot:* or example.org": "ex: @bot:* ou exemplo.org", + "Subscribed lists": "Listaxes subscritas", + "If this isn't what you want, please use a different tool to ignore users.": "Se esto non é o que queres, usa unha ferramenta diferente para ignorar usuarias.", + "Room ID or address of ban list": "ID da sala ou enderezo da listaxe de bloqueo", + "Subscribe": "Subscribir", + "Always show the window menu bar": "Mostrar sempre a barra de menú da ventá", + "Show tray icon and minimize window to it on close": "Mostrar icona na bandexa do sistema e minizar nela ao pechar", + "Preferences": "Preferencias", + "Room list": "Listaxe de Salas", + "Composer": "Editor", + "Timeline": "Cronoloxía", + "Autocomplete delay (ms)": "Retraso no autocompletado (ms)", + "Read Marker lifetime (ms)": "Duración do marcador de lectura (ms)", + "Read Marker off-screen lifetime (ms)": "Duración do marcador de lectura fóra de pantall (ms)", + "Session ID:": "ID da sesión:", + "Session key:": "Chave da sesión:", + "Bulk options": "Opcións agrupadas", + "Accept all %(invitedRooms)s invites": "Aceptar os %(invitedRooms)s convites", + "Key backup": "Copia da Chave", + "Message search": "Buscar mensaxe", + "Cross-signing": "Sinatura cruzada", + "Your server admin has disabled end-to-end encryption by default in private rooms & Direct Messages.": "A administración do servidor desactivou por omisión o cifrado extremo-a-extremo en salas privadas e Mensaxes Directas.", + "A session's public name is visible to people you communicate with": "Un nome público de sesión é visible para a xente coa que te comunicas", + "Missing media permissions, click the button below to request.": "Falta permiso acceso multimedia, preme o botón para solicitalo.", + "Request media permissions": "Solicitar permiso a multimedia", + "Voice & Video": "Voz e Vídeo", + "Upgrade this room to the recommended room version": "Actualiza esta sala á versión recomendada", + "this room": "esta sala", + "View older messages in %(roomName)s.": "Ver mensaxes antigas en %(roomName)s.", + "Room information": "Información da sala", + "Internal room ID:": "ID interno da sala:", + "Room version": "Versión da sala", + "Room version:": "Versión da sala:", + "Developer options": "Opcións desenvolvemento", + "Open Devtools": "Open Devtools", + "This room is bridging messages to the following platforms. Learn more.": "Esta sala está enviando mensaxes ás seguintes plataformas. Coñece máis.", + "sent an image.": "enviou unha imaxe.", + "You: %(message)s": "Ti: %(message)s", + "This room isn’t bridging messages to any platforms. Learn more.": "Esta sala non está enviando mensaxes a outras plataformas. Saber máis.", + "Bridges": "Pontes", + "Uploaded sound": "Audio subido", + "Sounds": "Audios", + "Notification sound": "Ton de notificación", + "Reset": "Restablecer", + "Set a new custom sound": "Establecer novo ton personalizado", + "Browse": "Buscar", + "Change room avatar": "Cambiar avatar da sala", + "Change main address for the room": "Cambiar enderezo principal da sala", + "Change history visibility": "Cambiar visibilidade do historial", + "Change permissions": "Cambiar permisos", + "Change topic": "Cambiar tema", + "Upgrade the room": "Actualizar a sala", + "Enable room encryption": "Activar cifrado da sala", + "Modify widgets": "Modificar widgets", + "Error changing power level requirement": "Erro ao cambiar o requerimento de nivel de responsabilidade", + "An error occurred changing the room's power level requirements. Ensure you have sufficient permissions and try again.": "Algo fallou ao cambiar os requerimentos de nivel de responsabilidade na sala. Asegúrate de ter os permisos suficientes e volve a intentalo.", + "Error changing power level": "Erro ao cambiar nivel de responsabilidade", + "An error occurred changing the user's power level. Ensure you have sufficient permissions and try again.": "Algo fallou ao cambiar o nivel de responsabilidade da usuaria. Asegúrate de ter permiso suficiente e inténtao outra vez.", + "Default role": "Rol por omsión", + "Send messages": "Enviar mensaxes", + "Invite users": "Convidar usuarias", + "Change settings": "Cambiar axustes", + "Kick users": "Expulsar usuarias", + "Ban users": "Bloquear usuarias", + "Remove messages": "Eliminar mensaxes", + "Notify everyone": "Notificar a todas", + "Send %(eventType)s events": "Enviar %(eventType)s eventos", + "Select the roles required to change various parts of the room": "Escolle os roles requeridos para cambiar determinadas partes da sala", + "Enable encryption?": "Activar cifrado?", + "Once enabled, encryption for a room cannot be disabled. Messages sent in an encrypted room cannot be seen by the server, only by the participants of the room. Enabling encryption may prevent many bots and bridges from working correctly. Learn more about encryption.": "Unha vez activado, non se pode desactivar o cifrado da sala. As mensaxes enviadas nunha sala cifrada non poder ser vistas polo servidor, só polas participantes da sala. Ao activar o cifrado poderías causar que bots e pontes deixen de funcionar correctamente. Coñece máis sobre o cifrado.", + "To link to this room, please add an address.": "Para ligar a esta sala, engade un enderezo.", + "Changes to who can read history will only apply to future messages in this room. The visibility of existing history will be unchanged.": "Os cambios sobre quen pode ler o historial só se aplicarán as mensaxes futuras nesta sala. A visibilidade do historial precedente non cambiará.", + "Encryption": "Cifrado", + "Once enabled, encryption cannot be disabled.": "Unha vez activado, non se pode desactivar.", + "Encrypted": "Cifrado", + "Unable to revoke sharing for email address": "Non se puido revogar a compartición para o enderezo de correo", + "Unable to share email address": "Non se puido compartir co enderezo de email", + "Your email address hasn't been verified yet": "O teu enderezo de email aínda non foi verificado", + "Click the link in the email you received to verify and then click continue again.": "Preme na ligazón do email recibido para verificalo e após preme en continuar outra vez.", + "Verify the link in your inbox": "Verifica a ligazón na túa caixa de correo", + "Complete": "Completar", + "Revoke": "Revogar", + "Share": "Compartir", + "Discovery options will appear once you have added an email above.": "As opcións de descubrimento aparecerán após ti engadas un email.", + "Unable to revoke sharing for phone number": "Non se puido revogar a compartición do número de teléfono", + "Unable to share phone number": "Non se puido compartir o número de teléfono", + "Unable to verify phone number.": "Non se puido verificar o número de teléfono.", + "Please enter verification code sent via text.": "Escribe o código de verificación enviado no SMS.", + "Verification code": "Código de verificación", + "Discovery options will appear once you have added a phone number above.": "As opción para atoparte aparecerán cando engadas un número de teléfono.", + "Remove %(email)s?": "Eliminar %(email)s?", + "We've sent you an email to verify your address. Please follow the instructions there and then click the button below.": "Enviamosche un email para verificar o enderezo. Segue as instrucións incluídas e após preme no botón inferior.", + "Email Address": "Enderezo de Email", + "Remove %(phone)s?": "Eliminar %(phone)s?", + "A text message has been sent to +%(msisdn)s. Please enter the verification code it contains.": "Enviamosche un SMS ao +%(msisdn)s. Escribe o código de verificación que contén.", + "Phone Number": "Número de teléfono", + "This user has not verified all of their sessions.": "Esta usuaria non verificou ningunha das súas sesións.", + "You have not verified this user.": "Non verificaches esta usuaria.", + "You have verified this user. This user has verified all of their sessions.": "Verificaches esta usuaria. A usuaria verificou todas as súas sesións.", + "Someone is using an unknown session": "Alguén está a usar unha sesión descoñecida", + "This room is end-to-end encrypted": "Esta sala está cifrada extremo-a-extremo", + "Everyone in this room is verified": "Todas nesta sala están verificadas", + "Edit message": "Editar mensaxe", + "Mod": "Mod", + "Your key share request has been sent - please check your other sessions for key share requests.": "Enviouse a solicitude de compartir chave - comproba as túas outras sesións para solicitudes de compartir chave." } diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json index 81526c2c69..511dac34ac 100644 --- a/src/i18n/strings/hu.json +++ b/src/i18n/strings/hu.json @@ -2415,7 +2415,7 @@ "Waiting for your other session to verify…": "A másik munkameneted ellenőrzésére várunk…", "You've successfully verified your device!": "Sikeresen ellenőrizted az eszközödet!", "Message deleted": "Üzenet törölve", - "Message deleted by %(name)s": "Üzenetet törölte: %(name)s", + "Message deleted by %(name)s": "%(name)s törölte az üzenetet", "QR Code": "QR kód", "To continue, use Single Sign On to prove your identity.": "A folytatáshoz a személyazonosságod megerősítéséhez használd az egyszeri bejelentkezést.", "Confirm to continue": "Erősítsd meg a továbblépéshez", @@ -2470,5 +2470,29 @@ "Address (optional)": "Cím (nem kötelező)", "Delete the room address %(alias)s and remove %(name)s from the directory?": "Törlöd a szoba címét: %(alias)s és eltávolítod a könyvtárból ezt: %(name)s?", "delete the address.": "cím törlése.", - "Use a different passphrase?": "Másik jelmondat használata?" + "Use a different passphrase?": "Másik jelmondat használata?", + "sent an image.": "kép elküldve.", + "You: %(message)s": "Te: %(message)s", + "Your server admin has disabled end-to-end encryption by default in private rooms & Direct Messages.": "A szerver adminisztrátorod alapesetben kikapcsolta a végpontok közötti titkosítást a közvetlen beszélgetésekben.", + "Emoji picker": "Emodzsi választó", + "No recently visited rooms": "Nincsenek nemrégiben meglátogatott szobák", + "People": "Emberek", + "Sort by": "Rendezve:", + "Unread rooms": "Olvasatlan szobák", + "Always show first": "Mindig az elsőt mutatja", + "Show": "Mutat", + "Message preview": "Üzenet előnézet", + "List options": "Lista beállítások", + "Show %(count)s more|other": "Még %(count)s megjelenítése", + "Show %(count)s more|one": "Még %(count)s megjelenítése", + "Leave Room": "Szoba elhagyása", + "Room options": "Szoba beállítások", + "Switch to light mode": "Világos módra váltás", + "Switch to dark mode": "Sötét módra váltás", + "Switch theme": "Kinézet váltása", + "Security & privacy": "Biztonság és adatvédelem", + "All settings": "Minden beállítás", + "Archived rooms": "Archivált szobák", + "Feedback": "Visszajelzés", + "Account settings": "Fiók beállítása" } diff --git a/src/i18n/strings/it.json b/src/i18n/strings/it.json index e5c1b890d7..8272dc126b 100644 --- a/src/i18n/strings/it.json +++ b/src/i18n/strings/it.json @@ -2476,5 +2476,31 @@ "Restart": "Riavvia", "Upgrade your Riot": "Aggiorna Riot", "A new version of Riot is available!": "È disponibile una nuova versione di Riot!", - "New version available. Update now.": "Nuova versione disponibile. Aggiorna ora." + "New version available. Update now.": "Nuova versione disponibile. Aggiorna ora.", + "Emoji picker": "Selettore emoji", + "Your server admin has disabled end-to-end encryption by default in private rooms & Direct Messages.": "L'amministratore del server ha disattivato la crittografia end-to-end in modo predefinito nelle stanze private e nei messaggi diretti.", + "People": "Persone", + "Show %(n)s more": "Mostra altri %(n)s", + "Switch to light mode": "Passa alla modalità chiara", + "Switch to dark mode": "Passa alla modalità scura", + "Switch theme": "Cambia tema", + "Security & privacy": "Sicurezza e privacy", + "All settings": "Tutte le impostazioni", + "Archived rooms": "Stanze archiviate", + "Feedback": "Feedback", + "Account settings": "Impostazioni account", + "sent an image.": "ha inviato un'immagine.", + "You: %(message)s": "Tu: %(message)s", + "No recently visited rooms": "Nessuna stanza visitata di recente", + "Sort by": "Ordina per", + "Unread rooms": "Stanze non lette", + "Show": "Mostra", + "Message preview": "Anteprima messaggio", + "List options": "Opzioni lista", + "Show %(count)s more|other": "Mostra altri %(count)s", + "Show %(count)s more|one": "Mostra %(count)s altro", + "Leave Room": "Lascia stanza", + "Room options": "Opzioni stanza", + "Activity": "Attività", + "A-Z": "A-Z" } diff --git a/src/i18n/strings/ja.json b/src/i18n/strings/ja.json index fff38de46e..07ad4f9ef7 100644 --- a/src/i18n/strings/ja.json +++ b/src/i18n/strings/ja.json @@ -1399,5 +1399,6 @@ "Use bots, bridges, widgets and sticker packs": "ボット、ブリッジ、ウィジェット、ステッカーパックを使用", "Service": "サービス", "Summary": "概要", - "Document": "ドキュメント" + "Document": "ドキュメント", + "Appearance": "外観" } diff --git a/src/i18n/strings/lt.json b/src/i18n/strings/lt.json index d885c6fd7d..f739bd5485 100644 --- a/src/i18n/strings/lt.json +++ b/src/i18n/strings/lt.json @@ -6,7 +6,7 @@ "The version of Riot.im": "Riot.im versija", "Your language of choice": "Jūsų pasirinkta kalba", "Which officially provided instance you are using, if any": "Kurią oficialiai teikiamą instanciją naudojate, jei tokių yra", - "Whether or not you're using the Richtext mode of the Rich Text Editor": "Nepriklausomai nuo to ar jūs naudojate Raiškiojo Teksto Redaktoriaus Raiškiojo Teksto režimą", + "Whether or not you're using the Richtext mode of the Rich Text Editor": "Ar jūs naudojate Raiškiojo Teksto Redaktoriaus Raiškiojo Teksto režimą ar ne", "Your homeserver's URL": "Jūsų serverio URL", "Your identity server's URL": "Jūsų tapatybės serverio URL", "Analytics": "Statistika", @@ -419,7 +419,7 @@ "New passwords must match each other.": "Nauji slaptažodžiai privalo sutapti.", "I have verified my email address": "Aš patvirtinau savo el. pašto adresą", "Return to login screen": "Grįžti į prisijungimą", - "Send Reset Email": "Siųsti atstatymo el. laišką", + "Send Reset Email": "Siųsti nustatymo iš naujo el. laišką", "Incorrect username and/or password.": "Neteisingas vartotojo vardas ir/arba slaptažodis.", "Please note you are logging into the %(hs)s server, not matrix.org.": "Atkreipkite dėmesį, kad jūs jungiatės prie %(hs)s serverio, o ne matrix.org.", "Failed to fetch avatar URL": "Nepavyko gauti pseudoportreto URL", @@ -549,7 +549,7 @@ "Token incorrect": "Neteisingas prieigos raktas", "Sign in with": "Prisijungti naudojant", "Sign in": "Prisijungti", - "If you don't specify an email address, you won't be able to reset your password. Are you sure?": "Jeigu nenurodysite savo el. pašto adreso, negalėsite atstatyti savo slaptažodį. Ar esate tikri?", + "If you don't specify an email address, you won't be able to reset your password. Are you sure?": "Jeigu nenurodysite savo el. pašto adreso, negalėsite iš naujo nustatyti savo slaptažodžio. Ar esate tikri?", "Please contact your service administrator to continue using the service.": "Norėdami toliau naudotis šia paslauga, susisiekite su savo paslaugos administratoriumi.", "Create new room": "Sukurti naują kambarį", "No results": "Jokių rezultatų", @@ -600,7 +600,7 @@ "This homeserver has exceeded one of its resource limits.": "Šis serveris viršijo vieno iš savo išteklių limitą.", "Unable to connect to Homeserver. Retrying...": "Nepavyksta prisijungti prie serverio. Bandoma iš naujo...", "Enable widget screenshots on supported widgets": "Įjungti valdiklių ekrano kopijas palaikomuose valdikliuose", - "Export E2E room keys": "Eksportuoti E2E kambario raktus", + "Export E2E room keys": "Eksportuoti E2E kambarių raktus", "Last seen": "Paskutinį kartą matytas", "Unignore": "Nebeignoruoti", "and %(count)s others...|other": "ir %(count)s kitų...", @@ -712,7 +712,7 @@ "This doesn't appear to be a valid email address": "Tai nepanašu į teisingą el. pašto adresą", "Unable to add email address": "Nepavyko pridėti el. pašto adreso", "Unable to verify email address.": "Nepavyko patvirtinti el. pašto adreso.", - "This will allow you to reset your password and receive notifications.": "Tai jums leis atstatyti savo slaptažodį ir gauti pranešimus.", + "This will allow you to reset your password and receive notifications.": "Tai jums leis iš naujo nustatyti slaptažodį ir gauti pranešimus.", "Skip": "Praleisti", "Username not available": "Vartotojo vardas negalimas", "Username invalid: %(errMessage)s": "Neteisingas vartotojo vardas: %(errMessage)s", @@ -750,15 +750,15 @@ "Retry": "Bandyti dar kartą", "Add Email Address": "Pridėti el. pašto adresą", "Add Phone Number": "Pridėti telefono numerį", - "Whether or not you're logged in (we don't record your username)": "Nepriklausomai nuo to ar jūs prisijungę (mes neįrašome jūsų vartotojo vardo)", + "Whether or not you're logged in (we don't record your username)": "Ar jūs prisijungę ar ne (mes neįrašome jūsų vartotojo vardo)", "Chat with Riot Bot": "Kalbėtis su Riot Botu", "Sign In": "Prisijungti", "Explore rooms": "Žvalgyti kambarius", "Your Riot is misconfigured": "Jūsų Riot yra neteisingai sukonfigūruotas", "Sign in to your Matrix account on %(serverName)s": "Prisijunkite prie savo Matrix paskyros %(serverName)s serveryje", "Sign in to your Matrix account on ": "Prisijunkite prie savo paskyros serveryje", - "Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "Nepriklausomai nuo to ar jūs naudojate 'duonos trupinių' funkciją (pseudoportretai virš kambarių sąrašo)", - "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Kur šis puslapis įtraukia identifikuojamą informaciją, kaip kambarys, vartotojas ar grupės ID, tie duomenys yra pašalinami prieš siunčiant į serverį.", + "Whether or not you're using the 'breadcrumbs' feature (avatars above the room list)": "Ar jūs naudojate 'duonos trupinių' funkciją ar ne (pseudoportretai virš kambarių sąrašo)", + "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Ten, kur šis puslapis įtraukia identifikuojamą informaciją, kaip kambarys, vartotojas ar grupės ID, tie duomenys yra pašalinami prieš siunčiant į serverį.", "The remote side failed to pick up": "Nuotolinėi pusėi nepavyko atsiliepti", "Call failed due to misconfigured server": "Skambutis nepavyko dėl neteisingai sukonfigūruoto serverio", "Please ask the administrator of your homeserver (%(homeserverDomain)s) to configure a TURN server in order for calls to work reliably.": "Paprašykite savo serverio administratoriaus (%(homeserverDomain)s) sukonfiguruoti TURN serverį, kad skambučiai veiktų patikimai.", @@ -903,7 +903,7 @@ "General failure": "Bendras triktis", "Messages containing my username": "Žinutės, kuriose yra mano vartotojo vardas", "Set a new account password...": "Nustatyti naują paskyros slaptažodį...", - "If you've submitted a bug via GitHub, debug logs can help us track down the problem. Debug logs contain application usage data including your username, the IDs or aliases of the rooms or groups you have visited and the usernames of other users. They do not contain messages.": "Jei jūs pateikėte klaidą per GitHub, derinimo žurnalai (debug logs) gali padėti mums surasti problemą. Derinimo žurnaluose yra programos naudojimo duomenys, įskaitant jūsų vartotojo vardą, ID ar kitus kambarių arba grupių, kuriuose jūs lankėtės, pavadinimus ir kitų vartotojų vardus. Juose nėra žinučių.", + "If you've submitted a bug via GitHub, debug logs can help us track down the problem. Debug logs contain application usage data including your username, the IDs or aliases of the rooms or groups you have visited and the usernames of other users. They do not contain messages.": "Jei jūs pateikėte pranešimą apie klaidą per GitHub, derinimo žurnalai (debug logs) gali padėti mums surasti problemą. Derinimo žurnaluose yra programos naudojimo duomenys, įskaitant jūsų vartotojo vardą, ID ar kitus kambarių arba grupių, kuriuose jūs lankėtės, pavadinimus ir kitų vartotojų vardus. Juose nėra žinučių.", "%(userName)s (power %(powerLevelNumber)s)": "%(userName)s (galia %(powerLevelNumber)s)", "Debug logs contain application usage data including your username, the IDs or aliases of the rooms or groups you have visited and the usernames of other users. They do not contain messages.": "Derinimo žurnaluose yra programos naudojimo duomenys, įskaitant jūsų vartotojo vardą, ID ar kitus kambarių arba grupių, kuriuose jūs lankėtės, pavadinimus ir kitų vartotojų vardus. Juose nėra žinučių.", "If you can't find someone, ask them for their username, share your username (%(userId)s) or profile link.": "Jei jūs negalite kažkieno surasti, paklauskite jų vartotojo vardo, pasidalinkite savo vartotojo vardu (%(userId)s) arba profilio nuoroda.", @@ -916,8 +916,8 @@ "Confirm": "Patvirtinti", "Create your Matrix account on %(serverName)s": "Sukurkite savo Matrix paskyrą %(serverName)s serveryje", "Create your Matrix account on ": "Sukurkite savo Matrix paskyrą serveryje", - "Set an email for account recovery. Use email or phone to optionally be discoverable by existing contacts.": "Nustatykite el. paštą paskyros susigrąžinimui. Naudokite el. paštą ar tel. nr. norėdami pasirinktinai būti aptinkami esamų kontaktų.", - "Set an email for account recovery. Use email to optionally be discoverable by existing contacts.": "Nustatykite el. paštą paskyros susigrąžinimui. Naudokite el. paštą norėdami pasirinktinai būti aptinkami esamų kontaktų.", + "Set an email for account recovery. Use email or phone to optionally be discoverable by existing contacts.": "Nustatykite el. paštą paskyros atgavimui. Naudokite el. paštą ar tel. nr. norėdami pasirinktinai būti aptinkami esamų kontaktų.", + "Set an email for account recovery. Use email to optionally be discoverable by existing contacts.": "Nustatykite el. paštą paskyros atgavimui. Naudokite el. paštą norėdami pasirinktinai būti aptinkami esamų kontaktų.", "Sign in instead": "Prisijungti", "A verification email will be sent to your inbox to confirm setting your new password.": "Patvirtinimo laiškas bus išsiųstas į jūsų pašto dėžutę tam, kad patvirtintumėte naujo slaptažodžio nustatymą.", "Set a new password": "Nustatykite naują slaptažodį", @@ -1017,10 +1017,10 @@ "Show read receipts sent by other users": "Rodyti kitų vartotojų siųstus perskaitymo kvitus", "Order rooms by name": "Rūšiuoti kambarius pagal pavadinimą", "The other party cancelled the verification.": "Kita šalis atšaukė patvirtinimą.", - "Public Name": "Viešas Vardas", + "Public Name": "Viešas pavadinimas", "Encrypted messages are secured with end-to-end encryption. Only you and the recipient(s) have the keys to read these messages.": "Užšifruotos žinutės yra apsaugotos visapusiu šifravimu. Tik jūs ir gavėjas(-ai) turi raktus šioms žinutėms perskaityti.", "Back up your keys before signing out to avoid losing them.": "Prieš atsijungdami sukurkite atsarginę savo raktų kopiją, kad išvengtumėte jų praradimo.", - "Start using Key Backup": "Pradėti naudoti Atsarginę Raktų Kopiją", + "Start using Key Backup": "Pradėti naudoti atsarginę raktų kopiją", "Display Name": "Rodomas Vardas", "Please verify the room ID or alias and try again.": "Prašome patikrinti kambario ID arba slapyvardį ir bandyti dar kartą.", "Room %(name)s": "Kambarys %(name)s", @@ -1064,7 +1064,7 @@ "Server Name": "Serverio Pavadinimas", "Other servers": "Kiti serveriai", "Add room": "Sukurti kambarį", - "Changing your password will reset any end-to-end encryption keys on all of your sessions, making encrypted chat history unreadable. Set up Key Backup or export your room keys from another session before resetting your password.": "Slaptažodžio keitimas ištrins visų jūsų seansų šifravimo raktus, todėl nebebus galima perskaityti užšifruotos pokalbių istorijos. Sukurkite atsarginę raktų kopiją arba eksportuokite savo kambarių raktus iš kito seanso prieš atstatydami slaptažodį.", + "Changing your password will reset any end-to-end encryption keys on all of your sessions, making encrypted chat history unreadable. Set up Key Backup or export your room keys from another session before resetting your password.": "Slaptažodžio keitimas iš naujo nustatys visų jūsų seansų šifravimo raktus, todėl užšifruota pokalbių istorija taps neperskaitoma. Sukurkite atsarginę raktų kopiją arba eksportuokite savo kambarių raktus iš kito seanso prieš iš naujo nustatydami slaptažodį.", "Set a display name:": "Nustatyti rodomą vardą:", "Secure your encryption keys with a passphrase. For maximum security this should be different to your account password:": "Apsaugokite savo šifravimo raktus slaptafraze. Maksimaliam saugumui užtikrinti ji turi skirtis nuo jūsų paskyros slaptažodžio:", "Enter a passphrase": "Įveskite slaptafrazę", @@ -1088,7 +1088,7 @@ "Back up encrypted message keys": "Padaryti atsargines šifruotų žinučių raktų kopijas", "Set up with a recovery key": "Nustatyti su atgavimo raktu", "Enter your recovery passphrase a second time to confirm it.": "Įveskite atgavimo slaptafrazę antrą kartą, kad ją patvirtintumėte.", - "Your recovery key is a safety net - you can use it to restore access to your encrypted messages if you forget your recovery passphrase.": "Jūsų atgavimo raktas yra atsarginė saugumo priemonė - jūs galite jį naudoti prieigos prie jūsų šifruotų žinučių atgavimui, jei pamiršite savo atgavimo slaptafrazę.", + "Your recovery key is a safety net - you can use it to restore access to your encrypted messages if you forget your recovery passphrase.": "Jūsų atgavimo raktas yra atsarginė saugumo priemonė - jūs galite jį naudoti prieigos prie jūsų šifruotų žinučių atkūrimui, jei pamiršite savo atgavimo slaptafrazę.", "Keep a copy of it somewhere secure, like a password manager or even a safe.": "Laikykite šio rakto kopiją saugioje vietoje, pavyzdžiui slaptažodžių tvarkyklėje arba seife.", "Your recovery key": "Jūsų atgavimo raktas", "Copy": "Kopijuoti", @@ -1137,12 +1137,12 @@ "Warning: You should only do this on a trusted computer.": "Įspėjimas: Tai atlikite tik saugiame kompiuteryje.", "Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery passphrase.": "Pasiekite savo saugių žinučių istoriją ir kryžminio pasirašymo tapatybę, naudojamą kitų seansų patvirtinimui, įvesdami savo atgavimo slaptafrazę.", "If you've forgotten your recovery passphrase you can use your recovery key or set up new recovery options.": "Jei pamiršote savo atgavimo slaptafrazę jūs galite naudoti savo atgavimo raktą arba nustatyti naujus atgavimo nustatymus.", - "If you've forgotten your recovery passphrase you can use your recovery key or set up new recovery options": "Jei pamiršote savo atgavimo slaptafrazę jūs galite naudoti savo atgavimo raktą arba nustatyti naujus atgavimo nustatymus", + "If you've forgotten your recovery passphrase you can use your recovery key or set up new recovery options": "Jei pamiršote savo atgavimo slaptafrazę jūs galite naudoti savo atgavimo raktą arba nustatyti naujas atgavimo parinktis", "Confirm your identity by entering your account password below.": "Patvirtinkite savo tapatybę žemiau įvesdami savo paskyros slaptažodį.", "Use an email address to recover your account": "Naudokite el. pašto adresą, kad prireikus galėtumėte atgauti paskyrą", "Passwords don't match": "Slaptažodžiai nesutampa", "Use lowercase letters, numbers, dashes and underscores only": "Naudokite tik mažąsias raides, brūkšnelius ir pabraukimus", - "Great! This recovery passphrase looks strong enough.": "Puiku! Ši slaptafrazė atrodo pakankamai stipri.", + "Great! This recovery passphrase looks strong enough.": "Puiku! Ši atgavimo slaptafrazė atrodo pakankamai stipri.", "That matches!": "Tai sutampa!", "That doesn't match.": "Tai nesutampa.", "Confirm your recovery passphrase": "Patvirtinti atgavimo slaptafrazę", @@ -1154,7 +1154,7 @@ "You can now verify your other devices, and other users to keep your chats safe.": "Jūs dabar galite patvirtinti kitus savo įrenginius ir kitus vartotojus, kad jūsų pokalbiai būtų saugūs.", "Confirm recovery passphrase": "Patvirtinkite atgavimo slaptafrazę", "You're done!": "Atlikta!", - "Changing password will currently reset any end-to-end encryption keys on all sessions, making encrypted chat history unreadable, unless you first export your room keys and re-import them afterwards. In future this will be improved.": "Pakeitus slaptažodį šiuo metu, visuose seansuose bus anuliuoti visapusio šifravimo raktai, tad šifruotų pokalbių istorija taps neperskaitoma, nebent jūs eksportuosite savo kambarių raktus ir po to importuosite juos atgal. Ateityje ši funkcija bus pataisyta.", + "Changing password will currently reset any end-to-end encryption keys on all sessions, making encrypted chat history unreadable, unless you first export your room keys and re-import them afterwards. In future this will be improved.": "Pakeitus slaptažodį šiuo metu, visuose seansuose bus iš naujo nustatyti visapusio šifravimo raktai, tad šifruotų pokalbių istorija taps neperskaitoma, nebent jūs eksportuosite savo kambarių raktus ir po to importuosite juos atgal. Ateityje ši funkcija bus pataisyta.", "Your password was successfully changed. You will not receive push notifications on other sessions until you log back in to them": "Jūsų slaptažodis buvo sėkmingai pakeistas. Jūs kituose seansuose negausite pranešimų, kol iš naujo prie jų neprisijungsite", "An email has been sent to %(emailAddress)s. Once you've followed the link it contains, click below.": "El. laiškas buvo išsiųstas į %(emailAddress)s. Kai paspausite jame esančią nuorodą, tada spauskite žemiau.", "Your password has been reset.": "Jūsų slaptažodis buvo iš naujo nustatytas.", @@ -1254,12 +1254,12 @@ "Report Content": "Pranešti", "Nice, strong password!": "Puiku, stiprus slaptažodis!", "Old cryptography data detected": "Aptikti seni kriptografijos duomenys", - "Verify this login": "Patvirtinti šį prisijungimą", + "Verify this login": "Patvirtinkite šį prisijungimą", "Registration has been disabled on this homeserver.": "Registracija šiame serveryje išjungta.", "You can now close this window or log in to your new account.": "Jūs galite uždaryti šį langą arba prisijungti į savo naują paskyrą.", - "Confirm your identity by verifying this login from one of your other sessions, granting it access to encrypted messages.": "Patvirtinkite savo tapatybę verifikuodami šį prisijungimą viename iš kitų jūsų seansų, suteikdami jam prieigą prie šifruotų žinučių.", + "Confirm your identity by verifying this login from one of your other sessions, granting it access to encrypted messages.": "Identifikuokite save patvirtindami šį prisijungimą viename iš kitų jūsų seansų ir suteikdami jam prieigą prie šifruotų žinučių.", "This requires the latest Riot on your other devices:": "Tam reikia naujausios Riot versijos kituose jūsų įrenginiuose:", - "or another cross-signing capable Matrix client": "arba kitą kryžminį pasirašymą palaikantį Matrix klientą", + "or another cross-signing capable Matrix client": "arba kito kryžminį pasirašymą palaikančio Matrix kliento", "Use Recovery Passphrase or Key": "Naudoti atgavimo slaptafrazę arba raktą", "Upgrade this session to allow it to verify other sessions, granting them access to encrypted messages and marking them as trusted for other users.": "Atnaujinkite šį seansą, kad jam būtų leista patvirtinti kitus seansus, suteikiant jiems prieigą prie šifruotų žinučių ir juos pažymint kaip patikimus kitiems vartotojams.", "Use Single Sign On to continue": "Norėdami tęsti naudokite Vieno Prisijungimo sistemą", @@ -1285,8 +1285,8 @@ "You are still sharing your personal data on the identity server .": "Jūs vis dar dalijatės savo asmeniniais duomenimis tapatybės serveryje .", "Identity Server (%(server)s)": "Tapatybės serveris (%(server)s)", "Enter a new identity server": "Pridėkite naują tapatybės serverį", - "Use an Integration Manager (%(serverName)s) to manage bots, widgets, and sticker packs.": "Naudokite integracijų valdiklį (%(serverName)s) botų, valdiklių ir lipdukų valdymui.", - "Use an Integration Manager to manage bots, widgets, and sticker packs.": "Naudokite integracijų valdiklį botų, valdiklių ir lipdukų valdymui.", + "Use an Integration Manager (%(serverName)s) to manage bots, widgets, and sticker packs.": "Naudokite integracijų tvarkytuvą (%(serverName)s) botų, valdiklių ir lipdukų valdymui.", + "Use an Integration Manager to manage bots, widgets, and sticker packs.": "Naudokite integracijų tvarkytuvą botų, valdiklių ir lipdukų valdymui.", "Manage integrations": "Valdyti integracijas", "Integration Managers receive configuration data, and can modify widgets, send room invites, and set power levels on your behalf.": "Integracijų valdikliai gauna konfigūracijos duomenis ir jūsų vardu gali keisti valdiklius, siųsti kambario pakvietimus ir nustatyti galios lygius.", "Invalid theme schema.": "Klaidinga temos schema.", @@ -1309,19 +1309,19 @@ "Your theme": "Jūsų tema", "Deleting a widget removes it for all users in this room. Are you sure you want to delete this widget?": "Valdiklio ištrinimas pašalina jį visiems kambaryje esantiems vartotojams. Ar tikrai norite ištrinti šį valdiklį?", "Enable 'Manage Integrations' in Settings to do this.": "Įjunkite 'Valdyti integracijas' nustatymuose, kad tai atliktumėte.", - "Your Riot doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "Jūsų Riot neleidžia jums naudoti integracijų valdiklio tam atlikti. Susisiekite su administratoriumi.", + "Your Riot doesn't allow you to use an Integration Manager to do this. Please contact an admin.": "Jūsų Riot neleidžia jums naudoti integracijų tvarkytuvo tam atlikti. Susisiekite su administratoriumi.", "Enter phone number (required on this homeserver)": "Įveskite telefono numerį (privaloma šiame serveryje)", "Doesn't look like a valid phone number": "Tai nepanašu į veikiantį telefono numerį", "Invalid homeserver discovery response": "Klaidingas serverio radimo atsakas", "Invalid identity server discovery response": "Klaidingas tapatybės serverio radimo atsakas", "The phone number entered looks invalid": "Įvestas telefono numeris atrodo klaidingas", "Double check that your server supports the room version chosen and try again.": "Dar kartą įsitikinkite, kad jūsų serveris palaiko pasirinktą kambario versiją ir bandykite iš naujo.", - "Whether you're using Riot on a device where touch is the primary input mechanism": "Nesvarbu, ar naudojate „Riot“ įrenginyje, kuriame pagrindinis įvesties mechanizmas yra lietimas", + "Whether you're using Riot on a device where touch is the primary input mechanism": "Ar naudojate Riot įrenginyje, kuriame pagrindinis įvesties mechanizmas yra lietimas", "Session already verified!": "Seansas jau patvirtintas!", "WARNING: Session already verified, but keys do NOT MATCH!": "ĮSPĖJIMAS: Seansas jau patvirtintas, bet raktai NESUTAMPA!", "Enable cross-signing to verify per-user instead of per-session": "Įjunkite kryžminį pasirašymą, kad patvirtintumėte vartotoją, o ne seansą", "Enable Emoji suggestions while typing": "Įjungti jaustukų pasiūlymus rašant", - "Show a reminder to enable Secure Message Recovery in encrypted rooms": "Rodyti priminimą įjungti saugų žinučių atgavimą šifruotuose kambariuose", + "Show a reminder to enable Secure Message Recovery in encrypted rooms": "Rodyti priminimą įjungti saugių žinučių atgavimą šifruotuose kambariuose", "Enable automatic language detection for syntax highlighting": "Įjungti automatinį kalbos aptikimą sintaksės paryškinimui", "Enable big emoji in chat": "Įjungti didelius jaustukus pokalbiuose", "Enable Community Filter Panel": "Įjungti bendruomenės filtrų skydelį", @@ -1409,24 +1409,24 @@ "Accept to continue:": "Sutikite su , kad tęstumėte:", "Upload": "Įkelti", "Your homeserver does not support cross-signing.": "Jūsų serveris nepalaiko kryžminio pasirašymo.", - "Cross-signing and secret storage are enabled.": "Kryžminis pasirašymas ir slapta saugykla yra įjungta.", + "Cross-signing and secret storage are enabled.": "Kryžminis pasirašymas ir slapta saugykla yra įjungti.", "Your account has a cross-signing identity in secret storage, but it is not yet trusted by this session.": "Jūsų paskyra slaptoje saugykloje turi kryžminio pasirašymo tapatybę, bet šis seansas dar ja nepasitiki.", "Cross-signing and secret storage are not yet set up.": "Kryžminis pasirašymas ir slapta saugykla dar nėra nustatyti.", - "Reset cross-signing and secret storage": "Atstatyti kryžminį pasirašymą ir slaptą saugyklą", + "Reset cross-signing and secret storage": "Iš naujo nustatyti kryžminį pasirašymą ir slaptą saugyklą", "Bootstrap cross-signing and secret storage": "Prikabinti kryžminį pasirašymą ir slaptą saugyklą", "Cross-signing public keys:": "Kryžminio pasirašymo vieši raktai:", "Cross-signing private keys:": "Kryžminio pasirašymo privatūs raktai:", "Individually verify each session used by a user to mark it as trusted, not trusting cross-signed devices.": "Individualiai patikrinkite kiekvieną vartotojo naudojamą seansą, kad pažymėtumėte jį kaip patikimą, nepasitikint kryžminiu pasirašymu patvirtintais įrenginiais.", "Enable": "Įjungti", - "Backup has a valid signature from verified session ": "Atsarginė kopija turi galiojantį parašą iš patikrinto seanso ", - "Backup has a valid signature from unverified session ": "Atsarginė kopija turi galiojantį parašą iš nepatikrinto seanso ", - "Backup has an invalid signature from verified session ": "Atsarginė kopija turi negaliojantį parašą iš patikrinto seanso ", - "Backup has an invalid signature from unverified session ": "Atsarginė kopija turi negaliojantį parašą iš nepatikrinto seanso ", + "Backup has a valid signature from verified session ": "Atsarginė kopija turi galiojantį patvirtinto seanso parašą", + "Backup has a valid signature from unverified session ": "Atsarginė kopija turi galiojantį nepatvirtinto seanso parašą", + "Backup has an invalid signature from verified session ": "Atsarginė kopija turi negaliojantį patvirtinto seanso parašą", + "Backup has an invalid signature from unverified session ": "Atsarginė kopija turi negaliojantį nepatvirtinto seanso parašą", "Backup key stored in secret storage, but this feature is not enabled on this session. Please enable cross-signing in Labs to modify key backup state.": "Atsarginė rakto kopija saugoma slaptoje saugykloje, bet ši funkcija nėra įjungta šiame seanse. Įjunkite kryžminį pasirašymą Laboratorijose, kad galėtumėte keisti atsarginės rakto kopijos būseną.", "Enable desktop notifications for this session": "Įjungti darbalaukio pranešimus šiam seansui", "Enable audible notifications for this session": "Įjungti garsinius pranešimus šiam seansui", "wait and try again later": "palaukite ir bandykite vėliau dar kartą", - "If you don't want to use to discover and be discoverable by existing contacts you know, enter another identity server below.": "Jei jūs nenorite naudoti radimui ir tam, kad būtumėte randamas esamų, jums žinomų kontaktų, žemiau įveskite kitą tapatybės serverį.", + "If you don't want to use to discover and be discoverable by existing contacts you know, enter another identity server below.": "Jei jūs nenorite naudoti serverio radimui ir tam, kad būtumėte randamas esamų, jums žinomų kontaktų, žemiau įveskite kitą tapatybės serverį.", "Using an identity server is optional. If you choose not to use an identity server, you won't be discoverable by other users and you won't be able to invite others by email or phone.": "Tapatybės serverio naudojimas yra pasirinktinis. Jei jūs pasirinksite jo nenaudoti, jūs nebūsite randamas kitų vartotojų ir neturėsite galimybės pakviesti kitų nurodydamas el. paštą ar telefoną.", "Do not use an identity server": "Nenaudoti tapatybės serverio", "Cross-signing": "Kryžminis pasirašymas", @@ -1462,7 +1462,7 @@ "Access your secure message history and your cross-signing identity for verifying other sessions by entering your recovery key.": "Pasiekite savo saugių žinučių istoriją ir kryžminio pasirašymo tapatybę, naudojamą kitų seansų patvirtinimui, įvesdami savo atgavimo raktą.", "Session verified": "Seansas patvirtintas", "Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or enable unsafe scripts.": "Neįmanoma prisijungti prie serverio per HTTP, kai naršyklės juostoje yra HTTPS URL. Naudokite HTTPS arba įjunkite nesaugias rašmenas.", - "Your new session is now verified. It has access to your encrypted messages, and other users will see it as trusted.": "Jūsų naujas seansas dabar yra patvirtintas. Jis turi prieigą prie jūsų šifruotų žinučių ir kiti vartotojai matys jį kaip patikimą.", + "Your new session is now verified. It has access to your encrypted messages, and other users will see it as trusted.": "Jūsų naujas seansas buvo patvirtintas. Jis turi prieigą prie jūsų šifruotų žinučių ir kiti vartotojai matys jį kaip patikimą.", "Your new session is now verified. Other users will see it as trusted.": "Jūsų naujas seansas dabar yra patvirtintas. Kiti vartotojai matys jį kaip patikimą.", "NOT verified": "Nepatvirtinta", "verified": "patvirtinta", @@ -1484,9 +1484,9 @@ "Send typing notifications": "Siųsti spausdinimo pranešimus", "Automatically replace plain text Emoji": "Automatiškai pakeisti paprasto teksto jaustukus", "Mirror local video feed": "Atkartoti lokalų video tiekimą", - "Allow Peer-to-Peer for 1:1 calls": "Leisti \"Peer-to-Peer\" 1:1 skambučiams", + "Allow Peer-to-Peer for 1:1 calls": "Leisti tiesioginį \"Peer-to-Peer\" sujungimą 1:1 skambučiams", "Prompt before sending invites to potentially invalid matrix IDs": "Klausti prieš siunčiant pakvietimus galimai netinkamiems matrix ID", - "Show rooms with unread notifications first": "Pirmiausia rodyti kambarius su neskaitytais pranešimais", + "Show rooms with unread notifications first": "Pirmiausia rodyti kambarius su neperskaitytais pranešimais", "Show shortcuts to recently viewed rooms above the room list": "Rodyti neseniai peržiūrėtų kambarių nuorodas virš kambarių sąrašo", "Allow fallback call assist server turn.matrix.org when your homeserver does not offer one (your IP address would be shared during a call)": "Leisti atsarginį skambučių pagalbos serverį turn.matrix.org, kai jūsų serveris to neteikia (jūsų IP adresas bus bendrintas pokalbio metu)", "Show previews/thumbnails for images": "Rodyti vaizdų peržiūras/miniatiūras", @@ -1525,7 +1525,7 @@ "Jump to start/end of the composer": "Peršokti į rašymo pradžią/pabaigą", "Navigate composer history": "Naršyti rašymo istoriją", "Navigate up/down in the room list": "Naršyti aukštyn/žemyn kambarių saraše", - "Select room from the room list": "Pasirinkite kambarį iš kambarių sąrašo", + "Select room from the room list": "Pasirinkti kambarį iš kambarių sąrašo", "Collapse room list section": "Sutraukti kambarių sąrašo skyrių", "Expand room list section": "Išplėsti kambarių sąrašo skyrių", "Clear room list filter field": "Išvalyti kambarių sąrašo filtro lauką", @@ -1535,12 +1535,12 @@ "Can't leave Server Notices room": "Negalima išeiti iš Serverio Pranešimų kambario", "This room is used for important messages from the Homeserver, so you cannot leave it.": "Šis kambarys yra naudojamas svarbioms žinutėms iš serverio, todėl jūs negalite jo palikti.", "Terms and Conditions": "Taisyklės ir Sąlygos", - "Self-verification request": "Savipatvirtinimo užklausa", + "Self-verification request": "Savarankiško patvirtinimo užklausa", "Logout": "Atsijungti", "Reject & Ignore user": "Atmesti ir ignoruoti vartotoją", "Reject invitation": "Atmesti pakvietimą", "Unable to reject invite": "Nepavyko atmesti pakvietimo", - "Whether you're using Riot as an installed Progressive Web App": "Nesvarbu, ar naudojate Riot kaip įdiegtą progresyviąją žiniatinklio programą", + "Whether you're using Riot as an installed Progressive Web App": "Ar naudojate Riot kaip įdiegtą progresyviąją žiniatinklio programą", "Your user agent": "Jūsų vartotojo agentas", "The information being sent to us to help make Riot better includes:": "Informacija, siunčiama mums siekiant pagerinti Riot, yra:", "Invite only": "Tik pakviestiems", @@ -1557,7 +1557,7 @@ "Ask this user to verify their session, or manually verify it below.": "Paprašykite šio vartotojo patvirtinti savo seansą arba patvirtinkite jį rankiniu būdu žemiau.", "Encryption upgrade available": "Galimas šifravimo atnaujinimas", "Verify this user by confirming the following number appears on their screen.": "Patvirtinkite šį vartotoją įsitikindami, kad jo ekrane rodomas toliau esantis skaičius.", - "Backup has a signature from unknown user with ID %(deviceId)s": "Atsarginė kopija turi nežinomo vartotojo parašą su %(deviceId)s ID", + "Backup has a signature from unknown user with ID %(deviceId)s": "Atsarginė kopija turi nežinomo vartotojo parašą su ID %(deviceId)s", "Manage the names of and sign out of your sessions below or verify them in your User Profile.": "Tvarkykite savo seansų pavadinimus ir iš jų atsijunkite žemiau, arba patvirtinkite juos savo Vartotojo Profilyje.", "Please enter verification code sent via text.": "Įveskite patvirtinimo kodą išsiųstą teksto žinute.", "A text message has been sent to +%(msisdn)s. Please enter the verification code it contains.": "Teksto žinutė buvo išsiųsta numeriu +%(msisdn)s. Įveskite joje esantį patvirtinimo kodą.", @@ -1586,7 +1586,166 @@ "View": "Žiūrėti", "Confirm encryption setup": "Patvirtinti šifravimo sąranką", "Click the button below to confirm setting up encryption.": "Paspauskite mygtuką žemiau, kad patvirtintumėte šifravimo nustatymą.", - "Restore your key backup to upgrade your encryption": "Atstatykite savo raktų atsarginę kopiją, kad atnaujintumėte šifravimą", + "Restore your key backup to upgrade your encryption": "Atkurkite savo atsarginę raktų kopiją, kad atnaujintumėte šifravimą", "Upgrade your encryption": "Atnaujinkite savo šifravimą", - "Failed to set topic": "Nepavyko nustatyti temos" + "Failed to set topic": "Nepavyko nustatyti temos", + "Show typing notifications": "Rodyti spausdinimo pranešimus", + "Show hidden events in timeline": "Rodyti paslėptus įvykius laiko juostoje", + "Session backup key:": "Seanso atsarginės kopijos raktas:", + "Unable to load key backup status": "Nepavyko įkelti atsarginės raktų kopijos būklės", + "Connect this session to key backup before signing out to avoid losing any keys that may only be on this session.": "Prieš atsijungdami prijunkite šį seansą prie atsarginės raktų kopijos, kad neprarastumėte raktų, kurie gali būti tik šiame seanse.", + "Connect this session to Key Backup": "Prijungtii šį seansą prie atsarginės raktų kopijos", + "Backup key stored: ": "Atsarginės kopijos raktas saugomas: ", + "You are currently using to discover and be discoverable by existing contacts you know. You can change your identity server below.": "Tam, kad galėtumėte rasti ir tam, kad būtumėte randamas esamų, jums žinomų kontaktų, jūs šiuo metu naudojate tapatybės serverį. Jį pakeisti galite žemiau.", + "Identity Server": "Tapatybės serveris", + "You are not currently using an identity server. To discover and be discoverable by existing contacts you know, add one below.": "Šiuo metu jūs nenaudojate tapatybės serverio. Tam, kad galėtumėte rasti ir tam, kad būtumėte randamas esamų, jums žinomų kontaktų, pridėkite jį žemiau.", + "Disconnecting from your identity server will mean you won't be discoverable by other users and you won't be able to invite others by email or phone.": "Atsijungimas nuo tapatybės serverio reikš, kad jūs nebebūsite randamas kitų vartotojų ir jūs nebegalėsite pakviesti kitų, naudodami jų el. paštą arba telefoną.", + "Appearance": "Išvaizda", + "Deactivate account": "Deaktyvuoti paskyrą", + "Identity Server is": "Tapatybės serveris yra", + "Timeline": "Laiko juosta", + "Key backup": "Atsarginė raktų kopija", + "Where you’re logged in": "Kur esate prisijungę", + "A session's public name is visible to people you communicate with": "Seanso viešas pavadinimas yra matomas žmonėms su kuriais jūs bendraujate", + "Try scrolling up in the timeline to see if there are any earlier ones.": "Pabandykite slinkti aukštyn laiko juostoje, kad sužinotumėte, ar yra ankstesnių.", + "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.": "Tai visam laikui padarys jūsų paskyrą nebetinkama naudoti. Jūs nebegalėsite prisijungti ir niekas nebegalės iš naujo užregistruoti to pačio vartotojo ID. Jūsų paskyra išeis iš visų kambarių, kuriuose ji dalyvauja ir pašalins jūsų paskyros detales iš jūsų tapatybės serverio. Šis veiksmas neatšaukiamas.", + "Unable to validate homeserver/identity server": "Neįmanoma patvirtinti serverio/tapatybės serverio", + "No identity server is configured so you cannot add an email address in order to reset your password in the future.": "Nėra sukonfigūruota jokio tapatybės serverio, tad jūs negalite pridėti el. pašto adreso, tam, kad galėtumėte iš naujo nustatyti savo slaptažodį ateityje.", + "Enter your custom identity server URL What does this mean?": "Įveskite savo pasirinktinio tapatybės serverio URL Ką tai reiškia?", + "Identity Server URL": "Tapatybės serverio URL", + "Tried to load a specific point in this room's timeline, but you do not have permission to view the message in question.": "Bandyta įkelti konkrečią vietą šio kambario laiko juostoje, bet jūs neturite leidimo peržiūrėti tos žinutės.", + "Failed to load timeline position": "Nepavyko įkelti laiko juostos pozicijos", + "Your Matrix account on %(serverName)s": "Jūsų Matrix paskyra %(serverName)s serveryje", + "Your Matrix account on ": "Jūsų Matrix paskyra serveryje", + "No identity server is configured: add one in server settings to reset your password.": "Nesukonfigūruotas joks tapatybės serveris: pridėkite jį serverio nustatymuose, kad iš naujo nustatytumėte slaptažodį.", + "Identity server URL does not appear to be a valid identity server": "Tapatybės serverio URL neatrodo kaip tinkamas tapatybės serveris", + "Scroll up/down in the timeline": "Slinkti aukštyn/žemyn laiko juostoje", + "Show developer tools": "Rodyti vystytojo įrankius", + "Low bandwidth mode": "Žemo duomenų pralaidumo režimas", + "Send read receipts for messages (requires compatible homeserver to disable)": "Siųsti žinučių perskaitymo kvitus (norint išjungti reikalingas suderinamas serveris)", + "Keep recovery passphrase in memory for this session": "Šiam seansui atgavimo slaptafrazę laikyti atmintyje", + "How fast should messages be downloaded.": "Kaip greitai žinutės turi būti parsiųstos.", + "Manually verify all remote sessions": "Rankiniu būdu patvirtinti visus nuotolinius seansus", + "well formed": "gerai suformuotas", + "unexpected type": "netikėto tipo", + "in memory": "atmintyje", + "not found": "nerasta", + "in secret storage": "slaptoje saugykloje", + "Self signing private key:": "Savarankiško pasirašymo privatus raktas:", + "cached locally": "lokaliame podėlyje", + "not found locally": "lokaliai nerasta", + "User signing private key:": "Vartotojo pasirašymo privatus raktas:", + "Secret storage public key:": "Slaptos saugyklos viešas raktas:", + "in account data": "paskyros duomenyse", + "Homeserver feature support:": "Serverio funkcijų palaikymas:", + "exists": "yra", + "Riot can't securely cache encrypted messages locally while running in a web browser. Use Riot Desktop for encrypted messages to appear in search results.": "Riot negali saugiai podėlyje talpinti užšifruotų žinučių, kol veikia interneto naršyklėje. Naudokite Riot Desktop, kad užšifruotos žinutės būtų rodomos paieškos rezultatuose.", + "This session is backing up your keys. ": "Šis seansas kuria atsargines jūsų raktų kopijas. ", + "This session is not backing up your keys, but you do have an existing backup you can restore from and add to going forward.": "Šis seansas nekuria atsarginių raktų kopijų, bet jūs jau turite atsarginę kopiją iš kurios galite atkurti ir pridėti.", + "All keys backed up": "Atsarginė kopija sukurta visiems raktams", + "Backup has a valid signature from this user": "Atsarginė kopija turi galiojantį šio vartotojo parašą", + "Backup has a invalid signature from this user": "Atsarginė kopija turi negaliojantį šio vartotojo parašą", + "Backup has a signature from unknown session with ID %(deviceId)s": "Atsarginė kopija turi nežinomo seanso parašą su ID %(deviceId)s", + "Backup has a valid signature from this session": "Atsarginė kopija turi galiojantį šio seanso parašą", + "Backup has an invalid signature from this session": "Atsarginė kopija turi negaliojantį šio seanso parašą", + "This backup is trusted because it has been restored on this session": "Ši atsarginė kopija yra patikima, nes buvo atkurta šiame seanse", + "Message search": "Žinučių paieška", + "Clearing all data from this session is permanent. Encrypted messages will be lost unless their keys have been backed up.": "Šio seanso duomenų išvalymas yra negrįžtamas. Šifruotos žinutės bus prarastos, nebent buvo sukurta jų raktų atsarginė kopija.", + "Some session data, including encrypted message keys, is missing. Sign out and sign in to fix this, restoring keys from backup.": "Trūksta kai kurių seanso duomenų, įskaitant šifruotų žinučių raktus. Atsijunkite ir prisijunkite, kad tai išspręstumėte, atkurdami raktus iš atsarginės kopijos.", + "Unable to access secret storage. Please verify that you entered the correct recovery passphrase.": "Nepavyko pasiekti slaptos saugyklos. Patikrinkite, ar įvedėte teisingą atgavimo slaptafrazę.", + "Unable to access secret storage. Please verify that you entered the correct recovery key.": "Nepavyko pasiekti slaptos saugyklos. Patikrinkite, ar įvedėte teisingą atgavimo raktą.", + "Restoring keys from backup": "Raktų atkūrimas iš atsarginės kopijos", + "Backup could not be decrypted with this recovery key: please verify that you entered the correct recovery key.": "Atsarginės kopijos nepavyko iššifruoti naudojant šį atgavimo raktą: patikrinkite, ar įvedėte teisingą atgavimo raktą.", + "Unable to query secret storage status": "Slaptos saugyklos būsenos užklausa neįmanoma", + "Unable to set up secret storage": "Neįmanoma nustatyti slaptos saugyklos", + "We'll store an encrypted copy of your keys on our server. Secure your backup with a recovery passphrase.": "Užšifruotą jūsų raktų kopiją saugosime savo serveryje. Apsaugokite savo atsarginę kopiją naudodami atgavimo slaptafrazę.", + "Your keys are being backed up (the first backup could take a few minutes).": "Kuriama jūsų raktų atsarginė kopija (pirmas atsarginės kopijos sukūrimas gali užtrukti kelias minutes).", + "Create key backup": "Sukurti atsarginę raktų kopiją", + "Unable to create key backup": "Nepavyko sukurti atsarginės raktų kopijos", + "Your homeserver does not support session management.": "Jūsų serveris nepalaiko seansų tvarkymo.", + "Your homeserver has exceeded its user limit.": "Jūsų serveris pasiekė savo vartotojų limitą.", + "Your homeserver has exceeded one of its resource limits.": "Jūsų serveris pasiekė vieną iš savo resursų limitų.", + "Never send encrypted messages to unverified sessions from this session": "Niekada iš šio seanso nesiųsti šifruotų žinučių nepatvirtintiems seansams", + "Never send encrypted messages to unverified sessions in this room from this session": "Niekada iš šio seanso nesiųsti šifruotų žinučių šiame kambaryje nepatvirtintiems seansams", + "Unable to load session list": "Neįmanoma įkelti seansų sąrašo", + "Confirm deleting these sessions by using Single Sign On to prove your identity.|other": "Patvirtinkite šių seansų ištrinimą, naudodamiesi Vienu Prisijungimu, kad įrodytumėte savo tapatybę.", + "Confirm deleting these sessions by using Single Sign On to prove your identity.|one": "Patvirtinkite šio seanso ištrinimą, naudodamiesi Vienu Prisijungimu, kad įrodytumėte savo tapatybę.", + "Click the button below to confirm deleting these sessions.|other": "Paspauskite žemiau esantį mygtuką, kad patvirtintumėte šių seansų ištrynimą.", + "Click the button below to confirm deleting these sessions.|one": "Paspauskite žemiau esantį mygtuką, kad patvirtintumėte šio seanso ištrynimą.", + "Connecting to integration manager...": "Jungiamasi prie integracijų tvarkytuvo...", + "Cannot connect to integration manager": "Neįmanoma prisijungti prie integracijų tvarkytuvo", + "The integration manager is offline or it cannot reach your homeserver.": "Integracijų tvarkytuvas yra išjungtas arba negali pasiekti jūsų serverio.", + "Disconnect": "Atsijungti", + "Disconnect anyway": "Vis tiek atsijungti", + "Credits": "Padėka", + "For help with using Riot, click here.": "Norėdami gauti pagalbos naudojant Riot, paspauskite čia.", + "For help with using Riot, click here or start a chat with our bot using the button below.": "Norėdami gauti pagalbos naudojant Riot, paspauskite čia arba pradėkite pokalbį su mūsų botu pasinaudoję žemiau esančiu mygtuku.", + "Bug reporting": "Pranešti apie klaidą", + "Clear cache and reload": "Išvalyti podėlį ir perkrauti", + "To report a Matrix-related security issue, please read the Matrix.org Security Disclosure Policy.": "Norėdami pranešti apie su Matrix susijusią saugos problemą, perskaitykite Matrix.org Saugumo Atskleidimo Poliiką.", + "FAQ": "DUK", + "Keyboard Shortcuts": "Spartieji klavišai", + "Versions": "Versijos", + "Homeserver is": "Serveris yra", + "Import E2E room keys": "Importuoti E2E kambarių raktus", + "Session ID:": "Seanso ID:", + "Session key:": "Seanso raktas:", + "Riot collects anonymous analytics to allow us to improve the application.": "Riot renka anoniminę analizę, kad galėtume patobulinti programą.", + "Privacy is important to us, so we don't collect any personal or identifiable data for our analytics.": "Privatumas mums yra svarbus, todėl mes nerenkame jokių asmeninių ar identifikuojamų duomenų savo analitikai.", + "Learn more about how we use analytics.": "Sužinokite daugiau apie tai, kaip mes naudojame analitiką.", + "Reset": "Iš naujo nustatyti", + "Failed to connect to integration manager": "Nepavyko prisijungti prie integracijų tvarkytuvo", + "Using this widget may share data with %(widgetDomain)s & your Integration Manager.": "Naudojimasis šiuo valdikliu gali pasidalinti duomenimis su %(widgetDomain)s ir jūsų integracijų tvarkytuvu.", + "Please create a new issue on GitHub so that we can investigate this bug.": "Prašome sukurti naują problemą GitHub'e, kad mes galėtume ištirti šią klaidą.", + "Please tell us what went wrong or, better, create a GitHub issue that describes the problem.": "Pasakyite mums kas nutiko, arba, dar geriau, sukurkite GitHub problemą su jos apibūdinimu.", + "Before submitting logs, you must create a GitHub issue to describe your problem.": "Prieš pateikiant žurnalus jūs turite sukurti GitHub problemą, kad apibūdintumėte savo problemą.", + "GitHub issue": "GitHub problema", + "Notes": "Pastabos", + "Integrations are disabled": "Integracijos yra išjungtos", + "Integrations not allowed": "Integracijos neleidžiamos", + "Integration Manager": "Integracijų tvarkytuvas", + "This looks like a valid recovery key!": "Tai panašu į galiojantį atgavimo raktą!", + "Not a valid recovery key": "Negaliojantis atgavimo raktas", + "If you've forgotten your recovery key you can .": "Jei pamiršote savo atgavimo raktą, galite .", + "Recovery key mismatch": "Atgavimo rakto neatitikimas", + "Incorrect recovery passphrase": "Neteisinga atgavimo slaptafrazė", + "Backup could not be decrypted with this recovery passphrase: please verify that you entered the correct recovery passphrase.": "Nepavyko iššifruoti atsarginės kopijos naudojant šią atgavimo slaptafrazę: patikrinkite, ar įvedėte teisingą atgavimo slaptafrazę.", + "Access your secure message history and set up secure messaging by entering your recovery passphrase.": "Prieikite prie savo saugių žinučių istorijos ir nustatykite saugių žinučių siuntimą, įvesdami atgavimo slaptafrazę.", + "Access your secure message history and set up secure messaging by entering your recovery key.": "Prieikite prie savo saugių žinučių istorijos ir nustatykite saugių žinučių siuntimą, įvesdami atgavimo raktą.", + "If you've forgotten your recovery key you can ": "Jei pamiršote savo atgavimo raktą, galite ", + "Regain access to your account and recover encryption keys stored in this session. Without them, you won’t be able to read all of your secure messages in any session.": "Susigrąžinkite prieigą prie savo paskyros ir atgaukite šifravimo raktus, saugomus šiame seanse. Be jų jūs negalėsite perskaityti visų savo saugių žinučių bet kuriame seanse.", + "Restore": "Atkurti", + "Use a different passphrase?": "Naudoti kitą slaptafrazę?", + "Repeat your recovery passphrase...": "Pakartokite savo atgavimo slaptafrazę...", + "Without setting up Secure Message Recovery, you won't be able to restore your encrypted message history if you log out or use another session.": "Nenustatę saugių žinučių atgavimo, negalėsite atkurti užšifruotų žinučių istorijos, jei atsijungsite ar naudosite kitą seansą.", + "Set up Secure Message Recovery": "Nustatyti saugių žinučių atgavimą", + "Secure your backup with a recovery passphrase": "Apsaugokite savo atsarginę kopiją atgavimo slaptafraze", + "Without setting up Secure Message Recovery, you'll lose your secure message history when you log out.": "Nenustatę saugių žinučių atgavimo, atsijungdami jūs prarasite savo saugių žinučių istoriją.", + "New Recovery Method": "Naujas atgavimo metodas", + "A new recovery passphrase and key for Secure Messages have been detected.": "Buvo aptikta nauja atgavimo slaptafrazė ir saugių žinučių raktas.", + "This session is encrypting history using the new recovery method.": "Šis seansas šifruoja istoriją naudodamas naują atgavimo metodą.", + "Recovery Method Removed": "Atgavimo metodas pašalintas", + "This session has detected that your recovery passphrase and key for Secure Messages have been removed.": "Ši seansas aptiko, kad buvo pašalinta jūsų atgavimo slaptafrazė ir saugių žinučių raktas.", + "If you did this accidentally, you can setup Secure Messages on this session which will re-encrypt this session's message history with a new recovery method.": "Jei tai padarėte netyčia, šiame seanse galite nustatyti saugias žinutes, kurios pakartotinai užšifruos šio seanso žinučių istoriją nauju atgavimo metodu.", + "Toggle Bold": "Perjungti paryškinimą", + "Toggle Italics": "Perjungti kursyvą", + "Toggle Quote": "Perjungti citatą", + "New line": "Nauja eilutė", + "Navigate recent messages to edit": "Naršyti naujausius pranešimus redagavimui", + "Cancel replying to a message": "Atšaukti atsakymą į žinutę", + "Toggle microphone mute": "Perjungti mikrofono nutildymą", + "Toggle video on/off": "Perjungti vaizdo įjungimą/išjungimą", + "Dismiss read marker and jump to bottom": "Atsisakyti skaitymo žymeklio ir nušokti į apačią", + "Jump to oldest unread message": "Nušokti iki seniausios neperskaitytos žinutės", + "Upload a file": "Įkelti failą", + "Jump to room search": "Nušokti į kambarių paiešką", + "Previous/next unread room or DM": "Ankstesnis/sekantis neperskaitytas kambarys arba tiesioginė žinutė", + "Previous/next room or DM": "Ankstesnis/sekantis kambarys arba tiesioginė žinutė", + "Toggle the top left menu": "Perjungti viršutinį kairės pusės meniu", + "Close dialog or context menu": "Uždaryti dialogą arba kontekstinį meniu", + "Activate selected button": "Aktyvuoti pasirinktą mygtuką", + "Toggle right panel": "Perjungti dešinį skydelį", + "Toggle this dialog": "Perjungti šį dialogą", + "Move autocomplete selection up/down": "Perkelti automatinio užbaigimo pasirinkimą aukštyn/žemyn", + "Cancel autocomplete": "Atšaukti automatinį užbaigimą" } diff --git a/src/i18n/strings/nb_NO.json b/src/i18n/strings/nb_NO.json index 8554e3d86b..fe4fbf12ee 100644 --- a/src/i18n/strings/nb_NO.json +++ b/src/i18n/strings/nb_NO.json @@ -1344,5 +1344,15 @@ "Repeat your recovery passphrase...": "Gjenta gjenopprettingspassfrasen din …", "Other users may not trust it": "Andre brukere kan kanskje mistro den", " reacted with %(content)s": " reagerte med %(content)s", - "reacted with %(shortName)s": " reagerte med %(shortName)s" + "reacted with %(shortName)s": " reagerte med %(shortName)s", + "%(roomName)s can't be previewed. Do you want to join it?": "%(roomName)s kan ikke forhåndsvises. Vil du bli med i den?", + "Messages in this room are end-to-end encrypted.": "Meldinger i dette rommet er start-til-slutt-kryptert.", + "Messages in this room are not end-to-end encrypted.": "Meldinger i dette rommet er ikke start-til-slutt-kryptert.", + "Messages in this room are end-to-end encrypted. Learn more & verify this user in their user profile.": "Meldinger i dette rommet er start-til-slutt-kryptert. Lær mer og verifiser denne brukeren i brukerprofilen deres.", + "Use a different passphrase?": "Vil du bruke en annen passfrase?", + "Emoji picker": "Emojivelger", + "Jump to read receipt": "Hopp til lesekvitteringen", + "Mention": "Nevn", + "Community Name": "Samfunnets navn", + "Dismiss read marker and jump to bottom": "Avføy lesekvitteringen og hopp ned til bunnen" } diff --git a/src/i18n/strings/nl.json b/src/i18n/strings/nl.json index b4bb5dc5bd..69909e942e 100644 --- a/src/i18n/strings/nl.json +++ b/src/i18n/strings/nl.json @@ -350,7 +350,7 @@ "Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "Zo te zien is uw e-mailadres op deze thuisserver niet aan een Matrix-ID gekoppeld.", "You seem to be in a call, are you sure you want to quit?": "Het ziet er naar uit dat u in gesprek bent, weet u zeker dat u wilt afsluiten?", "You seem to be uploading files, are you sure you want to quit?": "Het ziet er naar uit dat u bestanden aan het uploaden bent, weet u zeker dat u wilt afsluiten?", - "You will not be able to undo this change as you are promoting the user to have the same power level as yourself.": "U kunt deze veranderingen niet ongedaan maken aangezien u de gebruiker tot hetzelfde niveau als uzelf promoveert.", + "You will not be able to undo this change as you are promoting the user to have the same power level as yourself.": "U zult deze veranderingen niet terug kunnen draaien, daar u de gebruiker tot uw eigen niveau promoveert.", "This server does not support authentication with a phone number.": "Deze server biedt geen ondersteuning voor authenticatie met een telefoonnummer.", "An error occurred: %(error_string)s": "Er is een fout opgetreden: %(error_string)s", "Make Moderator": "Benoemen tot moderator", @@ -382,7 +382,7 @@ "Failed to invite": "Uitnodigen is mislukt", "Failed to invite the following users to the %(roomName)s room:": "Kon de volgende gebruikers niet uitnodigen voor gesprek %(roomName)s:", "Confirm Removal": "Verwijdering bevestigen", - "Are you sure you wish to remove (delete) this event? Note that if you delete a room name or topic change, it could undo the change.": "Weet u zeker dat u deze gebeurtenis wilt verwijderen? Wees u er wel van bewust dat als u een gespreksnaam of onderwerpswijziging verwijdert, u de verandering mogelijk ongedaan maakt.", + "Are you sure you wish to remove (delete) this event? Note that if you delete a room name or topic change, it could undo the change.": "Weet u zeker dat u deze gebeurtenis wilt verwijderen? Besef wel dat het verwijderen van een van een gespreksnaams- of onderwerpswijziging die wijziging mogelijk teniet doet.", "Unknown error": "Onbekende fout", "Incorrect password": "Onjuist wachtwoord", "To continue, please enter your password.": "Voer uw wachtwoord in om verder te gaan.", @@ -501,7 +501,7 @@ "Unban this user?": "Deze gebruiker ontbannen?", "Ban this user?": "Deze gebruiker verbannen?", "Mirror local video feed": "Lokale videoaanvoer ook elders opslaan (spiegelen)", - "You will not be able to undo this change as you are demoting yourself, if you are the last privileged user in the room it will be impossible to regain privileges.": "U kunt deze actie niet ongedaan maken omdat u zichzelf degradeert. Als u de laatste bevoorrechte gebruiker in het gesprek bent, is het onmogelijk deze rechten terug te krijgen.", + "You will not be able to undo this change as you are demoting yourself, if you are the last privileged user in the room it will be impossible to regain privileges.": "Zelfdegradatie is onomkeerbaar. Als u de laatste bevoorrechte gebruiker in het gesprek bent zullen deze rechten voorgoed verloren gaan.", "Unignore": "Niet meer negeren", "Ignore": "Negeren", "Jump to read receipt": "Naar het laatst gelezen bericht gaan", @@ -952,7 +952,7 @@ "User %(userId)s is already in the room": "De gebruiker %(userId)s is al aanwezig", "User %(user_id)s does not exist": "Er bestaat geen gebruiker ‘%(user_id)s’", "User %(user_id)s may or may not exist": "Er bestaat mogelijk geen gebruiker ‘%(user_id)s’", - "The user must be unbanned before they can be invited.": "De gebruiker kan niet uitgenodigd worden voordat diens ban ongedaan is gemaakt.", + "The user must be unbanned before they can be invited.": "De gebruiker kan niet uitgenodigd worden voordat diens ban teniet is gedaan.", "Unknown server error": "Onbekende serverfout", "Use a few words, avoid common phrases": "Gebruik enkele woorden - maar geen bekende uitdrukkingen", "No need for symbols, digits, or uppercase letters": "Hoofdletters, cijfers of speciale tekens hoeven niet, mogen wel", @@ -1107,7 +1107,7 @@ "Language and region": "Taal en regio", "Theme": "Thema", "Account management": "Accountbeheer", - "Deactivating your account is a permanent action - be careful!": "Pas op! Het sluiten van uw account kan niet ongedaan gemaakt worden!", + "Deactivating your account is a permanent action - be careful!": "Pas op! Het sluiten van uw account is onherroepelijk!", "General": "Algemeen", "Legal": "Wettelijk", "Credits": "Met dank aan", @@ -1356,7 +1356,7 @@ "Adds a custom widget by URL to the room": "Voegt met een URL een aangepaste widget toe aan het gesprek", "Please supply a https:// or http:// widget URL": "Voer een https://- of http://-widget-URL in", "You cannot modify widgets in this room.": "U kunt de widgets in dit gesprek niet aanpassen.", - "%(senderName)s revoked the invitation for %(targetDisplayName)s to join the room.": "%(senderName)s heeft de uitnodiging voor %(targetDisplayName)s om toe te treden tot het gesprek ingetrokken.", + "%(senderName)s revoked the invitation for %(targetDisplayName)s to join the room.": "%(senderName)s heeft de uitnodiging aan %(targetDisplayName)s toe te treden tot het gesprek ingetrokken.", "Upgrade this room to the recommended room version": "Werk dit gesprek bij tot de aanbevolen versie", "This room is running room version , which this homeserver has marked as unstable.": "Dit gesprek draait op groepsgespreksversie , die door deze thuisserver als onstabiel is gemarkeerd.", "Upgrading this room will shut down the current instance of the room and create an upgraded room with the same name.": "Bijwerken zal de huidige versie van dit gesprek sluiten, en onder dezelfde naam een bijgewerkte versie starten.", @@ -1477,7 +1477,7 @@ "Cannot reach homeserver": "Kan thuisserver niet bereiken", "Ensure you have a stable internet connection, or get in touch with the server admin": "Zorg dat u een stabiele internetverbinding heeft, of neem contact op met de systeembeheerder", "Your Riot is misconfigured": "Uw Riot is onjuist geconfigureerd", - "Ask your Riot admin to check your config for incorrect or duplicate entries.": "Vraag uw Riot-beheerder om uw configuratie na te kijken op onjuiste of duplicate items.", + "Ask your Riot admin to check your config for incorrect or duplicate entries.": "Vraag uw Riot-beheerder uw configuratie na te kijken op onjuiste of dubbele items.", "Unexpected error resolving identity server configuration": "Onverwachte fout bij het oplossen van de identiteitsserverconfiguratie", "Use lowercase letters, numbers, dashes and underscores only": "Gebruik enkel letters, cijfers, streepjes en underscores", "Cannot reach identity server": "Kan identiteitsserver niet bereiken", @@ -1572,8 +1572,8 @@ "Use an identity server to invite by email. Click continue to use the default identity server (%(defaultIdentityServerName)s) or manage in Settings.": "Gebruik een identiteitsserver om uit te nodigen via e-mail. Klik op ‘Doorgaan’ om de standaardidentiteitsserver (%(defaultIdentityServerName)s) te gebruiken, of beheer de server in de instellingen.", "Use an identity server to invite by email. Manage in Settings.": "Gebruik een identiteitsserver om uit te nodigen via e-mail. Beheer de server in de instellingen.", "Multiple integration managers": "Meerdere integratiebeheerders", - "Send read receipts for messages (requires compatible homeserver to disable)": "Verstuur leesbevestigingen voor berichten (vereist compatibele thuisserver om uit te schakelen)", - "Accept to continue:": "Aanvaard om verder te gaan:", + "Send read receipts for messages (requires compatible homeserver to disable)": "Verstuur leesbevestigingen voor berichten (uitschakelen vereist een compatibele thuisserver)", + "Accept to continue:": "Aanvaard om door te gaan:", "ID": "ID", "Public Name": "Openbare naam", "Change identity server": "Identiteitsserver wisselen", @@ -1599,11 +1599,11 @@ "No recent messages by %(user)s found": "Geen recente berichten door %(user)s gevonden", "Try scrolling up in the timeline to see if there are any earlier ones.": "Probeer omhoog te scrollen in de tijdslijn om te kijken of er eerdere zijn.", "Remove recent messages by %(user)s": "Recente berichten door %(user)s verwijderen", - "You are about to remove %(count)s messages by %(user)s. This cannot be undone. Do you wish to continue?|other": "U staat op het punt %(count)s berichten door %(user)s te verwijderen. Dit kan niet ongedaan worden gemaakt. Wilt u doorgaan?", + "You are about to remove %(count)s messages by %(user)s. This cannot be undone. Do you wish to continue?|other": "U staat op het punt %(count)s berichten door %(user)s te verwijderen. Dit is onherroepelijk. Wilt u doorgaan?", "For a large amount of messages, this might take some time. Please don't refresh your client in the meantime.": "Bij een groot aantal berichten kan dit even duren. Herlaad uw cliënt niet gedurende deze tijd.", "Remove %(count)s messages|other": "%(count)s berichten verwijderen", "Deactivate user?": "Gebruiker deactiveren?", - "Deactivating this user will log them out and prevent them from logging back in. Additionally, they will leave all the rooms they are in. This action cannot be reversed. Are you sure you want to deactivate this user?": "Deze gebruiker deactiveren zal hem/haar afmelden en verhinderen dat hij/zij zich weer aanmeldt. Bovendien zal hij/zij alle gesprekken waaraan hij/zij deelneemt verlaten. Deze actie kan niet ongedaan worden gemaakt. Weet u zeker dat u deze gebruiker wilt deactiveren?", + "Deactivating this user will log them out and prevent them from logging back in. Additionally, they will leave all the rooms they are in. This action cannot be reversed. Are you sure you want to deactivate this user?": "Deze gebruiker deactiveren zal hem/haar afmelden en verhinderen dat hij/zij zich weer aanmeldt. Bovendien zal hij/zij alle gesprekken waaraan hij/zij deelneemt verlaten. Deze actie is onherroepelijk. Weet u zeker dat u deze gebruiker wilt deactiveren?", "Deactivate user": "Gebruiker deactiveren", "Remove recent messages": "Recente berichten verwijderen", "Bold": "Vet", @@ -1638,7 +1638,7 @@ "Explore rooms": "Gesprekken ontdekken", "Show previews/thumbnails for images": "Toon voorbeelden voor afbeeldingen", "Clear cache and reload": "Cache wissen en herladen", - "You are about to remove %(count)s messages by %(user)s. This cannot be undone. Do you wish to continue?|one": "U staat op het punt 1 bericht door %(user)s te verwijderen. Dit kan niet ongedaan gemaakt worden. Wilt u doorgaan?", + "You are about to remove %(count)s messages by %(user)s. This cannot be undone. Do you wish to continue?|one": "U staat op het punt 1 bericht door %(user)s te verwijderen. Dit is onherroepelijk. Wilt u doorgaan?", "Remove %(count)s messages|one": "1 bericht verwijderen", "%(count)s unread messages including mentions.|other": "%(count)s ongelezen berichten, inclusief vermeldingen.", "%(count)s unread messages.|other": "%(count)s ongelezen berichten.", @@ -1791,7 +1791,7 @@ "Compare unique emoji": "Vergelijk unieke emoji", "Compare a unique set of emoji if you don't have a camera on either device": "Vergelijk een unieke lijst met emoji als geen van beide apparaten een camera heeft", "Start": "Start", - "Securely cache encrypted messages locally for them to appear in search results.": "Sla versleutelde berichten beveiligd op om ze weer te geven in zoekresultaten.", + "Securely cache encrypted messages locally for them to appear in search results.": "Sla versleutelde berichten veilig lokaal op om ze doorzoekbaar te maken.", "Enable": "Inschakelen", "Connecting to integration manager...": "Verbinding maken met de integratiebeheerder…", "Cannot connect to integration manager": "Kan geen verbinding maken met de integratiebeheerder", @@ -1873,7 +1873,7 @@ "in secret storage": "in de sleutelopslag", "Secret storage public key:": "Sleutelopslag publieke sleutel:", "in account data": "in accountinformatie", - "Securely cache encrypted messages locally for them to appear in search results, using ": "Sla versleutelde berichten beveiligd op om ze weer te geven in de zoekresultaten, door gebruik te maken van ", + "Securely cache encrypted messages locally for them to appear in search results, using ": "Sla versleutelde berichten veilig lokaal op opdat ze doorzocht kunnen worden, middels ", " to store messages from ": " om berichten op te slaan van ", "Manage": "Beheren", "Connect this session to key backup before signing out to avoid losing any keys that may only be on this session.": "Verbind deze sessie met de sleutelback-up voordat u zich afmeldt. Dit voorkomt dat u sleutels verliest die alleen op deze sessie voorkomen.", @@ -1905,8 +1905,8 @@ "Show rooms with unread notifications first": "Gesprekken met ongelezen meldingen eerst tonen", "Show shortcuts to recently viewed rooms above the room list": "Snelkoppelingen naar de gesprekken die u recent heeft bekeken bovenaan de gesprekslijst weergeven", "Cancelling…": "Bezig met annuleren…", - "Riot is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom Riot Desktop with search components added.": "Riot beschikt niet over alle onderdelen die nodig zijn om versleutelde berichten veilig in het lokale cachegeheugen te bewaren. Als u deze functie wilt uittesten, kunt u een aangepaste versie van Riot Desktop compileren, waarbij de zoekonderdelen toegevoegd zijn.", - "Riot can't securely cache encrypted messages locally while running in a web browser. Use Riot Desktop for encrypted messages to appear in search results.": "Riot kan versleutelde berichten niet veilig bewaren in het lokale cachegeheugen wanneer het uitgevoerd wordt in een webbrowser. Gebruik Riot Desktop om versleutelde berichten in de zoekresultaten te laten verschijnen.", + "Riot is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom Riot Desktop with search components added.": "In Riot ontbreken enige modulen vereist voor het veilig lokaal bewaren van versleutelde berichten. Wilt u deze functie uittesten, compileer dan een aangepaste versie van Riot Desktop die de zoekmodulen bevat.", + "Riot can't securely cache encrypted messages locally while running in a web browser. Use Riot Desktop for encrypted messages to appear in search results.": "Als Riot in een webbrowser draait kan het versleutelde berichten niet veilig lokaal bewaren. Gebruik Riot Desktop om versleutelde berichten doorzoekbaar te maken.", "This session is not backing up your keys, but you do have an existing backup you can restore from and add to going forward.": "Deze sessie maakt geen back-ups van uw sleutels, maar u beschikt over een reeds bestaande back-up waaruit u kunt herstellen en waaraan u nieuwe sleutels vanaf nu kunt toevoegen.", "Backup key stored in secret storage, but this feature is not enabled on this session. Please enable cross-signing in Labs to modify key backup state.": "Er is een back-upsleutel opgeslagen in de geheime opslag, maar deze functie is niet ingeschakeld voor deze sessie. Schakel kruiselings ondertekenen in in de experimentele instellingen om de sleutelback-upstatus te wijzigen.", "Customise your experience with experimental labs features. Learn more.": "Personaliseer uw ervaring met experimentele functies. Klik hier voor meer informatie.", @@ -1952,7 +1952,7 @@ "Yours, or the other users’ session": "De sessie van uzelf of de andere gebruiker", "Not Trusted": "Niet vertrouwd", "%(name)s (%(userId)s) signed in to a new session without verifying it:": "%(name)s%(userId)s heeft zich aangemeld bij een nieuwe sessie zonder deze te verifiëren:", - "Ask this user to verify their session, or manually verify it below.": "Vraag deze gebruiker om zijn/haar sessie te verifiëren, of verifieer deze hieronder handmatig.", + "Ask this user to verify their session, or manually verify it below.": "Vraag deze gebruiker haar/zijn sessie te verifiëren, of verifieer die hieronder handmatig.", "Done": "Klaar", "Manually Verify": "Handmatig verifiëren", "Trusted": "Vertrouwd", @@ -2028,10 +2028,10 @@ "More options": "Meer opties", "Language Dropdown": "Taalselectie", "Destroy cross-signing keys?": "Sleutels voor kruiselings ondertekenen verwijderen?", - "Deleting cross-signing keys is permanent. Anyone you have verified with will see security alerts. You almost certainly don't want to do this, unless you've lost every device you can cross-sign from.": "Het verwijderen van sleutels voor kruiselings ondertekenen kan niet ongedaan gemaakt worden. Iedereen waarmee u geverifieerd heeft zal beveiligingswaarschuwingen te zien krijgen. U wilt dit hoogstwaarschijnlijk niet doen, tenzij u alle apparaten heeft verloren waarmee u kruiselings kon ondertekenen.", + "Deleting cross-signing keys is permanent. Anyone you have verified with will see security alerts. You almost certainly don't want to do this, unless you've lost every device you can cross-sign from.": "Het verwijderen van sleutels voor kruiselings ondertekenen is onherroepelijk. Iedereen waarmee u geverifieerd heeft zal beveiligingswaarschuwingen te zien krijgen. U wilt dit hoogstwaarschijnlijk niet doen, tenzij u alle apparaten heeft verloren waarmee u kruiselings kon ondertekenen.", "Clear cross-signing keys": "Sleutels voor kruiselings ondertekenen wissen", "Clear all data in this session?": "Alle gegevens in deze sessie verwijderen?", - "Clearing all data from this session is permanent. Encrypted messages will be lost unless their keys have been backed up.": "Het verwijderen van alle gegevens in deze sessie kan niet ongedaan gemaakt worden. Versleutelde berichten zullen verloren gaan, tenzij u een back-up van hun sleutels heeft.", + "Clearing all data from this session is permanent. Encrypted messages will be lost unless their keys have been backed up.": "Het verwijderen van alle gegevens in deze sessie is onherroepelijk. Versleutelde berichten zullen verloren gaan, tenzij u een back-up van hun sleutels heeft.", "Verify session": "Sessie verifiëren", "To verify that this session can be trusted, please check that the key you see in User Settings on that device matches the key below:": "Controleer of de sleutel in de gebruikersinstellingen op het apparaat overeenkomt met onderstaande sleutel om te verifiëren dat de sessie vertrouwd kan worden:", "To verify that this session can be trusted, please contact its owner using some other means (e.g. in person or a phone call) and ask them whether the key they see in their User Settings for this session matches the key below:": "Neem contact op met de eigenaar op een andere manier (bv. onder vier ogen of met een telefoongesprek) en vraag of de sleutel in zijn/haar gebruikersinstellingen overeenkomt met onderstaande sleutel om te verifiëren dat de sessie vertrouwd kan worden:", @@ -2209,5 +2209,14 @@ "Verify the new login accessing your account: %(name)s": "Verifieer de nieuwe aanmelding op uw account: %(name)s", "Confirm your account deactivation by using Single Sign On to prove your identity.": "Bevestig uw intentie deze account te sluiten door met Single Sign On uw identiteit te bewijzen.", "Are you sure you want to deactivate your account? This is irreversible.": "Weet u zeker dat u uw account wil sluiten? Dit is onomkeerbaar.", - "Confirm account deactivation": "Bevestig accountsluiting" + "Confirm account deactivation": "Bevestig accountsluiting", + "Room name or address": "Gespreksnaam of -adres", + "Joins room with given address": "Treedt tot het gesprek met het opgegeven adres toe", + "Unrecognised room address:": "Gespreksadres niet herkend:", + "Help us improve Riot": "Help ons Riot nog beter te maken", + "Send anonymous usage data which helps us improve Riot. This will use a cookie.": "Stuur anonieme gebruiksinformatie waarmee we Riot kunnen verbeteren. Dit plaatst een cookie.", + "I want to help": "Ik wil helpen", + "Your homeserver has exceeded its user limit.": "Uw thuisserver heeft het maximaal aantal gebruikers overschreden.", + "Your homeserver has exceeded one of its resource limits.": "Uw thuisserver heeft een van zijn limieten overschreden.", + "Ok": "Oké" } diff --git a/src/i18n/strings/nn.json b/src/i18n/strings/nn.json index 16d2fd276d..8a5407967a 100644 --- a/src/i18n/strings/nn.json +++ b/src/i18n/strings/nn.json @@ -13,7 +13,7 @@ "Answer": "Svar", "You are already in a call.": "Du er allereie i ei samtale.", "VoIP is unsupported": "VoIP er ikkje støtta", - "You cannot place VoIP calls in this browser.": "Du kan ikkje utføre med anrop med VoIP i denne nettlesaren.", + "You cannot place VoIP calls in this browser.": "Du kan ikkje utføra samtalar med VoIP i denne nettlesaren.", "You cannot place a call with yourself.": "Du kan ikkje samtala med deg sjølv.", "Could not connect to the integration server": "Kunne ikkje kopla til integreringstenaren", "Call in Progress": "Ei Samtale er i Gang", @@ -167,7 +167,7 @@ "%(widgetName)s widget added by %(senderName)s": "%(widgetName)s-widget lagt til av %(senderName)s", "%(widgetName)s widget removed by %(senderName)s": "%(widgetName)s widget fjerna av %(senderName)s", "Failure to create room": "Klarte ikkje å laga rommet", - "Server may be unavailable, overloaded, or you hit a bug.": "Serveren er kanskje utilgjengeleg, overlasta elles så traff du ein bug.", + "Server may be unavailable, overloaded, or you hit a bug.": "Tenaren er kanskje utilgjengeleg, overlasta elles så traff du ein bug.", "Send anyway": "Send likevel", "Send": "Send", "Unnamed Room": "Rom utan namn", @@ -305,7 +305,7 @@ "%(userName)s (power %(powerLevelNumber)s)": "%(userName)s (tilgangsnivå %(powerLevelNumber)s)", "Attachment": "Vedlegg", "Hangup": "Legg på", - "Voice call": "Taleanrop", + "Voice call": "Talesamtale", "Video call": "Videosamtale", "Upload file": "Last opp fil", "Send an encrypted reply…": "Send eit kryptert svar…", @@ -762,7 +762,7 @@ "%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|other": "Send alle på nytt eller avbryt alle. Du kan og markere enkelte meldingar for å sende på nytt eller avbryte.", "%(count)s Resend all or cancel all now. You can also select individual messages to resend or cancel.|one": "Send melding på nytt eller avbryt.", "Connectivity to the server has been lost.": "Tilkoplinga til tenaren vart tapt.", - "Sent messages will be stored until your connection has returned.": "Sendte meldingar vil blir lagra lokalt fram til nettverket er oppe igjen.", + "Sent messages will be stored until your connection has returned.": "Sende meldingar vil lagrast lokalt fram til nettverket er oppe att.", "Active call": "Pågåande samtale", "There's no one else here! Would you like to invite others or stop warning about the empty room?": "Det er ingen andre her! Vil du invitera andre eller skru av varselet om det tomme rommet??", "You seem to be uploading files, are you sure you want to quit?": "Det ser ut til at du lastar opp filer, er du sikker på at du vil avslutte?", @@ -825,8 +825,8 @@ "Incorrect username and/or password.": "Feil brukarnamn og/eller passord.", "Please note you are logging into the %(hs)s server, not matrix.org.": "Merk deg at du loggar inn på %(hs)s-tenaren, ikkje matrix.org.", "The phone number entered looks invalid": "Det innskrivne telefonnummeret virkar å vere ugyldig", - "Error: Problem communicating with the given homeserver.": "Feil: Det gjekk ikkje an å kommunisere med den spesifiserte heimeserveren.", - "Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or enable unsafe scripts.": "Kan ikkje koble til heimeserveren via HTTP fordi URL-adressa i nettlesaren er HTTPS. Bruk HTTPS, eller aktiver usikre skript.", + "Error: Problem communicating with the given homeserver.": "Feil: Det gjekk ikkje an å kommunisera med den spesifiserte heimetenaren.", + "Can't connect to homeserver via HTTP when an HTTPS URL is in your browser bar. Either use HTTPS or enable unsafe scripts.": "Kan ikkje kobla til heimetenaren via HTTP fordi URL-adressa i nettlesaren er HTTPS. Bruk HTTPS, eller aktiver usikre skript.", "Can't connect to homeserver - please check your connectivity, ensure your homeserver's SSL certificate is trusted, and that a browser extension is not blocking requests.": "Kan ikkje kopla til heimtenaren - ver venleg og sjekk tilkoplinga di, og sjå til at heimtenaren din sitt CCL-sertifikat er stolt på og at ein nettlesartillegg ikkje hindrar førespurnader.", "Failed to fetch avatar URL": "Klarte ikkje å henta avatar-URLen", "Set a display name:": "Set eit visningsnamn:", @@ -894,7 +894,7 @@ "Clear filter": "Tøm filter", "Profile": "Brukar", "Access Token:": "Tilgangs-token:", - "This homeserver doesn't offer any login flows which are supported by this client.": "Heimeserveren tilbyr ingen påloggingsmetodar som er støtta av denne klienten.", + "This homeserver doesn't offer any login flows which are supported by this client.": "Heimetenaren tilbyr ingen innloggingsmetodar som er støtta av denne klienten.", "Claimed Ed25519 fingerprint key": "Gjorde krav på Ed25519-fingeravtrykksnøkkel", "Export room keys": "Eksporter romnøklar", "Export": "Eksporter", @@ -915,11 +915,11 @@ "Whether or not you're logged in (we don't record your username)": "Uansett om du er innlogga eller ikkje (så lagrar vi ikkje brukarnamnet ditt)", "The file '%(fileName)s' exceeds this homeserver's size limit for uploads": "Fila %(fileName)s er større enn heimetenaren si grense for opplastningar", "Unable to load! Check your network connectivity and try again.": "Klarte ikkje lasta! Sjå på nettilkoplinga di og prøv igjen.", - "Your Riot is misconfigured": "Riot-klienten din er feilkonfiguert", + "Your Riot is misconfigured": "Riot-klienten din er sett opp feil", "Sign In": "Logg inn", "Explore rooms": "Utforsk romma", - "Your message wasn't sent because this homeserver has hit its Monthly Active User Limit. Please contact your service administrator to continue using the service.": "Meldingen din vart ikkje sent for denne heimeserveren har nådd grensa for maksimalt aktive brukarar pr. månad. Kontakt systemadministratoren for å kunne vidare nytte denne tenesten.", - "Your message wasn't sent because this homeserver has exceeded a resource limit. Please contact your service administrator to continue using the service.": "Denne meldingen vart ikkje sendt fordi heimeserveren har nådd grensa for tilgjengelege systemressursar. Kontakt systemadministratoren for å vidare nytte denne tenesten.", + "Your message wasn't sent because this homeserver has hit its Monthly Active User Limit. Please contact your service administrator to continue using the service.": "Meldinga di vart ikkje send, for denne heimetenaren har nådd grensa for maksimalt aktive brukarar pr. månad. Kontakt systemadministratoren for å vidare nytte denne tenesta.", + "Your message wasn't sent because this homeserver has exceeded a resource limit. Please contact your service administrator to continue using the service.": "Denne meldingen vart ikkje send fordi heimetenaren har nådd grensa for tilgjengelege systemressursar. Kontakt systemadministratoren for å vidare nytta denne tenesta.", "Add room": "Legg til rom", "You have %(count)s unread notifications in a prior version of this room.|other": "Du har %(count)s uleste varslingar i ein tidligare versjon av dette rommet.", "You have %(count)s unread notifications in a prior version of this room.|one": "Du har %(count)s ulest varsel i ein tidligare versjon av dette rommet.", @@ -928,26 +928,26 @@ "Could not load user profile": "Klarde ikkje å laste brukarprofilen", "Your Matrix account on %(serverName)s": "Din Matrix-konto på %(serverName)s", "Your Matrix account on ": "Din Matrix-konto på ", - "No identity server is configured: add one in server settings to reset your password.": "Ingen identitetsserver er konfigurert: legg til ein i innstillingane for å nullstille passordet ditt.", + "No identity server is configured: add one in server settings to reset your password.": "Ingen identitetstenar er satt opp: legg til ein i innstillingane for å nullstille passordet ditt.", "Sign in instead": "Logg inn istaden", "A verification email will be sent to your inbox to confirm setting your new password.": "For å stadfeste tilbakestilling av passordet, vil ein e-post vil bli sendt til din innboks.", "Your password has been reset.": "Passodet ditt vart nullstilt.", "Set a new password": "Sett nytt passord", - "Invalid homeserver discovery response": "Ugyldig svar frå heimeserveren (discovery response)", - "Failed to get autodiscovery configuration from server": "Kladte ikkje å hente automatisk oppsett frå server", - "Invalid base_url for m.homeserver": "Ugyldig base_url for m.homeserver", - "Homeserver URL does not appear to be a valid Matrix homeserver": "URL-adressa virkar ikkje til å vere ein gyldig Matrix-heimeserver", - "Invalid identity server discovery response": "Ugyldig svar frå identitetsserveren (discovery response)", - "Invalid base_url for m.identity_server": "Ugyldig base_url for m.identity_server", - "Identity server URL does not appear to be a valid identity server": "URL-adressa virkar ikkje til å vere ein gyldig identitetsserver", + "Invalid homeserver discovery response": "Feil svar frå heimetenaren (discovery response)", + "Failed to get autodiscovery configuration from server": "Klarde ikkje å hente automatisk oppsett frå tenaren", + "Invalid base_url for m.homeserver": "Feil base_url for m.homeserver", + "Homeserver URL does not appear to be a valid Matrix homeserver": "URL-adressa virkar ikkje til å vere ein gyldig Matrix-heimetenar", + "Invalid identity server discovery response": "Feil svar frå identitetstenaren (discovery response)", + "Invalid base_url for m.identity_server": "Feil base_url for m.identity_server", + "Identity server URL does not appear to be a valid identity server": "URL-adressa virkar ikkje til å vere ein gyldig identitetstenar", "General failure": "Generell feil", - "This homeserver does not support login using email address.": "Denne heimeserveren støttar ikkje innloggingar med e-postadresser.", + "This homeserver does not support login using email address.": "Denne heimetenaren støttar ikkje innloggingar med e-postadresser.", "Please contact your service administrator to continue using this service.": "Kontakt din systemadministrator for å vidare å bruke tenesta.", "This account has been deactivated.": "Denne kontoen har blitt deaktivert.", - "Failed to perform homeserver discovery": "Fekk ikkje til å utforske heimeserveren", + "Failed to perform homeserver discovery": "Fekk ikkje til å utforska heimetenaren", "Sign in with single sign-on": "Logg på med Single-Sign-On", "Create account": "Lag konto", - "Registration has been disabled on this homeserver.": "Registrering er deaktivert på denne heimeserveren.", + "Registration has been disabled on this homeserver.": "Registrering er skrudd av for denne heimetenaren.", "Unable to query for supported registration methods.": "Klarte ikkje å spørre etter støtta registreringsmetodar.", "Your new account (%(newAccountId)s) is registered, but you're already logged into a different account (%(loggedInUserId)s).": "Kontoen din %(newAccountId)s er no registrert, men du er frå tidligare logga på med ein annan konto (%(loggedInUserId)s).", "Continue with previous account": "Fortsett med tidligare konto", @@ -955,7 +955,7 @@ "You can now close this window or log in to your new account.": "Du kan lukke dette vindauget ellerlogge inn med din nye konto.", "Registration Successful": "Registrering fullført", "Create your account": "Lag din konto", - "Failed to re-authenticate due to a homeserver problem": "Fekk ikkje til å re-authentisere grunna ein feil på heimeserveren", + "Failed to re-authenticate due to a homeserver problem": "Fekk ikkje til å re-authentisere grunna ein feil på heimetenaren", "Failed to re-authenticate": "Fekk ikkje til å re-autentisere", "Enter your password to sign in and regain access to your account.": "Skriv inn ditt passord for å logge på og ta tilbake tilgang til kontoen din.", "Forgotten your password?": "Gløymt passord ?", @@ -1007,14 +1007,14 @@ "Add Email Address": "Legg til e-postadresse", "Add Phone Number": "Legg til telefonnummer", "Call failed due to misconfigured server": "Kallet gjekk gale fordi tenaren er oppsatt feil", - "Please ask the administrator of your homeserver (%(homeserverDomain)s) to configure a TURN server in order for calls to work reliably.": "Spør administratoren for din heimetenar%(homeserverDomain)s om å setje opp ein \"TURN-server\" slik at heimetenaren svarar korrekt.", + "Please ask the administrator of your homeserver (%(homeserverDomain)s) to configure a TURN server in order for calls to work reliably.": "Spør administratoren for din heimetenar%(homeserverDomain)s om å setje opp ein \"TURN-server\" slik at talesamtalar fungerer på rett måte.", "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.": "Alternativt, kan du prøva å nytta den offentlege tenaren på turn.matrix.org, men det kan vera mindre stabilt og IP-adressa di vil bli delt med den tenaren. Du kan og endra på det under Innstillingar.", "Try using turn.matrix.org": "Prøv med å nytta turn.matrix.org", "A conference call could not be started because the integrations server is not available": "Ein konferansesamtale kunne ikkje starta fordi integrasjons-tenaren er utilgjengeleg", "Replying With Files": "Send svar med filer", "At this time it is not possible to reply with a file. Would you like to upload this file without replying?": "Nett no er det ikkje mogleg å senda svar med ei fil. Vil du lasta opp denne fila utan å senda svaret?", "The file '%(fileName)s' failed to upload.": "Fila '%(fileName)s' vart ikkje lasta opp.", - "The server does not support the room version specified.": "Serveren støttar ikkje den spesifikke versjonen av rommet.", + "The server does not support the room version specified.": "Tenaren støttar ikkje den spesifikke versjonen av rommet.", "Name or Matrix ID": "Namn eller Matrix ID", "Registration Required": "Registrering er obligatorisk", "You need to register to do this. Would you like to register now?": "Du må registrera for å gjera dette. Ynskjer du å registrera no?", @@ -1062,13 +1062,13 @@ "Encryption upgrade available": "Kryptering kan oppgraderast", "Set up encryption": "Sett opp kryptering", "Unverified session": "Uverifisert sesjon", - "Identity server has no terms of service": "Identitetsserveren manglar bruksvilkår", - "This action requires accessing the default identity server to validate an email address or phone number, but the server does not have any terms of service.": "Denne handlinga krev kommunikasjon mot (standard identitetsserver) for å verifisere e-post eller telefonnummer, men serveren manglar bruksvilkår.", - "Only continue if you trust the owner of the server.": "Gå vidare så lenge du har tillit til eigar av serveren.", + "Identity server has no terms of service": "Identitetstenaren manglar bruksvilkår", + "This action requires accessing the default identity server to validate an email address or phone number, but the server does not have any terms of service.": "Denne handlinga krev kommunikasjon mot (standard identitetstenar) for å verifisere e-post eller telefonnummer, men tenaren manglar bruksvilkår.", + "Only continue if you trust the owner of the server.": "Gå vidare så lenge du har tillit til eigar av tenaren.", "Trust": "Tillat", "Custom (%(level)s)": "Tilpassa (%(level)s)", "Error upgrading room": "Feil ved oppgradering av rom", - "Double check that your server supports the room version chosen and try again.": "Sjekk at server støttar romversjon, og prøv på nytt.", + "Double check that your server supports the room version chosen and try again.": "Sjekk at tenar støttar denne romversjonen, og prøv på nytt.", "Verifies a user, session, and pubkey tuple": "Verifiser brukar, økt eller public-key objekt (pubkey tuple)", "Unknown (user, session) pair:": "Ukjent (brukar,økt) par:", "Session already verified!": "Sesjon er tidligare verifisert!", @@ -1094,13 +1094,13 @@ "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.": "%(senderName)s la til %(addedAddresses)s og tok vekk %(removedAddresses)s som adresser for dette rommet.", "%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s satte standardadressa for dette rommet til %(address)s.", "%(senderName)s removed the main address for this room.": "%(senderName)s fjerna standardadressa for dette rommet.", - "%(senderName)s placed a voice call.": "%(senderName)s starta eit taleanrop.", - "%(senderName)s placed a voice call. (not supported by this browser)": "%(senderName)s starta eit taleanrop. (ikkje støtta av denne nettlesaren)", + "%(senderName)s placed a voice call.": "%(senderName)s starta ein talesamtale.", + "%(senderName)s placed a voice call. (not supported by this browser)": "%(senderName)s starta ein talesamtale. (ikkje støtta av denne nettlesaren)", "%(senderName)s placed a video call.": "%(senderName)s starta ein videosamtale.", "%(senderName)s placed a video call. (not supported by this browser)": "%(senderName)s starta ein videosamtale. (ikkje støtta av denne nettlesaren)", "%(senderName)s revoked the invitation for %(targetDisplayName)s to join the room.": "%(senderName)s trekte tilbake invitasjonen for at %(targetDisplayName)s kan bli medlem i rommet.", "You are an administrator of this community. You will not be able to rejoin without an invite from another administrator.": "Du er administrator for dette fellesskapet. Du kan ikkje melde deg inn igjen utan at du har invitasjon frå ein annan administrator.", - "Want more than a community? Get your own server": "Treng du meir enn eit fellesskap? Skaff din eigen server", + "Want more than a community? Get your own server": "Treng du meir enn eit fellesskap? Skaff din eigen tenar", "Sign In or Create Account": "Logg inn eller opprett konto", "Create Account": "Opprett konto", "Sends the given emote coloured as a rainbow": "Sendar emojien med regnbogefargar", @@ -1183,7 +1183,7 @@ "You're previewing %(roomName)s. Want to join it?": "Du førehandsviser %(roomName)s. Ynskjer du å bli med ?", "%(roomName)s can't be previewed. Do you want to join it?": "%(roomName)s kan ikkje førehandsvisast. Ynskjer du å bli med ?", "This room doesn't exist. Are you sure you're at the right place?": "Dette rommet eksisterar ikkje. Er du sikker på at du er på rett plass?", - "Try again later, or ask a room admin to check if you have access.": "Prøv igjen seinare, eller spør ein rom-administrator om du har tilgang.", + "Try again later, or ask a room admin to check if you have access.": "Prøv om att seinare, eller spør ein rom-administrator om du har tilgang.", "Never lose encrypted messages": "Aldri la krypterte meldingar gå tapt", "Messages in this room are secured with end-to-end encryption. Only you and the recipient(s) have the keys to read these messages.": "Meldingane i rommet er sikra med ende-til-ende kryptering. Berre du og mottakarane har krypteringsnøklane for desse meldingane.", "Securely back up your keys to avoid losing them. Learn more.": "Kopier nøklane dine for å unngå i miste dei. Les meir.", @@ -1197,13 +1197,13 @@ "Hint: Begin your message with // to start it with a slash.": "Hint: Start meldinga med // for å starte den med skråstrek.", "Send as message": "Send som melding", "Failed to revoke invite": "Fekk ikkje til å trekke invitasjonen", - "Could not revoke the invite. The server may be experiencing a temporary problem or you do not have sufficient permissions to revoke the invite.": "Fekk ikkje til å trekke invitasjonen. Det kan ha oppstått eit midlertidig problem på serveren, eller så har ikkje du tilstrekkelege rettigheiter for å trekke invitasjonen.", + "Could not revoke the invite. The server may be experiencing a temporary problem or you do not have sufficient permissions to revoke the invite.": "Fekk ikkje til å ta attende invitasjonen. Det kan ha oppstått ein mellombels feil på tenaren, eller så har ikkje du tilstrekkelege rettar for å ta attende invitasjonen.", "Revoke invite": "Trekk invitasjon", "Invited by %(sender)s": "Invitert av %(sender)s", "Mark all as read": "Merk alle som lesne", "Error updating main address": "Feil under oppdatering av hovedadresse", - "There was an error updating the room's main address. It may not be allowed by the server or a temporary failure occurred.": "Det skjedde ein feil under oppdatering av hovedadressa for rommet. Det kan hende at dette er midlertidig, eller at det ikkje er tillate på serveren.", - "There was an error updating the room's alternative addresses. It may not be allowed by the server or a temporary failure occurred.": "Feil under oppdatering av sekundæradresse. Det kan hende at dette er midlertidig, eller at det ikkje er tillate på serveren.", + "There was an error updating the room's main address. It may not be allowed by the server or a temporary failure occurred.": "Det skjedde ein feil under oppdatering av hovudadressa for rommet. Det kan hende at dette er ein mellombels feil, eller at det ikkje er tillate på tenaren.", + "There was an error updating the room's alternative addresses. It may not be allowed by the server or a temporary failure occurred.": "Feil under oppdatering av alternativ adresse. Det kan hende at dette er mellombels, eller at det ikkje er tillate på tenaren.", "Error creating alias": "Feil under oppretting av alias", "There was an error creating that alias. It may not be allowed by the server or a temporary failure occurred.": "Det skjedde ein feil under oppretting av dette aliaset. Det kan hende at dette er midlertidig, eller at det ikkje er tillate på serveren.", "You don't have permission to delete the alias.": "Du har ikkje lov å slette aliaset.", @@ -1212,14 +1212,14 @@ "Main address": "Hovudadresse", "Local address": "Lokal adresse", "Published Addresses": "Publisert adresse", - "Published addresses can be used by anyone on any server to join your room. To publish an address, it needs to be set as a local address first.": "Publiserte adresser kan bli brukt av alle uansett server for å bli med i rommet. For å publisere ei adresse, må den vere sett som ei lokal adresse fyrst.", + "Published addresses can be used by anyone on any server to join your room. To publish an address, it needs to be set as a local address first.": "Publiserte adresser kan bli brukt av alle uansett tenar for å bli med i rommet. For å publisera ei adresse, må den vere sett som ei lokal adresse fyrst.", "Other published addresses:": "Andre publiserte adresser:", "No other published addresses yet, add one below": "Ingen publiserte adresser til no, legg til ei under", - "New published address (e.g. #alias:server)": "Ny publisert adresse (t.d. #alias:server)", + "New published address (e.g. #alias:server)": "Ny publisert adresse (t.d. #alias:tenar)", "Local Addresses": "Lokale adresser", - "Set addresses for this room so users can find this room through your homeserver (%(localDomain)s)": "Sett adresse for dette rommet, slik at brukarar kan finne rommet på din heimeserver (%(localDomain)s)", + "Set addresses for this room so users can find this room through your homeserver (%(localDomain)s)": "Sett adresse for dette rommet, slik at brukarar kan finne rommet på din heimetenar (%(localDomain)s)", "Error updating flair": "Oppdatering av etikett gjekk gale", - "There was an error updating the flair for this room. The server may not allow it or a temporary error occurred.": "Feil under oppdatering av etikett for dette rommet. Dette kan vere deaktivert på server , eller så oppstod det ein feil.", + "There was an error updating the flair for this room. The server may not allow it or a temporary error occurred.": "Feil under oppdatering av etikett for dette rommet. Dette kan vere deaktivert på tenaren, eller så oppstod det ein feil.", "Room Name": "Romnamn", "Room Topic": "Romemne", "Room avatar": "Rom-avatar", @@ -1231,7 +1231,7 @@ "Match system theme": "Følg systemtema", "Show shortcuts to recently viewed rooms above the room list": "Vis snarvegar til sist synte rom over romkatalogen", "Show hidden events in timeline": "Vis skjulte hendelsar i historikken", - "This is your list of users/servers you have blocked - don't leave the room!": "Dette er di liste over brukarar/serverar du har blokkert - ikkje forlat rommet!", + "This is your list of users/servers you have blocked - don't leave the room!": "Dette er di liste over brukarar/tenarar du har blokkert - ikkje forlat rommet!", "Upload": "Last opp", "Show less": "Vis mindre", "Show more": "Vis meir", @@ -1270,7 +1270,7 @@ "Select the roles required to change various parts of the room": "Juster roller som er påkrevd for å endre ulike deler av rommet", "Once enabled, encryption cannot be disabled.": "Etter aktivering, kan ikkje kryptering bli deaktivert.", "Your display name": "Ditt visningsnamn", - "Can't find this server or its room list": "Klarde ikkje å finne serveren eller romkatalogen til den", + "Can't find this server or its room list": "Klarde ikkje å finna tenaren eller romkatalogen til den", "Upload completed": "Opplasting fullført", "Cancelled signature upload": "Kansellerte opplasting av signatur", "Unabled to upload": "Klarte ikkje å laste opp", @@ -1290,7 +1290,7 @@ "Enable Emoji suggestions while typing": "Aktiver Emoji-forslag under skriving", "Show a placeholder for removed messages": "Vis ein plassholdar for sletta meldingar", "Show avatar changes": "Vis avatar-endringar", - "Show read receipts sent by other users": "Vis lest-rapportar sendt av andre brukarar", + "Show read receipts sent by other users": "Vis lese-rapportar sendt av andre brukarar", "Enable big emoji in chat": "Aktiver store emolji-ar i samtalen", "Send typing notifications": "Kringkast \"skriv...\"-status til andre", "Show typing notifications": "Vis \"skriv...\"-status frå andre", @@ -1321,7 +1321,7 @@ "Jump to start/end of the composer": "Hopp til start/slutt av teksteditoren", "Navigate composer history": "Naviger historikk for teksteditor", "Use Single Sign On to continue": "Bruk Single-sign-on for å fortsette", - "Confirm adding this email address by using Single Sign On to prove your identity.": "Stadfest at du legger til denne e-postadressa, ved å bruke Single-sign-on for å bevise identiteten din.", + "Confirm adding this email address by using Single Sign On to prove your identity.": "Stadfest at du legger til denne e-postadressa, ved å bruke Single-sign-on for å stadfeste identiteten din.", "Single Sign On": "Single-sign-on", "Review Sessions": "Sjå gjennom økter", "Capitalization doesn't help very much": "Store bokstavar hjelp dessverre lite", @@ -1330,7 +1330,7 @@ "Keep secret storage passphrase in memory for this session": "Hald passfrase for hemmeleg lager i systemminnet for denne økta", "Cross-signing and secret storage are enabled.": "Krysssignering og hemmeleg lager er aktivert.", "Your account has a cross-signing identity in secret storage, but it is not yet trusted by this session.": "Kontoen din har ein kryss-signert identitet det hemmelege lageret, økta di stolar ikkje på denne enno.", - "Cross-signing and secret storage are not yet set up.": "Krysssignering og hemmeleg lager er endå ikkje konfiguert.", + "Cross-signing and secret storage are not yet set up.": "Krysssignering og hemmeleg lager er endå ikkje sett opp.", "Reset cross-signing and secret storage": "Tilbakestill krysssignering og hemmeleg lager", "Bootstrap cross-signing and secret storage": "Førebur krysssignering og hemmeleg lager", "in secret storage": "i hemmeleg lager", @@ -1338,10 +1338,10 @@ "Secret Storage key format:": "Nøkkel-format for hemmeleg lager:", "Keyboard Shortcuts": "Tastatursnarvegar", "Ignored users": "Ignorerte brukarar", - "Add users and servers you want to ignore here. Use asterisks to have Riot match any characters. For example, @bot:* would ignore all users that have the name 'bot' on any server.": "Legg til brukarar og serverar du vil ignorera her. Bruk stjerne/wildcard (*) for at markere eitkvart teikn. Til dømes, @bot* vil ignorere alle brukarar med namn 'bot' på uansett server.", - "Server or user ID to ignore": "Server eller brukar-ID for å ignorere", + "Add users and servers you want to ignore here. Use asterisks to have Riot match any characters. For example, @bot:* would ignore all users that have the name 'bot' on any server.": "Legg til brukarar og tenarar du vil ignorera her. Bruk stjerne/wildcard (*) for at markere eitkvart teikn. Til dømes, @bot* vil ignorere alle brukarar med namn 'bot' på uansett tenar.", + "Server or user ID to ignore": "Tenar eller brukar-ID for å ignorere", "If this isn't what you want, please use a different tool to ignore users.": "Om det ikkje var dette du ville, bruk eit anna verktøy til å ignorera brukarar.", - "Enter the name of a new server you want to explore.": "Skriv inn namn på ny server du ynskjer å utforske.", + "Enter the name of a new server you want to explore.": "Skriv inn namn på ny tenar du ynskjer å utforske.", "Matrix rooms": "Matrix-rom", "If there is additional context that would help in analysing the issue, such as what you were doing at the time, room IDs, user IDs, etc., please include those things here.": "Om du har meir info rundt korleis problemet oppstod, som kva du prøvde å gjere på det tidspunktet, brukar-IDar m.m ,inkluder gjerne den informasjonen her.", "Topic (optional)": "Emne (valfritt)", @@ -1363,8 +1363,8 @@ "Help": "Hjelp", "Explore": "Utforsk", "%(creator)s created and configured the room.": "%(creator)s oppretta og konfiguerte dette rommet.", - "Riot failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "Riot klarde ikkje å hente protokolllister frå heimeserveren. Det kan hende at serveren er for gammal til å støtte tredjeparts-nettverk", - "The homeserver may be unavailable or overloaded.": "Heimeserveren kan vere overlasta eller utilgjengeleg.", + "Riot failed to get the protocol list from the homeserver. The homeserver may be too old to support third party networks.": "Riot klarde ikkje å hente protokolllister frå heimetenaren. Det kan hende at tenaren er for gammal til å støtte tredjeparts-nettverk", + "The homeserver may be unavailable or overloaded.": "Heimetenaren kan vere overlasta eller utilgjengeleg.", "Preview": "Førehandsvis", "View": "Vis", "Find a room…": "Finn eit rom…", @@ -1382,5 +1382,81 @@ "Unable to set up secret storage": "Oppsett av hemmeleg lager feila", "This session has detected that your recovery passphrase and key for Secure Messages have been removed.": "Denne økta har oppdaga at gjenopprettingspassfrasen og nøkkelen for sikre meldingar vart fjerna.", "Toggle microphone mute": "Slå av/på demping av mikrofon", - "Confirm": "Stadfest" + "Confirm": "Stadfest", + "Confirm adding email": "Stadfest at du ynskjer å legga til e-postadressa", + "Click the button below to confirm adding this email address.": "Trykk på knappen under for å stadfesta at du ynskjer å legga til denne e-postadressa.", + "Confirm adding this phone number by using Single Sign On to prove your identity.": "Stadfest dette telefonnummeret for å bruka Single-sign-on for å bevisa din identitet.", + "Confirm adding phone number": "Stadfest dette telefonnummeret", + "Click the button below to confirm adding this phone number.": "Trykk på knappen nedanfor for å legge til dette telefonnummeret.", + "Room name or address": "Romnamn eller adresse", + "%(name)s is requesting verification": "%(name)s spør etter verifikasjon", + "Use your account or create a new one to continue.": "Bruk kontoen din eller opprett ein ny for å halda fram.", + "Sends a message as html, without interpreting it as markdown": "Sender melding som HTML, utan å tolka den som markdown", + "Failed to set topic": "Fekk ikkje til å setta emne", + "Joins room with given address": "Legg saman rom med spesifisert adresse", + "Unrecognised room address:": "Rom-adressa vart ikkje kjend att:", + "Command failed": "Kommandoen feila", + "Could not find user in room": "Klarde ikkje å finna brukaren i rommet", + "Please supply a widget URL or embed code": "Oppgje ein widget-URL eller innebygd kode", + "Displays information about a user": "Viser informasjon om ein brukar", + "Send a bug report with logs": "Send ein feilrapport med loggar", + "Opens chat with the given user": "Opna ein samtale med den spesifiserte brukaren", + "Sends a message to the given user": "Send ein melding til den spesifiserte brukaren", + "%(senderDisplayName)s changed the room name from %(oldRoomName)s to %(newRoomName)s.": "%(senderDisplayName)s endra romnamnet frå %(oldRoomName)s til %(newRoomName)s.", + "%(senderName)s added the alternative addresses %(addresses)s for this room.|other": "%(senderName)s la til dei alternative adressene %(addresses)s for dette rommet.", + "%(senderName)s added the alternative addresses %(addresses)s for this room.|one": "%(senderName)s la til ei alternativ adresse %(addresses)s for dette rommet.", + "%(senderName)s removed the alternative addresses %(addresses)s for this room.|other": "%(senderName)s tok vekk dei alternative adressene %(addresses)s for dette rommet.", + "%(senderName)s removed the alternative addresses %(addresses)s for this room.|one": "%(senderName)s tok vekk den alternative adressa %(addresses)s for dette rommet.", + "%(senderName)s changed the alternative addresses for this room.": "%(senderName)s endre den alternative adressa for dette rommet.", + "%(senderName)s changed the main and alternative addresses for this room.": "%(senderName)s endra hovud- og alternativ-adressene for dette rommet.", + "%(senderName)s changed the addresses for this room.": "%(senderName)s endre adressene for dette rommet.", + "Review where you’re logged in": "Sjå over kvar du er logga inn", + "Later": "Seinare", + "Allow Peer-to-Peer for 1:1 calls": "Tillat peer-to-peer (P2P) for ein-til-ein samtalar", + "Never send encrypted messages to unverified sessions from this session": "Aldri send krypterte meldingar til ikkje-verifiserte sesjonar frå denne sesjonen", + "Never send encrypted messages to unverified sessions in this room from this session": "Aldri send krypterte meldingar i dette rommet til ikkje-verifiserte sesjonar frå denne sesjonen", + "Allow fallback call assist server turn.matrix.org when your homeserver does not offer one (your IP address would be shared during a call)": "Tillat å bruke assistansetenaren turn.matrix.org for talesamtalar viss heimetenaren din ikkje tilbyr dette (IP-adressa di vil bli delt under talesamtalen)", + "Enable message search in encrypted rooms": "Aktiver søk etter meldingar i krypterte rom", + "Secure messages with this user are end-to-end encrypted and not able to be read by third parties.": "Sikre meldingar med denne brukaren er ende-til-ende krypterte og kan ikkje lesast av tredjepart.", + "Public Name": "Offentleg namn", + "Are you sure? You will lose your encrypted messages if your keys are not backed up properly.": "Er du sikker? Alle dine krypterte meldingar vil gå tapt viss nøklane dine ikkje er sikkerheitskopierte.", + "Encrypted messages are secured with end-to-end encryption. Only you and the recipient(s) have the keys to read these messages.": "Krypterte meldingar er sikra med ende-til-ende kryptering. Berre du og mottakar(ane) har nøklane for å lese desse meldingane.", + "wait and try again later": "vent og prøv om att seinare", + "To report a Matrix-related security issue, please read the Matrix.org Security Disclosure Policy.": "For å rapportere eit Matrix-relatert sikkerheitsproblem, les Matrix.org sin Security Disclosure Policy.", + "Your server admin has disabled end-to-end encryption by default in private rooms & Direct Messages.": "Tenaradministratoren din har deaktivert ende-til-ende kryptering som standard i direktemeldingar og private rom.", + "Where you’re logged in": "Stader du er innlogga", + "Manage the names of and sign out of your sessions below or verify them in your User Profile.": "Handter namn på eller logg ut av sesjonane dine nedanfor eller verifiser dei under brukarprofilen din.", + "A session's public name is visible to people you communicate with": "Ein sesjon sitt offentlege namn, er synleg for andre du kommuniserar med", + "Reset": "Nullstill", + "Set a new custom sound": "Set ein ny tilpassa lyd", + "Once enabled, encryption for a room cannot be disabled. Messages sent in an encrypted room cannot be seen by the server, only by the participants of the room. Enabling encryption may prevent many bots and bridges from working correctly. Learn more about encryption.": "Når kryptering er aktivert for eit rom, kan ein ikkje deaktivere det. Meldingar som blir sende i eit kryptert rom kan ikkje bli lesne av tenaren, men berre av deltakarane i rommet. Aktivering av kryptering kan hindre mange botar og bruer frå å fungera på rett måte. Les meir om kryptering her.", + "Encrypted": "Kryptert", + "This room is end-to-end encrypted": "Dette rommet er ende-til-ende kryptert", + "Encrypted by an unverified session": "Kryptert av ein ikkje-verifisert sesjon", + "Encrypted by a deleted session": "Kryptert av ein sletta sesjon", + "Create room": "Lag rom", + "Messages in this room are end-to-end encrypted.": "Meldingar i dette rommet er ende-til-ende kryptert.", + "Messages in this room are not end-to-end encrypted.": "Meldingar i dette rommet er ikkje ende-til-ende kryptert.", + "In encrypted rooms, your messages are secured and only you and the recipient have the unique keys to unlock them.": "Når du nyttar krypterte rom er meldingane din sikra. Berre du og mottakaren har unike nøklar som kan gjere meldingane lesbare.", + "This client does not support end-to-end encryption.": "Denne klienten støttar ikkje ende-til-ende kryptering.", + "In encrypted rooms, verify all users to ensure it’s secure.": "Når du nyttar krypterte rom, verifiser alle brukarar for å vere trygg på at det er sikkert.", + "Messages in this room are end-to-end encrypted. Learn more & verify this user in their user profile.": "Meldingar i dette rommet er ende-til-ende krypterte. Meir om dette, samt verifisering av denne brukaren finn du under deira brukarprofil.", + "Join": "Bli med", + "Remove server": "Ta vekk tenar", + "Matrix": "Matrix", + "Add a new server": "Legg til ein ny tenar", + "Add a new server...": "Legg til ein ny tenar", + "Clearing all data from this session is permanent. Encrypted messages will be lost unless their keys have been backed up.": "Tømming av data frå denne sesjonen er permanent. Krypterte meldingar vil gå tapt med mindre krypteringsnøklane har blitt sikkerheitskopierte.", + "This room is private, and can only be joined by invitation.": "Dette rommet er privat, brukarar kan berre bli med viss dei har ein invitasjon", + "You can’t disable this later. Bridges & most bots won’t work yet.": "Du kan ikkje skru av dette seinare. Bruer og dei fleste botar vil ikkje fungere enno.", + "Enable end-to-end encryption": "Skru på ende-til-ende kryptering", + "Create a private room": "Lag eit privat rom", + "Make this room public": "Gjer dette rommet offentleg", + "Hide advanced": "Gøym avanserte alternativ", + "Show advanced": "Vis avanserte alternativ", + "Block users on other matrix homeservers from joining this room (This setting cannot be changed later!)": "Utesteng brukarar på andre Matrix heimetenarar frå å koma inn i rommet (Dette kan endrast seinare!)", + "I don't want my encrypted messages": "Eg treng ikkje mine krypterte meldingar", + "You'll lose access to your encrypted messages": "Du vil miste tilgangen til dine krypterte meldingar", + "No identity server is configured so you cannot add an email address in order to reset your password in the future.": "Ingen identitetstenar er konfiguert, så i framtida kan ikkje legge til ei e-postadresse for å nullstille passordet.", + "Join millions for free on the largest public server": "Kom ihop med millionar av andre på den største offentlege tenaren" } diff --git a/src/i18n/strings/sk.json b/src/i18n/strings/sk.json index 0fe60e4321..0756f8d3e8 100644 --- a/src/i18n/strings/sk.json +++ b/src/i18n/strings/sk.json @@ -1565,7 +1565,7 @@ "%(senderName)s removed the alternative addresses %(addresses)s for this room.|other": "%(senderName)s odstránil/a alternatívne adresy %(addresses)s pre túto miestnosť.", "%(senderName)s removed the alternative addresses %(addresses)s for this room.|one": "%(senderName)s odstránil/a alternatívnu adresu %(addresses)s pre túto miestnosť.", "%(senderName)s changed the alternative addresses for this room.": "%(senderName)s zmenil/a alternatívne adresy pre túto miestnosť.", - "%(senderName)s changed the main and alternative addresses for this room.": "%(senderName)s zmenil/a hlavnú a alternatívnu/e adresy pre túto miestnosť.", + "%(senderName)s changed the main and alternative addresses for this room.": "%(senderName)s zmenil/a hlavnú a alternatívne adresy pre túto miestnosť.", "%(senderName)s changed the addresses for this room.": "%(senderName)s zmenil/a adresy pre túto miestnosť.", "You signed in to a new session without verifying it:": "Prihlásili ste sa do novej relácie bez jej overenia:", "Verify your other session using one of the options below.": "Overte svoje ostatné relácie pomocou jednej z nižšie uvedených možností.", @@ -1708,7 +1708,7 @@ "Manage": "Spravovať", "Securely cache encrypted messages locally for them to appear in search results.": "Bezpečne cachovať šifrované správy lokálne, aby sa mohli zobraziť vo vyhľadávaní.", "Enable": "Povoliť", - "Riot is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom Riot Desktop with search components added.": "Riotu chýbajú niektoré komponenty potrebné na bezpečné cachovanie šifrovaných správ lokálne. Pokiaľ chcete experimentovať s touto funkciou, spravte si svoj vlastný Riot Desktop s pridanými vyhľadávacími komponentami.", + "Riot is missing some components required for securely caching encrypted messages locally. If you'd like to experiment with this feature, build a custom Riot Desktop with search components added.": "Riotu chýbajú niektoré komponenty potrebné na bezpečné cachovanie šifrovaných správ lokálne. Pokiaľ chcete experimentovať s touto funkciou, spravte si svoj vlastný Riot Desktop s pridanými vyhľadávacími komponentami.", "Riot can't securely cache encrypted messages locally while running in a web browser. Use Riot Desktop for encrypted messages to appear in search results.": "Riotu nemôže bezpečne cachovať šifrované správy lokálne keď beží v prehliadači. Použite Riot Desktop, aby sa šifrované správy zobrazili vo vyhľadávaní.", "This session is backing up your keys. ": "Táto relácia zálohuje vaše kľúče. ", "This session is not backing up your keys, but you do have an existing backup you can restore from and add to going forward.": "Táto relácia nezálohuje vaše kľúče, ale už máte jednu existujúcu zálohu z ktorej sa môžete obnoviť a postupne pridávať.", @@ -1727,5 +1727,17 @@ "Enable desktop notifications for this session": "Povoliť desktopové notifikácie pre túto reláciu", "Enable audible notifications for this session": "Povoliť zvukové notifikácie pre túto reláciu", "Size must be a number": "Veľkosť musí byť číslo", - "Custom font size can only be between %(min)s pt and %(max)s pt": "Vlastná veľkosť písma môže byť len v rozmedzí %(min)s pt až %(max)s pt" + "Custom font size can only be between %(min)s pt and %(max)s pt": "Vlastná veľkosť písma môže byť len v rozmedzí %(min)s pt až %(max)s pt", + "Help us improve Riot": "Pomôžte nám zlepšovať Riot", + "Send anonymous usage data which helps us improve Riot. This will use a cookie.": "Posielať anonymné dáta o používaní, ktoré nám pomôžu zlepšiť Riot. Toto bude vyžadovať sušienku.", + "I want to help": "Chcem pomôcť", + "Your homeserver has exceeded its user limit.": "Na vašom domovskom serveri bol prekročený limit počtu používateľov.", + "Your homeserver has exceeded one of its resource limits.": "Na vašom domovskom serveri bol prekročený jeden z limitov systémových zdrojov.", + "Contact your server admin.": "Kontaktujte svojho administrátora serveru.", + "Ok": "Ok", + "Set password": "Nastaviť heslo", + "To return to your account in future you need to set a password": "Aby ste sa k účtu mohli vrátiť aj neskôr, je potrebné nastaviť heslo", + "Restart": "Reštartovať", + "Upgrade your Riot": "Upgradujte svoj Riot", + "A new version of Riot is available!": "Nová verzia Riotu je dostupná!" } diff --git a/src/i18n/strings/sq.json b/src/i18n/strings/sq.json index 2acdf199c2..ed66bbb362 100644 --- a/src/i18n/strings/sq.json +++ b/src/i18n/strings/sq.json @@ -1382,7 +1382,7 @@ "Failed to revoke invite": "S’u arrit të shfuqizohej ftesa", "Revoke invite": "Shfuqizoje ftesën", "Invited by %(sender)s": "Ftuar nga %(sender)s", - "edited": "përpunoi", + "edited": "e përpunuar", "Maximize apps": "Maksimizoni aplikacione", "Rotate Left": "Rrotulloje Majtas", "Rotate counter-clockwise": "Rrotulloje në kah kundërorar", @@ -2470,5 +2470,31 @@ "Delete the room address %(alias)s and remove %(name)s from the directory?": "Të fshihet adresa e dhomës %(alias)s dhe të hiqet %(name)s nga drejtoria?", "delete the address.": "fshije adresën.", "Use a different passphrase?": "Të përdoret një frazëkalim tjetër?", - "New version available. Update now.": "Version i ri gati. Përditësojeni tani." + "New version available. Update now.": "Version i ri gati. Përditësojeni tani.", + "Your server admin has disabled end-to-end encryption by default in private rooms & Direct Messages.": "Përgjegjësi i shërbyesit tuaj ka çaktivizuar fshehtëzimin skaj-më-skaj, si parazgjedhje, në dhoma private & Mesazhe të Drejtpërdrejtë.", + "Emoji picker": "Zgjedhës emoji-sh", + "People": "Persona", + "Show %(n)s more": "Shfaq %(n)s të tjerë", + "Recently Direct Messaged": "Me Mesazhe të Drejtpërdrejtë Së Fundi", + "Switch to light mode": "Kalo nën mënyrën e çelët", + "Switch to dark mode": "Kalo nën mënyrën e errët", + "Switch theme": "Ndërroni temën", + "Security & privacy": "Siguri & privatësi", + "All settings": "Krejt rregullimet", + "Archived rooms": "Dhoma të arkivuara", + "Feedback": "Mendime", + "Account settings": "Rregullime llogarie", + "sent an image.": "dërgoi një figurë.", + "You: %(message)s": "Ju: %(message)s", + "No recently visited rooms": "S’ka dhoma të vizituara së fundi", + "Sort by": "Renditi sipas", + "Unread rooms": "Dhoma të palexuara", + "Always show first": "Shfaq përherë të parën", + "Show": "Shfaqe", + "Message preview": "Paraparje mesazhi", + "List options": "Mundësi liste", + "Show %(count)s more|other": "Shfaq %(count)s të tjera", + "Show %(count)s more|one": "Shfaq %(count)s tjetër", + "Leave Room": "Dil Nga Dhoma", + "Room options": "Mundësi dhome" } diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json index 0d89863155..65f90f2c13 100644 --- a/src/i18n/strings/zh_Hant.json +++ b/src/i18n/strings/zh_Hant.json @@ -2480,5 +2480,32 @@ "Restart": "重新啟動", "Upgrade your Riot": "升級您的 Riot", "A new version of Riot is available!": "已有新版的 Riot!", - "New version available. Update now.": "有可用的新版本。立刻更新。" + "New version available. Update now.": "有可用的新版本。立刻更新。", + "Emoji picker": "顏文字挑選器", + "Your server admin has disabled end-to-end encryption by default in private rooms & Direct Messages.": "您的伺服器管理員已在私人聊天室與直接訊息中預設停用端到端加密。", + "Show %(n)s more": "顯示另外 %(n)s 個", + "People": "夥伴", + "Switch to light mode": "切換至淺色模式", + "Switch to dark mode": "切換至深色模式", + "Switch theme": "切換佈景主題", + "Security & privacy": "安全性與隱私權", + "All settings": "所有設定", + "Archived rooms": "已封存的聊天室", + "Feedback": "回饋", + "Account settings": "帳號設定", + "No recently visited rooms": "沒有最近造訪過的聊天室", + "Sort by": "排序方式", + "Unread rooms": "未讀聊天室", + "Always show first": "一律先顯示", + "Show": "顯示", + "Message preview": "訊息預覽", + "List options": "列表選項", + "Show %(count)s more|other": "再顯示 %(count)s 個", + "Show %(count)s more|one": "再顯示 %(count)s 個", + "Leave Room": "離開聊天室", + "Room options": "聊天室選項", + "sent an image.": "傳送圖片。", + "You: %(message)s": "您:%(message)s", + "Activity": "活動", + "A-Z": "A-Z" } diff --git a/src/stores/SetupEncryptionStore.js b/src/stores/SetupEncryptionStore.js index ae1f998b02..cc64e24a03 100644 --- a/src/stores/SetupEncryptionStore.js +++ b/src/stores/SetupEncryptionStore.js @@ -20,10 +20,11 @@ import { accessSecretStorage, AccessCancelledError } from '../CrossSigningManage import { PHASE_DONE as VERIF_PHASE_DONE } from "matrix-js-sdk/src/crypto/verification/request/VerificationRequest"; export const PHASE_INTRO = 0; -export const PHASE_BUSY = 1; -export const PHASE_DONE = 2; //final done stage, but still showing UX -export const PHASE_CONFIRM_SKIP = 3; -export const PHASE_FINISHED = 4; //UX can be closed +export const PHASE_RECOVERY_KEY = 1; +export const PHASE_BUSY = 2; +export const PHASE_DONE = 3; //final done stage, but still showing UX +export const PHASE_CONFIRM_SKIP = 4; +export const PHASE_FINISHED = 5; //UX can be closed export class SetupEncryptionStore extends EventEmitter { static sharedInstance() { @@ -36,11 +37,19 @@ export class SetupEncryptionStore extends EventEmitter { return; } this._started = true; - this.phase = PHASE_INTRO; + this.phase = PHASE_BUSY; this.verificationRequest = null; this.backupInfo = null; + + // ID of the key that the secrets we want are encrypted with + this.keyId = null; + // Descriptor of the key that the secrets we want are encrypted with + this.keyInfo = null; + MatrixClientPeg.get().on("crypto.verification.request", this.onVerificationRequest); MatrixClientPeg.get().on('userTrustStatusChanged', this._onUserTrustStatusChanged); + + this.fetchKeyInfo(); } stop() { @@ -57,7 +66,49 @@ export class SetupEncryptionStore extends EventEmitter { } } + async fetchKeyInfo() { + const keys = await MatrixClientPeg.get().isSecretStored('m.cross_signing.master', false); + if (Object.keys(keys).length === 0) { + this.keyId = null; + this.keyInfo = null; + } else { + // If the secret is stored under more than one key, we just pick an arbitrary one + this.keyId = Object.keys(keys)[0]; + this.keyInfo = keys[this.keyId]; + } + + this.phase = PHASE_INTRO; + this.emit("update"); + } + + async startKeyReset() { + try { + await accessSecretStorage(() => {}, {forceReset: true}); + // If the keys are reset, the trust status event will fire and we'll change state + } catch (e) { + // dialog was cancelled - stay on the current screen + } + } + + async useRecoveryKey() { + this.phase = PHASE_RECOVERY_KEY; + this.emit("update"); + } + + cancelUseRecoveryKey() { + this.phase = PHASE_INTRO; + this.emit("update"); + } + + async setupWithRecoveryKey(recoveryKey) { + this.startTrustCheck({[this.keyId]: recoveryKey}); + } + async usePassPhrase() { + this.startTrustCheck(); + } + + async startTrustCheck(withKeys) { this.phase = PHASE_BUSY; this.emit("update"); const cli = MatrixClientPeg.get(); @@ -84,6 +135,9 @@ export class SetupEncryptionStore extends EventEmitter { // to advance before this. await cli.restoreKeyBackupWithSecretStorage(backupInfo); } + }, { + withKeys, + passphraseOnly: true, }).catch(reject); } catch (e) { console.error(e); diff --git a/src/theme.js b/src/theme.js index 6ed0657bbc..22cfd8b076 100644 --- a/src/theme.js +++ b/src/theme.js @@ -24,8 +24,8 @@ import ThemeWatcher from "./settings/watchers/ThemeWatcher"; export function enumerateThemes() { const BUILTIN_THEMES = { - "light": _t("Light theme"), - "dark": _t("Dark theme"), + "light": _t("Light"), + "dark": _t("Dark"), }; const customThemes = SettingsStore.getValue("custom_themes"); const customThemeNames = {}; diff --git a/test/end-to-end-tests/src/usecases/signup.js b/test/end-to-end-tests/src/usecases/signup.js index aa9f6b7efa..2859aadbda 100644 --- a/test/end-to-end-tests/src/usecases/signup.js +++ b/test/end-to-end-tests/src/usecases/signup.js @@ -79,20 +79,7 @@ module.exports = async function signup(session, username, password, homeserver) const acceptButton = await session.query('.mx_InteractiveAuthEntryComponents_termsSubmit'); await acceptButton.click(); - //plow through cross-signing setup by entering arbitrary details - //TODO: It's probably important for the tests to know the passphrase - const xsigningPassphrase = 'a7eaXcjpa9!Yl7#V^h$B^%dovHUVX'; // https://xkcd.com/221/ - let passphraseField = await session.query('.mx_CreateSecretStorageDialog_passPhraseField input'); - await session.replaceInputText(passphraseField, xsigningPassphrase); - await session.delay(1000); // give it a second to analyze our passphrase for security - let xsignContButton = await session.query('.mx_CreateSecretStorageDialog .mx_Dialog_buttons .mx_Dialog_primary'); - await xsignContButton.click(); - - //repeat passphrase entry - passphraseField = await session.query('.mx_CreateSecretStorageDialog_passPhraseField input'); - await session.replaceInputText(passphraseField, xsigningPassphrase); - await session.delay(1000); // give it a second to analyze our passphrase for security - xsignContButton = await session.query('.mx_CreateSecretStorageDialog .mx_Dialog_buttons .mx_Dialog_primary'); + const xsignContButton = await session.query('.mx_CreateSecretStorageDialog .mx_Dialog_buttons .mx_Dialog_primary'); await xsignContButton.click(); //ignore the recovery key @@ -101,13 +88,11 @@ module.exports = async function signup(session, username, password, homeserver) await copyButton.click(); //acknowledge that we copied the recovery key to a safe place - const copyContinueButton = await session.query('.mx_CreateSecretStorageDialog .mx_Dialog_primary'); + const copyContinueButton = await session.query( + '.mx_CreateSecretStorageDialog .mx_Dialog_buttons .mx_Dialog_primary', + ); await copyContinueButton.click(); - //acknowledge that we're done cross-signing setup and our keys are safe - const doneOkButton = await session.query('.mx_CreateSecretStorageDialog .mx_Dialog_primary'); - await doneOkButton.click(); - //wait for registration to finish so the hash gets set //onhashchange better?