Localazy: Convert more strings (#11675)
This commit is contained in:
parent
ef5a93b702
commit
0518af70ac
60 changed files with 2915 additions and 2567 deletions
|
@ -130,7 +130,7 @@ export default class CreateKeyBackupDialog extends React.PureComponent<IProps, I
|
|||
private renderPhaseDone(): JSX.Element {
|
||||
return (
|
||||
<div>
|
||||
<p>{_t("Your keys are being backed up (the first backup could take a few minutes).")}</p>
|
||||
<p>{_t("settings|key_backup|backup_in_progress")}</p>
|
||||
<DialogButtons primaryButton={_t("action|ok")} onPrimaryButtonClick={this.onDone} hasCancel={false} />
|
||||
</div>
|
||||
);
|
||||
|
@ -139,11 +139,11 @@ export default class CreateKeyBackupDialog extends React.PureComponent<IProps, I
|
|||
private titleForPhase(phase: Phase): string {
|
||||
switch (phase) {
|
||||
case Phase.BackingUp:
|
||||
return _t("Starting backup…");
|
||||
return _t("settings|key_backup|backup_starting");
|
||||
case Phase.Done:
|
||||
return _t("Success!");
|
||||
return _t("settings|key_backup|backup_success");
|
||||
default:
|
||||
return _t("Create key backup");
|
||||
return _t("settings|key_backup|create_title");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -152,7 +152,7 @@ export default class CreateKeyBackupDialog extends React.PureComponent<IProps, I
|
|||
if (this.state.error) {
|
||||
content = (
|
||||
<div>
|
||||
<p>{_t("Unable to create key backup")}</p>
|
||||
<p>{_t("settings|key_backup|cannot_create_backup")}</p>
|
||||
<DialogButtons
|
||||
primaryButton={_t("action|retry")}
|
||||
onPrimaryButtonClick={this.createBackup}
|
||||
|
|
|
@ -541,13 +541,9 @@ export default class CreateSecretStorageDialog extends React.PureComponent<IProp
|
|||
>
|
||||
<div className="mx_CreateSecretStorageDialog_optionTitle">
|
||||
<span className="mx_CreateSecretStorageDialog_optionIcon mx_CreateSecretStorageDialog_optionIcon_secureBackup" />
|
||||
{_t("Generate a Security Key")}
|
||||
</div>
|
||||
<div>
|
||||
{_t(
|
||||
"We'll generate a Security Key for you to store somewhere safe, like a password manager or a safe.",
|
||||
)}
|
||||
{_t("settings|key_backup|setup_secure_backup|generate_security_key_title")}
|
||||
</div>
|
||||
<div>{_t("settings|key_backup|setup_secure_backup|generate_security_key_description")}</div>
|
||||
</StyledRadioButton>
|
||||
);
|
||||
}
|
||||
|
@ -564,11 +560,9 @@ export default class CreateSecretStorageDialog extends React.PureComponent<IProp
|
|||
>
|
||||
<div className="mx_CreateSecretStorageDialog_optionTitle">
|
||||
<span className="mx_CreateSecretStorageDialog_optionIcon mx_CreateSecretStorageDialog_optionIcon_securePhrase" />
|
||||
{_t("Enter a Security Phrase")}
|
||||
</div>
|
||||
<div>
|
||||
{_t("Use a secret phrase only you know, and optionally save a Security Key to use for backup.")}
|
||||
{_t("settings|key_backup|setup_secure_backup|enter_phrase_title")}
|
||||
</div>
|
||||
<div>{_t("settings|key_backup|setup_secure_backup|use_phrase_only_you_know")}</div>
|
||||
</StyledRadioButton>
|
||||
);
|
||||
}
|
||||
|
@ -583,9 +577,7 @@ export default class CreateSecretStorageDialog extends React.PureComponent<IProp
|
|||
return (
|
||||
<form onSubmit={this.onChooseKeyPassphraseFormSubmit}>
|
||||
<p className="mx_CreateSecretStorageDialog_centeredBody">
|
||||
{_t(
|
||||
"Safeguard against losing access to encrypted messages & data by backing up encryption keys on your server.",
|
||||
)}
|
||||
{_t("settings|key_backup|setup_secure_backup|description")}
|
||||
</p>
|
||||
<div className="mx_CreateSecretStorageDialog_primaryContainer" role="radiogroup">
|
||||
{optionKey}
|
||||
|
@ -607,7 +599,7 @@ export default class CreateSecretStorageDialog extends React.PureComponent<IProp
|
|||
if (this.state.canUploadKeysWithPasswordOnly) {
|
||||
authPrompt = (
|
||||
<div>
|
||||
<div>{_t("Enter your account password to confirm the upgrade:")}</div>
|
||||
<div>{_t("settings|key_backup|setup_secure_backup|requires_password_confirmation")}</div>
|
||||
<div>
|
||||
<Field
|
||||
id="mx_CreateSecretStorageDialog_password"
|
||||
|
@ -624,21 +616,17 @@ export default class CreateSecretStorageDialog extends React.PureComponent<IProp
|
|||
} else if (!this.state.backupTrustInfo?.trusted) {
|
||||
authPrompt = (
|
||||
<div>
|
||||
<div>{_t("Restore your key backup to upgrade your encryption")}</div>
|
||||
<div>{_t("settings|key_backup|setup_secure_backup|requires_key_restore")}</div>
|
||||
</div>
|
||||
);
|
||||
nextCaption = _t("action|restore");
|
||||
} else {
|
||||
authPrompt = <p>{_t("You'll need to authenticate with the server to confirm the upgrade.")}</p>;
|
||||
authPrompt = <p>{_t("settings|key_backup|setup_secure_backup|requires_server_authentication")}</p>;
|
||||
}
|
||||
|
||||
return (
|
||||
<form onSubmit={this.onMigrateFormSubmit}>
|
||||
<p>
|
||||
{_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.",
|
||||
)}
|
||||
</p>
|
||||
<p>{_t("settings|key_backup|setup_secure_backup|session_upgrade_description")}</p>
|
||||
<div>{authPrompt}</div>
|
||||
<DialogButtons
|
||||
primaryButton={nextCaption}
|
||||
|
@ -657,11 +645,7 @@ export default class CreateSecretStorageDialog extends React.PureComponent<IProp
|
|||
private renderPhasePassPhrase(): JSX.Element {
|
||||
return (
|
||||
<form onSubmit={this.onPassPhraseNextClick}>
|
||||
<p>
|
||||
{_t(
|
||||
"Enter a Security Phrase only you know, as it's used to safeguard your data. To be secure, you shouldn't re-use your account password.",
|
||||
)}
|
||||
</p>
|
||||
<p>{_t("settings|key_backup|setup_secure_backup|enter_phrase_description")}</p>
|
||||
|
||||
<div className="mx_CreateSecretStorageDialog_passPhraseContainer">
|
||||
<PassphraseField
|
||||
|
@ -672,10 +656,10 @@ export default class CreateSecretStorageDialog extends React.PureComponent<IProp
|
|||
onValidate={this.onPassPhraseValidate}
|
||||
fieldRef={this.passphraseField}
|
||||
autoFocus={true}
|
||||
label={_td("Enter a Security Phrase")}
|
||||
labelEnterPassword={_td("Enter a Security Phrase")}
|
||||
labelStrongPassword={_td("Great! This Security Phrase looks strong enough.")}
|
||||
labelAllowedButUnsafe={_td("Great! This Security Phrase looks strong enough.")}
|
||||
label={_td("settings|key_backup|setup_secure_backup|enter_phrase_title")}
|
||||
labelEnterPassword={_td("settings|key_backup|setup_secure_backup|enter_phrase_title")}
|
||||
labelStrongPassword={_td("settings|key_backup|setup_secure_backup|phrase_strong_enough")}
|
||||
labelAllowedButUnsafe={_td("settings|key_backup|setup_secure_backup|phrase_strong_enough")}
|
||||
/>
|
||||
</div>
|
||||
|
||||
|
@ -697,8 +681,8 @@ export default class CreateSecretStorageDialog extends React.PureComponent<IProp
|
|||
let matchText;
|
||||
let changeText;
|
||||
if (this.state.passPhraseConfirm === this.state.passPhrase) {
|
||||
matchText = _t("That matches!");
|
||||
changeText = _t("Use a different passphrase?");
|
||||
matchText = _t("settings|key_backup|setup_secure_backup|pass_phrase_match_success");
|
||||
changeText = _t("settings|key_backup|setup_secure_backup|use_different_passphrase");
|
||||
} else if (!this.state.passPhrase.startsWith(this.state.passPhraseConfirm)) {
|
||||
// only tell them they're wrong if they've actually gone wrong.
|
||||
// Security conscious readers will note that if you left element-web unattended
|
||||
|
@ -707,8 +691,8 @@ export default class CreateSecretStorageDialog extends React.PureComponent<IProp
|
|||
// 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.");
|
||||
matchText = _t("settings|key_backup|setup_secure_backup|pass_phrase_match_failed");
|
||||
changeText = _t("settings|key_backup|setup_secure_backup|set_phrase_again");
|
||||
}
|
||||
|
||||
let passPhraseMatch: JSX.Element | undefined;
|
||||
|
@ -724,14 +708,14 @@ export default class CreateSecretStorageDialog extends React.PureComponent<IProp
|
|||
}
|
||||
return (
|
||||
<form onSubmit={this.onPassPhraseConfirmNextClick}>
|
||||
<p>{_t("Enter your Security Phrase a second time to confirm it.")}</p>
|
||||
<p>{_t("settings|key_backup|setup_secure_backup|enter_phrase_to_confirm")}</p>
|
||||
<div className="mx_CreateSecretStorageDialog_passPhraseContainer">
|
||||
<Field
|
||||
type="password"
|
||||
onChange={this.onPassPhraseConfirmChange}
|
||||
value={this.state.passPhraseConfirm}
|
||||
className="mx_CreateSecretStorageDialog_passPhraseField"
|
||||
label={_t("Confirm your Security Phrase")}
|
||||
label={_t("settings|key_backup|setup_secure_backup|confirm_security_phrase")}
|
||||
autoFocus={true}
|
||||
autoComplete="new-password"
|
||||
/>
|
||||
|
@ -772,11 +756,7 @@ export default class CreateSecretStorageDialog extends React.PureComponent<IProp
|
|||
|
||||
return (
|
||||
<div>
|
||||
<p>
|
||||
{_t(
|
||||
"Store your Security Key somewhere safe, like a password manager or a safe, as it's used to safeguard your encrypted data.",
|
||||
)}
|
||||
</p>
|
||||
<p>{_t("settings|key_backup|setup_secure_backup|security_key_safety_reminder")}</p>
|
||||
<div className="mx_CreateSecretStorageDialog_primaryContainer mx_CreateSecretStorageDialog_recoveryKeyPrimarycontainer">
|
||||
<div className="mx_CreateSecretStorageDialog_recoveryKeyContainer">
|
||||
<div className="mx_CreateSecretStorageDialog_recoveryKey">
|
||||
|
@ -792,7 +772,7 @@ export default class CreateSecretStorageDialog extends React.PureComponent<IProp
|
|||
{_t("action|download")}
|
||||
</AccessibleButton>
|
||||
<span>
|
||||
{_t("%(downloadButton)s or %(copyButton)s", {
|
||||
{_t("settings|key_backup|setup_secure_backup|download_or_copy", {
|
||||
downloadButton: "",
|
||||
copyButton: "",
|
||||
})}
|
||||
|
@ -824,7 +804,9 @@ export default class CreateSecretStorageDialog extends React.PureComponent<IProp
|
|||
private renderStoredPhase(): JSX.Element {
|
||||
return (
|
||||
<>
|
||||
<p className="mx_Dialog_content">{_t("Your keys are now being backed up from this device.")}</p>
|
||||
<p className="mx_Dialog_content">
|
||||
{_t("settings|key_backup|setup_secure_backup|backup_setup_success_description")}
|
||||
</p>
|
||||
<DialogButtons
|
||||
primaryButton={_t("action|done")}
|
||||
onPrimaryButtonClick={() => this.props.onFinished(true)}
|
||||
|
@ -837,7 +819,7 @@ export default class CreateSecretStorageDialog extends React.PureComponent<IProp
|
|||
private renderPhaseLoadError(): JSX.Element {
|
||||
return (
|
||||
<div>
|
||||
<p>{_t("Unable to query secret storage status")}</p>
|
||||
<p>{_t("settings|key_backup|setup_secure_backup|secret_storage_query_failure")}</p>
|
||||
<div className="mx_Dialog_buttons">
|
||||
<DialogButtons
|
||||
primaryButton={_t("action|retry")}
|
||||
|
@ -853,10 +835,8 @@ export default class CreateSecretStorageDialog extends React.PureComponent<IProp
|
|||
private renderPhaseSkipConfirm(): JSX.Element {
|
||||
return (
|
||||
<div>
|
||||
<p>
|
||||
{_t("If you cancel now, you may lose encrypted messages & data if you lose access to your logins.")}
|
||||
</p>
|
||||
<p>{_t("You can also set up Secure Backup & manage your keys in Settings.")}</p>
|
||||
<p>{_t("settings|key_backup|setup_secure_backup|cancel_warning")}</p>
|
||||
<p>{_t("settings|key_backup|setup_secure_backup|settings_reminder")}</p>
|
||||
<DialogButtons
|
||||
primaryButton={_t("action|go_back")}
|
||||
onPrimaryButtonClick={this.onGoBackClick}
|
||||
|
@ -875,19 +855,19 @@ export default class CreateSecretStorageDialog extends React.PureComponent<IProp
|
|||
case Phase.ChooseKeyPassphrase:
|
||||
return _t("encryption|set_up_toast_title");
|
||||
case Phase.Migrate:
|
||||
return _t("Upgrade your encryption");
|
||||
return _t("settings|key_backup|setup_secure_backup|title_upgrade_encryption");
|
||||
case Phase.Passphrase:
|
||||
return _t("Set a Security Phrase");
|
||||
return _t("settings|key_backup|setup_secure_backup|title_set_phrase");
|
||||
case Phase.PassphraseConfirm:
|
||||
return _t("Confirm Security Phrase");
|
||||
return _t("settings|key_backup|setup_secure_backup|title_confirm_phrase");
|
||||
case Phase.ConfirmSkip:
|
||||
return _t("Are you sure?");
|
||||
case Phase.ShowKey:
|
||||
return _t("Save your Security Key");
|
||||
return _t("settings|key_backup|setup_secure_backup|title_save_key");
|
||||
case Phase.Storing:
|
||||
return _t("encryption|bootstrap_title");
|
||||
case Phase.Stored:
|
||||
return _t("Secure Backup successful");
|
||||
return _t("settings|key_backup|setup_secure_backup|backup_setup_success_title");
|
||||
default:
|
||||
return "";
|
||||
}
|
||||
|
@ -912,7 +892,7 @@ export default class CreateSecretStorageDialog extends React.PureComponent<IProp
|
|||
if (this.state.error) {
|
||||
content = (
|
||||
<div>
|
||||
<p>{_t("Unable to set up secret storage")}</p>
|
||||
<p>{_t("settings|key_backup|setup_secure_backup|unable_to_setup")}</p>
|
||||
<div className="mx_Dialog_buttons">
|
||||
<DialogButtons
|
||||
primaryButton={_t("action|retry")}
|
||||
|
|
|
@ -158,29 +158,21 @@ export default class ExportE2eKeysDialog extends React.Component<IProps, IState>
|
|||
<BaseDialog
|
||||
className="mx_exportE2eKeysDialog"
|
||||
onFinished={this.props.onFinished}
|
||||
title={_t("Export room keys")}
|
||||
title={_t("settings|key_export_import|export_title")}
|
||||
>
|
||||
<form onSubmit={this.onPassphraseFormSubmit}>
|
||||
<div className="mx_Dialog_content">
|
||||
<p>
|
||||
{_t(
|
||||
"This process allows you to export the keys for messages you have received in encrypted rooms to a local file. You will then be able to import the file into another Matrix client in the future, so that client will also be able to decrypt these messages.",
|
||||
)}
|
||||
</p>
|
||||
<p>
|
||||
{_t(
|
||||
"The exported file will allow anyone who can read it to decrypt any encrypted messages that you can see, so you should be careful to keep it secure. To help with this, you should enter a unique passphrase below, which will only be used to encrypt the exported data. It will only be possible to import the data by using the same passphrase.",
|
||||
)}
|
||||
</p>
|
||||
<p>{_t("settings|key_export_import|export_description_1")}</p>
|
||||
<p>{_t("settings|key_export_import|export_description_2")}</p>
|
||||
<div className="error">{this.state.errStr}</div>
|
||||
<div className="mx_E2eKeysDialog_inputTable">
|
||||
<div className="mx_E2eKeysDialog_inputRow">
|
||||
<PassphraseField
|
||||
minScore={3}
|
||||
label={_td("Enter passphrase")}
|
||||
labelEnterPassword={_td("Enter passphrase")}
|
||||
labelStrongPassword={_td("Great! This passphrase looks strong enough")}
|
||||
labelAllowedButUnsafe={_td("Great! This passphrase looks strong enough")}
|
||||
label={_td("settings|key_export_import|enter_passphrase")}
|
||||
labelEnterPassword={_td("settings|key_export_import|enter_passphrase")}
|
||||
labelStrongPassword={_td("settings|key_export_import|phrase_strong_enough")}
|
||||
labelAllowedButUnsafe={_td("settings|key_export_import|phrase_strong_enough")}
|
||||
value={this.state.passphrase1}
|
||||
onChange={(e: ChangeEvent<HTMLInputElement>) =>
|
||||
this.onPassphraseChange(e, "passphrase1")
|
||||
|
@ -196,9 +188,9 @@ export default class ExportE2eKeysDialog extends React.Component<IProps, IState>
|
|||
<div className="mx_E2eKeysDialog_inputRow">
|
||||
<PassphraseConfirmField
|
||||
password={this.state.passphrase1}
|
||||
label={_td("Confirm passphrase")}
|
||||
labelRequired={_td("Passphrase must not be empty")}
|
||||
labelInvalid={_td("Passphrases must match")}
|
||||
label={_td("settings|key_export_import|confirm_passphrase")}
|
||||
labelRequired={_td("settings|key_export_import|phrase_cannot_be_empty")}
|
||||
labelInvalid={_td("settings|key_export_import|phrase_must_match")}
|
||||
value={this.state.passphrase2}
|
||||
onChange={(e: ChangeEvent<HTMLInputElement>) =>
|
||||
this.onPassphraseChange(e, "passphrase2")
|
||||
|
|
|
@ -140,25 +140,19 @@ export default class ImportE2eKeysDialog extends React.Component<IProps, IState>
|
|||
<BaseDialog
|
||||
className="mx_importE2eKeysDialog"
|
||||
onFinished={this.props.onFinished}
|
||||
title={_t("Import room keys")}
|
||||
title={_t("settings|key_export_import|import_title")}
|
||||
>
|
||||
<form onSubmit={this.onFormSubmit}>
|
||||
<div className="mx_Dialog_content">
|
||||
<p>
|
||||
{_t(
|
||||
"This process allows you to import encryption keys that you had previously exported from another Matrix client. You will then be able to decrypt any messages that the other client could decrypt.",
|
||||
)}
|
||||
</p>
|
||||
<p>
|
||||
{_t(
|
||||
"The export file will be protected with a passphrase. You should enter the passphrase here, to decrypt the file.",
|
||||
)}
|
||||
</p>
|
||||
<p>{_t("settings|key_export_import|import_description_1")}</p>
|
||||
<p>{_t("settings|key_export_import|import_description_2")}</p>
|
||||
<div className="error">{this.state.errStr}</div>
|
||||
<div className="mx_E2eKeysDialog_inputTable">
|
||||
<div className="mx_E2eKeysDialog_inputRow">
|
||||
<div className="mx_E2eKeysDialog_inputLabel">
|
||||
<label htmlFor="importFile">{_t("File to import")}</label>
|
||||
<label htmlFor="importFile">
|
||||
{_t("settings|key_export_import|file_to_import")}
|
||||
</label>
|
||||
</div>
|
||||
<div className="mx_E2eKeysDialog_inputCell">
|
||||
<input
|
||||
|
@ -173,7 +167,7 @@ export default class ImportE2eKeysDialog extends React.Component<IProps, IState>
|
|||
</div>
|
||||
<div className="mx_E2eKeysDialog_inputRow">
|
||||
<Field
|
||||
label={_t("Enter passphrase")}
|
||||
label={_t("settings|key_export_import|enter_passphrase")}
|
||||
value={this.state.passphrase}
|
||||
onChange={this.onPassphraseChange}
|
||||
size={64}
|
||||
|
|
|
@ -55,29 +55,27 @@ export default class NewRecoveryMethodDialog extends React.PureComponent<IProps>
|
|||
};
|
||||
|
||||
public render(): React.ReactNode {
|
||||
const title = <span className="mx_KeyBackupFailedDialog_title">{_t("New Recovery Method")}</span>;
|
||||
|
||||
const newMethodDetected = <p>{_t("A new Security Phrase and key for Secure Messages have been detected.")}</p>;
|
||||
|
||||
const hackWarning = (
|
||||
<p className="warning">
|
||||
{_t(
|
||||
"If you didn't set the new recovery method, an attacker may be trying to access your account. Change your account password and set a new recovery method immediately in Settings.",
|
||||
)}
|
||||
</p>
|
||||
const title = (
|
||||
<span className="mx_KeyBackupFailedDialog_title">
|
||||
{_t("encryption|new_recovery_method_detected|title")}
|
||||
</span>
|
||||
);
|
||||
|
||||
const newMethodDetected = <p>{_t("encryption|new_recovery_method_detected|description_1")}</p>;
|
||||
|
||||
const hackWarning = <p className="warning">{_t("encryption|new_recovery_method_detected|warning")}</p>;
|
||||
|
||||
let content: JSX.Element | undefined;
|
||||
if (MatrixClientPeg.safeGet().getKeyBackupEnabled()) {
|
||||
content = (
|
||||
<div>
|
||||
{newMethodDetected}
|
||||
<p>{_t("This session is encrypting history using the new recovery method.")}</p>
|
||||
<p>{_t("encryption|new_recovery_method_detected|description_2")}</p>
|
||||
{hackWarning}
|
||||
<DialogButtons
|
||||
primaryButton={_t("action|ok")}
|
||||
onPrimaryButtonClick={this.onOkClick}
|
||||
cancelButton={_t("Go to Settings")}
|
||||
cancelButton={_t("common|go_to_settings")}
|
||||
onCancel={this.onGoToSettingsClick}
|
||||
/>
|
||||
</div>
|
||||
|
@ -88,9 +86,9 @@ export default class NewRecoveryMethodDialog extends React.PureComponent<IProps>
|
|||
{newMethodDetected}
|
||||
{hackWarning}
|
||||
<DialogButtons
|
||||
primaryButton={_t("Set up Secure Messages")}
|
||||
primaryButton={_t("common|setup_secure_messages")}
|
||||
onPrimaryButtonClick={this.onSetupClick}
|
||||
cancelButton={_t("Go to Settings")}
|
||||
cancelButton={_t("common|go_to_settings")}
|
||||
onCancel={this.onGoToSettingsClick}
|
||||
/>
|
||||
</div>
|
||||
|
|
|
@ -46,30 +46,20 @@ export default class RecoveryMethodRemovedDialog extends React.PureComponent<IPr
|
|||
};
|
||||
|
||||
public render(): React.ReactNode {
|
||||
const title = <span className="mx_KeyBackupFailedDialog_title">{_t("Recovery Method Removed")}</span>;
|
||||
const title = (
|
||||
<span className="mx_KeyBackupFailedDialog_title">{_t("encryption|recovery_method_removed|title")}</span>
|
||||
);
|
||||
|
||||
return (
|
||||
<BaseDialog className="mx_KeyBackupFailedDialog" onFinished={this.props.onFinished} title={title}>
|
||||
<div>
|
||||
<p>
|
||||
{_t(
|
||||
"This session has detected that your Security Phrase and key for Secure Messages have been removed.",
|
||||
)}
|
||||
</p>
|
||||
<p>
|
||||
{_t(
|
||||
"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.",
|
||||
)}
|
||||
</p>
|
||||
<p className="warning">
|
||||
{_t(
|
||||
"If you didn't remove the recovery method, an attacker may be trying to access your account. Change your account password and set a new recovery method immediately in Settings.",
|
||||
)}
|
||||
</p>
|
||||
<p>{_t("encryption|recovery_method_removed|description_1")}</p>
|
||||
<p>{_t("encryption|recovery_method_removed|description_2")}</p>
|
||||
<p className="warning">{_t("encryption|recovery_method_removed|warning")}</p>
|
||||
<DialogButtons
|
||||
primaryButton={_t("Set up Secure Messages")}
|
||||
primaryButton={_t("common|setup_secure_messages")}
|
||||
onPrimaryButtonClick={this.onSetupClick}
|
||||
cancelButton={_t("Go to Settings")}
|
||||
cancelButton={_t("common|go_to_settings")}
|
||||
onCancel={this.onGoToSettingsClick}
|
||||
/>
|
||||
</div>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue