diff --git a/development/idp-local/config/authsources.php b/development/idp-local/config/authsources.php
index 2fb95e1b..a35db772 100644
--- a/development/idp-local/config/authsources.php
+++ b/development/idp-local/config/authsources.php
@@ -11,7 +11,7 @@
'core:AdminPassword',
],
-
+
// Set up example users for testing expirychecker module.
'example-userpass' => [
'exampleauth:UserPass',
@@ -448,6 +448,13 @@
'last_used_utc' => null,
'data' => [
// Response from "POST /webauthn/login" MFA API call.
+ "id" => 88,
+ "label" => "My Webauthn Key",
+ "last_used_utc" => null,
+ "created_utc" => "2022-12-15 19:42:37",
+ "publicKey" => [
+ "challenge" => "xxxxxxx",
+ ],
],
],
]
diff --git a/features/bootstrap/MfaContext.php b/features/bootstrap/MfaContext.php
index 988f1fb6..6ea146d4 100644
--- a/features/bootstrap/MfaContext.php
+++ b/features/bootstrap/MfaContext.php
@@ -208,7 +208,7 @@ protected function submitMfaValue($mfaValue)
public function iSubmitACorrectBackupCode()
{
if (! $this->pageContainsElementWithText('h1', 'Printable code')) {
- // find image of the backup code option presented in other_mfas.php
+ // find image of the backup code option presented in other_mfas.twig
$printableCodeOption = $this->session->getPage()->find('css', 'img[src=mfa-backupcode\002Esvg]');
$printableCodeOption->click();
}
@@ -661,6 +661,7 @@ public function iShouldSeeAPromptForAManagerRescueCode()
$pageHtml = $page->getHtml();
Assert::assertContains('Ask Your Recovery Contact for Help', $pageHtml);
Assert::assertContains('Enter code', $pageHtml);
+ Assert::assertContains('m*****r@e******.c**', $pageHtml);
}
/**
diff --git a/modules/expirychecker/locales/es/LC_MESSAGES/.gitkeep b/modules/expirychecker/locales/es/LC_MESSAGES/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/modules/expirychecker/locales/fr/LC_MESSAGES/.gitkeep b/modules/expirychecker/locales/fr/LC_MESSAGES/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/modules/expirychecker/locales/ko/LC_MESSAGES/.gitkeep b/modules/expirychecker/locales/ko/LC_MESSAGES/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/modules/expirychecker/templates/.gitkeep b/modules/expirychecker/templates/.gitkeep
new file mode 100644
index 00000000..57da54a3
--- /dev/null
+++ b/modules/expirychecker/templates/.gitkeep
@@ -0,0 +1 @@
+this directory will be filled in the Docker image with a copy of the material module templates
diff --git a/modules/material/dictionaries/mfa.definition.json b/modules/material/dictionaries/mfa.definition.json
deleted file mode 100644
index 287648eb..00000000
--- a/modules/material/dictionaries/mfa.definition.json
+++ /dev/null
@@ -1,399 +0,0 @@
-
-{
- "title": {
- "en": "2-Step Verification",
- "es": "Verificación en 2 pasos",
- "fr": "Vérification en deux étapes",
- "ko": "2 단계 인증"
- },
- "header": {
- "en": "2-Step Verification",
- "es": "Verificación en 2 pasos",
- "fr": "Vérification en deux étapes",
- "ko": "2 단계 인증"
- },
- "backupcode_header": {
- "en": "Printable code",
- "es": "código imprimible",
- "fr": "code imprimable",
- "ko": "인쇄 가능한 코드"
- },
- "backupcode_icon": {
- "en": "Printable code icon",
- "es": "icono de código imprimible",
- "fr": "icône de code imprimable",
- "ko": "인쇄 가능한 코드 아이콘"
- },
- "backupcode_reminder": {
- "en": "Each code can only be used once, so the code you enter this time will be used up and will not be available again.",
- "es": "Cada código solo se puede usar una vez, por lo que el código que ingrese esta vez se agotará y no estará disponible nuevamente.",
- "fr": "Chaque code ne peut être utilisé qu'une seule fois, de sorte que le code que vous entrez cette fois sera épuisé et ne sera plus disponible.",
- "ko": "각 코드는 한번만 사용할 수 있으므로 이번에 입력한 코드는 소멸되어 다시 사용할 수 없습니다."
- },
- "backupcode_input": {
- "en": "Enter code",
- "es": "Introduzca el código",
- "fr": "Entrer le code",
- "ko": "코드 입력"
- },
- "totp_header": {
- "en": "Get a code from your authenticator app",
- "es": "Obtenga un código de su aplicación de autenticación",
- "fr": "Obtenez un code depuis votre application d'authentification",
- "ko": "인증 앱에서 코드 받기"
- },
- "totp_icon": {
- "en": "Authenticator app icon",
- "es": "Icono de aplicación de teléfono inteligente",
- "fr": "Icône de l'application Smartphone",
- "ko": "인증 응용 프로그램 아이콘"
- },
- "totp_instructions": {
- "en": "You will need to check your authenticator app for the current code.",
- "es": "Deberá verificar la aplicación de autenticación para ver el código actual.",
- "fr": "Vous devriez vérifier l'application d'authentification pour voir le code actuel.",
- "ko": "인증 앱에서 현재 코드를 확인해야합니다."
- },
- "totp_input": {
- "en": "Enter 6-digit code",
- "es": "Ingrese el código de 6 dígitos",
- "fr": "Entrer le code à 6 chiffres",
- "ko": "6 자리 코드 입력"
- },
- "u2f_header": {
- "en": "Security key",
- "es": "Clave de seguridad",
- "fr": "Clé de sécurité",
- "ko": "보안키"
- },
- "webauthn_header": {
- "en": "Security key",
- "es": "Clave de seguridad",
- "fr": "Clé de sécurité",
- "ko": "보안키"
- },
- "u2f_icon": {
- "en": "USB key icon",
- "es": "Icono de la llave USB",
- "fr": "Icône de clé USB",
- "ko": "USB 키 아이콘"
- },
- "webauthn_icon": {
- "en": "USB key icon",
- "es": "Icono de la llave USB",
- "fr": "Icône de clé USB",
- "ko": "USB 키 아이콘"
- },
- "u2f_instructions": {
- "en": "You may now insert your security key and press its button.",
- "es": "Ahora puede insertar su clave de seguridad y presionar su botón.",
- "fr": "Vous pouvez maintenant insérer votre clé de sécurité et appuyer sur le bouton.",
- "ko": "이제 보안 키를 삽입하고 단추를 누를 수 있습니다."
- },
- "webauthn_instructions": {
- "en": "You may now insert your security key and press its button.",
- "es": "Ahora puede insertar su clave de seguridad y presionar su botón.",
- "fr": "Vous pouvez maintenant insérer votre clé de sécurité et appuyer sur le bouton.",
- "ko": "이제 보안 키를 삽입하고 단추를 누를 수 있습니다."
- },
- "u2f_unsupported": {
- "en": "Unsupported in your current browser. Please consider a more secure browser like Google Chrome.",
- "es": "No compatible en su navegador actual. Considere un navegador más seguro como Google Chrome.",
- "fr": "Non compatible avec votre navigateur actuel. Veuillez considérer un navigateur plus sûr comme Google Chrome.",
- "ko": "현재 브라우저에서 지원되지 않습니다. Chrome과 같은 보다 안전한 브라우저를 고려하십시오."
- },
- "webauthn_unsupported": {
- "en": "Unsupported in your current browser. Please consider a more secure browser like Google Chrome.",
- "es": "No compatible en su navegador actual. Considere un navegador más seguro como Google Chrome.",
- "fr": "Non compatible avec votre navigateur actuel. Veuillez considérer un navigateur plus sûr comme Google Chrome.",
- "ko": "현재 브라우저에서 지원되지 않습니다. Chrome과 같은 보다 안전한 브라우저를 고려하십시오."
- },
- "u2f_error_unknown": {
- "en": "Something went wrong with that request, unable to verify at this time.",
- "es": "Algo salió mal con esa solicitud, no se pudo verificar en este momento.",
- "fr": "Quelque chose s'est mal passé avec cette demande, impossible de vérifier pour le moment.",
- "ko": "요청에 문제가 발생하여 지금은 확인할 수 없습니다."
- },
- "webauthn_error_unknown": {
- "en": "Something went wrong with that request, unable to verify at this time.",
- "es": "Algo salió mal con esa solicitud, no se pudo verificar en este momento.",
- "fr": "Quelque chose s'est mal passé avec cette demande, impossible de vérifier pour le moment.",
- "ko": "요청에 문제가 발생하여 지금은 확인할 수 없습니다."
- },
- "u2f_error_wrong_key": {
- "en": "This may not be the correct key for this site.",
- "es": "Esta puede no ser la clave correcta para este sitio.",
- "fr": "Ce n'est peut-être pas la bonne clé pour ce site.",
- "ko": "이 사이트의 올바른 키가 아닐 수도 있습니다."
- },
- "u2f_error_timeout": {
- "en": "That took a little too long, check to make sure your key is inserted right-side up.",
- "es": "Eso llevó demasiado tiempo, verifique que su clave esté insertada boca arriba.",
- "fr": "Cela a pris un peu trop de temps, vérifiez que votre clé est insérée dans le bons sens.",
- "ko": "오랜 시간이 경과 되었으니 키가 오른쪽 위로 삽입되었는지 확인 하십시오."
- },
- "webauthn_error_abort": {
- "en": "It looks like you clicked cancel. Would you like us to try again?",
- "es": "Parece que has hecho clic en cancelar. ¿Quieres que lo intentemos de nuevo?",
- "fr": "Il semble que vous ayez cliqué sur annuler. Souhaitez-vous que nous essayions à nouveau ?",
- "ko": "취소를 클릭하신 것 같습니다. 다시 시도해 보시겠어요?"
- },
- "webauthn_error_not_allowed": {
- "en": "Something about that didn't work. Please ensure that your security key is plugged in and that you touch it within 60 seconds when it blinks.",
- "es": "Algo de eso no funcionó. Por favor, asegúrese de que su clave de seguridad está conectada y de que la toca en un plazo de 60 segundos cuando parpadea.",
- "fr": "Quelque chose n'a pas fonctionné avec ça. Veuillez vous assurer que votre clé de sécurité est insérée et que vous la touchez dans les 60 secondes lorsqu'elle clignote.",
- "ko": "문제가 해결되지 않았습니다. 보안 키가 연결되어 있고 깜박일 때 60초 이내에 터치했는지 확인하세요."
- },
- "manager_icon": {
- "en": "Recovery contact icon",
- "es": "Icono de contacto de recuperación",
- "fr": "Icône du contact de récupération",
- "ko": "복구 연락처 아이콘"
- },
- "manager_header": {
- "en": "Ask Your Recovery Contact for Help",
- "es": "Pida ayuda de contacto de recuperación",
- "fr": "Demandez de l'aide à votre contact de récupération",
- "ko": "복구 담당자에게 도움을 요청하십시오"
- },
- "manager_info": {
- "en": "You can send a 2-step verification code to your recovery contact (usually your supervisor). The email we have for your recovery contact is:{managerEmail}
We've hidden most of the letters for your contact's protection.",
- "es": "Puede enviar un código de verificación de dos pasos a su contacto de recuperación (normalmente su supervisor). La dirección de correo electrónico que tenemos para su contacto de recuperación es:{managerEmail}
Ocultamos la mayoría de las letras para proteger a su contacto.",
- "fr": "Vous pouvez envoyer un code de vérification en deux étapes à votre contact de récupération (en général votre superviseur). L'adresse électronique que nous avons pour votre contact de récupération est:{managerEmail}
. Nous avons caché la plupart des lettres pour la protection de votre contact.",
- "ko": "2단계 인증 코드를 복구 연락처(보통 상사)에게 보낼 수 있습니다. 복구 연락처에 대한 이메일은 다음과 같습니다. {managerEmail}
연락처 보호를 위해 대부분의 편지를 숨겼습니다."
- },
- "manager_sent": {
- "en": "A temporary code was sent your recovery contact at {managerEmail}.",
- "es": "Se envió un código temporal a su contacto de recuperación en {managerEmail}.",
- "fr": "Un code temporaire a été envoyé à votre contact de récupération à l'adresse {managerEmail}.",
- "ko": "{managerEmail} (으)로 복구 담당자에게 임시 코드를 보냈습니다."
- },
- "manager_input": {
- "en": "Enter code",
- "es": "Introduzca el código",
- "fr": "Entrer le code",
- "ko": "코드 입력"
- },
- "shield_icon": {
- "en": "Shield icon",
- "es": "Icono de escudo",
- "fr": "Icône de bouclier",
- "ko": "방패 아이콘"
- },
- "required_header": {
- "en": "Protect this account",
- "es": "Protege esta cuenta",
- "fr": "Protéger ce compte",
- "ko": "이 계정 보호"
- },
- "required_info": {
- "en": "Your identity account requires additional security, you must set up 2-Step Verification at this time.",
- "es": "Su cuenta de identidad requiere seguridad adicional, debe configurar la verificación en dos pasos en este momento.",
- "fr": "Votre compte d'identité nécessite une sécurité supplémentaire, vous devez configurer la vérification en deux étapes en ce moment.",
- "ko": "신원 계정에 추가 보안이 필요하므로 현재 2 단계 인증을 설정해야합니다."
- },
- "running_out_header": {
- "en": "Almost out of printable codes",
- "es": "Casi sin códigos imprimibles",
- "fr": "Codes imprimables presque épuisés",
- "ko": "인쇄 가능한 코드가 거의 남지 않았습니다"
- },
- "running_out_info": {
- "en": "You only have {numBackupCodesRemaining} more left.",
- "es": "Solo tiene {numBackupCodesRemaining} más disponible.",
- "fr": "Vous avez seulement {numBackupCodesRemaining} qui restent.",
- "ko": "{numBackupCodesRemaining} 만 남았습니다."
- },
- "no_more_codes_header": {
- "en": "Last printable code used",
- "es": "Último código imprimible utilizado",
- "fr": "Dernier code imprimable utilisé",
- "ko": "마지막 인쇄 가능 코드가 사용되었습니다."
- },
- "new_codes_header": {
- "en": "New printable codes",
- "es": "Nuevos códigos imprimibles",
- "fr": "Nouveaux codes imprimables",
- "ko": "새로운 인쇄 가능 코드"
- },
- "old_codes_gone": {
- "en": "You may now discard any of your previous codes, they have been deleted.",
- "es": "Ahora puede descartar cualquiera de sus códigos anteriores, se han eliminado.",
- "fr": "Vous pouvez maintenant jeter tous vos codes précédents, ils ont été supprimés.",
- "ko": "이제 이전 코드를 삭제해도 삭제 될 수 있습니다."
- },
- "new_codes_info": {
- "en": "Printable codes should be treated with the same level of attention as any password.",
- "es": "Los códigos imprimibles deben tratarse con el mismo nivel de atención que cualquier contraseña.",
- "fr": "Les codes imprimables doivent être traités avec le même niveau d'attention que les mots de passe.",
- "ko": "인쇄 가능한 코드는 모든 비밀번호와 동일한주의 수준으로 처리되어야합니다."
- },
- "new_codes_only_once": {
- "en": "Each code may only be used once.",
- "es": "Cada código solo puede usarse una vez.",
- "fr": "Chaque code ne peut être utilisé qu'une seule fois.",
- "ko": "각 코드는 한 번만 사용할 수 있습니다."
- },
- "new_codes_failed": {
- "en": "Something went wrong while creating new printable codes for you. We are sorry for the inconvenience, please check your configuration at the following address after continuing: ",
- "es": "Algo salió mal al crear nuevos códigos imprimibles para usted. Disculpe las molestias, compruebe su configuración en la siguiente dirección después de continuar: ",
- "fr": "Une erreur s'est produite lors de la création de nouveaux codes imprimables. Nous sommes désolés pour le dérangement. Veuillez vérifier votre configuration à l'adresse suivante après avoir continué: ",
- "ko": "새로운 인쇄 가능한 코드를 만드는 동안 문제가 발생했습니다. 불편을 끼쳐 드려 죄송합니다. 계속 진행 한 후 다음 주소로 구성을 확인하십시오. "
- },
- "new_codes_saved": {
- "en": "I saved a personal copy of these for later use",
- "es": "Guardé una copia personal de estos para uso posterior",
- "fr": "J'ai sauvegardé une copie personnelle de ceux-ci pour une utilisation ultérieure",
- "ko": "나는 나중에 사용하기 위해 이들의 개인 사본을 저장했다."
- },
- "account": {
- "en": "{idpName} identity account",
- "es": "Cuenta de identidad de {idpName}",
- "fr": "Compte d'identité {idpName}",
- "ko": "{idpName} 신원 계정"
- },
- "has_options_besides_codes": {
- "en": "Thankfully you do have other 2-Step Verification options set up but you should create more Printable codes if you plan to need them in the future.",
- "es": "Afortunadamente, tiene otras opciones de verificación en dos pasos configuradas, pero debe crear más códigos imprimibles si planea necesitarlos en el futuro.",
- "fr": "Heureusement, vous avez d'autres options de vérification en deux étapes, mais vous devriez créer plus de codes imprimables si vous prévoyez en avoir besoin à l'avenir.",
- "ko": "다른 2 단계 인증 옵션은 설정 되었으나 인쇄 가능 코드가 나중에 필요할 것으로 예상되면 코드를 더 만들어야 합니다."
- },
- "has_no_more_options": {
- "en": "Since you do not have any other 2-Step Verification options set up at this time, you will need to get more Printable codes before another one is required.",
- "es": "Como no tiene configuradas otras opciones de verificación en dos pasos en este momento, necesitará obtener más códigos imprimibles antes de que se requiera otro.",
- "fr": "Comme aucune autre option de vérification en deux étapes n'est configurée pour l'instant, vous devez obtenir davantage de codes imprimables avant d'en avoir besoin d'un autre.",
- "ko": "코드가 요구되기 전에 인쇄 가능 코드를 더 가져와야 합니다."
- },
- "use_others": {
- "en": "More options",
- "es": "Mas opciones",
- "fr": "Davantage d'options",
- "ko": "추가 옵션"
- },
- "use_u2f": {
- "en": "Use my security key instead",
- "es": "Use mi clave de seguridad en su lugar",
- "fr": "Utiliser plutôt ma clé de sécurité",
- "ko": "내 보안키 사용"
- },
- "use_webauthn": {
- "en": "Use my security key instead",
- "es": "Use mi clave de seguridad en su lugar",
- "fr": "Utiliser plutôt ma clé de sécurité",
- "ko": "내 보안키 사용"
- },
- "use_totp": {
- "en": "Use my authenticator app instead",
- "es": "Use la aplicación autenticación en su lugar",
- "fr": "Utiliser plutôt mon application d'authentification",
- "ko": "내 인증 앱 사용"
- },
- "use_backupcode": {
- "en": "Use a printable code instead",
- "es": "Use un código imprimible en su lugar",
- "fr": "Utiliser plutôt un code imprimable",
- "ko": "인쇄 가능한 코드 사용"
- },
- "use_help": {
- "en": "I need help",
- "es": "necesito ayuda",
- "fr": "j'ai besoin d'aide",
- "ko": "도움이 필요해."
- },
- "use_manager": {
- "en": "Use code from my recovery contact",
- "es": "Usar código de mi contacto de recuperación",
- "fr": "Utiliser le code de mon contact de récupération",
- "ko": "복구 담당자의 코드 사용"
- },
- "button_verify": {
- "en": "Verify",
- "es": "Verificar",
- "fr": "Vérifier",
- "ko": "검증"
- },
- "button_later": {
- "en": "Remind me later",
- "es": "Recuérdame más tarde",
- "fr": "Rappelez-moi plus tard",
- "ko": "추후 알림"
- },
- "button_enable": {
- "en": "Enable now",
- "es": "Habilite ahora",
- "fr": "Activer maintenant",
- "ko": "지금 사용"
- },
- "button_set_up": {
- "en": "Set up now",
- "es": "Configurar ahora",
- "fr": "Configurer maintenant",
- "ko": "지금 설정"
- },
- "button_try_again": {
- "en": "Try again",
- "es": "Inténtalo de nuevo",
- "fr": "Essayer de nouveau",
- "ko": "다시 시도"
- },
- "button_get_more": {
- "en": "Get more",
- "es": "Obtenga más",
- "fr": "Avoir plus",
- "ko": "더 가져오기"
- },
- "button_continue": {
- "en": "Continue",
- "es": "Continuar",
- "fr": "Continuer",
- "ko": "계속하다"
- },
- "button_print": {
- "en": "Print",
- "es": "Imprimir",
- "fr": "Imprimer",
- "ko": "인쇄"
- },
- "button_download": {
- "en": "Download",
- "es": "Descargar",
- "fr": "Télécharger",
- "ko": "다운로드"
- },
- "button_copy": {
- "en": "Copy",
- "es": "Copiar",
- "fr": "Copier",
- "ko": "사본"
- },
- "button_send": {
- "en": "Send code",
- "es": "Enviar código",
- "fr": "Envoyer code",
- "ko": "코드 보내기"
- },
- "button_cancel": {
- "en": "Cancel",
- "es": "Cancelar",
- "fr": "Annuler",
- "ko": "취소"
- },
- "button_copied": {
- "en": "Copied ✓",
- "es": "Copiado ✓",
- "fr": "Copié ✓",
- "ko": "복사 됨 ✓"
- },
- "remember_this": {
- "en": "Remember this browser for 30 days",
- "es": "Recuerde esta navegador por 30 días",
- "fr": "Se rappeler de ce navigatuer pour 30 jours",
- "ko": "이 브라우저를 30일간 기억"
- },
- "unsupported": {
- "en": "Not supported in this browser",
- "es": "No compatible con este navegador",
- "fr": "Non pris en charge dans ce navigateur",
- "ko": "이 브라우저에서는 지원되지 않습니다."
- }
-}
diff --git a/modules/material/locales/en/LC_MESSAGES/material.po b/modules/material/locales/en/LC_MESSAGES/material.po
index d388a34d..56c7384f 100644
--- a/modules/material/locales/en/LC_MESSAGES/material.po
+++ b/modules/material/locales/en/LC_MESSAGES/material.po
@@ -44,6 +44,183 @@ msgstr "Change"
msgid "{footer:copyright}"
msgstr "Unauthorized use of this site is prohibited and may be subjected to civil and criminal prosecution."
+msgid "{mfa:title}"
+msgstr "2-Step Verification"
+
+msgid "{mfa:header}"
+msgstr "2-Step Verification"
+
+msgid "{mfa:backupcode_header}"
+msgstr "Printable code"
+
+msgid "{mfa:backupcode_icon}"
+msgstr "Printable code icon"
+
+msgid "{mfa:backupcode_reminder}"
+msgstr "Each code can only be used once, so the code you enter this time will be used up and will not be available again."
+
+msgid "{mfa:backupcode_input}"
+msgstr "Enter code"
+
+msgid "{mfa:totp_header}"
+msgstr "Get a code from your authenticator app"
+
+msgid "{mfa:totp_icon}"
+msgstr "Authenticator app icon"
+
+msgid "{mfa:totp_input}"
+msgstr "Enter 6-digit code"
+
+msgid "{mfa:webauthn_header}"
+msgstr "Security key"
+
+msgid "{mfa:u2f_icon}"
+msgstr "USB key icon"
+
+msgid "{mfa:webauthn_icon}"
+msgstr "USB key icon"
+
+msgid "{mfa:webauthn_instructions}"
+msgstr "You may now insert your security key and press its button."
+
+msgid "{mfa:webauthn_unsupported}"
+msgstr "Unsupported in your current browser. Please consider a more secure browser like Google Chrome."
+
+msgid "{mfa:webauthn_error_unknown}"
+msgstr "Something went wrong with that request, unable to verify at this time."
+
+msgid "{mfa:webauthn_error_abort}"
+msgstr "It looks like you clicked cancel. Would you like us to try again?"
+
+msgid "{mfa:webauthn_error_not_allowed}"
+msgstr "Something about that didn't work. Please ensure that your security key is plugged in and that you touch it within 60 seconds when it blinks."
+
+msgid "{mfa:manager_icon}"
+msgstr "Recovery contact icon"
+
+msgid "{mfa:manager_header}"
+msgstr "Ask Your Recovery Contact for Help"
+
+msgid "{mfa:manager_info}"
+msgstr "You can send a 2-step verification code to your recovery contact (usually your supervisor). The email we have for your recovery contact is:%managerEmail%
We've hidden most of the letters for your contact's protection."
+
+msgid "{mfa:manager_sent}"
+msgstr "A temporary code was sent your recovery contact at %managerEmail%."
+
+msgid "{mfa:manager_input}"
+msgstr "Enter code"
+
+msgid "{mfa:shield_icon}"
+msgstr "Shield icon"
+
+msgid "{mfa:required_header}"
+msgstr "Protect this account"
+
+msgid "{mfa:required_info}"
+msgstr "Your identity account requires additional security, you must set up 2-Step Verification at this time."
+
+msgid "{mfa:running_out_header}"
+msgstr "Almost out of printable codes"
+
+msgid "{mfa:running_out_info}"
+msgstr "You only have %numBackupCodesRemaining% more left."
+
+msgid "{mfa:no_more_codes_header}"
+msgstr "Last printable code used"
+
+msgid "{mfa:new_codes_header}"
+msgstr "New printable codes"
+
+msgid "{mfa:old_codes_gone}"
+msgstr "You may now discard any of your previous codes, they have been deleted."
+
+msgid "{mfa:new_codes_info}"
+msgstr "Printable codes should be treated with the same level of attention as any password."
+
+msgid "{mfa:new_codes_only_once}"
+msgstr "Each code may only be used once."
+
+msgid "{mfa:new_codes_failed}"
+msgstr "Something went wrong while creating new printable codes for you. We are sorry for the inconvenience, please check your configuration at the following address after continuing: "
+
+msgid "{mfa:new_codes_saved}"
+msgstr "I saved a personal copy of these for later use"
+
+msgid "{mfa:account}"
+msgstr "%idpName% identity account"
+
+msgid "{mfa:has_options_besides_codes}"
+msgstr "Thankfully you do have other 2-Step Verification options set up but you should create more Printable codes if you plan to need them in the future."
+
+msgid "{mfa:has_no_more_options}"
+msgstr "Since you do not have any other 2-Step Verification options set up at this time, you will need to get more Printable codes before another one is required."
+
+msgid "{mfa:use_others}"
+msgstr "More options"
+
+msgid "{mfa:use_u2f}"
+msgstr "Use my security key instead"
+
+msgid "{mfa:use_webauthn}"
+msgstr "Use my security key instead"
+
+msgid "{mfa:use_totp}"
+msgstr "Use my authenticator app instead"
+
+msgid "{mfa:use_backupcode}"
+msgstr "Use a printable code instead"
+
+msgid "{mfa:use_help}"
+msgstr "I need help"
+
+msgid "{mfa:use_manager}"
+msgstr "Use code from my recovery contact"
+
+msgid "{mfa:button_verify}"
+msgstr "Verify"
+
+msgid "{mfa:button_later}"
+msgstr "Remind me later"
+
+msgid "{mfa:button_enable}"
+msgstr "Enable now"
+
+msgid "{mfa:button_set_up}"
+msgstr "Set up now"
+
+msgid "{mfa:button_try_again}"
+msgstr "Try again"
+
+msgid "{mfa:button_get_more}"
+msgstr "Get more"
+
+msgid "{mfa:button_continue}"
+msgstr "Continue"
+
+msgid "{mfa:button_print}"
+msgstr "Print"
+
+msgid "{mfa:button_download}"
+msgstr "Download"
+
+msgid "{mfa:button_copy}"
+msgstr "Copy"
+
+msgid "{mfa:button_send}"
+msgstr "Send code"
+
+msgid "{mfa:button_cancel}"
+msgstr "Cancel"
+
+msgid "{mfa:button_copied}"
+msgstr "Copied ✓"
+
+msgid "{mfa:remember_this}"
+msgstr "Remember this browser for 30 days"
+
+msgid "{mfa:unsupported}"
+msgstr "Not supported in this browser"
+
msgid "{selectidp-links:title}"
msgstr "Choose an identity account"
diff --git a/modules/material/locales/es/LC_MESSAGES/material.po b/modules/material/locales/es/LC_MESSAGES/material.po
index fe353d52..493bdc8c 100644
--- a/modules/material/locales/es/LC_MESSAGES/material.po
+++ b/modules/material/locales/es/LC_MESSAGES/material.po
@@ -9,7 +9,7 @@ msgid "{about2expire:expiring_in_a_day}"
msgstr "Su contraseña caducará en un día."
msgid "{about2expire:expiring_soon}"
-msgstr "Su contraseña caducará en {daysLeft} días."
+msgstr "Su contraseña caducará en %daysLeft% días."
msgid "{about2expire:change_now}"
msgstr "¿Quieres cambiarlo ahora?"
@@ -44,6 +44,183 @@ msgstr "Cambiar"
msgid "{footer:copyright}"
msgstr "El uso no autorizado de este sitio está prohibido y puede ser sometido a procesamiento civil y penal."
+msgid "{mfa:title}"
+msgstr "Verificación en 2 pasos"
+
+msgid "{mfa:header}"
+msgstr "Verificación en 2 pasos"
+
+msgid "{mfa:backupcode_header}"
+msgstr "código imprimible"
+
+msgid "{mfa:backupcode_icon}"
+msgstr "icono de código imprimible"
+
+msgid "{mfa:backupcode_reminder}"
+msgstr "Cada código solo se puede usar una vez, por lo que el código que ingrese esta vez se agotará y no estará disponible nuevamente."
+
+msgid "{mfa:backupcode_input}"
+msgstr "Introduzca el código"
+
+msgid "{mfa:totp_header}"
+msgstr "Obtenga un código de su aplicación de autenticación"
+
+msgid "{mfa:totp_icon}"
+msgstr "Icono de aplicación de teléfono inteligente"
+
+msgid "{mfa:totp_input}"
+msgstr "Ingrese el código de 6 dígitos"
+
+msgid "{mfa:webauthn_header}"
+msgstr "Clave de seguridad"
+
+msgid "{mfa:u2f_icon}"
+msgstr "Icono de la llave USB"
+
+msgid "{mfa:webauthn_icon}"
+msgstr "Icono de la llave USB"
+
+msgid "{mfa:webauthn_instructions}"
+msgstr "Ahora puede insertar su clave de seguridad y presionar su botón."
+
+msgid "{mfa:webauthn_unsupported}"
+msgstr "No compatible en su navegador actual. Considere un navegador más seguro como Google Chrome."
+
+msgid "{mfa:webauthn_error_unknown}"
+msgstr "Algo salió mal con esa solicitud, no se pudo verificar en este momento."
+
+msgid "{mfa:webauthn_error_abort}"
+msgstr "Parece que has hecho clic en cancelar. ¿Quieres que lo intentemos de nuevo?"
+
+msgid "{mfa:webauthn_error_not_allowed}"
+msgstr "Algo de eso no funcionó. Por favor, asegúrese de que su clave de seguridad está conectada y de que la toca en un plazo de 60 segundos cuando parpadea."
+
+msgid "{mfa:manager_icon}"
+msgstr "Icono de contacto de recuperación"
+
+msgid "{mfa:manager_header}"
+msgstr "Pida ayuda de contacto de recuperación"
+
+msgid "{mfa:manager_info}"
+msgstr "Puede enviar un código de verificación de dos pasos a su contacto de recuperación (normalmente su supervisor). La dirección de correo electrónico que tenemos para su contacto de recuperación es:%managerEmail%
Ocultamos la mayoría de las letras para proteger a su contacto."
+
+msgid "{mfa:manager_sent}"
+msgstr "Se envió un código temporal a su contacto de recuperación en %managerEmail%."
+
+msgid "{mfa:manager_input}"
+msgstr "Introduzca el código"
+
+msgid "{mfa:shield_icon}"
+msgstr "Icono de escudo"
+
+msgid "{mfa:required_header}"
+msgstr "Protege esta cuenta"
+
+msgid "{mfa:required_info}"
+msgstr "Su cuenta de identidad requiere seguridad adicional, debe configurar la verificación en dos pasos en este momento."
+
+msgid "{mfa:running_out_header}"
+msgstr "Casi sin códigos imprimibles"
+
+msgid "{mfa:running_out_info}"
+msgstr "Solo tiene %numBackupCodesRemaining% más disponible."
+
+msgid "{mfa:no_more_codes_header}"
+msgstr "Último código imprimible utilizado"
+
+msgid "{mfa:new_codes_header}"
+msgstr "Nuevos códigos imprimibles"
+
+msgid "{mfa:old_codes_gone}"
+msgstr "Ahora puede descartar cualquiera de sus códigos anteriores, se han eliminado."
+
+msgid "{mfa:new_codes_info}"
+msgstr "Los códigos imprimibles deben tratarse con el mismo nivel de atención que cualquier contraseña."
+
+msgid "{mfa:new_codes_only_once}"
+msgstr "Cada código solo puede usarse una vez."
+
+msgid "{mfa:new_codes_failed}"
+msgstr "Algo salió mal al crear nuevos códigos imprimibles para usted. Disculpe las molestias, compruebe su configuración en la siguiente dirección después de continuar: "
+
+msgid "{mfa:new_codes_saved}"
+msgstr "Guardé una copia personal de estos para uso posterior"
+
+msgid "{mfa:account}"
+msgstr "Cuenta de identidad de %idpName%"
+
+msgid "{mfa:has_options_besides_codes}"
+msgstr "Afortunadamente, tiene otras opciones de verificación en dos pasos configuradas, pero debe crear más códigos imprimibles si planea necesitarlos en el futuro."
+
+msgid "{mfa:has_no_more_options}"
+msgstr "Como no tiene configuradas otras opciones de verificación en dos pasos en este momento, necesitará obtener más códigos imprimibles antes de que se requiera otro."
+
+msgid "{mfa:use_others}"
+msgstr "Mas opciones"
+
+msgid "{mfa:use_u2f}"
+msgstr "Use mi clave de seguridad en su lugar"
+
+msgid "{mfa:use_webauthn}"
+msgstr "Use mi clave de seguridad en su lugar"
+
+msgid "{mfa:use_totp}"
+msgstr "Use la aplicación autenticación en su lugar"
+
+msgid "{mfa:use_backupcode}"
+msgstr "Use un código imprimible en su lugar"
+
+msgid "{mfa:use_help}"
+msgstr "necesito ayuda"
+
+msgid "{mfa:use_manager}"
+msgstr "Usar código de mi contacto de recuperación"
+
+msgid "{mfa:button_verify}"
+msgstr "Verificar"
+
+msgid "{mfa:button_later}"
+msgstr "Recuérdame más tarde"
+
+msgid "{mfa:button_enable}"
+msgstr "Habilite ahora"
+
+msgid "{mfa:button_set_up}"
+msgstr "Configurar ahora"
+
+msgid "{mfa:button_try_again}"
+msgstr "Inténtalo de nuevo"
+
+msgid "{mfa:button_get_more}"
+msgstr "Obtenga más"
+
+msgid "{mfa:button_continue}"
+msgstr "Continuar"
+
+msgid "{mfa:button_print}"
+msgstr "Imprimir"
+
+msgid "{mfa:button_download}"
+msgstr "Descargar"
+
+msgid "{mfa:button_copy}"
+msgstr "Copiar"
+
+msgid "{mfa:button_send}"
+msgstr "Enviar código"
+
+msgid "{mfa:button_cancel}"
+msgstr "Cancelar"
+
+msgid "{mfa:button_copied}"
+msgstr "Copiado ✓"
+
+msgid "{mfa:remember_this}"
+msgstr "Recuerde esta navegador por 30 días"
+
+msgid "{mfa:unsupported}"
+msgstr "No compatible con este navegador"
+
msgid "{selectidp-links:title}"
msgstr "Elige una cuenta de identidad"
diff --git a/modules/material/locales/fr/LC_MESSAGES/material.po b/modules/material/locales/fr/LC_MESSAGES/material.po
index 5a1d423d..3534d3f0 100644
--- a/modules/material/locales/fr/LC_MESSAGES/material.po
+++ b/modules/material/locales/fr/LC_MESSAGES/material.po
@@ -9,7 +9,7 @@ msgid "{about2expire:expiring_in_a_day}"
msgstr "Votre mot de passe expirera en un jour."
msgid "{about2expire:expiring_soon}"
-msgstr "Votre mot de passe expirera en {daysLeft} jours."
+msgstr "Votre mot de passe expirera en %daysLeft% jours."
msgid "{about2expire:change_now}"
msgstr "Voulez-vous le changer maintenant?"
@@ -44,6 +44,183 @@ msgstr "Changer"
msgid "{footer:copyright}"
msgstr "L'utilisation non autorisée de ce site est interdite et peut faire l'objet de poursuites civiles et pénales."
+msgid "{mfa:title}"
+msgstr "Vérification en deux étapes"
+
+msgid "{mfa:header}"
+msgstr "Vérification en deux étapes"
+
+msgid "{mfa:backupcode_header}"
+msgstr "code imprimable"
+
+msgid "{mfa:backupcode_icon}"
+msgstr "icône de code imprimable"
+
+msgid "{mfa:backupcode_reminder}"
+msgstr "Chaque code ne peut être utilisé qu'une seule fois, de sorte que le code que vous entrez cette fois sera épuisé et ne sera plus disponible."
+
+msgid "{mfa:backupcode_input}"
+msgstr "Entrer le code"
+
+msgid "{mfa:totp_header}"
+msgstr "Obtenez un code depuis votre application d'authentification"
+
+msgid "{mfa:totp_icon}"
+msgstr "Icône de l'application Smartphone"
+
+msgid "{mfa:totp_input}"
+msgstr "Entrer le code à 6 chiffres"
+
+msgid "{mfa:webauthn_header}"
+msgstr "Clé de sécurité"
+
+msgid "{mfa:u2f_icon}"
+msgstr "Icône de clé USB"
+
+msgid "{mfa:webauthn_icon}"
+msgstr "Icône de clé USB"
+
+msgid "{mfa:webauthn_instructions}"
+msgstr "Vous pouvez maintenant insérer votre clé de sécurité et appuyer sur le bouton."
+
+msgid "{mfa:webauthn_unsupported}"
+msgstr "Non compatible avec votre navigateur actuel. Veuillez considérer un navigateur plus sûr comme Google Chrome."
+
+msgid "{mfa:webauthn_error_unknown}"
+msgstr "Quelque chose s'est mal passé avec cette demande, impossible de vérifier pour le moment."
+
+msgid "{mfa:webauthn_error_abort}"
+msgstr "Il semble que vous ayez cliqué sur annuler. Souhaitez-vous que nous essayions à nouveau ?"
+
+msgid "{mfa:webauthn_error_not_allowed}"
+msgstr "Quelque chose n'a pas fonctionné avec ça. Veuillez vous assurer que votre clé de sécurité est insérée et que vous la touchez dans les 60 secondes lorsqu'elle clignote."
+
+msgid "{mfa:manager_icon}"
+msgstr "Icône du contact de récupération"
+
+msgid "{mfa:manager_header}"
+msgstr "Demandez de l'aide à votre contact de récupération"
+
+msgid "{mfa:manager_info}"
+msgstr "Vous pouvez envoyer un code de vérification en deux étapes à votre contact de récupération (en général votre superviseur). L'adresse électronique que nous avons pour votre contact de récupération est:%managerEmail%
. Nous avons caché la plupart des lettres pour la protection de votre contact."
+
+msgid "{mfa:manager_sent}"
+msgstr "Un code temporaire a été envoyé à votre contact de récupération à l'adresse %managerEmail%."
+
+msgid "{mfa:manager_input}"
+msgstr "Entrer le code"
+
+msgid "{mfa:shield_icon}"
+msgstr "Icône de bouclier"
+
+msgid "{mfa:required_header}"
+msgstr "Protéger ce compte"
+
+msgid "{mfa:required_info}"
+msgstr "Votre compte d'identité nécessite une sécurité supplémentaire, vous devez configurer la vérification en deux étapes en ce moment."
+
+msgid "{mfa:running_out_header}"
+msgstr "Codes imprimables presque épuisés"
+
+msgid "{mfa:running_out_info}"
+msgstr "Vous avez seulement %numBackupCodesRemaining% qui restent."
+
+msgid "{mfa:no_more_codes_header}"
+msgstr "Dernier code imprimable utilisé"
+
+msgid "{mfa:new_codes_header}"
+msgstr "Nouveaux codes imprimables"
+
+msgid "{mfa:old_codes_gone}"
+msgstr "Vous pouvez maintenant jeter tous vos codes précédents, ils ont été supprimés."
+
+msgid "{mfa:new_codes_info}"
+msgstr "Les codes imprimables doivent être traités avec le même niveau d'attention que les mots de passe."
+
+msgid "{mfa:new_codes_only_once}"
+msgstr "Chaque code ne peut être utilisé qu'une seule fois."
+
+msgid "{mfa:new_codes_failed}"
+msgstr "Une erreur s'est produite lors de la création de nouveaux codes imprimables. Nous sommes désolés pour le dérangement. Veuillez vérifier votre configuration à l'adresse suivante après avoir continué: "
+
+msgid "{mfa:new_codes_saved}"
+msgstr "J'ai sauvegardé une copie personnelle de ceux-ci pour une utilisation ultérieure"
+
+msgid "{mfa:account}"
+msgstr "Compte d'identité %idpName%"
+
+msgid "{mfa:has_options_besides_codes}"
+msgstr "Heureusement, vous avez d'autres options de vérification en deux étapes, mais vous devriez créer plus de codes imprimables si vous prévoyez en avoir besoin à l'avenir."
+
+msgid "{mfa:has_no_more_options}"
+msgstr "Comme aucune autre option de vérification en deux étapes n'est configurée pour l'instant, vous devez obtenir davantage de codes imprimables avant d'en avoir besoin d'un autre."
+
+msgid "{mfa:use_others}"
+msgstr "Davantage d'options"
+
+msgid "{mfa:use_u2f}"
+msgstr "Utiliser plutôt ma clé de sécurité"
+
+msgid "{mfa:use_webauthn}"
+msgstr "Utiliser plutôt ma clé de sécurité"
+
+msgid "{mfa:use_totp}"
+msgstr "Utiliser plutôt mon application d'authentification"
+
+msgid "{mfa:use_backupcode}"
+msgstr "Utiliser plutôt un code imprimable"
+
+msgid "{mfa:use_help}"
+msgstr "j'ai besoin d'aide"
+
+msgid "{mfa:use_manager}"
+msgstr "Utiliser le code de mon contact de récupération"
+
+msgid "{mfa:button_verify}"
+msgstr "Vérifier"
+
+msgid "{mfa:button_later}"
+msgstr "Rappelez-moi plus tard"
+
+msgid "{mfa:button_enable}"
+msgstr "Activer maintenant"
+
+msgid "{mfa:button_set_up}"
+msgstr "Configurer maintenant"
+
+msgid "{mfa:button_try_again}"
+msgstr "Essayer de nouveau"
+
+msgid "{mfa:button_get_more}"
+msgstr "Avoir plus"
+
+msgid "{mfa:button_continue}"
+msgstr "Continuer"
+
+msgid "{mfa:button_print}"
+msgstr "Imprimer"
+
+msgid "{mfa:button_download}"
+msgstr "Télécharger"
+
+msgid "{mfa:button_copy}"
+msgstr "Copier"
+
+msgid "{mfa:button_send}"
+msgstr "Envoyer code"
+
+msgid "{mfa:button_cancel}"
+msgstr "Annuler"
+
+msgid "{mfa:button_copied}"
+msgstr "Copié ✓"
+
+msgid "{mfa:remember_this}"
+msgstr "Se rappeler de ce navigatuer pour 30 jours"
+
+msgid "{mfa:unsupported}"
+msgstr "Non pris en charge dans ce navigateur"
+
msgid "{selectidp-links:title}"
msgstr "Choisissez un compte d'identité"
diff --git a/modules/material/locales/ko/LC_MESSAGES/material.po b/modules/material/locales/ko/LC_MESSAGES/material.po
index 0405ac2f..5f357566 100644
--- a/modules/material/locales/ko/LC_MESSAGES/material.po
+++ b/modules/material/locales/ko/LC_MESSAGES/material.po
@@ -9,7 +9,7 @@ msgid "{about2expire:expiring_in_a_day}"
msgstr "암호는 하루 만료됩니다."
msgid "{about2expire:expiring_soon}"
-msgstr "비밀번호는 {daysLeft} 일 후에 만료됩니다."
+msgstr "비밀번호는 %daysLeft% 일 후에 만료됩니다."
msgid "{about2expire:change_now}"
msgstr "지금 변경 하시겠습니까?"
@@ -44,6 +44,183 @@ msgstr "바꾸다"
msgid "{footer:copyright}"
msgstr "이 사이트의 무단 사용은 금지되어 있으며 민사 및 형사 고발의 대상이 될 수 있습니다."
+msgid "{mfa:title}"
+msgstr "2 단계 인증"
+
+msgid "{mfa:header}"
+msgstr "2 단계 인증"
+
+msgid "{mfa:backupcode_header}"
+msgstr "인쇄 가능한 코드"
+
+msgid "{mfa:backupcode_icon}"
+msgstr "인쇄 가능한 코드 아이콘"
+
+msgid "{mfa:backupcode_reminder}"
+msgstr "각 코드는 한번만 사용할 수 있으므로 이번에 입력한 코드는 소멸되어 다시 사용할 수 없습니다."
+
+msgid "{mfa:backupcode_input}"
+msgstr "코드 입력"
+
+msgid "{mfa:totp_header}"
+msgstr "인증 앱에서 코드 받기"
+
+msgid "{mfa:totp_icon}"
+msgstr "인증 응용 프로그램 아이콘"
+
+msgid "{mfa:totp_input}"
+msgstr "6 자리 코드 입력"
+
+msgid "{mfa:webauthn_header}"
+msgstr "보안키"
+
+msgid "{mfa:u2f_icon}"
+msgstr "USB 키 아이콘"
+
+msgid "{mfa:webauthn_icon}"
+msgstr "USB 키 아이콘"
+
+msgid "{mfa:webauthn_instructions}"
+msgstr "이제 보안 키를 삽입하고 단추를 누를 수 있습니다."
+
+msgid "{mfa:webauthn_unsupported}"
+msgstr "현재 브라우저에서 지원되지 않습니다. Chrome과 같은 보다 안전한 브라우저를 고려하십시오."
+
+msgid "{mfa:webauthn_error_unknown}"
+msgstr "요청에 문제가 발생하여 지금은 확인할 수 없습니다."
+
+msgid "{mfa:webauthn_error_abort}"
+msgstr "취소를 클릭하신 것 같습니다. 다시 시도해 보시겠어요?"
+
+msgid "{mfa:webauthn_error_not_allowed}"
+msgstr "문제가 해결되지 않았습니다. 보안 키가 연결되어 있고 깜박일 때 60초 이내에 터치했는지 확인하세요."
+
+msgid "{mfa:manager_icon}"
+msgstr "복구 연락처 아이콘"
+
+msgid "{mfa:manager_header}"
+msgstr "복구 담당자에게 도움을 요청하십시오"
+
+msgid "{mfa:manager_info}"
+msgstr "2단계 인증 코드를 복구 연락처(보통 상사)에게 보낼 수 있습니다. 복구 연락처에 대한 이메일은 다음과 같습니다. %managerEmail%
연락처 보호를 위해 대부분의 편지를 숨겼습니다."
+
+msgid "{mfa:manager_sent}"
+msgstr "%managerEmail% (으)로 복구 담당자에게 임시 코드를 보냈습니다."
+
+msgid "{mfa:manager_input}"
+msgstr "코드 입력"
+
+msgid "{mfa:shield_icon}"
+msgstr "방패 아이콘"
+
+msgid "{mfa:required_header}"
+msgstr "이 계정 보호"
+
+msgid "{mfa:required_info}"
+msgstr "신원 계정에 추가 보안이 필요하므로 현재 2 단계 인증을 설정해야합니다."
+
+msgid "{mfa:running_out_header}"
+msgstr "인쇄 가능한 코드가 거의 남지 않았습니다"
+
+msgid "{mfa:running_out_info}"
+msgstr "%numBackupCodesRemaining% 만 남았습니다."
+
+msgid "{mfa:no_more_codes_header}"
+msgstr "마지막 인쇄 가능 코드가 사용되었습니다."
+
+msgid "{mfa:new_codes_header}"
+msgstr "새로운 인쇄 가능 코드"
+
+msgid "{mfa:old_codes_gone}"
+msgstr "이제 이전 코드를 삭제해도 삭제 될 수 있습니다."
+
+msgid "{mfa:new_codes_info}"
+msgstr "인쇄 가능한 코드는 모든 비밀번호와 동일한주의 수준으로 처리되어야합니다."
+
+msgid "{mfa:new_codes_only_once}"
+msgstr "각 코드는 한 번만 사용할 수 있습니다."
+
+msgid "{mfa:new_codes_failed}"
+msgstr "새로운 인쇄 가능한 코드를 만드는 동안 문제가 발생했습니다. 불편을 끼쳐 드려 죄송합니다. 계속 진행 한 후 다음 주소로 구성을 확인하십시오. "
+
+msgid "{mfa:new_codes_saved}"
+msgstr "나는 나중에 사용하기 위해 이들의 개인 사본을 저장했다."
+
+msgid "{mfa:account}"
+msgstr "%idpName% 신원 계정"
+
+msgid "{mfa:has_options_besides_codes}"
+msgstr "다른 2 단계 인증 옵션은 설정 되었으나 인쇄 가능 코드가 나중에 필요할 것으로 예상되면 코드를 더 만들어야 합니다."
+
+msgid "{mfa:has_no_more_options}"
+msgstr "코드가 요구되기 전에 인쇄 가능 코드를 더 가져와야 합니다."
+
+msgid "{mfa:use_others}"
+msgstr "추가 옵션"
+
+msgid "{mfa:use_u2f}"
+msgstr "내 보안키 사용"
+
+msgid "{mfa:use_webauthn}"
+msgstr "내 보안키 사용"
+
+msgid "{mfa:use_totp}"
+msgstr "내 인증 앱 사용"
+
+msgid "{mfa:use_backupcode}"
+msgstr "인쇄 가능한 코드 사용"
+
+msgid "{mfa:use_help}"
+msgstr "도움이 필요해."
+
+msgid "{mfa:use_manager}"
+msgstr "복구 담당자의 코드 사용"
+
+msgid "{mfa:button_verify}"
+msgstr "검증"
+
+msgid "{mfa:button_later}"
+msgstr "추후 알림"
+
+msgid "{mfa:button_enable}"
+msgstr "지금 사용"
+
+msgid "{mfa:button_set_up}"
+msgstr "지금 설정"
+
+msgid "{mfa:button_try_again}"
+msgstr "다시 시도"
+
+msgid "{mfa:button_get_more}"
+msgstr "더 가져오기"
+
+msgid "{mfa:button_continue}"
+msgstr "계속하다"
+
+msgid "{mfa:button_print}"
+msgstr "인쇄"
+
+msgid "{mfa:button_download}"
+msgstr "다운로드"
+
+msgid "{mfa:button_copy}"
+msgstr "사본"
+
+msgid "{mfa:button_send}"
+msgstr "코드 보내기"
+
+msgid "{mfa:button_cancel}"
+msgstr "취소"
+
+msgid "{mfa:button_copied}"
+msgstr "복사 됨 ✓"
+
+msgid "{mfa:remember_this}"
+msgstr "이 브라우저를 30일간 기억"
+
+msgid "{mfa:unsupported}"
+msgstr "이 브라우저에서는 지원되지 않습니다."
+
msgid "{selectidp-links:title}"
msgstr "ID 계정 선택"
diff --git a/modules/material/themes/material/default/other_mfas.twig b/modules/material/themes/material/default/other_mfas.twig
new file mode 100644
index 00000000..f333cddf
--- /dev/null
+++ b/modules/material/themes/material/default/other_mfas.twig
@@ -0,0 +1,27 @@
+{% if otherOptions|length > 0 %}
+