diff --git a/source/components/form/login.mjs b/source/components/form/login.mjs
index 9b755ee8802c49285d4f6e42a1395a2682cc7b45..ce35c5aa3436ac5ed3df012e3d5afad8c46daf29 100644
--- a/source/components/form/login.mjs
+++ b/source/components/form/login.mjs
@@ -10,22 +10,22 @@
  * For more information about purchasing a commercial license, please contact schukai GmbH.
  */
 
-import {instanceSymbol} from "../../constants.mjs";
-import {addAttributeToken} from "../../dom/attributes.mjs";
+import { instanceSymbol } from "../../constants.mjs";
+import { addAttributeToken } from "../../dom/attributes.mjs";
 import {
-    ATTRIBUTE_ERRORMESSAGE,
-    ATTRIBUTE_ROLE,
+	ATTRIBUTE_ERRORMESSAGE,
+	ATTRIBUTE_ROLE,
 } from "../../dom/constants.mjs";
-import {CustomControl} from "../../dom/customcontrol.mjs";
-import {CustomElement} from "../../dom/customelement.mjs";
+import { CustomControl } from "../../dom/customcontrol.mjs";
+import { CustomElement } from "../../dom/customelement.mjs";
 import {
-    assembleMethodSymbol,
-    registerCustomElement,
+	assembleMethodSymbol,
+	registerCustomElement,
 } from "../../dom/customelement.mjs";
-import {findTargetElementFromEvent} from "../../dom/events.mjs";
-import {isFunction} from "../../types/is.mjs";
-import {LoginStyleSheet} from "./stylesheet/login.mjs";
-import {fireCustomEvent} from "../../dom/events.mjs";
+import { findTargetElementFromEvent } from "../../dom/events.mjs";
+import { isFunction } from "../../types/is.mjs";
+import { LoginStyleSheet } from "./stylesheet/login.mjs";
+import { fireCustomEvent } from "../../dom/events.mjs";
 
 import "./form.mjs";
 import "./field-set.mjs";
@@ -35,11 +35,11 @@ import "./digits.mjs";
 import "../layout/collapse.mjs";
 import "../datatable/datasource/rest.mjs";
 
-import {InvalidStyleSheet} from "./stylesheet/invalid.mjs";
-import {getLocaleOfDocument} from "../../dom/locale.mjs";
-import {getWindow} from "../../dom/util.mjs";
+import { InvalidStyleSheet } from "./stylesheet/invalid.mjs";
+import { getLocaleOfDocument } from "../../dom/locale.mjs";
+import { getWindow } from "../../dom/util.mjs";
 
-export {Login};
+export { Login };
 
 /**
  * @private
@@ -131,860 +131,857 @@ const digitsCollapseSymbol = Symbol("digitsCollapse");
  * @summary A beautiful Login that can make your life easier and also looks good. It supports a lot of features.
  */
 class Login extends CustomElement {
-    /**
-     * This method is called by the `instanceof` operator.
-     * @returns {symbol}
-     */
-    static get [instanceSymbol]() {
-        return Symbol.for("@schukai/monster/components/form/login@@instance");
-    }
-
-    /**
-     *
-     * @return {Components.Form.Login
-     */
-    [assembleMethodSymbol]() {
-        super[assembleMethodSymbol]();
-
-        setTimeout(() => {
-            initControlReferences.call(this);
-            initEventHandler.call(this);
-
-            setTimeout(() => {
-                this.shadowRoot.querySelector("input[name='username']").focus();
-            }, 100);
-        }, 0);
-        return this;
-    }
-
-    /**
-     * To set the options via the HTML Tag, the attribute `data-monster-options` must be used.
-     * @see {@link https://monsterjs.org/en/doc/#configurate-a-monster-control}
-     *
-     * The individual configuration values can be found in the table.
-     *
-     * @property {Object} templates Template definitions
-     * @property {string} templates.main Main template
-     * @property {Object} labels Label definitions
-     * @property {Object} classes Class definitions
-     * @property {string} classes.usernameInvalid Class for invalid
-     * @property {string} classes.passwordInvalid Class for invalid
-     * @property {string} classes.emailInvalid Class for invalid
-     * @property {boolean} disabled Disabled
-     * @property {Object} features Feature definitions
-     * @property {boolean} features.forgotPassword Forgot Password enabled
-     * @property {boolean} features.redirectToFirstSuccessUrl Redirect to first success URL
-     * @property {Object} actions Action definitions
-     * @property {number} digits Digits
-     * @property {Object[]} successUrls Success URLs
-     * @property {string} successUrls.label Label
-     * @property {string} successUrls.url URL
-     * @property {number} timeoutForMessage Timeout for message
-     * @property {number} timeoutForSuccess Timeout for success
-     * @property {Object} accessKeys Access keys
-     * @property {string} accessKeys.loginLink Login link
-     * @property {string} accessKeys.username Username
-     * @property {string} accessKeys.password Password
-     * @property {Object} fetch Fetch definitions
-     * @property {Object} fetch.login Login fetch
-     * @property {string} fetch.login.url URL
-     * @property {string} fetch.login.method Method
-     * @property {string} fetch.login.mode Mode
-     * @property {Object} fetch.login.headers Headers
-     * @property {string} fetch.login.headers.accept Accept
-     * @property {string} fetch.login.credentials Credentials
-     * @property {Object} fetch.forgotPassword Forgot Password fetch
-     * @property {string} fetch.forgotPassword.url URL
-     * @property {string} fetch.forgotPassword.method Method
-     * @property {string} fetch.forgotPassword.mode Mode
-     * @property {Object} fetch.forgotPassword.headers Headers
-     * @property {string} fetch.forgotPassword.headers.accept Accept
-     * @property {string} fetch.forgotPassword.credentials Credentials
-     * @property {Object} fetch.digits Digits fetch
-     * @property {string} fetch.digits.url URL
-     * @property {string} fetch.digits.method Method
-     * @property {string} fetch.digits.mode Mode
-     * @property {Object} fetch.digits.headers Headers
-     * @property {string} fetch.digits.headers.accept Accept
-     * @property {string} fetch.digits.credentials Credentials
-     * @property {Object} fetch.secondFactor Second Factor fetch
-     * @property {string} fetch.secondFactor.url URL
-     * @property {string} fetch.secondFactor.method Method
-     * @property {string} fetch.secondFactor.mode Mode
-     * @property {Object} fetch.secondFactor.headers Headers
-     * @property {string} fetch.secondFactor.headers.accept Accept
-     * @property {string} fetch.secondFactor.credentials Credentials
-     */
-    get defaults() {
-        return Object.assign({}, super.defaults, {
-            templates: {
-                main: getTemplate(),
-            },
-            labels: getTranslations(),
-            classes: {
-                usernameInvalid: "",
-                passwordInvalid: "",
-                emailInvalid: "",
-            },
-            disabled: false,
-            features: {
-                forgotPassword: true,
-                redirectToFirstSuccessUrl: false,
-            },
-            actions: {},
-
-            digits: 6,
-
-            successUrls: [
-                {
-                    label: "Home",
-                    url: "/",
-                },
-                {
-                    label: "Logout",
-                    url: "/logout",
-                },
-            ],
-
-            timeoutForMessage: 3500,
-            timeoutForSuccess: 1000,
-
-            accessKeys: {
-                loginLink: "x",
-                username: "u",
-                password: "p",
-            },
-
-            fetch: {
-                login: {
-                    url: "",
-                    method: "POST",
-                    mode: "same-origin",
-                    headers: {
-                        "Accept": "application/json",
-                        "Content-Type": "application/json; charset=utf-8",
-                    },
-                    credentials: "same-origin",
-                },
-                forgotPassword: {
-                    url: "",
-                    method: "POST",
-                    mode: "same-origin",
-                    headers: {
-                        "Accept": "application/json",
-                        "Content-Type": "application/json; charset=utf-8",
-                    },
-                    credentials: "same-origin",
-                },
-                digits: {
-                    url: "",
-                    method: "POST",
-                    mode: "same-origin",
-                    headers: {
-                        "Accept": "application/json",
-                        "Content-Type": "application/json; charset=utf-8",
-                    },
-                    credentials: "same-origin",
-                },
-                secondFactor: {
-                    url: "",
-                    method: "POST",
-                    mode: "same-origin",
-                    headers: {
-                        "Accept": "application/json",
-                        "Content-Type": "application/json; charset=utf-8",
-                    },
-                    credentials: "same-origin",
-                },
-            },
-        });
-    }
-
-    /**
-     * Opens the login collapse and focuses the username control.
-     *
-     * @returns {Login}
-     */
-    openLogin() {
-        this[loginCollapseSymbol].open();
-        this.shadowRoot.querySelector("input[name='username']").focus();
-        return this;
-    }
-
-    /**
-     * Opens the forgot password collapse. If the feature `forgotPassword` is not enabled, an error will be thrown.
-     *
-     * @returns {Login}
-     * @throws {Error} If the feature is not enabled
-     */
-    openForgotPassword() {
-        if (!this.getOption("features.forgotPassword")) {
-            throw new Error("Forgot Password is not enabled");
-        }
-
-        this[forgotPasswordCollapseSymbol].open();
-        return this;
-    }
-
-    /**
-     * Opens the second factor collapse and focuses the second factor control.
-     * @returns {Login}
-     */
-    openSecondFactor() {
-        this[secondFactorCollapseSymbol].open();
-        this.shadowRoot.getElementById("secondFactorButton").focus();
-        return this;
-    }
-
-    /**
-     * Opens the digits collapse and focuses the digits control.
-     * @returns {Login}
-     */
-    openDigits() {
-        this[digitsCollapseSymbol].open();
-        this.shadowRoot.getElementById("digitsControl").focus();
-        return this;
-    }
-
-    /**
-     * Opens the logged in collapse. If the feature `redirectToFirstSuccessUrl` is enabled, the user will be redirected to the first success URL.
-     *
-     * @returns {Login}
-     */
-    openLoggedIn() {
-        this[loggedInCollapseSymbol].open();
-
-        if (this.getOption("features.redirectToFirstSuccessUrl")) {
-            setTimeout(() => {
-
-            const successUrl = this.getOption("successUrls");
-            if (successUrl.length > 0) {
-                const success = successUrl[0].url;
-                if (success) {
-                    getWindow().location.href = success;
-                }
-            }
-
-            }, this.getOption("timeoutForSuccess"));
-
-            return;
-
-        }
-
-        return this;
-    }
-
-    /**
-     * @return {string}
-     */
-    static getTag() {
-        return "monster-login";
-    }
-
-    /**
-     * @return {CSSStyleSheet[]}
-     */
-    static getCSSStyleSheet() {
-        return [LoginStyleSheet, InvalidStyleSheet];
-    }
+	/**
+	 * This method is called by the `instanceof` operator.
+	 * @returns {symbol}
+	 */
+	static get [instanceSymbol]() {
+		return Symbol.for("@schukai/monster/components/form/login@@instance");
+	}
+
+	/**
+	 *
+	 * @return {Components.Form.Login
+	 */
+	[assembleMethodSymbol]() {
+		super[assembleMethodSymbol]();
+
+		setTimeout(() => {
+			initControlReferences.call(this);
+			initEventHandler.call(this);
+
+			setTimeout(() => {
+				this.shadowRoot.querySelector("input[name='username']").focus();
+			}, 100);
+		}, 0);
+		return this;
+	}
+
+	/**
+	 * To set the options via the HTML Tag, the attribute `data-monster-options` must be used.
+	 * @see {@link https://monsterjs.org/en/doc/#configurate-a-monster-control}
+	 *
+	 * The individual configuration values can be found in the table.
+	 *
+	 * @property {Object} templates Template definitions
+	 * @property {string} templates.main Main template
+	 * @property {Object} labels Label definitions
+	 * @property {Object} classes Class definitions
+	 * @property {string} classes.usernameInvalid Class for invalid
+	 * @property {string} classes.passwordInvalid Class for invalid
+	 * @property {string} classes.emailInvalid Class for invalid
+	 * @property {boolean} disabled Disabled
+	 * @property {Object} features Feature definitions
+	 * @property {boolean} features.forgotPassword Forgot Password enabled
+	 * @property {boolean} features.redirectToFirstSuccessUrl Redirect to first success URL
+	 * @property {Object} actions Action definitions
+	 * @property {number} digits Digits
+	 * @property {Object[]} successUrls Success URLs
+	 * @property {string} successUrls.label Label
+	 * @property {string} successUrls.url URL
+	 * @property {number} timeoutForMessage Timeout for message
+	 * @property {number} timeoutForSuccess Timeout for success
+	 * @property {Object} accessKeys Access keys
+	 * @property {string} accessKeys.loginLink Login link
+	 * @property {string} accessKeys.username Username
+	 * @property {string} accessKeys.password Password
+	 * @property {Object} fetch Fetch definitions
+	 * @property {Object} fetch.login Login fetch
+	 * @property {string} fetch.login.url URL
+	 * @property {string} fetch.login.method Method
+	 * @property {string} fetch.login.mode Mode
+	 * @property {Object} fetch.login.headers Headers
+	 * @property {string} fetch.login.headers.accept Accept
+	 * @property {string} fetch.login.credentials Credentials
+	 * @property {Object} fetch.forgotPassword Forgot Password fetch
+	 * @property {string} fetch.forgotPassword.url URL
+	 * @property {string} fetch.forgotPassword.method Method
+	 * @property {string} fetch.forgotPassword.mode Mode
+	 * @property {Object} fetch.forgotPassword.headers Headers
+	 * @property {string} fetch.forgotPassword.headers.accept Accept
+	 * @property {string} fetch.forgotPassword.credentials Credentials
+	 * @property {Object} fetch.digits Digits fetch
+	 * @property {string} fetch.digits.url URL
+	 * @property {string} fetch.digits.method Method
+	 * @property {string} fetch.digits.mode Mode
+	 * @property {Object} fetch.digits.headers Headers
+	 * @property {string} fetch.digits.headers.accept Accept
+	 * @property {string} fetch.digits.credentials Credentials
+	 * @property {Object} fetch.secondFactor Second Factor fetch
+	 * @property {string} fetch.secondFactor.url URL
+	 * @property {string} fetch.secondFactor.method Method
+	 * @property {string} fetch.secondFactor.mode Mode
+	 * @property {Object} fetch.secondFactor.headers Headers
+	 * @property {string} fetch.secondFactor.headers.accept Accept
+	 * @property {string} fetch.secondFactor.credentials Credentials
+	 */
+	get defaults() {
+		return Object.assign({}, super.defaults, {
+			templates: {
+				main: getTemplate(),
+			},
+			labels: getTranslations(),
+			classes: {
+				usernameInvalid: "",
+				passwordInvalid: "",
+				emailInvalid: "",
+			},
+			disabled: false,
+			features: {
+				forgotPassword: true,
+				redirectToFirstSuccessUrl: false,
+			},
+			actions: {},
+
+			digits: 6,
+
+			successUrls: [
+				{
+					label: "Home",
+					url: "/",
+				},
+				{
+					label: "Logout",
+					url: "/logout",
+				},
+			],
+
+			timeoutForMessage: 3500,
+			timeoutForSuccess: 1000,
+
+			accessKeys: {
+				loginLink: "x",
+				username: "u",
+				password: "p",
+			},
+
+			fetch: {
+				login: {
+					url: "",
+					method: "POST",
+					mode: "same-origin",
+					headers: {
+						Accept: "application/json",
+						"Content-Type": "application/json; charset=utf-8",
+					},
+					credentials: "same-origin",
+				},
+				forgotPassword: {
+					url: "",
+					method: "POST",
+					mode: "same-origin",
+					headers: {
+						Accept: "application/json",
+						"Content-Type": "application/json; charset=utf-8",
+					},
+					credentials: "same-origin",
+				},
+				digits: {
+					url: "",
+					method: "POST",
+					mode: "same-origin",
+					headers: {
+						Accept: "application/json",
+						"Content-Type": "application/json; charset=utf-8",
+					},
+					credentials: "same-origin",
+				},
+				secondFactor: {
+					url: "",
+					method: "POST",
+					mode: "same-origin",
+					headers: {
+						Accept: "application/json",
+						"Content-Type": "application/json; charset=utf-8",
+					},
+					credentials: "same-origin",
+				},
+			},
+		});
+	}
+
+	/**
+	 * Opens the login collapse and focuses the username control.
+	 *
+	 * @returns {Login}
+	 */
+	openLogin() {
+		this[loginCollapseSymbol].open();
+		this.shadowRoot.querySelector("input[name='username']").focus();
+		return this;
+	}
+
+	/**
+	 * Opens the forgot password collapse. If the feature `forgotPassword` is not enabled, an error will be thrown.
+	 *
+	 * @returns {Login}
+	 * @throws {Error} If the feature is not enabled
+	 */
+	openForgotPassword() {
+		if (!this.getOption("features.forgotPassword")) {
+			throw new Error("Forgot Password is not enabled");
+		}
+
+		this[forgotPasswordCollapseSymbol].open();
+		return this;
+	}
+
+	/**
+	 * Opens the second factor collapse and focuses the second factor control.
+	 * @returns {Login}
+	 */
+	openSecondFactor() {
+		this[secondFactorCollapseSymbol].open();
+		this.shadowRoot.getElementById("secondFactorButton").focus();
+		return this;
+	}
+
+	/**
+	 * Opens the digits collapse and focuses the digits control.
+	 * @returns {Login}
+	 */
+	openDigits() {
+		this[digitsCollapseSymbol].open();
+		this.shadowRoot.getElementById("digitsControl").focus();
+		return this;
+	}
+
+	/**
+	 * Opens the logged in collapse. If the feature `redirectToFirstSuccessUrl` is enabled, the user will be redirected to the first success URL.
+	 *
+	 * @returns {Login}
+	 */
+	openLoggedIn() {
+		this[loggedInCollapseSymbol].open();
+
+		if (this.getOption("features.redirectToFirstSuccessUrl")) {
+			setTimeout(() => {
+				const successUrl = this.getOption("successUrls");
+				if (successUrl.length > 0) {
+					const success = successUrl[0].url;
+					if (success) {
+						getWindow().location.href = success;
+					}
+				}
+			}, this.getOption("timeoutForSuccess"));
+
+			return;
+		}
+
+		return this;
+	}
+
+	/**
+	 * @return {string}
+	 */
+	static getTag() {
+		return "monster-login";
+	}
+
+	/**
+	 * @return {CSSStyleSheet[]}
+	 */
+	static getCSSStyleSheet() {
+		return [LoginStyleSheet, InvalidStyleSheet];
+	}
 }
 
 function getTranslations() {
-    const locale = getLocaleOfDocument();
-    switch (locale.language) {
-        case "de":
-            return {
-                username: "Benutzername oder E-Mail",
-                password: "Passwort",
-                login: "Anmelden",
-                forgotPasswordLink: "Passwort vergessen?",
-                mailAddress: "E-Mail-Adresse",
-                requestLink: "Link anfordern",
-                digits: "Code",
-                loginLink: "Anmelden",
-                secondFactor: "Zweiter Faktor Code",
-                sendDigits: "Code senden",
-                sendSecondFactorDigits: "Code senden",
-                resetLoginProcess: "Zurück zum Login",
-                messageEmptyUserName: "Bitte geben Sie Ihren Benutzernamen ein",
-                messageEmptyPassword: "Bitte geben Sie Ihr Passwort ein",
-                messageEmptyBoth:
-                    "Bitte geben Sie Ihren Benutzernamen und Ihr Passwort ein",
-                messageEmptyEmail: "Bitte geben Sie Ihre E-Mail-Adresse ein",
-                messageInvalidEmail: "Bitte geben Sie eine gültige E-Mail-Adresse ein",
-                digitsEmpty: "Bitte geben Sie Ihren Code ein",
-                digitsInvalid: "Bitte geben Sie einen gültigen Code ein",
-                messageLoginFailed:
-                    "Anmeldung fehlgeschlagen, bitte überprüfen Sie Ihre Eingaben.",
-                messageForbidden:
-                    "Die Anmeldung war erfolgreich, aber Sie haben keine Berechtigung. Sie können sich <b>nicht</b> anmelden.<br>Sie können einen anderen Benutzer auswählen oder sich an den Administrator wenden.",
-                messageSomethingWentWrong:
-                    "Etwas ist schief gelaufen, bitte versuchen Sie es später erneut",
-                messageThisFormIsNotConfigured:
-                    "Dieses Formular ist nicht konfiguriert.",
-                messagePasswordResetDisabled:
-                    "Diese Funktion funktioniert nicht, da die Zwei-Faktor-Authentifizierung bei Ihrem Konto aktiviert ist.<br>Bitte kontaktieren Sie den Administrator.",
-            };
-        case "es":
-            return {
-                username: "Nombre de usuario o correo electrónico",
-                password: "Contraseña",
-                login: "Iniciar sesión",
-                forgotPasswordLink: "¿Olvidaste tu contraseña?",
-                mailAddress: "Dirección de correo electrónico",
-                requestLink: "Solicitar enlace",
-                digits: "Código",
-                loginLink: "Iniciar sesión",
-                secondFactor: "Código de segundo factor",
-                sendDigits: "Enviar código",
-                sendSecondFactorDigits: "Enviar código",
-                resetLoginProcess: "Volver al inicio de sesión",
-                messageEmptyUserName: "Por favor ingrese su nombre de usuario",
-                messageEmptyPassword: "Por favor ingrese su contraseña",
-                messageEmptyBoth: "Por favor ingrese su nombre de usuario y contraseña",
-                messageEmptyEmail:
-                    "Por favor ingrese su dirección de correo electrónico",
-                messageInvalidEmail:
-                    "Por favor ingrese una dirección de correo electrónico válida",
-                digitsEmpty: "Por favor ingrese su código",
-                digitsInvalid: "Por favor ingrese un código válido",
-                messageLoginFailed:
-                    "Error al iniciar sesión, por favor verifique sus datos.",
-                messageForbidden:
-                    "El inicio de sesión fue exitoso, pero no tienes permisos. <b>No puedes</b> iniciar sesión.<br>Puedes seleccionar otro usuario o contactar al administrador.",
-                messageSomethingWentWrong:
-                    "Algo salió mal, por favor intenta de nuevo más tarde.",
-                messageThisFormIsNotConfigured: "Este formulario no está configurado.",
-                messagePasswordResetDisabled:
-                    "Esta función no funciona porque la autenticación de dos factores está activada en su cuenta. Por favor, póngase en contacto con el administrador.",
-            };
-        case "zh":
-            return {
-                username: "用户名或电子邮箱",
-                password: "密码",
-                login: "登录",
-                forgotPasswordLink: "忘记密码?",
-                mailAddress: "电子邮件地址",
-                requestLink: "请求链接",
-                digits: "验证码",
-                loginLink: "登录",
-                secondFactor: "二次验证码",
-                sendDigits: "发送验证码",
-                sendSecondFactorDigits: "发送验证码",
-                resetLoginProcess: "返回登录",
-                messageEmptyUserName: "请输入用户名",
-                messageEmptyPassword: "请输入密码",
-                messageEmptyBoth: "请输入用户名和密码",
-                messageEmptyEmail: "请输入电子邮件地址",
-                messageInvalidEmail: "请输入有效的电子邮件地址",
-                digitsEmpty: "请输入验证码",
-                digitsInvalid: "请输入有效的验证码",
-                messageLoginFailed: "登录失败,请检查您的输入。",
-                messageForbidden:
-                    "登录成功,但您没有权限。您<b>不能</b>登录。<br>您可以选择其他用户或联系管理员。",
-                messageSomethingWentWrong: "出了点问题,请稍后再试。",
-                messageThisFormIsNotConfigured: "此表单尚未配置。",
-                messagePasswordResetDisabled:
-                    "此功能无法使用,因为您的帐户启用了双因素身份验证。请联系管理员。",
-            };
-
-        case "hi":
-            return {
-                username: "उपयोगकर्ता नाम या ई-मेल",
-                password: "पासवर्ड",
-                login: "लॉग इन करें",
-                forgotPasswordLink: "पासवर्ड भूल गए?",
-                mailAddress: "ई-मेल पता",
-                requestLink: "लिंक का अनुरोध करें",
-                digits: "कोड",
-                loginLink: "लॉग इन करें",
-                secondFactor: "दूसरा फैक्टर कोड",
-                sendDigits: "कोड भेजें",
-                sendSecondFactorDigits: "कोड भेजें",
-                resetLoginProcess: "लॉगिन पर वापस जाएं",
-                messageEmptyUserName: "कृपया अपना उपयोगकर्ता नाम दर्ज करें",
-                messageEmptyPassword: "कृपया अपना पासवर्ड दर्ज करें",
-                messageEmptyBoth: "कृपया अपना उपयोगकर्ता नाम और पासवर्ड दर्ज करें",
-                messageEmptyEmail: "कृपया अपना ई-मेल पता दर्ज करें",
-                messageInvalidEmail: "कृपया एक वैध ई-मेल पता दर्ज करें",
-                digitsEmpty: "कृपया अपना कोड दर्ज करें",
-                digitsInvalid: "कृपया एक वैध कोड दर्ज करें",
-                messageLoginFailed: "लॉगिन विफल हुआ, कृपया अपनी जानकारी की जांच करें।",
-                messageForbidden:
-                    "लॉगिन सफल रहा लेकिन आपके पास अनुमति नहीं है। आप <b>लॉगिन नहीं</b> कर सकते।<br>आप दूसरा उपयोगकर्ता चुन सकते हैं या प्रशासक से संपर्क कर सकते हैं।",
-                messageSomethingWentWrong: "कुछ गलत हुआ, कृपया बाद में पुनः प्रयास करें।",
-                messageThisFormIsNotConfigured: "यह फ़ॉर्म कॉन्फ़िगर नहीं है।",
-                messagePasswordResetDisabled:
-                    "यह सुविधा काम नहीं करती क्योंकि आपके खाते में दो घटक प्रमाणीकरण सक्षम है। कृपया प्रशासक से संपर्क करें।",
-            };
-
-        case "bn":
-            return {
-                username: "ইউজারনেম বা ই-মেইল",
-                password: "পাসওয়ার্ড",
-                login: "লগইন করুন",
-                forgotPasswordLink: "পাসওয়ার্ড ভুলে গেছেন?",
-                mailAddress: "ই-মেইল ঠিকানা",
-                requestLink: "লিংক অনুরোধ করুন",
-                digits: "কোড",
-                loginLink: "লগইন করুন",
-                secondFactor: "দ্বিতীয় ফ্যাক্টর কোড",
-                sendDigits: "কোড পাঠান",
-                sendSecondFactorDigits: "কোড পাঠান",
-                resetLoginProcess: "লগইনে ফিরে যান",
-                messageEmptyUserName: "দয়া করে আপনার ইউজারনেম লিখুন",
-                messageEmptyPassword: "দয়া করে আপনার পাসওয়ার্ড লিখুন",
-                messageEmptyBoth: "দয়া করে আপনার ইউজারনেম এবং পাসওয়ার্ড লিখুন",
-                messageEmptyEmail: "দয়া করে আপনার ই-মেইল ঠিকানা লিখুন",
-                messageInvalidEmail: "দয়া করে একটি বৈধ ই-মেইল ঠিকানা লিখুন",
-                digitsEmpty: "দয়া করে আপনার কোড লিখুন",
-                digitsInvalid: "দয়া করে একটি বৈধ কোড লিখুন",
-                messageLoginFailed: "লগইন ব্যর্থ হয়েছে, দয়া করে আপনার ইনপুট পরীক্ষা করুন।",
-                messageForbidden:
-                    "লগইন সফল হয়েছে, কিন্তু আপনার অনুমতি নেই। আপনি <b>লগইন করতে পারবেন না</b>।<br>আপনি অন্য ইউজার নির্বাচন করতে পারেন অথবা অ্যাডমিনিস্ট্রেটরের সাথে যোগাযোগ করতে পারেন।",
-                messageSomethingWentWrong: "কিছু ভুল হয়েছে, দয়া করে পরে আবার চেষ্টা করুন।",
-                messageThisFormIsNotConfigured: "এই ফর্মটি কনফিগার করা হয়নি।",
-                messagePasswordResetDisabled:
-                    "এই ফাংশনটি কার্যকর নয় কারণ আপনার অ্যাকাউন্টে দুটি ফ্যাক্টর প্রমাণীকরণ সক্রিয় করা আছে। দয়া করে প্রশাসকের সাথে যোগাযোগ করুন।",
-            };
-
-        case "pt": // Portuguese
-            return {
-                username: "Nome de usuário ou e-mail",
-                password: "Senha",
-                login: "Entrar",
-                forgotPasswordLink: "Esqueceu a senha?",
-                mailAddress: "Endereço de e-mail",
-                requestLink: "Solicitar link",
-                digits: "Código",
-                loginLink: "Entrar",
-                secondFactor: "Código do segundo fator",
-                sendDigits: "Enviar código",
-                sendSecondFactorDigits: "Enviar código",
-                resetLoginProcess: "Voltar ao login",
-                messageEmptyUserName: "Por favor, insira seu nome de usuário",
-                messageEmptyPassword: "Por favor, insira sua senha",
-                messageEmptyBoth: "Por favor, insira seu nome de usuário e senha",
-                messageEmptyEmail: "Por favor, insira seu endereço de e-mail",
-                messageInvalidEmail: "Por favor, insira um endereço de e-mail válido",
-                digitsEmpty: "Por favor, insira seu código",
-                digitsInvalid: "Por favor, insira um código válido",
-                messageLoginFailed: "Falha no login, verifique suas informações.",
-                messageForbidden:
-                    "Login foi bem-sucedido, mas você não tem permissão. Você <b>não pode</b> entrar.<br>Você pode escolher outro usuário ou entrar em contato com o administrador.",
-                messageSomethingWentWrong:
-                    "Algo deu errado, tente novamente mais tarde.",
-                messageThisFormIsNotConfigured: "Este formulário não está configurado.",
-                messagePasswordResetDisabled:
-                    "Esta função não funciona porque a autenticação de dois fatores<br>está ativada em sua conta. Por favor, entre em contato com o administrador.",
-            };
-
-        case "ru": // Russian
-            return {
-                username: "Имя пользователя или электронная почта",
-                password: "Пароль",
-                login: "Войти",
-                forgotPasswordLink: "Забыли пароль?",
-                mailAddress: "Адрес электронной почты",
-                requestLink: "Запросить ссылку",
-                digits: "Код",
-                loginLink: "Войти",
-                secondFactor: "Код второго фактора",
-                sendDigits: "Отправить код",
-                sendSecondFactorDigits: "Отправить код",
-                resetLoginProcess: "Вернуться к входу",
-                messageEmptyUserName: "Пожалуйста, введите имя пользователя",
-                messageEmptyPassword: "Пожалуйста, введите пароль",
-                messageEmptyBoth: "Пожалуйста, введите имя пользователя и пароль",
-                messageEmptyEmail: "Пожалуйста, введите адрес электронной почты",
-                messageInvalidEmail:
-                    "Пожалуйста, введите действительный адрес электронной почты",
-                digitsEmpty: "Пожалуйста, введите код",
-                digitsInvalid: "Пожалуйста, введите действительный код",
-                messageLoginFailed: "Ошибка входа, проверьте введенные данные.",
-                messageForbidden:
-                    "Вход выполнен, но у вас нет прав. Вы <b>не можете</b> войти.<br>Вы можете выбрать другого пользователя или связаться с администратором.",
-                messageSomethingWentWrong: "Что-то пошло не так, попробуйте позже.",
-                messageThisFormIsNotConfigured: "Эта форма не настроена.",
-                messagePasswordResetDisabled:
-                    "Эта функция не работает, потому что двухфакторная аутентификация<br> включена в вашей учетной записи. Пожалуйста, свяжитесь с администратором.",
-            };
-
-        case "ja": // Japanese
-            return {
-                username: "ユーザー名またはメールアドレス",
-                password: "パスワード",
-                login: "ログイン",
-                forgotPasswordLink: "パスワードを忘れましたか?",
-                mailAddress: "メールアドレス",
-                requestLink: "リンクをリクエスト",
-                digits: "コード",
-                loginLink: "ログイン",
-                secondFactor: "二要素コード",
-                sendDigits: "コードを送信",
-                sendSecondFactorDigits: "コードを送信",
-                resetLoginProcess: "ログインに戻る",
-                messageEmptyUserName: "ユーザー名を入力してください",
-                messageEmptyPassword: "パスワードを入力してください",
-                messageEmptyBoth: "ユーザー名とパスワードを入力してください",
-                messageEmptyEmail: "メールアドレスを入力してください",
-                messageInvalidEmail: "有効なメールアドレスを入力してください",
-                digitsEmpty: "コードを入力してください",
-                digitsInvalid: "有効なコードを入力してください",
-                messageLoginFailed:
-                    "ログインに失敗しました。入力内容をご確認ください。",
-                messageForbidden:
-                    "ログイン成功しましたが、権限がありません。<b>ログインできません</b>。<br>他のユーザーを選択するか、管理者に連絡してください。",
-                messageSomethingWentWrong:
-                    "問題が発生しました。後でもう一度お試しください。",
-                messageThisFormIsNotConfigured: "このフォームは設定されていません。",
-                messagePasswordResetDisabled:
-                    "この機能は使用できません。アカウントで二要素認証が有効になっているため、管理者に連絡してください。",
-            };
-
-        case "pa": // Western Punjabi
-            return {
-                username: "ਵਰਤੋਂਕਾਰ ਨਾਮ ਜਾਂ ਈ-ਮੇਲ",
-                password: "ਪਾਸਵਰਡ",
-                login: "ਲਾਗਿਨ ਕਰੋ",
-                forgotPasswordLink: "ਪਾਸਵਰਡ ਭੁੱਲ ਗਏ?",
-                mailAddress: "ਈ-ਮੇਲ ਪਤਾ",
-                requestLink: "ਲਿੰਕ ਦੀ ਬੇਨਤੀ ਕਰੋ",
-                digits: "ਕੋਡ",
-                loginLink: "ਲਾਗਿਨ ਕਰੋ",
-                secondFactor: "ਦੂਜਾ ਫੈਕਟਰ ਕੋਡ",
-                sendDigits: "ਕੋਡ ਭੇਜੋ",
-                sendSecondFactorDigits: "ਕੋਡ ਭੇਜੋ",
-                resetLoginProcess: "ਲੋਗਿਨ 'ਤੇ ਵਾਪਸ ਜਾਓ",
-                messageEmptyUserName: "ਕਿਰਪਾ ਕਰਕੇ ਆਪਣਾ ਵਰਤੋਂਕਾਰ ਨਾਮ ਦਰਜ ਕਰੋ",
-                messageEmptyPassword: "ਕਿਰਪਾ ਕਰਕੇ ਆਪਣਾ ਪਾਸਵਰਡ ਦਰਜ ਕਰੋ",
-                messageEmptyBoth: "ਕਿਰਪਾ ਕਰਕੇ ਆਪਣਾ ਵਰਤੋਂਕਾਰ ਨਾਮ ਤੇ ਪਾਸਵਰਡ ਦਰਜ ਕਰੋ",
-                messageEmptyEmail: "ਕਿਰਪਾ ਕਰਕੇ ਆਪਣਾ ਈ-ਮੇਲ ਪਤਾ ਦਰਜ ਕਰੋ",
-                messageInvalidEmail: "ਕਿਰਪਾ ਕਰਕੇ ਇਕ ਵੈਧ ਈ-ਮੇਲ ਪਤਾ ਦਰਜ ਕਰੋ",
-                digitsEmpty: "ਕਿਰਪਾ ਕਰਕੇ ਆਪਣਾ ਕੋਡ ਦਰਜ ਕਰੋ",
-                digitsInvalid: "ਕਿਰਪਾ ਕਰਕੇ ਇੱਕ ਵੈਧ ਕੋਡ ਦਰਜ ਕਰੋ",
-                messageLoginFailed: "ਲੋਗਿਨ ਅਸਫਲ ਹੋਇਆ, ਕਿਰਪਾ ਕਰਕੇ ਆਪਣੀ ਜਾਣਕਾਰੀ ਦੀ ਜਾਂਚ ਕਰੋ।",
-                messageForbidden:
-                    "ਲਾਗਿਨ ਸਫਲ ਹੋਇਆ, ਪਰ ਤੁਹਾਡੇ ਕੋਲ ਅਧਿਕਾਰ ਨਹੀਂ ਹਨ। ਤੁਸੀਂ <b>ਲਾਗਿਨ ਨਹੀਂ</b> ਕਰ ਸਕਦੇ।<br>ਤੁਸੀਂ ਹੋਰ ਵਰਤੋਂਕਾਰ ਚੁਣ सकते ਹੋ ਜਾਂ ਪ੍ਰਬੰਧਕ ਨਾਲ ਸੰਪਰਕ ਕਰ ਸਕਦੇ ਹੋ।",
-                messageSomethingWentWrong:
-                    "ਕੁਝ ਗਲਤ ਹੋ ਗਿਆ, ਕਿਰਪਾ ਕਰਕੇ ਬਾਅਦ ਵਿੱਚ ਮੁੜ ਕੋਸ਼ਿਸ਼ ਕਰੋ।",
-                messageThisFormIsNotConfigured: "ਇਸ ਫਾਰਮ ਨੂੰ ਸੰਰਚਿਤ ਨਹੀਂ ਕੀਤਾ ਗਿਆ ਹੈ।",
-                messagePasswordResetDisabled:
-                    "ਇਹ ਫੰਕਸ਼ਨ ਕਾਮ ਨਹੀਂ ਕਰਦਾ ਕਿਉਂਕਿ ਤੁਹਾਡੇ ਖਾਤੇ ਵਿੱਚ ਦੋ ਫੈਕਟਰ ਪ੍ਰਮਾਣੀਕਰਣ ਸਰਗਰਮ ਹੈ। ਕਿਰਪਾ ਕਰਕੇ ਪ੍ਰਬੰਧਕ ਨਾਲ ਸੰਪਰਕ ਕਰੋ।",
-            };
-
-        case "mr": // Marathi
-            return {
-                username: "वापरकर्तानाव किंवा ईमेल",
-                password: "संकेतशब्द",
-                login: "प्रवेश करा",
-                forgotPasswordLink: "संकेतशब्द विसरलात का?",
-                mailAddress: "ईमेल पत्ता",
-                requestLink: "लिंकची विनंती करा",
-                digits: "कोड",
-                loginLink: "प्रवेश करा",
-                secondFactor: "दुसरा घटक कोड",
-                sendDigits: "कोड पाठवा",
-                sendSecondFactorDigits: "कोड पाठवा",
-                resetLoginProcess: "प्रवेशावर परत जा",
-                messageEmptyUserName: "कृपया आपले वापरकर्तानाव प्रविष्ट करा",
-                messageEmptyPassword: "कृपया आपला संकेतशब्द प्रविष्ट करा",
-                messageEmptyBoth: "कृपया आपले वापरकर्तानाव आणि संकेतशब्द प्रविष्ट करा",
-                messageEmptyEmail: "कृपया आपला ईमेल पत्ता प्रविष्ट करा",
-                messageInvalidEmail: "कृपया वैध ईमेल पत्ता प्रविष्ट करा",
-                digitsEmpty: "कृपया आपला कोड प्रविष्ट करा",
-                digitsInvalid: "कृपया वैध कोड प्रविष्ट करा",
-                messageLoginFailed: "प्रवेश अयशस्वी, कृपया आपली माहिती तपासा.",
-                messageForbidden:
-                    "प्रवेश यशस्वी झाला, परंतु आपल्याकडे परवाना नाही. आपण <b>प्रवेश करू शकत नाही</b>.<br>आपण दुसरा वापरकर्ता निवडू शकता किंवा व्यवस्थापकाशी संपर्क साधू शकता.",
-                messageSomethingWentWrong: "काहीतरी चुकले, कृपया नंतर पुन्हा प्रयत्न करा.",
-                messageThisFormIsNotConfigured: "हे फॉर्म संरचित केलेले नाही.",
-                messagePasswordResetDisabled:
-                    "या कार्याची कामगिरी करत नाही कारण आपल्या खात्यात दोन घटक प्रमाणीकरण सक्रिय केले आहे. कृपया व्यवस्थापकाशी संपर्क साधा.",
-            };
-
-        case "fr": // French
-            return {
-                username: "Nom d'utilisateur ou e-mail",
-                password: "Mot de passe",
-                login: "Connexion",
-                forgotPasswordLink: "Mot de passe oublié ?",
-                mailAddress: "Adresse e-mail",
-                requestLink: "Demander un lien",
-                digits: "Code",
-                loginLink: "Connexion",
-                secondFactor: "Code du deuxième facteur",
-                sendDigits: "Envoyer le code",
-                sendSecondFactorDigits: "Envoyer le code",
-                resetLoginProcess: "Retour à la connexion",
-                messageEmptyUserName: "Veuillez entrer votre nom d'utilisateur",
-                messageEmptyPassword: "Veuillez entrer votre mot de passe",
-                messageEmptyBoth:
-                    "Veuillez entrer votre nom d'utilisateur et votre mot de passe",
-                messageEmptyEmail: "Veuillez entrer votre adresse e-mail",
-                messageInvalidEmail: "Veuillez entrer une adresse e-mail valide",
-                digitsEmpty: "Veuillez entrer votre code",
-                digitsInvalid: "Veuillez entrer un code valide",
-                messageLoginFailed:
-                    "Échec de la connexion, veuillez vérifier vos informations.",
-                messageForbidden:
-                    "La connexion a réussi, mais vous n'avez pas les permissions. Vous <b>ne pouvez pas</b> vous connecter.<br>Vous pouvez choisir un autre utilisateur ou contacter l'administrateur.",
-                messageSomethingWentWrong:
-                    "Une erreur s'est produite, veuillez réessayer plus tard.",
-                messageThisFormIsNotConfigured: "Ce formulaire n'est pas configuré.",
-                messagePasswordResetDisabled:
-                    "Cette fonctionnalité ne fonctionne pas car l'authentification à deux facteurs est activée sur<br>votre compte. Veuillez contacter l'administrateur.",
-            };
-
-        case "it": // Italian
-            return {
-                username: "Nome utente o e-mail",
-                password: "Password",
-                login: "Accedi",
-                forgotPasswordLink: "Password dimenticata?",
-                mailAddress: "Indirizzo e-mail",
-                requestLink: "Richiedi link",
-                digits: "Codice",
-                loginLink: "Accedi",
-                secondFactor: "Codice a due fattori",
-                sendDigits: "Invia codice",
-                sendSecondFactorDigits: "Invia codice",
-                resetLoginProcess: "Torna al login",
-                messageEmptyUserName: "Per favore, inserisci il tuo nome utente",
-                messageEmptyPassword: "Per favore, inserisci la tua password",
-                messageEmptyBoth:
-                    "Per favore, inserisci il tuo nome utente e la tua password",
-                messageEmptyEmail: "Per favore, inserisci il tuo indirizzo e-mail",
-                messageInvalidEmail: "Per favore, inserisci un indirizzo e-mail valido",
-                digitsEmpty: "Per favore, inserisci il tuo codice",
-                digitsInvalid: "Per favore, inserisci un codice valido",
-                messageLoginFailed: "Accesso fallito, verifica i tuoi dati.",
-                messageForbidden:
-                    "Accesso riuscito, ma non hai i permessi. Non puoi accedere.<br>Puoi scegliere un altro account o contattare l'amministratore.",
-                messageSomethingWentWrong:
-                    "Qualcosa è andato storto, riprova più tardi.",
-                messageThisFormIsNotConfigured: "Questo modulo non è configurato.",
-                messagePasswordResetDisabled:
-                    "Questa funzione non funziona perché l'autenticazione a due<br>fattori è attiva sul tuo account. Contatta l'amministratore.",
-            };
-
-        case "nl": // Dutch
-            return {
-                username: "Gebruikersnaam of e-mail",
-                password: "Wachtwoord",
-                login: "Inloggen",
-                forgotPasswordLink: "Wachtwoord vergeten?",
-                mailAddress: "E-mailadres",
-                requestLink: "Link aanvragen",
-                digits: "Code",
-                loginLink: "Inloggen",
-                secondFactor: "Tweede factor code",
-                sendDigits: "Code verzenden",
-                sendSecondFactorDigits: "Code verzenden",
-                resetLoginProcess: "Terug naar inloggen",
-                messageEmptyUserName: "Voer uw gebruikersnaam in",
-                messageEmptyPassword: "Voer uw wachtwoord in",
-                messageEmptyBoth: "Voer uw gebruikersnaam en wachtwoord in",
-                messageEmptyEmail: "Voer uw e-mailadres in",
-                messageInvalidEmail: "Voer een geldig e-mailadres in",
-                digitsEmpty: "Voer uw code in",
-                digitsInvalid: "Voer een geldige code in",
-                messageLoginFailed: "Inloggen mislukt, controleer uw gegevens.",
-                messageForbidden:
-                    "Inloggen geslaagd, maar u heeft geen permissies. U <b>kunt niet</b> inloggen.<br>U kunt een andere gebruiker selecteren of de beheerder contacteren.",
-                messageSomethingWentWrong:
-                    "Er is iets fout gegaan, probeer het later opnieuw.",
-                messageThisFormIsNotConfigured: "Dit formulier is niet geconfigureerd.",
-                messagePasswordResetDisabled:
-                    "Deze functie werkt niet omdat tweefactorauthenticatie is<br>ingeschakeld op uw account. Neem contact op met de beheerder.",
-            };
-
-        case "sv": // Swedish
-            return {
-                username: "Användarnamn eller e-post",
-                password: "Lösenord",
-                login: "Logga in",
-                forgotPasswordLink: "Glömt lösenord?",
-                mailAddress: "E-postadress",
-                requestLink: "Begär länk",
-                digits: "Kod",
-                loginLink: "Logga in",
-                secondFactor: "Tvåfaktorkod",
-                sendDigits: "Skicka kod",
-                sendSecondFactorDigits: "Skicka kod",
-                resetLoginProcess: "Tillbaka till inloggning",
-                messageEmptyUserName: "Ange ditt användarnamn",
-                messageEmptyPassword: "Ange ditt lösenord",
-                messageEmptyBoth: "Ange ditt användarnamn och lösenord",
-                messageEmptyEmail: "Ange din e-postadress",
-                messageInvalidEmail: "Ange en giltig e-postadress",
-                digitsEmpty: "Ange din kod",
-                digitsInvalid: "Ange en giltig kod",
-                messageLoginFailed:
-                    "Inloggning misslyckades, kontrollera dina uppgifter.",
-                messageForbidden:
-                    "Inloggningen lyckades, men du har inte behörighet. Du <b>kan inte</b> logga in.<br>Du kan välja en annan användare eller kontakta administratören.",
-                messageSomethingWentWrong: "Något gick fel, försök igen senare.",
-                messageThisFormIsNotConfigured: "Detta formulär är inte konfigurerat.",
-                messagePasswordResetDisabled:
-                    "Denna funktion fungerar inte eftersom tvåfaktorsautentisering är aktiverad på ditt konto. Kontakta administratören.",
-            };
-
-        case "pl": // Polish
-            return {
-                username: "Nazwa użytkownika lub e-mail",
-                password: "Hasło",
-                login: "Zaloguj się",
-                forgotPasswordLink: "Zapomniałeś hasła?",
-                mailAddress: "Adres e-mail",
-                requestLink: "Zażądaj linku",
-                digits: "Kod",
-                loginLink: "Zaloguj się",
-                secondFactor: "Kod drugiego czynnika",
-                sendDigits: "Wyślij kod",
-                sendSecondFactorDigits: "Wyślij kod",
-                resetLoginProcess: "Powrót do logowania",
-                messageEmptyUserName: "Wprowadź swoją nazwę użytkownika",
-                messageEmptyPassword: "Wprowadź swoje hasło",
-                messageEmptyBoth: "Wprowadź swoją nazwę użytkownika i hasło",
-                messageEmptyEmail: "Wprowadź swój adres e-mail",
-                messageInvalidEmail: "Wprowadź prawidłowy adres e-mail",
-                digitsEmpty: "Wprowadź swój kod",
-                digitsInvalid: "Wprowadź prawidłowy kod",
-                messageLoginFailed: "Logowanie nie powiodło się, sprawdź swoje dane.",
-                messageForbidden:
-                    "Logowanie powiodło się, ale nie masz uprawnień. <b>Nie możesz</b> się zalogować.<br>Możesz wybrać innego użytkownika lub skontaktować się z administratorem.",
-                messageSomethingWentWrong:
-                    "Coś poszło nie tak, spróbuj ponownie później.",
-                messageThisFormIsNotConfigured:
-                    "Ten formularz nie jest skonfigurowany.",
-                messagePasswordResetDisabled:
-                    "Ta funkcja nie działa, ponieważ włączona jest autoryzacja dwuetapowa na twoim koncie. Skontaktuj się z administratorem.",
-            };
-
-        case "da": // Danish
-            return {
-                username: "Brugernavn eller e-mail",
-                password: "Adgangskode",
-                login: "Log ind",
-                forgotPasswordLink: "Glemt adgangskode?",
-                mailAddress: "E-mail-adresse",
-                requestLink: "Anmod om link",
-                digits: "Kode",
-                loginLink: "Log ind",
-                secondFactor: "Tofaktorkode",
-                sendDigits: "Send kode",
-                sendSecondFactorDigits: "Send kode",
-                resetLoginProcess: "Tilbage til log ind",
-                messageEmptyUserName: "Indtast dit brugernavn",
-                messageEmptyPassword: "Indtast din adgangskode",
-                messageEmptyBoth: "Indtast dit brugernavn og din adgangskode",
-                messageEmptyEmail: "Indtast din e-mail-adresse",
-                messageInvalidEmail: "Indtast en gyldig e-mail-adresse",
-                digitsEmpty: "Indtast din kode",
-                digitsInvalid: "Indtast en gyldig kode",
-                messageLoginFailed: "Login mislykkedes, kontrollér dine oplysninger.",
-                messageForbidden:
-                    "Login lykkedes, men du har ikke tilladelse. Du <b>kan ikke</b> logge ind.<br>Du kan vælge en anden bruger eller kontakte administratoren.",
-                messageSomethingWentWrong: "Noget gik galt, prøv igen senere.",
-                messageThisFormIsNotConfigured: "Denne formular er ikke konfigureret.",
-                messagePasswordResetDisabled:
-                    "Denne funktion fungerer ikke, fordi tofaktorautentificering<br>er aktiveret på din konto. Kontakt administratoren.",
-            };
-
-        case "no": // Norwegian
-            return {
-                username: "Brukernavn eller e-post",
-                password: "Passord",
-                login: "Logg inn",
-                forgotPasswordLink: "Glemt passord?",
-                mailAddress: "E-postadresse",
-                requestLink: "Be om lenke",
-                digits: "Kode",
-                loginLink: "Logg inn",
-                secondFactor: "Tofaktorkode",
-                sendDigits: "Send kode",
-                sendSecondFactorDigits: "Send kode",
-                resetLoginProcess: "Tilbake til innlogging",
-                messageEmptyUserName: "Vennligst skriv inn brukernavnet ditt",
-                messageEmptyPassword: "Vennligst skriv inn passordet ditt",
-                messageEmptyBoth: "Vennligst skriv inn brukernavn og passord",
-                messageEmptyEmail: "Vennligst skriv inn e-postadressen din",
-                messageInvalidEmail: "Vennligst skriv inn en gyldig e-postadresse",
-                digitsEmpty: "Vennligst skriv inn koden din",
-                digitsInvalid: "Vennligst skriv inn en gyldig kode",
-                messageLoginFailed:
-                    "Innlogging mislyktes, vennligst sjekk informasjonen din.",
-                messageForbidden:
-                    "Innloggingen var vellykket, men du har ikke tillatelse. Du <b>kan ikke</b> logge inn.<br>Du kan velge en annen bruker eller kontakte administratoren.",
-                messageSomethingWentWrong:
-                    "Noe gikk galt, vennligst prøv igjen senere.",
-                messageThisFormIsNotConfigured: "Dette skjemaet er ikke konfigurert.",
-                messagePasswordResetDisabled:
-                    "Denne funksjonen fungerer ikke fordi<br>tofaktorautentisering er aktivert på kontoen din. Kontakt administratoren.",
-            };
-
-        case "cs": // Czech
-            return {
-                username: "Uživatelské jméno nebo e-mail",
-                password: "Heslo",
-                login: "Přihlásit se",
-                forgotPasswordLink: "Zapomněli jste heslo?",
-                mailAddress: "E-mailová adresa",
-                requestLink: "Požádat o odkaz",
-                digits: "Kód",
-                loginLink: "Přihlásit se",
-                secondFactor: "Dvoufázový kód",
-                sendDigits: "Odeslat kód",
-                sendSecondFactorDigits: "Odeslat kód",
-                resetLoginProcess: "Zpět na přihlášení",
-                messageEmptyUserName: "Zadejte své uživatelské jméno",
-                messageEmptyPassword: "Zadejte své heslo",
-                messageEmptyBoth: "Zadejte své uživatelské jméno a heslo",
-                messageEmptyEmail: "Zadejte svou e-mailovou adresu",
-                messageInvalidEmail: "Zadejte platnou e-mailovou adresu",
-                digitsEmpty: "Zadejte svůj kód",
-                digitsInvalid: "Zadejte platný kód",
-                messageLoginFailed: "Přihlášení se nezdařilo, zkontrolujte své údaje.",
-                messageForbidden:
-                    "Přihlášení bylo úspěšné, ale nemáte oprávnění. Nemůžete se přihlásit.<br>Vyberte jiného uživatele nebo kontaktujte správce.",
-                messageSomethingWentWrong: "Něco se pokazilo, zkuste to později.",
-                messageThisFormIsNotConfigured: "Tento formulář není nakonfigurován.",
-                messagePasswordResetDisabled:
-                    "Tato funkce nefunguje, protože je na vašem<br>účtu aktivováno dvoufaktorové ověřování. Kontaktujte správce.",
-            };
-
-        default:
-            return {
-                username: "Username or E-Mail",
-                password: "Password",
-                login: "Login",
-                forgotPasswordLink: "Forgot Password?",
-                mailAddress: "E-Mail-Address",
-                requestLink: "Request Link",
-                digits: "Code",
-                loginLink: "Login",
-                secondFactor: "Second Factor Code",
-                sendDigits: "Send Code",
-                sendSecondFactorDigits: "Send Code",
-                resetLoginProcess: "Back to Login",
-                messageEmptyUserName: "Please enter your username",
-                messageEmptyPassword: "Please enter your password",
-                messageEmptyBoth: "Please enter your username and password",
-                messageEmptyEmail: "Please enter your email address",
-                messageInvalidEmail: "Please enter a valid email address",
-                digitsEmpty: "Please enter your code",
-                digitsInvalid: "Please enter a valid code",
-                messageLoginFailed: "Login failed, please check your input.",
-                messageForbidden:
-                    "Login was successful, but you have no permission. You <b>cannot</b> login.<br>You can select another user or contact the administrator.",
-                messageSomethingWentWrong:
-                    "Something went wrong, please try again later.",
-                messageThisFormIsNotConfigured: "This form is not configured.",
-                messagePasswordResetDisabled:
-                    "This function does not work because two-factor<br>authentication is enabled on your account.<br>Please contact the administrator.",
-            };
-    }
+	const locale = getLocaleOfDocument();
+	switch (locale.language) {
+		case "de":
+			return {
+				username: "Benutzername oder E-Mail",
+				password: "Passwort",
+				login: "Anmelden",
+				forgotPasswordLink: "Passwort vergessen?",
+				mailAddress: "E-Mail-Adresse",
+				requestLink: "Link anfordern",
+				digits: "Code",
+				loginLink: "Anmelden",
+				secondFactor: "Zweiter Faktor Code",
+				sendDigits: "Code senden",
+				sendSecondFactorDigits: "Code senden",
+				resetLoginProcess: "Zurück zum Login",
+				messageEmptyUserName: "Bitte geben Sie Ihren Benutzernamen ein",
+				messageEmptyPassword: "Bitte geben Sie Ihr Passwort ein",
+				messageEmptyBoth:
+					"Bitte geben Sie Ihren Benutzernamen und Ihr Passwort ein",
+				messageEmptyEmail: "Bitte geben Sie Ihre E-Mail-Adresse ein",
+				messageInvalidEmail: "Bitte geben Sie eine gültige E-Mail-Adresse ein",
+				digitsEmpty: "Bitte geben Sie Ihren Code ein",
+				digitsInvalid: "Bitte geben Sie einen gültigen Code ein",
+				messageLoginFailed:
+					"Anmeldung fehlgeschlagen, bitte überprüfen Sie Ihre Eingaben.",
+				messageForbidden:
+					"Die Anmeldung war erfolgreich, aber Sie haben keine Berechtigung. Sie können sich <b>nicht</b> anmelden.<br>Sie können einen anderen Benutzer auswählen oder sich an den Administrator wenden.",
+				messageSomethingWentWrong:
+					"Etwas ist schief gelaufen, bitte versuchen Sie es später erneut",
+				messageThisFormIsNotConfigured:
+					"Dieses Formular ist nicht konfiguriert.",
+				messagePasswordResetDisabled:
+					"Diese Funktion funktioniert nicht, da die Zwei-Faktor-Authentifizierung bei Ihrem Konto aktiviert ist.<br>Bitte kontaktieren Sie den Administrator.",
+			};
+		case "es":
+			return {
+				username: "Nombre de usuario o correo electrónico",
+				password: "Contraseña",
+				login: "Iniciar sesión",
+				forgotPasswordLink: "¿Olvidaste tu contraseña?",
+				mailAddress: "Dirección de correo electrónico",
+				requestLink: "Solicitar enlace",
+				digits: "Código",
+				loginLink: "Iniciar sesión",
+				secondFactor: "Código de segundo factor",
+				sendDigits: "Enviar código",
+				sendSecondFactorDigits: "Enviar código",
+				resetLoginProcess: "Volver al inicio de sesión",
+				messageEmptyUserName: "Por favor ingrese su nombre de usuario",
+				messageEmptyPassword: "Por favor ingrese su contraseña",
+				messageEmptyBoth: "Por favor ingrese su nombre de usuario y contraseña",
+				messageEmptyEmail:
+					"Por favor ingrese su dirección de correo electrónico",
+				messageInvalidEmail:
+					"Por favor ingrese una dirección de correo electrónico válida",
+				digitsEmpty: "Por favor ingrese su código",
+				digitsInvalid: "Por favor ingrese un código válido",
+				messageLoginFailed:
+					"Error al iniciar sesión, por favor verifique sus datos.",
+				messageForbidden:
+					"El inicio de sesión fue exitoso, pero no tienes permisos. <b>No puedes</b> iniciar sesión.<br>Puedes seleccionar otro usuario o contactar al administrador.",
+				messageSomethingWentWrong:
+					"Algo salió mal, por favor intenta de nuevo más tarde.",
+				messageThisFormIsNotConfigured: "Este formulario no está configurado.",
+				messagePasswordResetDisabled:
+					"Esta función no funciona porque la autenticación de dos factores está activada en su cuenta. Por favor, póngase en contacto con el administrador.",
+			};
+		case "zh":
+			return {
+				username: "用户名或电子邮箱",
+				password: "密码",
+				login: "登录",
+				forgotPasswordLink: "忘记密码?",
+				mailAddress: "电子邮件地址",
+				requestLink: "请求链接",
+				digits: "验证码",
+				loginLink: "登录",
+				secondFactor: "二次验证码",
+				sendDigits: "发送验证码",
+				sendSecondFactorDigits: "发送验证码",
+				resetLoginProcess: "返回登录",
+				messageEmptyUserName: "请输入用户名",
+				messageEmptyPassword: "请输入密码",
+				messageEmptyBoth: "请输入用户名和密码",
+				messageEmptyEmail: "请输入电子邮件地址",
+				messageInvalidEmail: "请输入有效的电子邮件地址",
+				digitsEmpty: "请输入验证码",
+				digitsInvalid: "请输入有效的验证码",
+				messageLoginFailed: "登录失败,请检查您的输入。",
+				messageForbidden:
+					"登录成功,但您没有权限。您<b>不能</b>登录。<br>您可以选择其他用户或联系管理员。",
+				messageSomethingWentWrong: "出了点问题,请稍后再试。",
+				messageThisFormIsNotConfigured: "此表单尚未配置。",
+				messagePasswordResetDisabled:
+					"此功能无法使用,因为您的帐户启用了双因素身份验证。请联系管理员。",
+			};
+
+		case "hi":
+			return {
+				username: "उपयो��कर नम य ई-मल",
+				password: "पसवर",
+				login: "लग इन कर",
+				forgotPasswordLink: "पसवर भल गए?",
+				mailAddress: "ई-मल पत",
+				requestLink: "लक क अनरध कर",
+				digits: "कड",
+				loginLink: "लग इन कर",
+				secondFactor: "दसर फकर कड",
+				sendDigits: "कड भज",
+				sendSecondFactorDigits: "कड भज",
+				resetLoginProcess: "लगन पर वपस जए",
+				messageEmptyUserName: "कपय अपन उपयगकर नम दर कर",
+				messageEmptyPassword: "कपय अपन पसवर दर कर",
+				messageEmptyBoth: "कपय अपन उपयगकर नम और पसवर दर कर",
+				messageEmptyEmail: "कपय अपन ई-मल पत दर कर",
+				messageInvalidEmail: "कपय एक वध ई-मल पत दर कर",
+				digitsEmpty: "कपय अपन कड दर कर",
+				digitsInvalid: "कपय एक वध कड दर कर",
+				messageLoginFailed: "लगन वफल हआ, कपय अपन जनकर क जच कर।",
+				messageForbidden:
+					"लगन सफल रह लकन आपक पस अनमत नह ह। आप <b>लगन नह</b> कर सकत।<br>आप दसर उपयगकर चन सकत ह य पशसक स सपर कर सकत ह।",
+				messageSomethingWentWrong: "कछ गलत हआ, कपय बद म पन पयस कर।",
+				messageThisFormIsNotConfigured: "यह फर कनगर नह ह।",
+				messagePasswordResetDisabled:
+					"यह सवध कम नह करत कक आपक खत म द घटक पमणकरण सकम ह। कपय पशसक स सपर कर।",
+			};
+
+		case "bn":
+			return {
+				username: "ইউজরনম ব ই-মইল",
+				password: "পসওযর",
+				login: "লগইন করন",
+				forgotPasswordLink: "পসওযর ভল গছন?",
+				mailAddress: "ই-মইল ঠকন",
+				requestLink: "লক অনরধ করন",
+				digits: "কড",
+				loginLink: "লগইন করন",
+				secondFactor: "দতয ফকর কড",
+				sendDigits: "কড পঠন",
+				sendSecondFactorDigits: "কড পঠন",
+				resetLoginProcess: "লগইন ফর যন",
+				messageEmptyUserName: "দয কর আপনর ইউজরনম লখন",
+				messageEmptyPassword: "দয কর আপনর পসওযর লখন",
+				messageEmptyBoth: "দয কর আপনর ইউজরনম এব পসওযর লখন",
+				messageEmptyEmail: "দয কর আপনর ই-মইল ঠকন লখন",
+				messageInvalidEmail: "দয কর একট বধ ই-মইল ঠকন লখন",
+				digitsEmpty: "দয কর আপনর কড লখন",
+				digitsInvalid: "দয কর একট বধ কড লখন",
+				messageLoginFailed: "লগইন বর হযছ, দয কর আপনর ইনপট পরক করন।",
+				messageForbidden:
+					"লগইন সফল হযছ, কন আপনর অনমত নই। আপন <b>লগইন করত পরবন ন</b>।<br>আপন অন ইউজর নরচন করত পরন অথব অযডমনসটরর সথ যগযগ করত পরন।",
+				messageSomethingWentWrong: "কছ ভল হযছ, দয কর পর আবর চষ করন।",
+				messageThisFormIsNotConfigured: "এই ফরট কনফগর কর হযন।",
+				messagePasswordResetDisabled:
+					"এই ফশনট করকর নয করণ আপনর অযকউন দট ফকর পমণকরণ সকয কর আছ। দয কর পশসকর সথ যগযগ করন।",
+			};
+
+		case "pt": // Portuguese
+			return {
+				username: "Nome de usuário ou e-mail",
+				password: "Senha",
+				login: "Entrar",
+				forgotPasswordLink: "Esqueceu a senha?",
+				mailAddress: "Endereço de e-mail",
+				requestLink: "Solicitar link",
+				digits: "Código",
+				loginLink: "Entrar",
+				secondFactor: "Código do segundo fator",
+				sendDigits: "Enviar código",
+				sendSecondFactorDigits: "Enviar código",
+				resetLoginProcess: "Voltar ao login",
+				messageEmptyUserName: "Por favor, insira seu nome de usuário",
+				messageEmptyPassword: "Por favor, insira sua senha",
+				messageEmptyBoth: "Por favor, insira seu nome de usuário e senha",
+				messageEmptyEmail: "Por favor, insira seu endereço de e-mail",
+				messageInvalidEmail: "Por favor, insira um endereço de e-mail válido",
+				digitsEmpty: "Por favor, insira seu código",
+				digitsInvalid: "Por favor, insira um código válido",
+				messageLoginFailed: "Falha no login, verifique suas informações.",
+				messageForbidden:
+					"Login foi bem-sucedido, mas você não tem permissão. Você <b>não pode</b> entrar.<br>Você pode escolher outro usuário ou entrar em contato com o administrador.",
+				messageSomethingWentWrong:
+					"Algo deu errado, tente novamente mais tarde.",
+				messageThisFormIsNotConfigured: "Este formulário não está configurado.",
+				messagePasswordResetDisabled:
+					"Esta função não funciona porque a autenticação de dois fatores<br>está ativada em sua conta. Por favor, entre em contato com o administrador.",
+			};
+
+		case "ru": // Russian
+			return {
+				username: "Имя пользователя или электронная почта",
+				password: "Пароль",
+				login: "Войти",
+				forgotPasswordLink: "Забыли пароль?",
+				mailAddress: "Адрес электронной почты",
+				requestLink: "Запросить ссылку",
+				digits: "Код",
+				loginLink: "Войти",
+				secondFactor: "Код второго фактора",
+				sendDigits: "Отправить код",
+				sendSecondFactorDigits: "Отправить код",
+				resetLoginProcess: "Вернуться к входу",
+				messageEmptyUserName: "Пожалуйста, введите имя пользователя",
+				messageEmptyPassword: "Пожалуйста, введите пароль",
+				messageEmptyBoth: "Пожалуйста, введите имя пользователя и пароль",
+				messageEmptyEmail: "Пожалуйста, введите адрес электронной почты",
+				messageInvalidEmail:
+					"Пожалуйста, введите действительный адрес электронной почты",
+				digitsEmpty: "Пожалуйста, введите код",
+				digitsInvalid: "Пожалуйста, введите действительный код",
+				messageLoginFailed: "Ошибка входа, проверьте введенные данные.",
+				messageForbidden:
+					"Вход выполнен, но у вас нет прав. Вы <b>не можете</b> войти.<br>Вы можете выбрать другого пользователя или связаться с администратором.",
+				messageSomethingWentWrong: "Что-то пошло не так, попробуйте позже.",
+				messageThisFormIsNotConfigured: "Эта форма не настроена.",
+				messagePasswordResetDisabled:
+					"Эта функция не работает, потому что двухфакторная аутентификация<br> включена в вашей учетной записи. Пожалуйста, свяжитесь с администратором.",
+			};
+
+		case "ja": // Japanese
+			return {
+				username: "ユーザー名またはメールアドレス",
+				password: "パスワード",
+				login: "ログイン",
+				forgotPasswordLink: "パスワードを忘れましたか?",
+				mailAddress: "メールアドレス",
+				requestLink: "リンクをリクエスト",
+				digits: "コード",
+				loginLink: "ログイン",
+				secondFactor: "二要素コード",
+				sendDigits: "コードを送信",
+				sendSecondFactorDigits: "コードを送信",
+				resetLoginProcess: "ログインに戻る",
+				messageEmptyUserName: "ユーザー名を入力してください",
+				messageEmptyPassword: "パスワードを入力してください",
+				messageEmptyBoth: "ユーザー名とパスワードを入力してください",
+				messageEmptyEmail: "メールアドレスを入力してください",
+				messageInvalidEmail: "有効なメールアドレスを入力してください",
+				digitsEmpty: "コードを入力してください",
+				digitsInvalid: "有効なコードを入力してください",
+				messageLoginFailed:
+					"ログインに失敗しました。入力内容をご確認ください。",
+				messageForbidden:
+					"ログイン成功しましたが、権限がありません。<b>ログインできません</b>。<br>他のユーザーを選択するか、管理者に連絡してください。",
+				messageSomethingWentWrong:
+					"問題が発生しました。後でもう一度お試しください。",
+				messageThisFormIsNotConfigured: "このフォームは設定されていません。",
+				messagePasswordResetDisabled:
+					"この機能は使用できません。アカウントで二要素認証が有効になっているため、管理者に連絡してください。",
+			};
+
+		case "pa": // Western Punjabi
+			return {
+				username: "ਵਰਤਕਰ ਨਮ ਜ ਈ-ਮਲ",
+				password: "ਪਸਵਰਡ",
+				login: "ਲਗਨ ਕਰ",
+				forgotPasswordLink: "ਪਸਵਰਡ ਭਲ ਗਏ?",
+				mailAddress: "ਈ-ਮਲ ਪਤ",
+				requestLink: "ਲਕ ਦ ਬਨਤ ਕਰ",
+				digits: "ਕਡ",
+				loginLink: "ਲਗਨ ਕਰ",
+				secondFactor: "ਦਜ ਫਕਟਰ ਕਡ",
+				sendDigits: "ਕਡ ਭਜ",
+				sendSecondFactorDigits: "ਕਡ ਭਜ",
+				resetLoginProcess: "ਲਗਨ 'ਤ ਵਪਸ ਜਓ",
+				messageEmptyUserName: "ਕਰਪ ਕਰਕ ਆਪਣ ਵਰਤਕਰ ਨਮ ਦਰਜ ਕਰ",
+				messageEmptyPassword: "ਕਰਪ ਕਰਕ ਆਪਣ ਪਸਵਰਡ ਦਰਜ ਕਰ",
+				messageEmptyBoth: "ਕਰਪ ਕਰਕ ਆਪਣ ਵਰਤਕਰ ਨਮ ਤ ਪਸਵਰਡ ਦਰਜ ਕਰ",
+				messageEmptyEmail: "ਕਰਪ ਕਰਕ ਆਪਣ ਈ-ਮਲ ਪਤ ਦਰਜ ਕਰ",
+				messageInvalidEmail: "ਕਰਪ ਕਰਕ ਇਕ ਵਧ ਈ-ਮਲ ਪਤ ਦਰਜ ਕਰ",
+				digitsEmpty: "ਕਰਪ ਕਰਕ ਆਪਣ ਕਡ ਦਰਜ ਕਰ",
+				digitsInvalid: "ਕਰਪ ਕਰਕ ਇਕ ਵਧ ਕਡ ਦਰਜ ਕਰ",
+				messageLoginFailed: "ਲਗਨ ਅਸਫਲ ਹਇਆ, ਕਰਪ ਕਰਕ ਆਪਣ ਜਣਕਰ ਦ ਜਚ ਕਰ।",
+				messageForbidden:
+					"ਲਗਨ ਸਫਲ ਹਇਆ, ਪਰ ਤਹਡ ਕਲ ਅਧਕਰ ਨਹ ਹਨ। ਤਸ <b>ਲਗਨ ਨਹ</b> ਕਰ ਸਕਦ।<br>ਤਸ ਹਰ ਵਰਤਕਰ ਚਣ सकत ਹ ਜ ਪਰਬਧਕ ਨਲ ਸਪਰਕ ਕਰ ਸਕਦ ਹ।",
+				messageSomethingWentWrong:
+					"ਕਝ ਗਲਤ ਹ ਗਆ, ਕਰਪ ਕਰਕ ਬਅਦ ਵਚ ਮੜ ਕਸਸ ਕਰ।",
+				messageThisFormIsNotConfigured: "ਇਸ ਫਰਮ ਨ ਸਰਚਤ ਨਹ ਕਤ ਗਆ ਹ।",
+				messagePasswordResetDisabled:
+					"ਇਹ ਫਕਸਨ ਕਮ ਨਹ ਕਰਦ ਕਉਕ ਤਹਡ ਖਤ ਵਚ ਦ ਫਕਟਰ ਪਰਮਣਕਰਣ ਸਰਗਰਮ ਹ। ਕਰਪ ਕਰਕ ਪਰਬਧਕ ਨਲ ਸਪਰਕ ਕਰ।",
+			};
+
+		case "mr": // Marathi
+			return {
+				username: "वपरकरनव कव ईमल",
+				password: "सकतशब",
+				login: "पवश कर",
+				forgotPasswordLink: "सकतशब वसरलत क?",
+				mailAddress: "ईमल पत",
+				requestLink: "लकच वनत कर",
+				digits: "कड",
+				loginLink: "पवश कर",
+				secondFactor: "दसर घटक कड",
+				sendDigits: "कड पठव",
+				sendSecondFactorDigits: "कड पठव",
+				resetLoginProcess: "पवशवर परत ज",
+				messageEmptyUserName: "कपय आपल वपरकरनव पवष कर",
+				messageEmptyPassword: "कपय आपल सकतशब पवष कर",
+				messageEmptyBoth: "कपय आपल वपरकरनव आण सकतशब पवष कर",
+				messageEmptyEmail: "कपय आपल ईमल पत पवष कर",
+				messageInvalidEmail: "कपय वध ईमल पत पवष कर",
+				digitsEmpty: "कपय आपल कड पवष कर",
+				digitsInvalid: "कपय वध कड पवष कर",
+				messageLoginFailed: "पवश अयशस, कपय आपल महत तपस.",
+				messageForbidden:
+					"पवश यशस झल, परत आपलकड परवन नह. आपण <b>पवश कर शकत नह</b>.<br>आपण दसर वपरकर नवड शकत कव ववसपकश सपर सध शकत.",
+				messageSomethingWentWrong: "कहतर चकल, कपय नतर पन पयत कर.",
+				messageThisFormIsNotConfigured: "ह फर सरचत कलल नह.",
+				messagePasswordResetDisabled:
+					"य करच कमगर करत नह करण आपल खतत दन घटक पमणकरण सकय कल आह. कपय ववसपकश सपर सध.",
+			};
+
+		case "fr": // French
+			return {
+				username: "Nom d'utilisateur ou e-mail",
+				password: "Mot de passe",
+				login: "Connexion",
+				forgotPasswordLink: "Mot de passe oublié ?",
+				mailAddress: "Adresse e-mail",
+				requestLink: "Demander un lien",
+				digits: "Code",
+				loginLink: "Connexion",
+				secondFactor: "Code du deuxième facteur",
+				sendDigits: "Envoyer le code",
+				sendSecondFactorDigits: "Envoyer le code",
+				resetLoginProcess: "Retour à la connexion",
+				messageEmptyUserName: "Veuillez entrer votre nom d'utilisateur",
+				messageEmptyPassword: "Veuillez entrer votre mot de passe",
+				messageEmptyBoth:
+					"Veuillez entrer votre nom d'utilisateur et votre mot de passe",
+				messageEmptyEmail: "Veuillez entrer votre adresse e-mail",
+				messageInvalidEmail: "Veuillez entrer une adresse e-mail valide",
+				digitsEmpty: "Veuillez entrer votre code",
+				digitsInvalid: "Veuillez entrer un code valide",
+				messageLoginFailed:
+					"Échec de la connexion, veuillez vérifier vos informations.",
+				messageForbidden:
+					"La connexion a réussi, mais vous n'avez pas les permissions. Vous <b>ne pouvez pas</b> vous connecter.<br>Vous pouvez choisir un autre utilisateur ou contacter l'administrateur.",
+				messageSomethingWentWrong:
+					"Une erreur s'est produite, veuillez réessayer plus tard.",
+				messageThisFormIsNotConfigured: "Ce formulaire n'est pas configuré.",
+				messagePasswordResetDisabled:
+					"Cette fonctionnalité ne fonctionne pas car l'authentification à deux facteurs est activée sur<br>votre compte. Veuillez contacter l'administrateur.",
+			};
+
+		case "it": // Italian
+			return {
+				username: "Nome utente o e-mail",
+				password: "Password",
+				login: "Accedi",
+				forgotPasswordLink: "Password dimenticata?",
+				mailAddress: "Indirizzo e-mail",
+				requestLink: "Richiedi link",
+				digits: "Codice",
+				loginLink: "Accedi",
+				secondFactor: "Codice a due fattori",
+				sendDigits: "Invia codice",
+				sendSecondFactorDigits: "Invia codice",
+				resetLoginProcess: "Torna al login",
+				messageEmptyUserName: "Per favore, inserisci il tuo nome utente",
+				messageEmptyPassword: "Per favore, inserisci la tua password",
+				messageEmptyBoth:
+					"Per favore, inserisci il tuo nome utente e la tua password",
+				messageEmptyEmail: "Per favore, inserisci il tuo indirizzo e-mail",
+				messageInvalidEmail: "Per favore, inserisci un indirizzo e-mail valido",
+				digitsEmpty: "Per favore, inserisci il tuo codice",
+				digitsInvalid: "Per favore, inserisci un codice valido",
+				messageLoginFailed: "Accesso fallito, verifica i tuoi dati.",
+				messageForbidden:
+					"Accesso riuscito, ma non hai i permessi. Non puoi accedere.<br>Puoi scegliere un altro account o contattare l'amministratore.",
+				messageSomethingWentWrong:
+					"Qualcosa è andato storto, riprova più tardi.",
+				messageThisFormIsNotConfigured: "Questo modulo non è configurato.",
+				messagePasswordResetDisabled:
+					"Questa funzione non funziona perché l'autenticazione a due<br>fattori è attiva sul tuo account. Contatta l'amministratore.",
+			};
+
+		case "nl": // Dutch
+			return {
+				username: "Gebruikersnaam of e-mail",
+				password: "Wachtwoord",
+				login: "Inloggen",
+				forgotPasswordLink: "Wachtwoord vergeten?",
+				mailAddress: "E-mailadres",
+				requestLink: "Link aanvragen",
+				digits: "Code",
+				loginLink: "Inloggen",
+				secondFactor: "Tweede factor code",
+				sendDigits: "Code verzenden",
+				sendSecondFactorDigits: "Code verzenden",
+				resetLoginProcess: "Terug naar inloggen",
+				messageEmptyUserName: "Voer uw gebruikersnaam in",
+				messageEmptyPassword: "Voer uw wachtwoord in",
+				messageEmptyBoth: "Voer uw gebruikersnaam en wachtwoord in",
+				messageEmptyEmail: "Voer uw e-mailadres in",
+				messageInvalidEmail: "Voer een geldig e-mailadres in",
+				digitsEmpty: "Voer uw code in",
+				digitsInvalid: "Voer een geldige code in",
+				messageLoginFailed: "Inloggen mislukt, controleer uw gegevens.",
+				messageForbidden:
+					"Inloggen geslaagd, maar u heeft geen permissies. U <b>kunt niet</b> inloggen.<br>U kunt een andere gebruiker selecteren of de beheerder contacteren.",
+				messageSomethingWentWrong:
+					"Er is iets fout gegaan, probeer het later opnieuw.",
+				messageThisFormIsNotConfigured: "Dit formulier is niet geconfigureerd.",
+				messagePasswordResetDisabled:
+					"Deze functie werkt niet omdat tweefactorauthenticatie is<br>ingeschakeld op uw account. Neem contact op met de beheerder.",
+			};
+
+		case "sv": // Swedish
+			return {
+				username: "Användarnamn eller e-post",
+				password: "Lösenord",
+				login: "Logga in",
+				forgotPasswordLink: "Glömt lösenord?",
+				mailAddress: "E-postadress",
+				requestLink: "Begär länk",
+				digits: "Kod",
+				loginLink: "Logga in",
+				secondFactor: "Tvåfaktorkod",
+				sendDigits: "Skicka kod",
+				sendSecondFactorDigits: "Skicka kod",
+				resetLoginProcess: "Tillbaka till inloggning",
+				messageEmptyUserName: "Ange ditt användarnamn",
+				messageEmptyPassword: "Ange ditt lösenord",
+				messageEmptyBoth: "Ange ditt användarnamn och lösenord",
+				messageEmptyEmail: "Ange din e-postadress",
+				messageInvalidEmail: "Ange en giltig e-postadress",
+				digitsEmpty: "Ange din kod",
+				digitsInvalid: "Ange en giltig kod",
+				messageLoginFailed:
+					"Inloggning misslyckades, kontrollera dina uppgifter.",
+				messageForbidden:
+					"Inloggningen lyckades, men du har inte behörighet. Du <b>kan inte</b> logga in.<br>Du kan välja en annan användare eller kontakta administratören.",
+				messageSomethingWentWrong: "Något gick fel, försök igen senare.",
+				messageThisFormIsNotConfigured: "Detta formulär är inte konfigurerat.",
+				messagePasswordResetDisabled:
+					"Denna funktion fungerar inte eftersom tvåfaktorsautentisering är aktiverad på ditt konto. Kontakta administratören.",
+			};
+
+		case "pl": // Polish
+			return {
+				username: "Nazwa użytkownika lub e-mail",
+				password: "Hasło",
+				login: "Zaloguj się",
+				forgotPasswordLink: "Zapomniałeś hasła?",
+				mailAddress: "Adres e-mail",
+				requestLink: "Zażądaj linku",
+				digits: "Kod",
+				loginLink: "Zaloguj się",
+				secondFactor: "Kod drugiego czynnika",
+				sendDigits: "Wyślij kod",
+				sendSecondFactorDigits: "Wyślij kod",
+				resetLoginProcess: "Powrót do logowania",
+				messageEmptyUserName: "Wprowadź swoją nazwę użytkownika",
+				messageEmptyPassword: "Wprowadź swoje hasło",
+				messageEmptyBoth: "Wprowadź swoją nazwę użytkownika i hasło",
+				messageEmptyEmail: "Wprowadź swój adres e-mail",
+				messageInvalidEmail: "Wprowadź prawidłowy adres e-mail",
+				digitsEmpty: "Wprowadź swój kod",
+				digitsInvalid: "Wprowadź prawidłowy kod",
+				messageLoginFailed: "Logowanie nie powiodło się, sprawdź swoje dane.",
+				messageForbidden:
+					"Logowanie powiodło się, ale nie masz uprawnień. <b>Nie możesz</b> się zalogować.<br>Możesz wybrać innego użytkownika lub skontaktować się z administratorem.",
+				messageSomethingWentWrong:
+					"Coś poszło nie tak, spróbuj ponownie później.",
+				messageThisFormIsNotConfigured:
+					"Ten formularz nie jest skonfigurowany.",
+				messagePasswordResetDisabled:
+					"Ta funkcja nie działa, ponieważ włączona jest autoryzacja dwuetapowa na twoim koncie. Skontaktuj się z administratorem.",
+			};
+
+		case "da": // Danish
+			return {
+				username: "Brugernavn eller e-mail",
+				password: "Adgangskode",
+				login: "Log ind",
+				forgotPasswordLink: "Glemt adgangskode?",
+				mailAddress: "E-mail-adresse",
+				requestLink: "Anmod om link",
+				digits: "Kode",
+				loginLink: "Log ind",
+				secondFactor: "Tofaktorkode",
+				sendDigits: "Send kode",
+				sendSecondFactorDigits: "Send kode",
+				resetLoginProcess: "Tilbage til log ind",
+				messageEmptyUserName: "Indtast dit brugernavn",
+				messageEmptyPassword: "Indtast din adgangskode",
+				messageEmptyBoth: "Indtast dit brugernavn og din adgangskode",
+				messageEmptyEmail: "Indtast din e-mail-adresse",
+				messageInvalidEmail: "Indtast en gyldig e-mail-adresse",
+				digitsEmpty: "Indtast din kode",
+				digitsInvalid: "Indtast en gyldig kode",
+				messageLoginFailed: "Login mislykkedes, kontrollér dine oplysninger.",
+				messageForbidden:
+					"Login lykkedes, men du har ikke tilladelse. Du <b>kan ikke</b> logge ind.<br>Du kan vælge en anden bruger eller kontakte administratoren.",
+				messageSomethingWentWrong: "Noget gik galt, prøv igen senere.",
+				messageThisFormIsNotConfigured: "Denne formular er ikke konfigureret.",
+				messagePasswordResetDisabled:
+					"Denne funktion fungerer ikke, fordi tofaktorautentificering<br>er aktiveret på din konto. Kontakt administratoren.",
+			};
+
+		case "no": // Norwegian
+			return {
+				username: "Brukernavn eller e-post",
+				password: "Passord",
+				login: "Logg inn",
+				forgotPasswordLink: "Glemt passord?",
+				mailAddress: "E-postadresse",
+				requestLink: "Be om lenke",
+				digits: "Kode",
+				loginLink: "Logg inn",
+				secondFactor: "Tofaktorkode",
+				sendDigits: "Send kode",
+				sendSecondFactorDigits: "Send kode",
+				resetLoginProcess: "Tilbake til innlogging",
+				messageEmptyUserName: "Vennligst skriv inn brukernavnet ditt",
+				messageEmptyPassword: "Vennligst skriv inn passordet ditt",
+				messageEmptyBoth: "Vennligst skriv inn brukernavn og passord",
+				messageEmptyEmail: "Vennligst skriv inn e-postadressen din",
+				messageInvalidEmail: "Vennligst skriv inn en gyldig e-postadresse",
+				digitsEmpty: "Vennligst skriv inn koden din",
+				digitsInvalid: "Vennligst skriv inn en gyldig kode",
+				messageLoginFailed:
+					"Innlogging mislyktes, vennligst sjekk informasjonen din.",
+				messageForbidden:
+					"Innloggingen var vellykket, men du har ikke tillatelse. Du <b>kan ikke</b> logge inn.<br>Du kan velge en annen bruker eller kontakte administratoren.",
+				messageSomethingWentWrong:
+					"Noe gikk galt, vennligst prøv igjen senere.",
+				messageThisFormIsNotConfigured: "Dette skjemaet er ikke konfigurert.",
+				messagePasswordResetDisabled:
+					"Denne funksjonen fungerer ikke fordi<br>tofaktorautentisering er aktivert på kontoen din. Kontakt administratoren.",
+			};
+
+		case "cs": // Czech
+			return {
+				username: "Uživatelské jméno nebo e-mail",
+				password: "Heslo",
+				login: "Přihlásit se",
+				forgotPasswordLink: "Zapomněli jste heslo?",
+				mailAddress: "E-mailová adresa",
+				requestLink: "Požádat o odkaz",
+				digits: "Kód",
+				loginLink: "Přihlásit se",
+				secondFactor: "Dvoufázový kód",
+				sendDigits: "Odeslat kód",
+				sendSecondFactorDigits: "Odeslat kód",
+				resetLoginProcess: "Zpět na přihlášení",
+				messageEmptyUserName: "Zadejte své uživatelské jméno",
+				messageEmptyPassword: "Zadejte své heslo",
+				messageEmptyBoth: "Zadejte své uživatelské jméno a heslo",
+				messageEmptyEmail: "Zadejte svou e-mailovou adresu",
+				messageInvalidEmail: "Zadejte platnou e-mailovou adresu",
+				digitsEmpty: "Zadejte svůj kód",
+				digitsInvalid: "Zadejte platný kód",
+				messageLoginFailed: "Přihlášení se nezdařilo, zkontrolujte své údaje.",
+				messageForbidden:
+					"Přihlášení bylo úspěšné, ale nemáte oprávnění. Nemůžete se přihlásit.<br>Vyberte jiného uživatele nebo kontaktujte správce.",
+				messageSomethingWentWrong: "Něco se pokazilo, zkuste to později.",
+				messageThisFormIsNotConfigured: "Tento formulář není nakonfigurován.",
+				messagePasswordResetDisabled:
+					"Tato funkce nefunguje, protože je na vašem<br>účtu aktivováno dvoufaktorové ověřování. Kontaktujte správce.",
+			};
+
+		default:
+			return {
+				username: "Username or E-Mail",
+				password: "Password",
+				login: "Login",
+				forgotPasswordLink: "Forgot Password?",
+				mailAddress: "E-Mail-Address",
+				requestLink: "Request Link",
+				digits: "Code",
+				loginLink: "Login",
+				secondFactor: "Second Factor Code",
+				sendDigits: "Send Code",
+				sendSecondFactorDigits: "Send Code",
+				resetLoginProcess: "Back to Login",
+				messageEmptyUserName: "Please enter your username",
+				messageEmptyPassword: "Please enter your password",
+				messageEmptyBoth: "Please enter your username and password",
+				messageEmptyEmail: "Please enter your email address",
+				messageInvalidEmail: "Please enter a valid email address",
+				digitsEmpty: "Please enter your code",
+				digitsInvalid: "Please enter a valid code",
+				messageLoginFailed: "Login failed, please check your input.",
+				messageForbidden:
+					"Login was successful, but you have no permission. You <b>cannot</b> login.<br>You can select another user or contact the administrator.",
+				messageSomethingWentWrong:
+					"Something went wrong, please try again later.",
+				messageThisFormIsNotConfigured: "This form is not configured.",
+				messagePasswordResetDisabled:
+					"This function does not work because two-factor<br>authentication is enabled on your account.<br>Please contact the administrator.",
+			};
+	}
 }
 
 /**
@@ -992,490 +989,498 @@ function getTranslations() {
  * @return {initEventHandler}
  */
 function initEventHandler() {
-    const self = this;
-    const element = this[loginElementSymbol];
-
-    const type = "click";
-
-    element.addEventListener(type, function (event) {
-        const callback = self.getOption("actions.click");
-
-        fireCustomEvent(self, "monster-login-clicked", {
-            element: self,
-        });
-
-        if (!isFunction(callback)) {
-            return;
-        }
-
-        const element = findTargetElementFromEvent(
-            event,
-            ATTRIBUTE_ROLE,
-            "control",
-        );
-
-        if (!(element instanceof Node && self.hasNode(element))) {
-            return;
-        }
-
-        callback.call(self, event);
-    });
-
-    this[forgotPasswordLinkSymbol].addEventListener(type, (event) => {
-        event.preventDefault();
-        this[forgotPasswordCollapseSymbol].open();
-        setTimeout(() => {
-            this.shadowRoot.querySelector("input[name='email']").focus();
-        }, 0);
-    });
-
-    this[loginLinkSymbol].addEventListener(type, (event) => {
-        event.preventDefault();
-        this[loginCollapseSymbol].open();
-
-        setTimeout(() => {
-            this.shadowRoot.querySelector("input[name='username']").focus();
-        }, 0);
-    });
-
-    for (const e of this[resetLoginProcessLinksSymbol]) {
-        e.addEventListener(type, (event) => {
-            event.preventDefault();
-            this[loginCollapseSymbol].open();
-            setTimeout(() => {
-                this.shadowRoot.querySelector("input[name='username']").focus();
-            }, 0);
-        });
-    }
-
-    this[loginCollapseSymbol].addEventListener("keydown", (event) => {
-        if (event.key === "Enter") {
-            this[loginButtonSymbol].click();
-        }
-    });
-
-    this[secondFactorCollapseSymbol].addEventListener("keydown", (event) => {
-        if (event.key === "Enter") {
-            this[secondFactorButtonSymbol].click();
-        }
-    });
-
-    this[forgotPasswordCollapseSymbol].addEventListener("keydown", (event) => {
-        if (event.key === "Enter") {
-            this[requestLinkButtonSymbol].click();
-        }
-    });
-
-    this[digitsCollapseSymbol].addEventListener("keydown", (event) => {
-        if (event.key === "Enter") {
-            this[digitsButtonSymbol].click();
-        }
-    });
-
-    this[loginButtonSymbol].setOption("actions.click", (event) => {
-        // get username and password
-        const username = this.shadowRoot.querySelector(
-            "input[name='username']",
-        ).value;
-        const password = this.shadowRoot.querySelector("monster-password").value;
-
-        let missingBits = 0;
-        if (username === "" || username === null) {
-            this.setOption("classes.usernameInvalid", "invalid");
-            missingBits |= 1; // Set bit 1 for username
-        } else {
-            this.setOption("classes.usernameInvalid", "");
-        }
-
-        if (password === "" || password === null) {
-            this.setOption("classes.passwordInvalid", "invalid");
-            missingBits |= 2; // Set bit 2 for password
-        } else {
-            this.setOption("classes.passwordInvalid", "");
-        }
-
-        let msg = null;
-        if (missingBits === 1) {
-            // missing username
-            msg = this.getOption("labels.messageEmptyUserName");
-
-            setTimeout(() => {
-                this.shadowRoot.querySelector("input[name='username']").focus();
-            }, 0);
-        } else if (missingBits === 2) {
-            // missing password
-            msg = this.getOption("labels.messageEmptyPassword");
-
-            setTimeout(() => {
-                this.shadowRoot.querySelector("monster-password").focus();
-            });
-        } else if (missingBits === 3) {
-            msg = this.getOption("labels.messageEmptyBoth");
-
-            setTimeout(() => {
-                this.shadowRoot.querySelector("input[name='username']").focus();
-            }, 0);
-        }
-
-        const timeout = this.getOption("timeoutForMessage");
-
-        if (msg !== null && msg !== undefined) {
-            this[loginButtonSymbol].setMessage(msg);
-            this[loginButtonSymbol].showMessage(timeout);
-            this[loginButtonSymbol].setState("failed", timeout);
-            return;
-        }
-
-        const url = this.getOption("fetch.login.url");
-
-        if (url === "" || url === null || url === undefined) {
-            this[loginButtonSymbol].setMessage(
-                this.getOption("labels.messageThisFormIsNotConfigured"),
-            );
-            this[loginButtonSymbol].showMessage(timeout);
-            this[loginButtonSymbol].setState("failed", timeout);
-            return;
-        }
-
-        const options = {
-            method: this.getOption("fetch.login.method"),
-            mode: this.getOption("fetch.login.mode"),
-            headers: this.getOption("fetch.login.headers"),
-            credentials: this.getOption("fetch.login.credentials"),
-            body: JSON.stringify({username, password}),
-        };
-
-        getWindow()
-            .fetch(url, options)
-            .then((response) => {
-                if (response.ok) {
-                    this[loginButtonSymbol].setState("successful", timeout);
-                    setTimeout(() => {
-                        this.openLoggedIn();
-                    }, 1200);
-                } else {
-                    if (response.status === 403) {
-                        this[loginButtonSymbol].setMessage(
-                            this.getOption("labels.messageForbidden"),
-                        );
-                    } else if (response.status === 401) {
-                        const wwwAuthenticateHeader =
-                            response.headers.get("www-authenticate");
-                        if (wwwAuthenticateHeader) {
-                            const wwwAuthenticateParts = wwwAuthenticateHeader
-                                .split(/,\s*/)
-                                .map((part) => {
-                                    const [key, value] = part.split("=");
-                                    return {
-                                        key: key.trim(),
-                                        value: value ? value.trim().replace(/^"|"$/g, "") : null,
-                                    };
-                                });
-
-                            const filteredParts = wwwAuthenticateParts.filter(
-                                (part) => part.key.toLowerCase() === "2fa",
-                            );
-                            if (filteredParts.length > 0) {
-                                const timeout = this.getOption("timeoutForSuccess");
-                                this[loginButtonSymbol].setState("successful", timeout);
-                                setTimeout(() => {
-                                    this.openSecondFactor();
-                                    const digitsElement = this.shadowRoot.getElementById(
-                                        "secondFactorControl",
-                                    );
-                                    digitsElement.focus();
-                                }, timeout);
-                                return;
-                            }
-                        }
-
-                        this[loginButtonSymbol].setMessage(
-                            this.getOption("labels.messageLoginFailed"),
-                        );
-                    } else {
-                        this[loginButtonSymbol].setMessage(
-                            this.getOption("labels.messageSomethingWentWrong"),
-                        );
-                    }
-                    this[loginButtonSymbol].showMessage(timeout);
-                    this[loginButtonSymbol].setState("failed", timeout);
-
-                    setTimeout(() => {
-                        this.shadowRoot.querySelector("input[name='username']").focus();
-                    }, 0);
-                }
-            })
-            .catch((error) => {
-                this[loginButtonSymbol].setMessage(
-                    this.getOption("labels.messageSomethingWentWrong"),
-                );
-                this[loginButtonSymbol].showMessage(timeout);
-                this[loginButtonSymbol].setState("failed", timeout);
-
-                setTimeout(() => {
-                    this.shadowRoot.querySelector("input[name='username']").focus();
-                }, 0);
-            });
-    });
-
-    this[requestLinkButtonSymbol].setOption("actions.click", (event) => {
-        const emailElement = this.shadowRoot.querySelector("input[name='email']");
-
-        // get username and password
-        const mail = emailElement.value;
-        const valid = emailElement.checkValidity();
-
-        let msg = null;
-        if (mail === "" || mail === null) {
-            this.setOption("classes.emailInvalid", "invalid");
-            msg = this.getOption("labels.messageEmptyEmail");
-        } else if (!valid) {
-            this.setOption("classes.emailInvalid", "invalid");
-            msg = this.getOption("labels.messageInvalidEmail");
-        } else {
-            this.setOption("classes.emailInvalid", "");
-        }
-
-        const timeout = this.getOption("timeoutForMessage");
-
-        if (msg !== null && msg !== undefined) {
-            this[requestLinkButtonSymbol].setMessage(msg);
-            this[requestLinkButtonSymbol].showMessage(timeout);
-            this[requestLinkButtonSymbol].setState("failed", timeout);
-            return;
-        }
-
-        const url = this.getOption("fetch.forgotPassword.url");
-
-        if (url === "" || url === null || url === undefined) {
-            this[requestLinkButtonSymbol].setMessage(
-                this.getOption("labels.messageThisFormIsNotConfigured"),
-            );
-            this[requestLinkButtonSymbol].showMessage(timeout);
-            this[requestLinkButtonSymbol].setState("failed", timeout);
-            return;
-        }
-
-        const options = {
-            method: this.getOption("fetch.forgotPassword.method"),
-            mode: this.getOption("fetch.forgotPassword.mode"),
-            headers: this.getOption("fetch.forgotPassword.headers"),
-            credentials: this.getOption("fetch.forgotPassword.credentials"),
-            body: JSON.stringify({mail}),
-        };
-
-        getWindow()
-            .fetch(url, options)
-            .then((response) => {
-                if (response.ok) {
-                    const timeout = this.getOption("timeoutForSuccess");
-                    this[requestLinkButtonSymbol].setState("successful", timeout);
-                    setTimeout(() => {
-                        this.openDigits();
-                    }, timeout);
-                } else {
-                    if (response.status === 403) {
-                        this[requestLinkButtonSymbol].setMessage(
-                            this.getOption("labels.messageForbidden"),
-                        );
-                    } else if (response.status === 401) {
-                        if (
-                            response.headers.has("x-password-reset") &&
-                            response.headers.get("x-password-reset").includes("disabled")
-                        ) {
-                            this[requestLinkButtonSymbol].setMessage(
-                                this.getOption("labels.messagePasswordResetDisabled"),
-                            );
-                        } else {
-                            this[requestLinkButtonSymbol].setMessage(
-                                this.getOption("labels.messageLoginFailed"),
-                            );
-                        }
-                    } else {
-                        this[requestLinkButtonSymbol].setMessage(
-                            this.getOption("labels.messageSomethingWentWrong"),
-                        );
-                    }
-                    this[requestLinkButtonSymbol].showMessage(timeout);
-                    this[requestLinkButtonSymbol].setState("failed", timeout);
-                }
-            })
-            .catch(() => {
-                this[requestLinkButtonSymbol].setMessage(
-                    this.getOption("labels.messageSomethingWentWrong"),
-                );
-                this[requestLinkButtonSymbol].showMessage(timeout);
-                this[requestLinkButtonSymbol].setState("failed", timeout);
-            });
-    });
-
-    this[secondFactorButtonSymbol].setOption("actions.click", (event) => {
-        const digitsElement = this.shadowRoot.getElementById("secondFactorControl");
-
-        const digits = digitsElement.value;
-        const valid = digitsElement.checkValidity();
-
-        let msg = null;
-        if (digits === "" || digits === null) {
-            msg = this.getOption("labels.digitsEmpty");
-        } else if (!valid) {
-            msg = this.getOption("labels.digitsInvalid");
-        }
-
-        const timeout = this.getOption("timeoutForMessage");
-
-        if (msg !== null && msg !== undefined) {
-            this[secondFactorButtonSymbol].setMessage(msg);
-            this[secondFactorButtonSymbol].showMessage(timeout);
-            this[secondFactorButtonSymbol].setState("failed", timeout);
-            return;
-        }
-
-        const url = this.getOption("fetch.secondFactor.url");
-
-        if (url === "" || url === null || url === undefined) {
-            this[secondFactorButtonSymbol].setMessage(
-                this.getOption("labels.messageThisFormIsNotConfigured"),
-            );
-            this[secondFactorButtonSymbol].showMessage(timeout);
-            this[secondFactorButtonSymbol].setState("failed", timeout);
-            return;
-        }
-
-        const options = {
-            method: this.getOption("fetch.secondFactor.method"),
-            mode: this.getOption("fetch.secondFactor.mode"),
-            headers: this.getOption("fetch.secondFactor.headers"),
-            credentials: this.getOption("fetch.secondFactor.credentials"),
-            body: JSON.stringify({digits}),
-        };
-
-        getWindow()
-            .fetch(url, options)
-            .then((response) => {
-                if (response.ok) {
-                    const timeout = this.getOption("timeoutForSuccess");
-                    this[secondFactorButtonSymbol].setState("successful", timeout);
-                    setTimeout(() => {
-                        this.openLoggedIn();
-                    }, timeout);
-                } else {
-                    if (response.status === 403) {
-                        this[secondFactorButtonSymbol].setMessage(
-                            this.getOption("labels.messageForbidden"),
-                        );
-                    } else if (response.status === 401) {
-                        this[secondFactorButtonSymbol].setMessage(
-                            this.getOption("labels.messageLoginFailed"),
-                        );
-                    } else {
-                        this[secondFactorButtonSymbol].setMessage(
-                            this.getOption("labels.messageSomethingWentWrong"),
-                        );
-                    }
-                    this[secondFactorButtonSymbol].showMessage(timeout);
-                    this[secondFactorButtonSymbol].setState("failed", timeout);
-                    setTimeout(() => {
-                        digitsElement.focus();
-                    }, 0);
-                }
-            })
-            .catch(() => {
-                this[secondFactorButtonSymbol].setMessage(
-                    this.getOption("labels.messageSomethingWentWrong"),
-                );
-                this[secondFactorButtonSymbol].showMessage(timeout);
-                this[secondFactorButtonSymbol].setState("failed", timeout);
-                setTimeout(() => {
-                    digitsElement.focus();
-                }, 0);
-            });
-    });
-
-    this[digitsButtonSymbol].setOption("actions.click", (event) => {
-        const digitsElement = this.shadowRoot.getElementById("digitsControl");
-
-        const digits = digitsElement.value;
-        const valid = digitsElement.checkValidity();
-
-        let msg = null;
-        if (digits === "" || digits === null || digits === undefined) {
-            msg = this.getOption("labels.digitsEmpty");
-        } else if (!valid) {
-            msg = this.getOption("labels.digitsInvalid");
-        }
-
-        const timeout = this.getOption("timeoutForMessage");
-        if (msg !== null && msg !== undefined) {
-            this[digitsButtonSymbol].setMessage(msg);
-            this[digitsButtonSymbol].showMessage(timeout);
-            this[digitsButtonSymbol].setState("failed", timeout);
-            return;
-        }
-
-        const url = this.getOption("fetch.digits.url");
-
-        if (url === "" || url === null || url === undefined) {
-            this[digitsButtonSymbol].setMessage(
-                this.getOption("labels.messageThisFormIsNotConfigured"),
-            );
-            this[digitsButtonSymbol].showMessage(timeout);
-            this[digitsButtonSymbol].setState("failed", timeout);
-            return;
-        }
-
-        const options = {
-            method: this.getOption("fetch.digits.method"),
-            mode: this.getOption("fetch.digits.mode"),
-            headers: this.getOption("fetch.digits.headers"),
-            credentials: this.getOption("fetch.digits.credentials"),
-            body: JSON.stringify({digits}),
-        };
-
-        getWindow()
-            .fetch(url, options)
-            .then((response) => {
-                const timeout = this.getOption("timeoutForSuccess");
-
-                if (response.ok) {
-                    this[digitsButtonSymbol].setState("successful", timeout);
-                    setTimeout(() => {
-                        this.openLoggedIn();
-                    }, timeout);
-                } else {
-                    if (response.status === 403) {
-                        this[digitsButtonSymbol].setMessage(
-                            this.getOption("labels.messageForbidden"),
-                        );
-                    } else if (response.status === 401) {
-                        this[digitsButtonSymbol].setMessage(
-                            this.getOption("labels.messageLoginFailed"),
-                        );
-                    } else {
-                        this[digitsButtonSymbol].setMessage(
-                            this.getOption("labels.messageSomethingWentWrong"),
-                        );
-                    }
-                    this[digitsButtonSymbol].showMessage(timeout);
-                    this[digitsButtonSymbol].setState("failed", timeout);
-                    setTimeout(() => {
-                        digitsElement.focus();
-                    }, 0);
-                }
-            })
-            .catch(() => {
-                this[digitsButtonSymbol].setMessage(
-                    this.getOption("labels.messageSomethingWentWrong"),
-                );
-                this[digitsButtonSymbol].showMessage(timeout);
-                this[digitsButtonSymbol].setState("failed", timeout);
-                setTimeout(() => {
-                    digitsElement.focus();
-                }, 0);
-            });
-    });
-
-    return this;
+	const self = this;
+	const element = this[loginElementSymbol];
+
+	const type = "click";
+
+	element.addEventListener(type, function (event) {
+		const callback = self.getOption("actions.click");
+
+		fireCustomEvent(self, "monster-login-clicked", {
+			element: self,
+		});
+
+		if (!isFunction(callback)) {
+			return;
+		}
+
+		const element = findTargetElementFromEvent(
+			event,
+			ATTRIBUTE_ROLE,
+			"control",
+		);
+
+		if (!(element instanceof Node && self.hasNode(element))) {
+			return;
+		}
+
+		callback.call(self, event);
+	});
+
+	this[forgotPasswordLinkSymbol].addEventListener(type, (event) => {
+		event.preventDefault();
+		this[forgotPasswordCollapseSymbol].open();
+		setTimeout(() => {
+			this.shadowRoot.querySelector("input[name='email']").focus();
+		}, 0);
+	});
+
+	this[loginLinkSymbol].addEventListener(type, (event) => {
+		event.preventDefault();
+		this[loginCollapseSymbol].open();
+
+		setTimeout(() => {
+			this.shadowRoot.querySelector("input[name='username']").focus();
+		}, 0);
+	});
+
+	for (const e of this[resetLoginProcessLinksSymbol]) {
+		e.addEventListener(type, (event) => {
+			event.preventDefault();
+			this[loginCollapseSymbol].open();
+			setTimeout(() => {
+				this.shadowRoot.querySelector("input[name='username']").focus();
+			}, 0);
+		});
+	}
+
+	this[loginCollapseSymbol].addEventListener("keydown", (event) => {
+		if (event.key === "Enter") {
+			setTimeout(() => {
+				this[loginButtonSymbol].click();
+			}, 100);
+		}
+	});
+
+	this[secondFactorCollapseSymbol].addEventListener("keydown", (event) => {
+		if (event.key === "Enter") {
+			setTimeout(() => {
+				this[secondFactorButtonSymbol].click();
+			}, 100);
+		}
+	});
+
+	this[forgotPasswordCollapseSymbol].addEventListener("keydown", (event) => {
+		if (event.key === "Enter") {
+			setTimeout(() => {
+				this[requestLinkButtonSymbol].click();
+			}, 100);
+		}
+	});
+
+	this[digitsCollapseSymbol].addEventListener("keydown", (event) => {
+		if (event.key === "Enter") {
+			setTimeout(() => {
+				this[digitsButtonSymbol].click();
+			}, 100);
+		}
+	});
+
+	this[loginButtonSymbol].setOption("actions.click", (event) => {
+		// get username and password
+		const username = this.shadowRoot.querySelector(
+			"input[name='username']",
+		).value;
+		const password = this.shadowRoot.querySelector("monster-password").value;
+
+		let missingBits = 0;
+		if (username === "" || username === null) {
+			this.setOption("classes.usernameInvalid", "invalid");
+			missingBits |= 1; // Set bit 1 for username
+		} else {
+			this.setOption("classes.usernameInvalid", "");
+		}
+
+		if (password === "" || password === null) {
+			this.setOption("classes.passwordInvalid", "invalid");
+			missingBits |= 2; // Set bit 2 for password
+		} else {
+			this.setOption("classes.passwordInvalid", "");
+		}
+
+		let msg = null;
+		if (missingBits === 1) {
+			// missing username
+			msg = this.getOption("labels.messageEmptyUserName");
+
+			setTimeout(() => {
+				this.shadowRoot.querySelector("input[name='username']").focus();
+			}, 0);
+		} else if (missingBits === 2) {
+			// missing password
+			msg = this.getOption("labels.messageEmptyPassword");
+
+			setTimeout(() => {
+				this.shadowRoot.querySelector("monster-password").focus();
+			});
+		} else if (missingBits === 3) {
+			msg = this.getOption("labels.messageEmptyBoth");
+
+			setTimeout(() => {
+				this.shadowRoot.querySelector("input[name='username']").focus();
+			}, 0);
+		}
+
+		const timeout = this.getOption("timeoutForMessage");
+
+		if (msg !== null && msg !== undefined) {
+			this[loginButtonSymbol].setMessage(msg);
+			this[loginButtonSymbol].showMessage(timeout);
+			this[loginButtonSymbol].setState("failed", timeout);
+			return;
+		}
+
+		const url = this.getOption("fetch.login.url");
+
+		if (url === "" || url === null || url === undefined) {
+			this[loginButtonSymbol].setMessage(
+				this.getOption("labels.messageThisFormIsNotConfigured"),
+			);
+			this[loginButtonSymbol].showMessage(timeout);
+			this[loginButtonSymbol].setState("failed", timeout);
+			return;
+		}
+
+		const options = {
+			method: this.getOption("fetch.login.method"),
+			mode: this.getOption("fetch.login.mode"),
+			headers: this.getOption("fetch.login.headers"),
+			credentials: this.getOption("fetch.login.credentials"),
+			body: JSON.stringify({ username, password }),
+		};
+
+		getWindow()
+			.fetch(url, options)
+			.then((response) => {
+				if (response.ok) {
+					this[loginButtonSymbol].setState("successful", timeout);
+					setTimeout(() => {
+						this.openLoggedIn();
+					}, 1200);
+				} else {
+					if (response.status === 403) {
+						this[loginButtonSymbol].setMessage(
+							this.getOption("labels.messageForbidden"),
+						);
+					} else if (response.status === 401) {
+						const wwwAuthenticateHeader =
+							response.headers.get("www-authenticate");
+						if (wwwAuthenticateHeader) {
+							const wwwAuthenticateParts = wwwAuthenticateHeader
+								.split(/,\s*/)
+								.map((part) => {
+									const [key, value] = part.split("=");
+									return {
+										key: key.trim(),
+										value: value ? value.trim().replace(/^"|"$/g, "") : null,
+									};
+								});
+
+							const filteredParts = wwwAuthenticateParts.filter(
+								(part) => part.key.toLowerCase() === "2fa",
+							);
+							if (filteredParts.length > 0) {
+								const timeout = this.getOption("timeoutForSuccess");
+								this[loginButtonSymbol].setState("successful", timeout);
+								setTimeout(() => {
+									this.openSecondFactor();
+									const digitsElement = this.shadowRoot.getElementById(
+										"secondFactorControl",
+									);
+									digitsElement.focus();
+								}, timeout);
+								return;
+							}
+						}
+
+						this[loginButtonSymbol].setMessage(
+							this.getOption("labels.messageLoginFailed"),
+						);
+					} else {
+						this[loginButtonSymbol].setMessage(
+							this.getOption("labels.messageSomethingWentWrong"),
+						);
+					}
+					this[loginButtonSymbol].showMessage(timeout);
+					this[loginButtonSymbol].setState("failed", timeout);
+
+					setTimeout(() => {
+						this.shadowRoot.querySelector("input[name='username']").focus();
+					}, 0);
+				}
+			})
+			.catch((error) => {
+				this[loginButtonSymbol].setMessage(
+					this.getOption("labels.messageSomethingWentWrong"),
+				);
+				this[loginButtonSymbol].showMessage(timeout);
+				this[loginButtonSymbol].setState("failed", timeout);
+
+				setTimeout(() => {
+					this.shadowRoot.querySelector("input[name='username']").focus();
+				}, 0);
+			});
+	});
+
+	this[requestLinkButtonSymbol].setOption("actions.click", (event) => {
+		const emailElement = this.shadowRoot.querySelector("input[name='email']");
+
+		// get username and password
+		const mail = emailElement.value;
+		const valid = emailElement.checkValidity();
+
+		let msg = null;
+		if (mail === "" || mail === null) {
+			this.setOption("classes.emailInvalid", "invalid");
+			msg = this.getOption("labels.messageEmptyEmail");
+		} else if (!valid) {
+			this.setOption("classes.emailInvalid", "invalid");
+			msg = this.getOption("labels.messageInvalidEmail");
+		} else {
+			this.setOption("classes.emailInvalid", "");
+		}
+
+		const timeout = this.getOption("timeoutForMessage");
+
+		if (msg !== null && msg !== undefined) {
+			this[requestLinkButtonSymbol].setMessage(msg);
+			this[requestLinkButtonSymbol].showMessage(timeout);
+			this[requestLinkButtonSymbol].setState("failed", timeout);
+			return;
+		}
+
+		const url = this.getOption("fetch.forgotPassword.url");
+
+		if (url === "" || url === null || url === undefined) {
+			this[requestLinkButtonSymbol].setMessage(
+				this.getOption("labels.messageThisFormIsNotConfigured"),
+			);
+			this[requestLinkButtonSymbol].showMessage(timeout);
+			this[requestLinkButtonSymbol].setState("failed", timeout);
+			return;
+		}
+
+		const options = {
+			method: this.getOption("fetch.forgotPassword.method"),
+			mode: this.getOption("fetch.forgotPassword.mode"),
+			headers: this.getOption("fetch.forgotPassword.headers"),
+			credentials: this.getOption("fetch.forgotPassword.credentials"),
+			body: JSON.stringify({ mail }),
+		};
+
+		getWindow()
+			.fetch(url, options)
+			.then((response) => {
+				if (response.ok) {
+					const timeout = this.getOption("timeoutForSuccess");
+					this[requestLinkButtonSymbol].setState("successful", timeout);
+					setTimeout(() => {
+						this.openDigits();
+					}, timeout);
+				} else {
+					if (response.status === 403) {
+						this[requestLinkButtonSymbol].setMessage(
+							this.getOption("labels.messageForbidden"),
+						);
+					} else if (response.status === 401) {
+						if (
+							response.headers.has("x-password-reset") &&
+							response.headers.get("x-password-reset").includes("disabled")
+						) {
+							this[requestLinkButtonSymbol].setMessage(
+								this.getOption("labels.messagePasswordResetDisabled"),
+							);
+						} else {
+							this[requestLinkButtonSymbol].setMessage(
+								this.getOption("labels.messageLoginFailed"),
+							);
+						}
+					} else {
+						this[requestLinkButtonSymbol].setMessage(
+							this.getOption("labels.messageSomethingWentWrong"),
+						);
+					}
+					this[requestLinkButtonSymbol].showMessage(timeout);
+					this[requestLinkButtonSymbol].setState("failed", timeout);
+				}
+			})
+			.catch(() => {
+				this[requestLinkButtonSymbol].setMessage(
+					this.getOption("labels.messageSomethingWentWrong"),
+				);
+				this[requestLinkButtonSymbol].showMessage(timeout);
+				this[requestLinkButtonSymbol].setState("failed", timeout);
+			});
+	});
+
+	this[secondFactorButtonSymbol].setOption("actions.click", (event) => {
+		const digitsElement = this.shadowRoot.getElementById("secondFactorControl");
+
+		const digits = digitsElement.value;
+		const valid = digitsElement.checkValidity();
+
+		let msg = null;
+		if (digits === "" || digits === null) {
+			msg = this.getOption("labels.digitsEmpty");
+		} else if (!valid) {
+			msg = this.getOption("labels.digitsInvalid");
+		}
+
+		const timeout = this.getOption("timeoutForMessage");
+
+		if (msg !== null && msg !== undefined) {
+			this[secondFactorButtonSymbol].setMessage(msg);
+			this[secondFactorButtonSymbol].showMessage(timeout);
+			this[secondFactorButtonSymbol].setState("failed", timeout);
+			return;
+		}
+
+		const url = this.getOption("fetch.secondFactor.url");
+
+		if (url === "" || url === null || url === undefined) {
+			this[secondFactorButtonSymbol].setMessage(
+				this.getOption("labels.messageThisFormIsNotConfigured"),
+			);
+			this[secondFactorButtonSymbol].showMessage(timeout);
+			this[secondFactorButtonSymbol].setState("failed", timeout);
+			return;
+		}
+
+		const options = {
+			method: this.getOption("fetch.secondFactor.method"),
+			mode: this.getOption("fetch.secondFactor.mode"),
+			headers: this.getOption("fetch.secondFactor.headers"),
+			credentials: this.getOption("fetch.secondFactor.credentials"),
+			body: JSON.stringify({ digits }),
+		};
+
+		getWindow()
+			.fetch(url, options)
+			.then((response) => {
+				if (response.ok) {
+					const timeout = this.getOption("timeoutForSuccess");
+					this[secondFactorButtonSymbol].setState("successful", timeout);
+					setTimeout(() => {
+						this.openLoggedIn();
+					}, timeout);
+				} else {
+					if (response.status === 403) {
+						this[secondFactorButtonSymbol].setMessage(
+							this.getOption("labels.messageForbidden"),
+						);
+					} else if (response.status === 401) {
+						this[secondFactorButtonSymbol].setMessage(
+							this.getOption("labels.messageLoginFailed"),
+						);
+					} else {
+						this[secondFactorButtonSymbol].setMessage(
+							this.getOption("labels.messageSomethingWentWrong"),
+						);
+					}
+					this[secondFactorButtonSymbol].showMessage(timeout);
+					this[secondFactorButtonSymbol].setState("failed", timeout);
+					setTimeout(() => {
+						digitsElement.focus();
+					}, 0);
+				}
+			})
+			.catch(() => {
+				this[secondFactorButtonSymbol].setMessage(
+					this.getOption("labels.messageSomethingWentWrong"),
+				);
+				this[secondFactorButtonSymbol].showMessage(timeout);
+				this[secondFactorButtonSymbol].setState("failed", timeout);
+				setTimeout(() => {
+					digitsElement.focus();
+				}, 0);
+			});
+	});
+
+	this[digitsButtonSymbol].setOption("actions.click", (event) => {
+		const digitsElement = this.shadowRoot.getElementById("digitsControl");
+
+		const digits = digitsElement.value;
+		const valid = digitsElement.checkValidity();
+
+		let msg = null;
+		if (digits === "" || digits === null || digits === undefined) {
+			msg = this.getOption("labels.digitsEmpty");
+		} else if (!valid) {
+			msg = this.getOption("labels.digitsInvalid");
+		}
+
+		const timeout = this.getOption("timeoutForMessage");
+		if (msg !== null && msg !== undefined) {
+			this[digitsButtonSymbol].setMessage(msg);
+			this[digitsButtonSymbol].showMessage(timeout);
+			this[digitsButtonSymbol].setState("failed", timeout);
+			return;
+		}
+
+		const url = this.getOption("fetch.digits.url");
+
+		if (url === "" || url === null || url === undefined) {
+			this[digitsButtonSymbol].setMessage(
+				this.getOption("labels.messageThisFormIsNotConfigured"),
+			);
+			this[digitsButtonSymbol].showMessage(timeout);
+			this[digitsButtonSymbol].setState("failed", timeout);
+			return;
+		}
+
+		const options = {
+			method: this.getOption("fetch.digits.method"),
+			mode: this.getOption("fetch.digits.mode"),
+			headers: this.getOption("fetch.digits.headers"),
+			credentials: this.getOption("fetch.digits.credentials"),
+			body: JSON.stringify({ digits }),
+		};
+
+		getWindow()
+			.fetch(url, options)
+			.then((response) => {
+				const timeout = this.getOption("timeoutForSuccess");
+
+				if (response.ok) {
+					this[digitsButtonSymbol].setState("successful", timeout);
+					setTimeout(() => {
+						this.openLoggedIn();
+					}, timeout);
+				} else {
+					if (response.status === 403) {
+						this[digitsButtonSymbol].setMessage(
+							this.getOption("labels.messageForbidden"),
+						);
+					} else if (response.status === 401) {
+						this[digitsButtonSymbol].setMessage(
+							this.getOption("labels.messageLoginFailed"),
+						);
+					} else {
+						this[digitsButtonSymbol].setMessage(
+							this.getOption("labels.messageSomethingWentWrong"),
+						);
+					}
+					this[digitsButtonSymbol].showMessage(timeout);
+					this[digitsButtonSymbol].setState("failed", timeout);
+					setTimeout(() => {
+						digitsElement.focus();
+					}, 0);
+				}
+			})
+			.catch(() => {
+				this[digitsButtonSymbol].setMessage(
+					this.getOption("labels.messageSomethingWentWrong"),
+				);
+				this[digitsButtonSymbol].showMessage(timeout);
+				this[digitsButtonSymbol].setState("failed", timeout);
+				setTimeout(() => {
+					digitsElement.focus();
+				}, 0);
+			});
+	});
+
+	return this;
 }
 
 /**
@@ -1483,50 +1488,50 @@ function initEventHandler() {
  * @return {void}
  */
 function initControlReferences() {
-    this[loginElementSymbol] = this.shadowRoot.querySelector(
-        `[${ATTRIBUTE_ROLE}="control"]`,
-    );
-
-    // data-monster-role="forgot-password-link"
-
-    this[forgotPasswordLinkSymbol] = this.shadowRoot.querySelector(
-        `[data-monster-role="forgot-password-link"]`,
-    );
-
-    this[forgotPasswordCollapseSymbol] = this.shadowRoot.querySelector(
-        `[data-monster-role="forgot-password-collapse"]`,
-    );
-
-    this[loginCollapseSymbol] = this.shadowRoot.querySelector(
-        `[data-monster-role="login-collapse"]`,
-    );
-
-    this[loginLinkSymbol] = this.shadowRoot.querySelector(
-        `[data-monster-role="login-link"]`,
-    );
-
-    this[secondFactorCollapseSymbol] = this.shadowRoot.querySelector(
-        `[data-monster-role="second-factor-collapse"]`,
-    );
-
-    this[resetLoginProcessLinksSymbol] = this.shadowRoot.querySelectorAll(
-        `[data-monster-role="reset-login-process-link"]`,
-    );
-
-    this[loggedInCollapseSymbol] = this.shadowRoot.querySelector(
-        `[data-monster-role="logged-in-collapse"]`,
-    );
-
-    this[digitsCollapseSymbol] = this.shadowRoot.querySelector(
-        `[data-monster-role="digits-collapse"]`,
-    );
-
-    this[loginButtonSymbol] = this.shadowRoot.getElementById("loginButton");
-    this[requestLinkButtonSymbol] =
-        this.shadowRoot.getElementById("requestLinkButton");
-    this[secondFactorButtonSymbol] =
-        this.shadowRoot.getElementById("secondFactorButton");
-    this[digitsButtonSymbol] = this.shadowRoot.getElementById("digitsButton");
+	this[loginElementSymbol] = this.shadowRoot.querySelector(
+		`[${ATTRIBUTE_ROLE}="control"]`,
+	);
+
+	// data-monster-role="forgot-password-link"
+
+	this[forgotPasswordLinkSymbol] = this.shadowRoot.querySelector(
+		`[data-monster-role="forgot-password-link"]`,
+	);
+
+	this[forgotPasswordCollapseSymbol] = this.shadowRoot.querySelector(
+		`[data-monster-role="forgot-password-collapse"]`,
+	);
+
+	this[loginCollapseSymbol] = this.shadowRoot.querySelector(
+		`[data-monster-role="login-collapse"]`,
+	);
+
+	this[loginLinkSymbol] = this.shadowRoot.querySelector(
+		`[data-monster-role="login-link"]`,
+	);
+
+	this[secondFactorCollapseSymbol] = this.shadowRoot.querySelector(
+		`[data-monster-role="second-factor-collapse"]`,
+	);
+
+	this[resetLoginProcessLinksSymbol] = this.shadowRoot.querySelectorAll(
+		`[data-monster-role="reset-login-process-link"]`,
+	);
+
+	this[loggedInCollapseSymbol] = this.shadowRoot.querySelector(
+		`[data-monster-role="logged-in-collapse"]`,
+	);
+
+	this[digitsCollapseSymbol] = this.shadowRoot.querySelector(
+		`[data-monster-role="digits-collapse"]`,
+	);
+
+	this[loginButtonSymbol] = this.shadowRoot.getElementById("loginButton");
+	this[requestLinkButtonSymbol] =
+		this.shadowRoot.getElementById("requestLinkButton");
+	this[secondFactorButtonSymbol] =
+		this.shadowRoot.getElementById("secondFactorButton");
+	this[digitsButtonSymbol] = this.shadowRoot.getElementById("digitsButton");
 }
 
 /**
@@ -1534,8 +1539,8 @@ function initControlReferences() {
  * @return {string}
  */
 function getTemplate() {
-    // language=HTML
-    return `
+	// language=HTML
+	return `
 
         <template id="urls">
             <li><a data-monster-attributes="href path:urls.url"