diff options
70 files changed, 637 insertions, 1583 deletions
diff --git a/keycloak_email/html/email-test.ftl b/keycloak_email/html/email-test.ftl deleted file mode 100644 index bca2480..0000000 --- a/keycloak_email/html/email-test.ftl +++ /dev/null @@ -1,4 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.emailLayout> -${kcSanitize(msg("emailTestBodyHtml",realmName))?no_esc} -</@layout.emailLayout> diff --git a/keycloak_email/html/email-update-confirmation.ftl b/keycloak_email/html/email-update-confirmation.ftl deleted file mode 100644 index 583308e..0000000 --- a/keycloak_email/html/email-update-confirmation.ftl +++ /dev/null @@ -1,5 +0,0 @@ -<html> -<body> -${kcSanitize(msg("emailUpdateConfirmationBodyHtml",link, newEmail, realmName, linkExpirationFormatter(linkExpiration)))?no_esc} -</body> -</html> diff --git a/keycloak_email/html/email-verification-with-code.ftl b/keycloak_email/html/email-verification-with-code.ftl deleted file mode 100644 index 6a73f50..0000000 --- a/keycloak_email/html/email-verification-with-code.ftl +++ /dev/null @@ -1,4 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.emailLayout> -${kcSanitize(msg("emailVerificationBodyCodeHtml",code))?no_esc} -</@layout.emailLayout> diff --git a/keycloak_email/html/email-verification.ftl b/keycloak_email/html/email-verification.ftl deleted file mode 100644 index 9a2e318..0000000 --- a/keycloak_email/html/email-verification.ftl +++ /dev/null @@ -1,4 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.emailLayout> -${kcSanitize(msg("emailVerificationBodyHtml",link, linkExpiration, realmName, linkExpirationFormatter(linkExpiration)))?no_esc} -</@layout.emailLayout> diff --git a/keycloak_email/html/event-login_error.ftl b/keycloak_email/html/event-login_error.ftl deleted file mode 100644 index 7ab9401..0000000 --- a/keycloak_email/html/event-login_error.ftl +++ /dev/null @@ -1,4 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.emailLayout> -${kcSanitize(msg("eventLoginErrorBodyHtml",event.date,event.ipAddress))?no_esc} -</@layout.emailLayout> diff --git a/keycloak_email/html/event-remove_totp.ftl b/keycloak_email/html/event-remove_totp.ftl deleted file mode 100644 index 6058bbe..0000000 --- a/keycloak_email/html/event-remove_totp.ftl +++ /dev/null @@ -1,4 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.emailLayout> -${kcSanitize(msg("eventRemoveTotpBodyHtml",event.date, event.ipAddress))?no_esc} -</@layout.emailLayout> diff --git a/keycloak_email/html/event-update_password.ftl b/keycloak_email/html/event-update_password.ftl deleted file mode 100644 index 8a802ec..0000000 --- a/keycloak_email/html/event-update_password.ftl +++ /dev/null @@ -1,4 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.emailLayout> -${kcSanitize(msg("eventUpdatePasswordBodyHtml",event.date, event.ipAddress))?no_esc} -</@layout.emailLayout> diff --git a/keycloak_email/html/event-update_totp.ftl b/keycloak_email/html/event-update_totp.ftl deleted file mode 100644 index f58c38a..0000000 --- a/keycloak_email/html/event-update_totp.ftl +++ /dev/null @@ -1,4 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.emailLayout> -${kcSanitize(msg("eventUpdateTotpBodyHtml",event.date, event.ipAddress))?no_esc} -</@layout.emailLayout> diff --git a/keycloak_email/html/executeActions.ftl b/keycloak_email/html/executeActions.ftl deleted file mode 100644 index 73d4075..0000000 --- a/keycloak_email/html/executeActions.ftl +++ /dev/null @@ -1,8 +0,0 @@ -<#outputformat "plainText"> -<#assign requiredActionsText><#if requiredActions??><#list requiredActions><#items as reqActionItem>${msg("requiredAction.${reqActionItem}")}<#sep>, </#sep></#items></#list></#if></#assign> -</#outputformat> - -<#import "template.ftl" as layout> -<@layout.emailLayout> -${kcSanitize(msg("executeActionsBodyHtml",link, linkExpiration, realmName, requiredActionsText, linkExpirationFormatter(linkExpiration)))?no_esc} -</@layout.emailLayout> diff --git a/keycloak_email/html/identity-provider-link.ftl b/keycloak_email/html/identity-provider-link.ftl deleted file mode 100644 index 2d378df..0000000 --- a/keycloak_email/html/identity-provider-link.ftl +++ /dev/null @@ -1,4 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.emailLayout> -${kcSanitize(msg("identityProviderLinkBodyHtml", identityProviderAlias, realmName, identityProviderContext.username, link, linkExpiration, linkExpirationFormatter(linkExpiration)))?no_esc} -</@layout.emailLayout> diff --git a/keycloak_email/html/password-reset.ftl b/keycloak_email/html/password-reset.ftl deleted file mode 100644 index b0de263..0000000 --- a/keycloak_email/html/password-reset.ftl +++ /dev/null @@ -1,4 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.emailLayout> -${kcSanitize(msg("passwordResetBodyHtml",link, linkExpiration, realmName, linkExpirationFormatter(linkExpiration)))?no_esc} -</@layout.emailLayout> diff --git a/keycloak_email/html/template.ftl b/keycloak_email/html/template.ftl deleted file mode 100644 index fd2ea5d..0000000 --- a/keycloak_email/html/template.ftl +++ /dev/null @@ -1,7 +0,0 @@ -<#macro emailLayout> -<html> -<body> - <#nested> -</body> -</html> -</#macro> diff --git a/keycloak_email/messages/messages_ca.properties b/keycloak_email/messages/messages_ca.properties deleted file mode 100644 index 03e0254..0000000 --- a/keycloak_email/messages/messages_ca.properties +++ /dev/null @@ -1,21 +0,0 @@ -emailVerificationSubject=Verificaci\u00F3 d''email -emailVerificationBody=Alg\u00FA ha creat un compte de {2} amb aquesta adre\u00E7a de correu electr\u00F2nic. Si has estat tu, fes clic a l''enlla\u00E7 seg\u00FCent per verificar la teva adre\u00E7a de correu electr\u00F2nic.\n\n{0}\n\nAquest enlla\u00E7 expirar\u00E0 en {1} minuts.\n\nSi tu no has creat aquest compte, simplement ignora aquest missatge. -emailVerificationBodyHtml=<p>Alg\u00FA ha creat un compte de {2} amb aquesta adre\u00E7a de correu electr\u00F2nic. Si has estat tu, fes clic a l''enlla\u00E7 seg\u00FCent per verificar la teva adre\u00E7a de correu electr\u00F2nic.</p><p><a href=\"{0}\">{0}</a></p><p> Aquest enlla\u00E7 expirar\u00E0 en {1} minuts.</p><p> Si tu no has creat aquest compte, simplement ignora aquest missatge.</p> -passwordResetSubject=Reinicia contrasenya -passwordResetBody=Alg\u00FA ha demanat de canviar les credencials del teu compte de {2}. Si has estat tu, fes clic a l''enlla\u00E7 seg\u00FCent per a reiniciar-les.\n\n{0}\n\nAquest enlla\u00E7 expirar\u00E0 en {1} minuts.\n\nSi no vols reiniciar les teves credencials, simplement ignora aquest missatge i no es realitzar\u00E0 cap canvi. -passwordResetBodyHtml=<p>Alg\u00FA ha demanat de canviar les credencials del teu compte de {2}. Si has estat tu, fes clic a l''enlla\u00E7 seg\u00FCent per a reiniciar-les.</p><p><a href=\"{0}\">{0}</a></p><p>Aquest enlla\u00E7 expirar\u00E0 en {1} minuts.</p><p>Si no vols reiniciar les teves credencials, simplement ignora aquest missatge i no es realitzar\u00E0 cap canvi.</p> -executeActionsSubject=Actualitza el teu compte -executeActionsBody=L''administrador ha sol\u00B7licitat que actualitzis el teu compte de {2}. Fes clic a l''enlla\u00E7 inferior per iniciar aquest proc\u00E9s.\n\n{0}\n\nAquest enlla\u00E7 expirar\u00E0 en {1} minutes.\n\nSi no est\u00E0s al tant que l''administrador hagi sol\u00B7licitat aix\u00F2, simplement ignora aquest missatge i no es realitzar\u00E0 cap canvi. -executeActionsBodyHtml=<p>L''administrador ha sol\u00B7licitat que actualitzis el teu compte de {2}. Fes clic a l''enlla\u00E7 inferior per iniciar aquest proc\u00E9s.</p><p><a href=\"{0}\">{0}</a></p><p>Aquest enlla\u00E7 expirar\u00E0 en {1} minutes.</p><p>Si no est\u00E0s al tant que l''administrador hagi sol\u00B7licitat aix\u00F2, simplement ignora aquest missatge i no es realitzar\u00E0 cap canvi.</p> -eventLoginErrorSubject=Fallada en l''inici de sessi\u00F3 -eventLoginErrorBody=S''ha detectat un intent d''acc\u00E9s fallit al teu compte el {0} des de {1}. Si no has estat tu, si us plau contacta amb l''administrador. -eventLoginErrorBodyHtml=<p>S''ha detectat un intent d''acc\u00E9s fallit al teu compte el {0} des de {1}. Si no has estat tu, si us plau contacta amb l''administrador.</p> -eventRemoveTotpSubject=Esborrat OTP -eventRemoveTotpBody=OTP s''ha eliminat del teu compte el {0} des de {1}. Si no has estat tu, per favor contacta amb l''administrador. -eventRemoveTotpBodyHtml=<p>OTP s''ha eliminat del teu compte el {0} des de {1}. Si no has estat tu, si us plau contacta amb l''administrador. </ P> -eventUpdatePasswordSubject=Actualitzaci\u00F3 de contrasenya -eventUpdatePasswordBody=La teva contrasenya s''ha actualitzat el {0} des de {1}. Si no has estat tu, si us plau contacta amb l''administrador. -eventUpdatePasswordBodyHtml=<p>La teva contrasenya s''ha actualitzat el {0} des de {1}. Si no has estat tu, si us plau contacta amb l''administrador.</p> -eventUpdateTotpSubject=Actualitzaci\u00F3 de OTP -eventUpdateTotpBody=OTP s''ha actualitzat al teu compte el {0} des de {1}. Si no has estat tu, si us plau contacta amb l''administrador. -eventUpdateTotpBodyHtml=<p>OTP s''ha actualitzat al teu compte el {0} des de {1}. Si no has estat tu, si us plau contacta amb l''administrador.</p> diff --git a/keycloak_email/messages/messages_cs.properties b/keycloak_email/messages/messages_cs.properties deleted file mode 100644 index 2e4fab5..0000000 --- a/keycloak_email/messages/messages_cs.properties +++ /dev/null @@ -1,60 +0,0 @@ -# encoding: utf-8 -emailVerificationSubject=Ověření e-mailu -emailVerificationBody=Někdo vytvořil účet {2} s touto e-mailovou adresou. Pokud jste to vy, klikněte na níže uvedený odkaz a ověřte svou e-mailovou adresu \n\n{0}\n\nTento odkaz vyprší za {3}.\n\nPokud jste tento účet nevytvořili, tuto zprávu ignorujte. -emailVerificationBodyHtml=<p>Někdo vytvořil účet {2} s touto e-mailovou adresou. Pokud jste to vy, klikněte na níže uvedený odkaz a ověřte svou e-mailovou adresu. </p><p><a href="{0}">Odkaz na ověření e-mailové adresy</a></p><p>Platnost odkazu vyprší za {3}.</p><p>Pokud jste tento účet nevytvořili, tuto zprávu ignorujte.</p> -emailTestSubject=[KEYCLOAK] - testovací zpráva -emailTestBody=Toto je testovací zpráva -emailTestBodyHtml=<p>Toto je testovací zpráva </p> -identityProviderLinkSubject=Odkaz {0} -identityProviderLinkBody=Někdo chce propojit váš účet "{1}" s účtem "{0}" uživatele {2}. Pokud jste to vy, klikněte na níže uvedený odkaz a propojte účty. \n\n{3}\n\nPlatnost tohoto odkazu je {5}.\n\nPokud nechcete propojit účet, tuto zprávu ignorujte. Pokud propojíte účty, budete se moci přihlásit jako {1} pomocí {0}. -identityProviderLinkBodyHtml=<p>Někdo chce propojit váš účet <b>{1}</b> s účtem <b>{0}</b> uživatele {2}. Pokud jste to vy, klikněte na níže uvedený odkaz a propojte účty.</p><p><a href="{3}">Odkaz na propojení účtů.</a></p><p> Platnost tohoto odkazu je {5}. </p><p> Pokud nechcete propojit účet, tuto zprávu ignorujte. Pokud propojíte účty, budete se moci přihlásit jako {1} pomocí {0}.</p> -passwordResetSubject=Zapomenuté heslo -passwordResetBody=Někdo právě požádal o změnu hesla u vašeho účtu {2}. Pokud jste to vy, pro jeho změnu klikněte na odkaz níže.\n\n{0}\n\nPlatnost tohoto odkazu je {3}.\n\nPokud heslo změnit nechcete, tuto zprávu ignorujte a nic se nezmění. -passwordResetBodyHtml=<p>Někdo právě požádal o změnu pověření vašeho účtu {2}. Pokud jste to vy, klikněte na odkaz níže, abyste je resetovali.</p><p><a href="{0}">Odkaz na obnovení pověření </a></p><p> Platnost tohoto odkazu vyprší během {3}.</p><p> Pokud nechcete obnovit vaše pověření, ignorujte tuto zprávu a nic se nezmění.</p> -executeActionsSubject=Aktualizujte svůj účet -executeActionsBody=Váš administrátor vás požádal o provedení následujících akcí u účtu {2}: {3}. Začněte kliknutím na níže uvedený odkaz.\n\n{0}\n\nPlatnost tohoto odkazu je {4}.\n\nPokud si nejste jisti, zda je tento požadavek v pořádku, ignorujte tuto zprávu. -executeActionsBodyHtml=<p>Váš administrátor vás požádal o provedení následujících akcí u účtu {2}: {3}. Začněte kliknutím na níže uvedený odkaz.</p><p><a href="{0}">Odkaz na aktualizaci účtu.</a></p><p>Platnost tohoto odkazu je {4}.</p><p>Pokud si nejste jisti, zda je tento požadavek v pořádku, ignorujte tuto zprávu.</p> -eventLoginErrorSubject=Chyba přihlášení -eventLoginErrorBody=Někdo se neúspěšně pokusil přihlásit k účtu {0} z {1}. Pokud jste to nebyli vy, kontaktujte administrátora. -eventLoginErrorBodyHtml=<p>Někdo se neúspěšně pokusil přihlásit k účtu {0} z {1}. Pokud jste to nebyli vy, kontaktujte administrátora.</p> -eventRemoveTotpSubject=Odebrat TOTP -eventRemoveTotpBody=V účtu {0} bylo odebráno nastavení OTP z {1}. Pokud jste to nebyli vy, kontaktujte administrátora. -eventRemoveTotpBodyHtml=<p>V účtu {0} bylo odebráno nastavení OTP z {1}. Pokud jste to nebyli vy, kontaktujte administrátora.</p> -eventUpdatePasswordSubject=Aktualizace hesla -eventUpdatePasswordBody=V účtu {0} bylo změněno heslo z {1}. Pokud jste to nebyli vy, kontaktujte administrátora. -eventUpdatePasswordBodyHtml=<p>V účtu {0} bylo změněno heslo z {1}. Pokud jste to nebyli vy, kontaktujte administrátora.</p> -eventUpdateTotpSubject=Aktualizace OTP -eventUpdateTotpBody=V účtu {0} bylo změněno nastavení OTP z {1}. Pokud jste to nebyli vy, kontaktujte administrátora. -eventUpdateTotpBodyHtml=<p>V účtu {0} bylo změněno nastavení OTP z {1}. Pokud jste to nebyli vy, kontaktujte administrátora.</p> - -requiredAction.CONFIGURE_TOTP=Konfigurace OTP -requiredAction.terms_and_conditions=Smluvní podmínky -requiredAction.UPDATE_PASSWORD=Aktualizace hesla -requiredAction.UPDATE_PROFILE=Aktualizace profilu -requiredAction.VERIFY_EMAIL=Ověření e-mailu - -# units for link expiration timeout formatting -linkExpirationFormatter.timePeriodUnit.seconds=sekund -linkExpirationFormatter.timePeriodUnit.seconds.1=sekunda -linkExpirationFormatter.timePeriodUnit.seconds.2=sekundy -linkExpirationFormatter.timePeriodUnit.seconds.3=sekundy -linkExpirationFormatter.timePeriodUnit.seconds.4=sekundy -linkExpirationFormatter.timePeriodUnit.minutes=minut -linkExpirationFormatter.timePeriodUnit.minutes.1=minuta -linkExpirationFormatter.timePeriodUnit.minutes.2=minuty -linkExpirationFormatter.timePeriodUnit.minutes.3=minuty -linkExpirationFormatter.timePeriodUnit.minutes.4=minuty -linkExpirationFormatter.timePeriodUnit.hours=hodin -linkExpirationFormatter.timePeriodUnit.hours.1=hodina -linkExpirationFormatter.timePeriodUnit.hours.2=hodiny -linkExpirationFormatter.timePeriodUnit.hours.3=hodiny -linkExpirationFormatter.timePeriodUnit.hours.4=hodiny -linkExpirationFormatter.timePeriodUnit.days=dní -linkExpirationFormatter.timePeriodUnit.days.1=den -linkExpirationFormatter.timePeriodUnit.days.2=dny -linkExpirationFormatter.timePeriodUnit.days.3=dny -linkExpirationFormatter.timePeriodUnit.days.4=dny - -emailVerificationBodyCode=Ověřte prosím svou e-mailovou adresu zadáním následujícího kódu.\n\n{0}\n\n. -emailVerificationBodyCodeHtml=<p>Ověřte prosím svou e-mailovou adresu zadáním následujícího kódu.</p><p><b>{0}</b></p> - diff --git a/keycloak_email/messages/messages_da.properties b/keycloak_email/messages/messages_da.properties deleted file mode 100644 index 5f013f2..0000000 --- a/keycloak_email/messages/messages_da.properties +++ /dev/null @@ -1,47 +0,0 @@ -# encoding: UTF-8 -emailVerificationSubject=Verificer email -emailVerificationBody=Nogen har oprettet en {2} konto med denne email adresse. Hvis dette var dig, bedes du trykke på forbindet herunder for at verificere din email adresse \n\n{0}\n\nDette link vil udløbe inden for {3}.\n\nHvis det var dig der har oprettet denne konto, bedes du se bort fra denne mail. -emailVerificationBodyHtml=<p>Nogen har oprettet en {2} konto med denne email adresse. Hvis dette var dig, bedes du trykke på forbindet herunder for at verificere din email adresse</p><p><a href="{0}">Link til email verificering</a></p><p>Dette link vil udløbe inden for {3}.</p><p>Hvis det var dig der har oprettet denne konto, bedes du se bort fra denne mail.</p> -emailTestSubject=[KEYCLOAK] - SMTP test besked -emailTestBody=Dette er en test besked -emailTestBodyHtml=<p>Dette er en test besked</p> -identityProviderLinkSubject=Link {0} -identityProviderLinkBody=Nogen vil forbinde din "{1}" konto med "{0}" kontoen som er tilknyttet brugeren {2}. Hvis dette var dig, bedes du klikke på forbindet herunder for at forbinde de to konti\n\n{3}\n\nDette link vil udløbe efter {5}.\n\nHvis du ikke vil forbinde disse konti, kan du bare ignore denne besked. Hvis du vælger at forbinde de to konti, kan du logge ind som {1} via {0}. -identityProviderLinkBodyHtml=<p>Someone wants to link your <b>{1}</b> account with <b>{0}</b> account of user {2} . Hvis dette var dig, bedes du klikke på forbindet herunder for at forbinde de to konti</p><p><a href="{3}">Bekræft</a></p><p>Dette link vil udløbe efter {5}.</p><p>nHvis du ikke vil forbinde disse konti, kan du bare ignore denne besked. Hvis du vælger at forbinde de to konti, kan du logge ind som {1} via {0}. -passwordResetSubject=Gendan adgangskode -passwordResetBody=Nogen har forsøgt at nulstille adgangskoden til {2}. Hvis dette var dig, bedes du klikke på linket herunder for at nulstille adgangskoden.\n\n{0}\n\nDette link og kode vil udløbe efter {3}.\n\nHvis du ikke ønsker at nulstille din adgangskode, kan du se bort fra denne besked. -passwordResetBodyHtml=<p>Nogen har forsøgt at nulstille adgangskoden til {2}. Hvis dette var dig, bedes du klikke på linket herunder for at nulstille adgangskoden.</p><p><a href="{0}">Nulstil adgangskode</a></p><p>Dette link og kode vil udløbe efter {3}.</p><p>Hvis du ikke ønsker at nulstille din adgangskode, kan du se bort fra denne besked.</p> -executeActionsSubject=Opdater din konto -executeActionsBody=Din administrator beder dig opdatere din {2} konto ved at udføre følgende handling(er): {3}. Klik på linket herunder for at starte processen.\n\n{0}\n\nDette link udløber efter {4}.\n\nHvis du ikke mener at din administrator har efterspurgt dette, kan du blot se bort fra denne besked. -executeActionsBodyHtml=<p>Din administrator beder dig opdatere din {2} konto ved at udføre følgende handling(er): {3}. Klik på linket herunder for at starte processen.</p><p><a href="{0}">Opdater konto</a></p><p>Dette link udløber efter {4}.</p><p>Hvis du ikke mener at din administrator har efterspurgt dette, kan du blot se bort fra denne besked.</p> -eventLoginErrorSubject=Logind fejl -eventLoginErrorBody=Et fejlet logind forsøg er blevet registreret på din konto d. {0} fra {1}. Hvis dette ikke var dig, bedes du kontakte din administrator omgående. -eventLoginErrorBodyHtml=<p>Et fejlet logind forsøg er blevet registreret på din konto d. {0} fra {1}. Hvis dette ikke var dig, bedes du kontakte din administrator omgående.</p> -eventRemoveTotpSubject=Fjern OTP -eventRemoveTotpBody=OTP er blevet fjernet fra din konto d. {0} fra {1}. Hvis dette ikke var dig, bedes du kontakte din administrator omgående. -eventRemoveTotpBodyHtml=<p>OTP er blevet fjernet fra din konto d. {0} fra {1}. Hvis dette ikke var dig, bedes du kontakte din administrator omgående.</p> -eventUpdatePasswordSubject=Opdater adgangskode -eventUpdatePasswordBody=Din adgangskode er blevet opdateret d. {0} fra {1}. Hvis dette ikke var dig, bedes du kontakte din administrator omgående. -eventUpdatePasswordBodyHtml=<p>Din adgangskode er blevet opdateret d. {0} fra {1}. Hvis dette ikke var dig, bedes du kontakte din administrator omgående.</p> -eventUpdateTotpSubject=Opdater OTP -eventUpdateTotpBody=OTP blev opdateret på din konto d. {0} fra {1}. Hvis dette ikke var dig, bedes du kontakte din administrator omgående. -eventUpdateTotpBodyHtml=<p>OTP blev opdateret på din konto d. {0} fra {1}. Hvis dette ikke var dig, bedes du kontakte din administrator omgående.</p> - -requiredAction.CONFIGURE_TOTP=Konfigurer OTP -requiredAction.terms_and_conditions=Vilkår og Betingelser -requiredAction.UPDATE_PASSWORD=Opdater Adgangskode -requiredAction.UPDATE_PROFILE=Opdater Profil -requiredAction.VERIFY_EMAIL=Verificer Email - -# units for link expiration timeout formatting -forbindexpirationFormatter.timePeriodUnit.seconds=sekunder -forbindexpirationFormatter.timePeriodUnit.seconds.1=sekund -forbindexpirationFormatter.timePeriodUnit.minutes=minutter -forbindexpirationFormatter.timePeriodUnit.minutes.1=minut -forbindexpirationFormatter.timePeriodUnit.hours=timer -forbindexpirationFormatter.timePeriodUnit.hours.1=time -forbindexpirationFormatter.timePeriodUnit.days=dage -forbindexpirationFormatter.timePeriodUnit.days.1=dag - -emailVerificationBodyCode=Verificer din email adresse ved at indtaste følgende kode.\n\n{0}\n\n. -emailVerificationBodyCodeHtml=<p>Verificer din email adresse ved at indtaste følgende kode.</p><p><b>{0}</b></p> diff --git a/keycloak_email/messages/messages_de.properties b/keycloak_email/messages/messages_de.properties deleted file mode 100644 index d79a3b1..0000000 --- a/keycloak_email/messages/messages_de.properties +++ /dev/null @@ -1,43 +0,0 @@ -emailVerificationSubject=E-Mail verifizieren -emailVerificationBody=Jemand hat ein {2} Konto mit dieser E-Mail-Adresse erstellt. Falls Sie das waren, dann klicken Sie auf den Link, um die E-Mail-Adresse zu verifizieren.\n\n{0}\n\nDieser Link wird in {1} Minuten ablaufen.\n\nFalls Sie dieses Konto nicht erstellt haben, dann k\u00F6nnen sie diese Nachricht ignorieren. -emailVerificationBodyHtml=<p>Jemand hat ein {2} Konto mit dieser E-Mail-Adresse erstellt. Falls das Sie waren, klicken Sie auf den Link, um die E-Mail-Adresse zu verifizieren.</p><p><a href="{0}">Link zur Best\u00E4tigung der E-Mail-Adresse</a></p><p>Dieser Link wird in {1} Minuten ablaufen.</p><p>Falls Sie dieses Konto nicht erstellt haben, dann k\u00F6nnen sie diese Nachricht ignorieren.</p> -identityProviderLinkSubject=Link {0} -identityProviderLinkBody=Es wurde beantragt Ihren Account {1} mit dem Account {0} von Benutzer {2} zu verlinken. Sollten Sie dies beantragt haben, klicken Sie auf den unten stehenden Link.\n\n{3}\n\n Die G\u00FCltigkeit des Links wird in {4} Minuten verfallen.\n\nSollten Sie Ihren Account nicht verlinken wollen, ignorieren Sie diese Nachricht. Wenn Sie die Accounts verlinken wird ein Login auf {1} \u00FCber {0} erm\u00F6glicht. -identityProviderLinkBodyHtml=<p>Es wurde beantragt Ihren Account {1} mit dem Account {0} von Benutzer {2} zu verlinken. Sollten Sie dies beantragt haben, klicken Sie auf den unten stehenden Link.</p><p><a href="{3}">Link zur Best\u00E4tigung der Kontoverkn\u00FCpfung</a></p><p>Die G\u00FCltigkeit des Links wird in {4} Minuten verfallen.</p><p>Sollten Sie Ihren Account nicht verlinken wollen, ignorieren Sie diese Nachricht. Wenn Sie die Accounts verlinken wird ein Login auf {1} \u00FCber {0} erm\u00F6glicht.</p> -passwordResetSubject=Passwort zur\u00FCcksetzen -passwordResetBody=Es wurde eine \u00C4nderung der Anmeldeinformationen f\u00FCr Ihren Account {2} angefordert. Wenn Sie diese \u00C4nderung beantragt haben, klicken Sie auf den unten stehenden Link.\n\n{0}\n\nDie G\u00FCltigkeit des Links wird in {1} Minuten verfallen.\n\nSollten Sie keine \u00C4nderung vollziehen wollen k\u00F6nnen Sie diese Nachricht ignorieren und an Ihrem Account wird nichts ge\u00E4ndert. -passwordResetBodyHtml=<p>Es wurde eine \u00C4nderung der Anmeldeinformationen f\u00FCr Ihren Account {2} angefordert. Wenn Sie diese \u00C4nderung beantragt haben, klicken Sie auf den unten stehenden Link.</p><p><a href="{0}">Link zum Zur\u00FCcksetzen von Anmeldeinformationen</a></p><p>Die G\u00FCltigkeit des Links wird in {1} Minuten verfallen.</p><p>Sollten Sie keine \u00C4nderung vollziehen wollen k\u00F6nnen Sie diese Nachricht ignorieren und an Ihrem Account wird nichts ge\u00E4ndert.</p> -executeActionsSubject=Aktualisieren Sie Ihr Konto -executeActionsBody=Ihr Administrator hat Sie aufgefordert Ihren Account {2} zu aktualisieren. Klicken Sie auf den unten stehenden Link um den Prozess zu starten.\n\n{0}\n\nDie G\u00FCltigkeit des Links wird in {1} Minuten verfallen.\n\nSollten Sie sich dieser Aufforderung nicht bewusst sein, ignorieren Sie diese Nachricht und Ihr Account bleibt unver\u00E4ndert. -executeActionsBodyHtml=<p>Ihr Administrator hat Sie aufgefordert Ihren Account {2} zu aktualisieren. Klicken Sie auf den unten stehenden Link um den Prozess zu starten.</p><p><a href="{0}">Link zum Account-Update</a></p><p>Die G\u00FCltigkeit des Links wird in {1} Minuten verfallen.</p><p>Sollten Sie sich dieser Aufforderung nicht bewusst sein, ignorieren Sie diese Nachricht und Ihr Account bleibt unver\u00E4ndert.</p> -eventLoginErrorSubject=Fehlgeschlagene Anmeldung -eventLoginErrorBody=Jemand hat um {0} von {1} versucht, sich mit Ihrem Konto anzumelden. Falls das nicht Sie waren, dann kontaktieren Sie bitte Ihren Admin. -eventLoginErrorBodyHtml=<p>Jemand hat um {0} von {1} versucht, sich mit Ihrem Konto anzumelden. Falls das nicht Sie waren, dann kontaktieren Sie bitte Ihren Admin.</p> -eventRemoveTotpSubject=OTP Entfernt -eventRemoveTotpBody=OTP wurde von Ihrem Konto am {0} von {1} entfernt. Falls das nicht Sie waren, dann kontaktieren Sie bitte Ihren Admin. -eventRemoveTotpBodyHtml=<p>OTP wurde von Ihrem Konto am {0} von {1} entfernt. Falls das nicht Sie waren, dann kontaktieren Sie bitte Ihren Admin.</p> -eventUpdatePasswordSubject=Passwort Aktualisiert -eventUpdatePasswordBody=Ihr Passwort wurde am {0} von {1} ge\u00E4ndert. Falls das nicht Sie waren, dann kontaktieren Sie bitte Ihren Admin. -eventUpdatePasswordBodyHtml=<p>Ihr Passwort wurde am {0} von {1} ge\u00E4ndert. Falls das nicht Sie waren, dann kontaktieren Sie bitte Ihren Admin.</p> -eventUpdateTotpSubject=OTP Aktualisiert -eventUpdateTotpBody=OTP wurde am {0} von {1} ge\u00E4ndert. Falls das nicht Sie waren, dann kontaktieren Sie bitte Ihren Admin. -eventUpdateTotpBodyHtml=<p>OTP wurde am {0} von {1} ge\u00E4ndert. Falls das nicht Sie waren, dann kontaktieren Sie bitte Ihren Admin.</p> - -requiredAction.CONFIGURE_TOTP=Mehrfachauthentifizierung konfigurieren -requiredAction.terms_and_conditions=Bedingungen und Konditionen -requiredAction.UPDATE_PASSWORD=Passwort aktualisieren -requiredAction.UPDATE_PROFILE=Profil aktualisieren -requiredAction.VERIFY_EMAIL=E-Mail-Adresse verifizieren - -# units for link expiration timeout formatting -linkExpirationFormatter.timePeriodUnit.seconds=Sekunden -linkExpirationFormatter.timePeriodUnit.seconds.1=Sekunde -linkExpirationFormatter.timePeriodUnit.minutes=Minuten -linkExpirationFormatter.timePeriodUnit.minutes.1=Minute -linkExpirationFormatter.timePeriodUnit.hours=Stunden -linkExpirationFormatter.timePeriodUnit.hours.1=Stunde -linkExpirationFormatter.timePeriodUnit.days=Tage -linkExpirationFormatter.timePeriodUnit.days.1=Tag - -emailVerificationBodyCode=Bitte verifizieren Sie Ihre E-Mail-Adresse, indem Sie den folgenden Code eingeben.\n\n{0}\n\n. -emailVerificationBodyCodeHtml=<p>Bitte verifizieren Sie Ihre E-Mail-Adresse, indem Sie den folgenden Code eingeben.</p><p><b>{0}</b></p> diff --git a/keycloak_email/messages/messages_en.properties b/keycloak_email/messages/messages_en.properties deleted file mode 100644 index ad6b61f..0000000 --- a/keycloak_email/messages/messages_en.properties +++ /dev/null @@ -1,55 +0,0 @@ -emailVerificationSubject=Verify email -emailVerificationBody=Someone has created a {2} account with this email address. If this was you, click the link below to verify your email address\n\n{0}\n\nThis link will expire within {3}.\n\nIf you didn''t create this account, just ignore this message. -emailVerificationBodyHtml=<p>Someone has created a {2} account with this email address. If this was you, click the link below to verify your email address</p><p><a href="{0}">Link to e-mail address verification</a></p><p>This link will expire within {3}.</p><p>If you didn''t create this account, just ignore this message.</p> -emailUpdateConfirmationSubject=Verify new email -emailUpdateConfirmationBody=To update your {2} account with email address {1}, click the link below\n\n{0}\n\nThis link will expire within {3}.\n\nIf you don''t want to proceed with this modification, just ignore this message. -emailUpdateConfirmationBodyHtml=<p>To update your {2} account with email address {1}, click the link below</p><p><a href="{0}">{0}</a></p><p>This link will expire within {3}.</p><p>If you don''t want to proceed with this modification, just ignore this message.</p> -emailTestSubject=[KEYCLOAK] - SMTP test message -emailTestBody=This is a test message -emailTestBodyHtml=<p>This is a test message</p> -identityProviderLinkSubject=Link {0} -identityProviderLinkBody=Someone wants to link your "{1}" account with "{0}" account of user {2} . If this was you, click the link below to link accounts\n\n{3}\n\nThis link will expire within {5}.\n\nIf you don''t want to link account, just ignore this message. If you link accounts, you will be able to login to {1} through {0}. -identityProviderLinkBodyHtml=<p>Someone wants to link your <b>{1}</b> account with <b>{0}</b> account of user {2}. If this was you, click the link below to link accounts</p><p><a href="{3}">Link to confirm account linking</a></p><p>This link will expire within {5}.</p><p>If you don''t want to link account, just ignore this message. If you link accounts, you will be able to login to {1} through {0}.</p> -passwordResetSubject=Reset password -passwordResetBody=Someone just requested to change your {2} account''s credentials. If this was you, click on the link below to reset them.\n\n{0}\n\nThis link and code will expire within {3}.\n\nIf you don''t want to reset your credentials, just ignore this message and nothing will be changed. -passwordResetBodyHtml=<p>Someone just requested to change your {2} account''s credentials. If this was you, click on the link below to reset them.</p><p><a href="{0}">Link to reset credentials</a></p><p>This link will expire within {3}.</p><p>If you don''t want to reset your credentials, just ignore this message and nothing will be changed.</p> -executeActionsSubject=Update Your Account -executeActionsBody=Your administrator has just requested that you update your {2} account by performing the following action(s): {3}. Click on the link below to start this process.\n\n{0}\n\nThis link will expire within {4}.\n\nIf you are unaware that your administrator has requested this, just ignore this message and nothing will be changed. -executeActionsBodyHtml=<p>Your administrator has just requested that you update your {2} account by performing the following action(s): {3}. Click on the link below to start this process.</p><p><a href="{0}">Link to account update</a></p><p>This link will expire within {4}.</p><p>If you are unaware that your administrator has requested this, just ignore this message and nothing will be changed.</p> -eventLoginErrorSubject=Login error -eventLoginErrorBody=A failed login attempt was detected to your account on {0} from {1}. If this was not you, please contact an administrator. -eventLoginErrorBodyHtml=<p>A failed login attempt was detected to your account on {0} from {1}. If this was not you, please contact an administrator.</p> -eventRemoveTotpSubject=Remove OTP -eventRemoveTotpBody=OTP was removed from your account on {0} from {1}. If this was not you, please contact an administrator. -eventRemoveTotpBodyHtml=<p>OTP was removed from your account on {0} from {1}. If this was not you, please contact an administrator.</p> -eventUpdatePasswordSubject=Update password -eventUpdatePasswordBody=Your password was changed on {0} from {1}. If this was not you, please contact an administrator. -eventUpdatePasswordBodyHtml=<p>Your password was changed on {0} from {1}. If this was not you, please contact an administrator.</p> -eventUpdateTotpSubject=Update OTP -eventUpdateTotpBody=OTP was updated for your account on {0} from {1}. If this was not you, please contact an administrator. -eventUpdateTotpBodyHtml=<p>OTP was updated for your account on {0} from {1}. If this was not you, please contact an administrator.</p> - -requiredAction.CONFIGURE_TOTP=Configure OTP -requiredAction.terms_and_conditions=Terms and Conditions -requiredAction.UPDATE_PASSWORD=Update Password -requiredAction.UPDATE_PROFILE=Update Profile -requiredAction.VERIFY_EMAIL=Verify Email -requiredAction.CONFIGURE_RECOVERY_AUTHN_CODES=Generate Recovery Codes - -# units for link expiration timeout formatting -linkExpirationFormatter.timePeriodUnit.seconds=seconds -linkExpirationFormatter.timePeriodUnit.seconds.1=second -linkExpirationFormatter.timePeriodUnit.minutes=minutes -linkExpirationFormatter.timePeriodUnit.minutes.1=minute -#for language which have more unit plural forms depending on the value (eg. Czech and other Slavic langs) you can override unit text for some other values like this: -#linkExpirationFormatter.timePeriodUnit.minutes.2=minuty -#linkExpirationFormatter.timePeriodUnit.minutes.3=minuty -#linkExpirationFormatter.timePeriodUnit.minutes.4=minuty -linkExpirationFormatter.timePeriodUnit.hours=hours -linkExpirationFormatter.timePeriodUnit.hours.1=hour -linkExpirationFormatter.timePeriodUnit.days=days -linkExpirationFormatter.timePeriodUnit.days.1=day - -emailVerificationBodyCode=Please verify your email address by entering in the following code.\n\n{0}\n\n. -emailVerificationBodyCodeHtml=<p>Please verify your email address by entering in the following code.</p><p><b>{0}</b></p> - diff --git a/keycloak_email/messages/messages_es.properties b/keycloak_email/messages/messages_es.properties deleted file mode 100644 index 024bc3d..0000000 --- a/keycloak_email/messages/messages_es.properties +++ /dev/null @@ -1,21 +0,0 @@ -emailVerificationSubject=Verificaci\u00F3n de email -emailVerificationBody=Alguien ha creado una cuenta de {2} con esta direcci\u00F3n de email. Si has sido t\u00FA, haz click en el enlace siguiente para verificar tu direcci\u00F3n de email.\n\n{0}\n\nEste enlace expirar\u00E1 en {1} minutos.\n\nSi t\u00FA no has creado esta cuenta, simplemente ignora este mensaje. -emailVerificationBodyHtml=<p>Alguien ha creado una cuenta de {2} con esta direcci\u00F3n de email. Si has sido t\u00FA, haz click en el enlace siguiente para verificar tu direcci\u00F3n de email.</p><p><a href=\"{0}\">Enlace de verficaci\u00F3n de direcci\u00F3n de email</a></p><p>Este enlace expirar\u00E1 en {1} minutos.</p><p>Si t\u00FA no has creado esta cuenta, simplemente ignora este mensaje.</p> -passwordResetSubject=Reiniciar contrase\u00F1a -passwordResetBody=Alguien ha solicitado cambiar las credenciales de tu cuenta de {2}. Si has sido t\u00FA, haz clic en el enlace siguiente para reiniciarlas.\n\n{0}\n\nEste enlace expirar\u00E1 en {1} minutos.\n\nSi no quieres reiniciar tus credenciales, simplemente ignora este mensaje y no se realizar\u00E1 ning\u00FAn cambio. -passwordResetBodyHtml=<p>Alguien ha solicitado cambiar las credenciales de tu cuenta de {2}. Si has sido t\u00FA, haz clic en el enlace siguiente para reiniciarlas.</p><p><a href=\"{0}\">{0}</a></p><p>Este enlace expirar\u00E1 en {1} minutos.</p><p>Si no quieres reiniciar tus credenciales, simplemente ignora este mensaje y no se realizar\u00E1 ning\u00FAn cambio.</p> -executeActionsSubject=Actualiza tu cuenta -executeActionsBody=El administrador ha solicitado que actualices tu cuenta de {2}. Haz clic en el enlace inferior para iniciar este proceso.\n\n{0}\n\nEste enlace expirar\u00E1 en {1} minutos.\n\nSi no est\u00E1s al tanto de que el administrador haya solicitado esto, simplemente ignora este mensaje y no se realizar\u00E1 ning\u00FAn cambio. -executeActionsBodyHtml=<p>El administrador ha solicitado que actualices tu cuenta de {2}. Haz clic en el enlace inferior para iniciar este proceso.</p><p><a href=\"{0}\">{0}</a></p><p>Este enlace expirar\u00E1 en {1} minutos.</p><p>Si no est\u00E1s al tanto de que el administrador haya solicitado esto, simplemente ignora este mensaje y no se realizar\u00E1 ning\u00FAn cambio.</p> -eventLoginErrorSubject=Fallo en el inicio de sesi\u00F3n -eventLoginErrorBody=Se ha detectado un intento de acceso fallido a tu cuenta el {0} desde {1}. Si no has sido t\u00FA, por favor contacta con el administrador. -eventLoginErrorBodyHtml=<p>Se ha detectado un intento de acceso fallido a tu cuenta el {0} desde {1}. Si no has sido t\u00FA, por favor contacta con el administrador.</p> -eventRemoveTotpSubject=Borrado OTP -eventRemoveTotpBody=OTP fue eliminado de tu cuenta el {0} desde {1}. Si no has sido t\u00FA, por favor contacta con el administrador. -eventRemoveTotpBodyHtml=<p>OTP fue eliminado de tu cuenta el {0} desde {1}. Si no has sido t\u00FA, por favor contacta con el administrador.</p> -eventUpdatePasswordSubject=Actualizaci\u00F3n de contrase\u00F1a -eventUpdatePasswordBody=Tu contrase\u00F1a se ha actualizado el {0} desde {1}. Si no has sido t\u00FA, por favor contacta con el administrador. -eventUpdatePasswordBodyHtml=<p>Tu contrase\u00F1a se ha actualizado el {0} desde {1}. Si no has sido t\u00FA, por favor contacta con el administrador.</p> -eventUpdateTotpSubject=Actualizaci\u00F3n de OTP -eventUpdateTotpBody=OTP se ha actualizado en tu cuenta el {0} desde {1}. Si no has sido t\u00FA, por favor contacta con el administrador. -eventUpdateTotpBodyHtml=<p>OTP se ha actualizado en tu cuenta el {0} desde {1}. Si no has sido t\u00FA, por favor contacta con el administrador.</p> diff --git a/keycloak_email/messages/messages_fi.properties b/keycloak_email/messages/messages_fi.properties deleted file mode 100644 index 111ff6f..0000000 --- a/keycloak_email/messages/messages_fi.properties +++ /dev/null @@ -1,46 +0,0 @@ -# encoding: UTF-8 -emailVerificationSubject=Vahvista sähköposti -emailVerificationBody=Tällä sähköpostiosoitteella on luotu {2}-tili. Jos loit tilin itse, klikkaa alla olevaa linkkiä vahvistaaksesi sähköpostiosoitteesi\n\n{0}\n\nLinkin vanhenemisaika: {3}.\n\nJos et luonut tätä tiliä, jätä viesti huomiotta. -emailVerificationBodyHtml=<p>Tällä sähköpostiosoitteella on luotu {2}-tili. Jos loit tilin itse, klikkaa alla olevaa linkkiä vahvistaaksesi sähköpostiosoitteesi</p><p><a href="{0}">Linkki vahvistamiseen</a></p><p>Linkin vanhenemisaika: {3}.</p><p>Jos et luonut tätä tiliä, jätä viesti huomiotta.</p> -emailTestSubject=[KEYCLOAK] - SMTP testiviesti -emailTestBody=Tämä on testiviesti -emailTestBodyHtml=<p>Tämä on testiviesti</p> -identityProviderLinkSubject=Linkki {0} -identityProviderLinkBody=Saimme pyynnön linkittää "{1}"-tilin "{0}"-tiliin käyttäjälle {2}. Jos teit tämän pyynnön, klikkaa alla olevaa linkkiä tilien linkittämiseksi\n\n{3}\n\nLinkin vanhenemisaika: {5}.\n\nJos et halua linkittää tilejä, jätä tämä viesti huomiotta. Jos linkität tilit, voit jatkossa kirjautua tilille {1}, tilin {0} kautta. -identityProviderLinkBodyHtml=<p>Saimme pyynnön linkittää <b>{1}</b>-tilin <b>{0}</b>-tiliin käyttäjälle {2}. Jos teit tämän pyynnön, klikkaa alla olevaa linkkiä tilien linkittämiseksi</p><p><a href="{3}">Vahvista tilien linkitys</a></p><p>Linkin vanhenemisaika: {5}.</p><p>Jos et halua linkittää tilejä, jätä tämä viesti huomiotta. Jos linkität tilit, voit jatkossa kirjautua tilille {1}, tilin {0} kautta.</p> -passwordResetSubject=Salasanan nollaus -passwordResetBody=Saimme pyynnön vaihtaa {2}-tilisi salasanan. Jos pyysit itse salasanan vaihtoa, pääset tästä linkistä vaihtamaan salasanasi:\n\n{0}\n\nLinkin vanhenemisaika: {3} .\n\nJos et halua vaihtaa salasanaasi tai et ole pyytänyt salasanan vaihtoa itse, jätä tämän viesti huomiotta. -passwordResetBodyHtml=<p>Saimme pyynnön vaihtaa {2}-tilisi salasanan. Jos pyysit itse salasanan vaihtoa, pääset tästä linkistä vaihtamaan salasanasi:</p><p><a href="{0}">Linkki salasanan vaihtoon</a></p><p>Linkin vanhenemisaika: <strong>{3}</strong>.</p><p>Jos et halua vaihtaa salasanaasi tai et ole pyytänyt salasanan vaihtoa itse, jätä tämän viesti huomiotta.</p> -executeActionsSubject=Päivitä tilisi -executeActionsBody=Järjestelmänvalvoja on pyytänyt sinua päivittämään {2}-tilisi tekemällä seuraavat toimenpiteet: {3}. Aloita prosessi klikkaamalla alla olevaa linkkiä.\n\n{0}\n\nLinkin vanhenemisaika: {4}.\n\nJos et ole tietoinen tästä järjestelmänvalvojan pyynnöstä, jätä tämän viesti huomiotta. -executeActionsBodyHtml=<p>Järjestelmänvalvoja on pyytänyt sinua päivittämään {2}-tilisi tekemällä seuraavat toimenpiteet: {3}. Aloita prosessi klikkaamalla alla olevaa linkkiä.</p><p><a href="{0}">Linkki tilin päivittämiseen</a></p><p>Linkin vanhenemisaika: {4}.</p><p>Jos et ole tietoinen tästä järjestelmänvalvojan pyynnöstä, jätä tämän viesti huomiotta.</p> -eventLoginErrorSubject=Kirjautuminen epäonnistui -eventLoginErrorBody=Tilillänne on havaittu epäonnistunut kirjautumisyritys {0} osoitteesta {1}. Jos et itse yrittänyt kirjautua tilillesi, ota yhteyttä järjestelmänvalvojaan. -eventLoginErrorBodyHtml=<p>Tilillänne on havaittu epäonnistunut kirjautumisyritys {0} osoitteesta {1}. Jos et itse yrittänyt kirjautua tilillesi, ota yhteyttä järjestelmänvalvojaan.</p> -eventRemoveTotpSubject=Poista OTP -eventRemoveTotpBody=OTP on poistettu tililtäsi {0} osoitteesta {1}. Jos et itse tehnyt tätä, ota yhteyttä järjestelmänvalvojaan. -eventRemoveTotpBodyHtml=<p>OTP on poistettu tililtäsi {0} osoitteesta {1}. Jos et itse tehnyt tätä, ota yhteyttä järjestelmänvalvojaan.</p> -eventUpdatePasswordSubject=Päivitä salasana -eventUpdatePasswordBody=Tilisi salasana on vaihdettu {0} osoitteesta {1}. Jos et itse tehnyt tätä, ota yhteyttä järjestelmänvalvojaan.. -eventUpdatePasswordBodyHtml=<p>Tilisi salasana on vaihdettu {0} osoitteesta {1}. Jos et itse tehnyt tätä, ota yhteyttä järjestelmänvalvojaan.</p> -eventUpdateTotpSubject=Päivitä OTP -eventUpdateTotpBody=OTP on päivitetty tilillesi {0} osoitteesta {1}. Jos et itse tehnyt tätä, ota yhteyttä järjestelmänvalvojaan. -eventUpdateTotpBodyHtml=<p>OTP on päivitetty tilillesi {0} osoitteesta {1}. Jos et itse tehnyt tätä, ota yhteyttä järjestelmänvalvojaan.</p> -requiredAction.CONFIGURE_TOTP=Konfiguroi OTP -requiredAction.terms_and_conditions=Käyttöehdot -requiredAction.UPDATE_PASSWORD=Päivitä salasana -requiredAction.UPDATE_PROFILE=Päivitä profiili -requiredAction.VERIFY_EMAIL=Vahvista sähköposti - -# units for link expiration timeout formatting -linkExpirationFormatter.timePeriodUnit.seconds=sekuntia -linkExpirationFormatter.timePeriodUnit.seconds.1=sekunti -linkExpirationFormatter.timePeriodUnit.minutes=minuuttia -linkExpirationFormatter.timePeriodUnit.minutes.1=minuutti -linkExpirationFormatter.timePeriodUnit.hours=tuntia -linkExpirationFormatter.timePeriodUnit.hours.1=tunti -linkExpirationFormatter.timePeriodUnit.days=päivää -linkExpirationFormatter.timePeriodUnit.days.1=päivä - -emailVerificationBodyCode=Ole hyvä ja vahvista sähköpostiosoitteesi alla olevalla koodilla.\n\n{0}\n\n. -emailVerificationBodyCodeHtml=<p>Ole hyvä ja vahvista sähköpostiosoitteesi alla olevalla koodilla.</p><p><b>{0}</b></p>
\ No newline at end of file diff --git a/keycloak_email/messages/messages_fr.properties b/keycloak_email/messages/messages_fr.properties deleted file mode 100644 index ca055cd..0000000 --- a/keycloak_email/messages/messages_fr.properties +++ /dev/null @@ -1,46 +0,0 @@ -emailVerificationSubject=V\u00e9rification du courriel -emailVerificationBody=Quelqu''un vient de cr\u00e9er un compte "{2}" avec votre courriel. Si vous \u00eates \u00e0 l''origine de cette requ\u00eate, veuillez cliquer sur le lien ci-dessous afin de v\u00e9rifier votre adresse de courriel\n\n{0}\n\nCe lien expire dans {3}.\n\nSinon, veuillez ignorer ce message. -emailVerificationBodyHtml=<p>Quelqu''un vient de cr\u00e9er un compte "{2}" avec votre courriel. Si vous \u00eates \u00e0 l''origine de cette requ\u00eate, veuillez cliquer sur le lien ci-dessous afin de v\u00e9rifier votre adresse de courriel</p><p><a href="{0}">{0}</a></p><p>Ce lien expire dans {3}.</p><p>Sinon, veuillez ignorer ce message.</p> -emailUpdateConfirmationSubject=V\u00e9rification du nouveau courriel -emailUpdateConfirmationBody=Afin d''utiliser le courriel {1} dans votre compte {2}, cliquez sur le lien ci-dessous\n\n{0}\n\nCe lien expire dans {3}.\n\nSinon, veuillez ignorer ce message. -emailUpdateConfirmationBodyHtml=<p>Afin d''utiliser le courriel {1} dans votre compte {2}, cliquez sur le lien ci-dessous</p><p><a href="{0}">{0}</a></p><p>Ce lien expirera dans {3}.</p><p>Sinon, veuillez ignorer ce message.</p> -identityProviderLinkSubject=Lien {0} -identityProviderLinkBody=Quelqu''un souhaite lier votre compte "{1}" au compte "{0}" de l''utilisateur {2} . Si vous \u00eates \u00e0 l''origine de cette requ\u00eate, veuillez cliquer sur le lien ci-dessous pour lier les comptes\n\n{3}\n\nCe lien expire dans {5}.\n\nSinon, veuillez ignorer ce message ; aucun changement ne sera effectu\u00e9 sur votre compte. Si vous liez les comptes, vous pourrez vous connecter \u00e0 {1} via {0}. -identityProviderLinkBodyHtml=<p>Quelqu''un souhaite lier votre compte <b>{1}</b> au compte <b>{0}</b> de l''utilisateur {2}. Si vous \u00eates \u00e0 l''origine de cette requ\u00eate, veuillez cliquer sur le lien ci-dessous pour lier les comptes</p><p><a href="{3}">Lien pour confirmer la liaison des comptes</a></p><p>Ce lien expire dans {5}.</p><p>Sinon, veuillez ignorer ce message ; aucun changement ne sera effectu\u00e9 sur votre compte. Si vous liez les comptes, vous pourrez vous connecter \u00e0 {1} via {0}.</p> -passwordResetSubject=R\u00e9initialiser le mot de passe -passwordResetBody=Quelqu''un vient de demander une r\u00e9initialisation de mot de passe pour votre compte {2}. Si vous \u00eates \u00e0 l''origine de cette requ\u00eate, veuillez cliquer sur le lien ci-dessous pour le mettre \u00e0 jour.\n\n{0}\n\nCe lien expire dans {3}.\n\nSinon, veuillez ignorer ce message ; aucun changement ne sera effectu\u00e9 sur votre compte. -passwordResetBodyHtml=<p>Quelqu''un vient de demander une r\u00e9initialisation de mot de passe pour votre compte {2}. Si vous \u00eates \u00e0 l''origine de cette requ\u00eate, veuillez cliquer sur le lien ci-dessous pour le mettre \u00e0 jour.</p><p><a href="{0}">Lien pour r\u00e9initialiser votre mot de passe</a></p><p>Ce lien expire dans {3}.</p><p>Sinon, veuillez ignorer ce message ; aucun changement ne sera effectu\u00e9 sur votre compte.</p> -executeActionsSubject=Mettre \u00e0 jour votre compte -executeActionsBody=Votre administrateur vient de demander une mise \u00e0 jour de votre compte {2} pour r\u00e9aliser les actions suivantes : {3}. Veuillez cliquer sur le lien ci-dessous afin de commencer le processus.\n\n{0}\n\nCe lien expire dans {4}.\n\nSi vous n''\u00eates pas \u00e0 l''origine de cette requ\u00eate, veuillez ignorer ce message ; aucun changement ne sera effectu\u00e9 sur votre compte. -executeActionsBodyHtml=<p>Votre administrateur vient de demander une mise \u00e0 jour de votre compte {2} pour r\u00e9aliser les actions suivantes : {3}. Veuillez cliquer sur le lien ci-dessous afin de commencer le processus.</p><p><a href="{0}">{0}</a></p><p>Ce lien expire dans {4}.</p><p>Si vous n''\u00eates pas \u00e0 l''origine de cette requ\u00eate, veuillez ignorer ce message ; aucun changement ne sera effectu\u00e9 sur votre compte.</p> -eventLoginErrorSubject=Erreur de connexion -eventLoginErrorBody=Une tentative de connexion a \u00e9t\u00e9 d\u00e9tect\u00e9e sur votre compte {0} depuis {1}. Si vous n''\u00eates pas \u00e0 l''origine de cette requ\u00eate, veuillez contacter votre administrateur. -eventLoginErrorBodyHtml=<p>Une tentative de connexion a \u00e9t\u00e9 d\u00e9tect\u00e9e sur votre compte {0} depuis {1}. Si vous n''\u00eates pas \u00e0 l''origine de cette requ\u00eate, veuillez contacter votre administrateur.</p> -eventRemoveTotpSubject=Suppression du OTP -eventRemoveTotpBody=Le OTP a \u00e9t\u00e9 supprim\u00e9 de votre compte {0} depuis {1}. Si vous n''\u00e9tiez pas \u00e0 l''origine de cette requ\u00eate, veuillez contacter votre administrateur. -eventRemoveTotpBodyHtml=<p>Le OTP a \u00e9t\u00e9 supprim\u00e9 de votre compte {0} depuis {1}. Si vous n''\u00e9tiez pas \u00e0 l''origine de cette requ\u00eate, veuillez contacter votre administrateur.</p> -eventUpdatePasswordSubject=Mise \u00e0 jour du mot de passe -eventUpdatePasswordBody=Votre mot de passe pour votre compte {0} a \u00e9t\u00e9 modifi\u00e9 depuis {1}. Si vous n''\u00e9tiez pas \u00e0 l''origine de cette requ\u00eate, veuillez contacter votre administrateur. -eventUpdatePasswordBodyHtml=<p>Votre mot de passe pour votre compte {0} a \u00e9t\u00e9 modifi\u00e9 depuis {1}. Si vous n''\u00e9tiez pas \u00e0 l''origine de cette requ\u00eate, veuillez contacter votre administrateur.</p> -eventUpdateTotpSubject=Mise \u00e0 jour du OTP -eventUpdateTotpBody=Le OTP a \u00e9t\u00e9 mis \u00e0 jour pour votre compte {0} depuis {1}. Si vous n''\u00e9tiez pas \u00e0 l''origine de cette requ\u00eate, veuillez contacter votre administrateur. -eventUpdateTotpBodyHtml=<p>Le OTP a \u00e9t\u00e9 mis \u00e0 jour pour votre compte {0} depuis {1}. Si vous n''\u00e9tiez pas \u00e0 l''origine de cette requ\u00eate, veuillez contacter votre administrateur.</p> - -requiredAction.CONFIGURE_TOTP=Configurer un OTP -requiredAction.terms_and_conditions=Conditions g\u00e9n\u00e9rale d''utilisation -requiredAction.UPDATE_PASSWORD=Mise \u00e0 jour du mot de passe -requiredAction.UPDATE_PROFILE=Mise \u00e0 jour du profile -requiredAction.VERIFY_EMAIL=V\u00e9rification de l''adresse courriel - -# units for link expiration timeout formatting -linkExpirationFormatter.timePeriodUnit.seconds=secondes -linkExpirationFormatter.timePeriodUnit.seconds.1=seconde -linkExpirationFormatter.timePeriodUnit.minutes=minutes -linkExpirationFormatter.timePeriodUnit.minutes.1=minute -linkExpirationFormatter.timePeriodUnit.hours=heures -linkExpirationFormatter.timePeriodUnit.hours.1=heure -linkExpirationFormatter.timePeriodUnit.days=jours -linkExpirationFormatter.timePeriodUnit.days.1=jour - -emailVerificationBodyCode=Veuillez v\u00e9rifier votre adresse de courriel en saisissant le code suivant.\n\n{0}\n\n. -emailVerificationBodyCodeHtml=<p>Veuillez v\u00e9rifier votre adresse de courriel en saisissant le code suivant.</p><p><b>{0}</b></p> diff --git a/keycloak_email/messages/messages_hu.properties b/keycloak_email/messages/messages_hu.properties deleted file mode 100644 index 65f5ac0..0000000 --- a/keycloak_email/messages/messages_hu.properties +++ /dev/null @@ -1,47 +0,0 @@ -# encoding: utf-8 -emailVerificationSubject=Email cím megerősítése -emailVerificationBody=Ezzel az email címmel valaki létrehozott egy {2} tartomány felhasználói fiókot. Amennyiben a fiókot Ön hozta létre, kérem kattintson a lenti hivatkozásra, hogy megerősítse fiókját és ezt az email címet.\n\n{0}\n\nA hivatkozás érvényét veszti {3} múlva.\n\nHa nem ön hozta létre a felhasználói fiókot, akkor kérem hagyja figyelmen kívül ezt az üzenetet. -emailVerificationBodyHtml=<p>Ezzel az email címmel valaki létrehozott egy {2} tartomány felhasználói fiókot. Amennyiben a fiókot Ön hozta létre, kérem kattintson a lenti hivatkozásra, hogy megerősítse fiókját és ezt az email címet.</p><p><a href="{0}">Hivatkozás a fiók és az email cím megerősítéséhez</a></p><p>A hivatkozás érvényét veszti {3} múlva.</p><p>Ha nem ön hozta létre a felhasználói fiókot, akkor kérem hagyja figyelmen kívül ezt az üzenetet.</p> -emailTestSubject=[KEYCLOAK] - SMTP teszt üzenet -emailTestBody=Ez egy KEYCLOAK teszt üzenet. -emailTestBodyHtml=<p>Ez egy KEYCLOAK teszt üzenet.</p> -identityProviderLinkSubject={0} összekötés -identityProviderLinkBody=Valaki össze kívánja kötni az Ön "{1}" tartományi fiókját a(z) "{0}" személyazonosság-kezelő {2} felhasználói fiókjával. Amennyiben az összekötést Ön kezdeményezte kérem kattintson a lenti hivatkozásra, hogy összekösse fiókjait.\n\n{3}\n\nA hivatkozás érvényét veszti {5} múlva.\n\nHa nem ön kezdeményezte a felhasználói fiókok összekötését, akkor kérem hagyja figyelmen kívül ezt az üzenetet.\n\nHa összeköti a fiókjait, akkor beléphet a(z) {1} tartományba a(z) {0} szolgáltatón keresztül. -identityProviderLinkBodyHtml=<p>Valaki össze kívánja kötni az Ön <b>{1}</b> tartomány fiókját a(z) <b>{0}</b> személyazonosság-kezelő {2} felhasználói fiókjával. Amennyiben az összekötést Ön kezdeményezte kérem kattintson a lenti hivatkozásra, hogy összekösse fiókjait.</p><p><a href="{3}">Hivatkozás a fiók összekötés megerősítéshez</a></p><p>A hivatkozás érvényét veszti {5} múlva.</p><p>Ha nem ön kezdeményezte a felhasználói fiókok összekötését, akkor kérem hagyja figyelmen kívül ezt az üzenetet.</p><p>Ha összeköti a fiókjait, akkor beléphet a(z) {1} tartományba a(z) {0} szolgáltatón keresztül.</p> -passwordResetSubject=Jelszó visszaállítás -passwordResetBody=Valaki vissza kívánja állítani az Ön "{2}" tartományi fiókjának jelszavát. Amennyiben a jelszó visszaállítást Ön kezdeményezte, kérem kattintson a lenti hivatkozásra a jelszava megváltoztatásához.\n\n{0}\n\nA hivatkozás érvényét veszti {3} múlva.\n\nHa nem ön kérte a jelszó visszaállítást, akkor kérem hagyja figyelmen kívül ezt az üzenetet, a jelszava nem fog megváltozni. -passwordResetBodyHtml=<p>Valaki vissza kívánja állítani az Ön "{2}" tartományi fiókjának jelszavát. Amennyiben a jelszó visszaállítást Ön kezdeményezte, kérem kattintson a lenti hivatkozásra a jelszava megváltoztatásához.</p><p><a href="{0}">Hivatkozás a jelszó visszaállításhoz</a></p><p>A hivatkozás érvényét veszti {3} múlva.</p><p>Ha nem ön kérte a jelszó visszaállítást, akkor kérem hagyja figyelmen kívül ezt az üzenetet, a jelszava nem fog megváltozni.</p> -executeActionsSubject=Felhasználói fiók adatok módosítása -executeActionsBody=Az alkalmazás adminisztrátora kezdeményezte az Ön "{2}" tartományi felhasználói fiók adatainak módosítását a következő műveletekkel: {3}. Kérem kattintson a lenti hivatkozásra, hogy megkezdhesse a kért módosításokat.\n\n{0}\n\nA hivatkozás érvényét veszti {4} múlva.\n\nHa nincs tudomása arról, hogy az adminisztrátora módosításokat kért Öntől, akkor kérem hagyja figyelmen kívül ezt az üzenetet, az adatai nem fognak megváltozni. -executeActionsBodyHtml=<p>Az alkalmazás adminisztrátora kezdeményezte az Ön "{2}" tartományi felhasználói fiók adatainak módosítását a következő műveletekkel: {3}. Kérem kattintson a lenti hivatkozásra, hogy megkezdhesse a kért módosításokat.</p><p><a href="{0}">Hivatkozás a felhasználói fiók adatok módosításához</a></p><p>A hivatkozás érvényét veszti {4} múlva.</p><p>Ha nincs tudomása arról, hogy az adminisztrátora módosításokat kért Öntől, akkor kérem hagyja figyelmen kívül ezt az üzenetet, az adatai nem fognak megváltozni.</p> -eventLoginErrorSubject=Belépési hiba -eventLoginErrorBody=Sikertelen belépési kísérlet történt {0} időpontban a(z) {1} címről. Kérem lépjen kapcsolatba az alkalmazás adminisztrátorral amennyiben nem ön próbált meg belépni. -eventLoginErrorBodyHtml=<p>Sikertelen belépési kísérlet történt {0} időpontban a(z) {1} címről. Kérem lépjen kapcsolatba az alkalmazás adminisztrátorral amennyiben nem ön próbált meg belépni.</p> -eventRemoveTotpSubject=Egyszer használatos jelszó (OTP) eltávolítása -eventRemoveTotpBody=Az egyszer használatos jelszó (OTP) funkciót {0} időpontban a(z) {1} címről érkező kérés értelmében eltávolítottuk a fiókjáról. Kérem haladéktalanul lépjen kapcsolatba az alkalmazás adminisztrátorral amennyiben nem ön igényelte az OTP eltávolítását. -eventRemoveTotpBodyHtml=<p>Az egyszer használatos jelszó (OTP) funkciót {0} időpontban a(z) {1} címről érkező kérés értelmében eltávolítottuk a fiókjáról. Kérem haladéktalanul lépjen kapcsolatba az alkalmazás adminisztrátorral amennyiben nem ön igényelte az OTP eltávolítását.</p> -eventUpdatePasswordSubject=Jelszó csere -eventUpdatePasswordBody=Jelszavát {0} időpontban a(z) {1} címről érkező kérés értelmében lecseréltük. Kérem haladéktalanul lépjen kapcsolatba az alkalmazás adminisztrátorral amennyiben nem ön igényelte a jelszó cserét. -eventUpdatePasswordBodyHtml=<p>Jelszavát {0} időpontban a(z) {1} címről érkező kérés értelmében lecseréltük. Kérem haladéktalanul lépjen kapcsolatba az alkalmazás adminisztrátorral amennyiben nem ön igényelte a jelszó cserét.</p> -eventUpdateTotpSubject=Egyszer használatos jelszó (OTP) csere -eventUpdateTotpBody=Az egyszer használatos jelszó (OTP) beállításait {0} időpontban a(z) {1} címről érkező kérés értelmében módosítottuk a fiókján. Kérem haladéktalanul lépjen kapcsolatba az alkalmazás adminisztrátorral amennyiben nem ön igényelte az OTP beállítások módosítását. -eventUpdateTotpBodyHtml=<p>Az egyszer használatos jelszó (OTP) beállításait {0} időpontban a(z) {1} címről érkező kérés értelmében módosítottuk a fiókján. Kérem haladéktalanul lépjen kapcsolatba az alkalmazás adminisztrátorral amennyiben nem ön igényelte az OTP beállítások módosítását.</p> - -requiredAction.CONFIGURE_TOTP=Egyszer használatos jelszó (OTP) beállítása -requiredAction.terms_and_conditions=Felhasználási feltételek -requiredAction.UPDATE_PASSWORD=Jelszó csere -requiredAction.UPDATE_PROFILE=Fiók adatok módosítása -requiredAction.VERIFY_EMAIL=Email cím megerősítése - -# units for link expiration timeout formatting -linkExpirationFormatter.timePeriodUnit.seconds=másodperc -linkExpirationFormatter.timePeriodUnit.seconds.1=másodperc -linkExpirationFormatter.timePeriodUnit.minutes=perc -linkExpirationFormatter.timePeriodUnit.minutes.1=perc -linkExpirationFormatter.timePeriodUnit.hours=óra -linkExpirationFormatter.timePeriodUnit.hours.1=óra -linkExpirationFormatter.timePeriodUnit.days=nap -linkExpirationFormatter.timePeriodUnit.days.1=nap - -emailVerificationBodyCode=Kérem erősítse meg az email címét a következő kód megadásával.\n\n{0}\n\n. -emailVerificationBodyCodeHtml=<p>Kérem erősítse meg az email címét a következő kód megadásával.</p><p><b>{0}</b></p> diff --git a/keycloak_email/messages/messages_it.properties b/keycloak_email/messages/messages_it.properties deleted file mode 100644 index e65ceeb..0000000 --- a/keycloak_email/messages/messages_it.properties +++ /dev/null @@ -1,50 +0,0 @@ -emailVerificationSubject=Verifica l''email -emailVerificationBody=Qualcuno ha creato un account {2} con questo indirizzo email. Se sei stato tu, fai clic sul link seguente per verificare il tuo indirizzo email\n\n{0}\n\nQuesto link scadr\u00e0 in {3}.\n\nSe non sei stato tu a creare questo account, ignora questo messaggio. -emailVerificationBodyHtml=<p>Qualcuno ha creato un account {2} con questo indirizzo email. Se sei stato tu, fai clic sul link seguente per verificare il tuo indirizzo email</p><p><a href="{0}">Link per verificare l''indirizzo email</a></p><p>Questo link scadr\u00e0 in {3}.</p><p>Se non sei stato tu a creare questo account, ignora questo messaggio.</p> -emailTestSubject=[KEYCLOAK] - messaggio di test SMTP -emailTestBody=Questo \u00e8 un messaggio di test -emailTestBodyHtml=<p>Questo \u00e8 un messaggio di test</p> -identityProviderLinkSubject=Link {0} -identityProviderLinkBody=Qualcuno vuole associare il tuo account "{1}" con l''account "{0}" dell''utente {2}. Se sei stato tu, fai clic sul link seguente per associare gli account\n\n{3}\n\nQuesto link scadr\u00e0 in {5}.\n\nSe non vuoi associare l''account, ignora questo messaggio. Se associ gli account, potrai accedere a {1} attraverso {0}. -identityProviderLinkBodyHtml=<p>Qualcuno vuole associare il tuo account <b>{1}</b> con l''account <b>{0}</b> dell''utente {2}. Se sei stato tu, fai clic sul link seguente per associare gli account</p><p><a href="{3}">{3}</a></p><p>Questo link scadr\u00e0 in {5}.</p><p>Se non vuoi associare l''account, ignora questo messaggio. Se associ gli account, potrai accedere a {1} attraverso {0}.</p> -passwordResetSubject=Reimposta la password -passwordResetBody=Qualcuno ha appena richiesto di cambiare le credenziali di accesso al tuo account {2}. Se sei stato tu, fai clic sul link seguente per reimpostarle.\n\n{0}\n\nQuesto link e codice scadranno in {3}.\n\nSe non vuoi reimpostare le tue credenziali di accesso, ignora questo messaggio e non verr\u00e0 effettuato nessun cambio. -passwordResetBodyHtml=<p>Qualcuno ha appena richiesto di cambiare le credenziali di accesso al tuo account {2}. Se sei stato tu, fai clic sul link seguente per reimpostarle.</p><p><a href="{0}">{0}</a></p><p>Questo link scadr\u00e0 in {3}.</p><p>Se non vuoi reimpostare le tue credenziali di accesso, ignora questo messaggio e non verr\u00e0 effettuato nessun cambio.</p> -executeActionsSubject=Aggiorna il tuo account -executeActionsBody=Il tuo amministratore ha appena richiesto un aggiornamento del tuo account {2} ed \u00e8 necessario che tu esegua la/le seguente/i azione/i: {3}. Fai clic sul link seguente per iniziare questo processo.\n\n{0}\n\nQuesto link scadr\u00e0 in {4}.\n\nSe non sei a conoscenza della richiesta del tuo amministratore, ignora questo messaggio e non verr\u00e0 effettuato nessun cambio. -executeActionsBodyHtml=<p>Il tuo amministratore ha appena richiesto un aggiornamento del tuo account {2} ed \u00e8 necessario che tu esegua la/le seguente/i azione/i: {3}. Fai clic sul link seguente per iniziare questo processo.</p><p><a href="{0}">Link to account update</a></p><p>Questo link scadr\u00e0 in {4}.</p><p>Se non sei a conoscenza della richiesta del tuo amministratore, ignora questo messaggio e non verr\u00e0 effettuato nessun cambio.</p> -eventLoginErrorSubject=Errore di accesso -eventLoginErrorBody=\u00c8 stato rilevato un tentativo fallito di accesso al tuo account il {0} da {1}. Se non sei stato tu, per favore contatta l''amministratore. -eventLoginErrorBodyHtml=<p>\u00c8 stato rilevato un tentativo fallito di accesso al tuo account il {0} da {1}. Se non sei stato tu, per favore contatta l''amministratore.</p> -eventRemoveTotpSubject=Rimozione OTP (password temporanea valida una volta sola) -eventRemoveTotpBody=La OTP (password temporanea valida una volta sola) \u00e8 stata rimossa dal tuo account il {0} da {1}. Se non sei stato tu, per favore contatta l''amministratore. -eventRemoveTotpBodyHtml=<p>La OTP (password temporanea valida una volta sola) \u00e8 stata rimossa dal tuo account il {0} da {1}. Se non sei stato tu, per favore contatta l''amministratore.</p> -eventUpdatePasswordSubject=Aggiornamento password -eventUpdatePasswordBody=La tua password \u00e8 stata cambiata il {0} da {1}. Se non sei stato tu, per favore contatta l''amministratore. -eventUpdatePasswordBodyHtml=<p>La tua password \u00e8 stata cambiata il {0} da {1}. Se non sei stato tu, per favore contatta l''amministratore.</p> -eventUpdateTotpSubject=Aggiornamento OTP (password temporanea valida una volta sola) -eventUpdateTotpBody=La OTP (password temporanea valida una volta sola) \u00e8 stata aggiornata per il tuo account il {0} da {1}. Se non sei stato tu, per favore contatta l''amministratore. -eventUpdateTotpBodyHtml=<p>La OTP (password temporanea valida una volta sola) \u00e8 stata aggiornata per il tuo account il {0} da {1}. Se non sei stato tu, per favore contatta l''amministratore.</p> - -requiredAction.CONFIGURE_TOTP=Configurazione OTP -requiredAction.terms_and_conditions=Termini e condizioni -requiredAction.UPDATE_PASSWORD=Aggiornamento password -requiredAction.UPDATE_PROFILE=Aggiornamento profilo -requiredAction.VERIFY_EMAIL=Verifica dell''indirizzo email - -# units for link expiration timeout formatting -linkExpirationFormatter.timePeriodUnit.seconds=secondi -linkExpirationFormatter.timePeriodUnit.seconds.1=secondo -linkExpirationFormatter.timePeriodUnit.minutes=minuti -linkExpirationFormatter.timePeriodUnit.minutes.1=minuto -#for language which have more unit plural forms depending on the value (eg. Czech and other Slavic langs) you can override unit text for some other values like this: -#linkExpirationFormatter.timePeriodUnit.minutes.2=minuty -#linkExpirationFormatter.timePeriodUnit.minutes.3=minuty -#linkExpirationFormatter.timePeriodUnit.minutes.4=minuty -linkExpirationFormatter.timePeriodUnit.hours=ore -linkExpirationFormatter.timePeriodUnit.hours.1=ora -linkExpirationFormatter.timePeriodUnit.days=giorni -linkExpirationFormatter.timePeriodUnit.days.1=giorno - -emailVerificationBodyCode=Per favore verifica il tuo indirizzo email inserendo il codice seguente.\n\n{0}\n\n. -emailVerificationBodyCodeHtml=<p>Per favore verifica il tuo indirizzo email inserendo il codice seguente.</p><p><b>{0}</b></p> diff --git a/keycloak_email/messages/messages_ja.properties b/keycloak_email/messages/messages_ja.properties deleted file mode 100644 index fb5c728..0000000 --- a/keycloak_email/messages/messages_ja.properties +++ /dev/null @@ -1,52 +0,0 @@ -# encoding: utf-8 -emailVerificationSubject=Eメールの確認 -emailVerificationBody=このメールアドレスで{2}アカウントが作成されました。以下のリンクをクリックしてメールアドレスの確認を完了してください。\n\n{0}\n\nこのリンクは{3}だけ有効です。\n\nもしこのアカウントの作成に心当たりがない場合は、このメールを無視してください。 -emailVerificationBodyHtml=<p>このメールアドレスで{2}アカウントが作成されました。以下のリンクをクリックしてメールアドレスの確認を完了してください。</p><p><a href="{0}">メールアドレスの確認</a></p><p>このリンクは{3}だけ有効です。</p><p>もしこのアカウントの作成に心当たりがない場合は、このメールを無視してください。</p> -emailTestSubject=[KEYCLOAK] - SMTPテストメッセージ -emailTestBody=これはテストメッセージです -emailTestBodyHtml=<p>これはテストメッセージです</p> -identityProviderLinkSubject=リンク {0} -identityProviderLinkBody=あなたの"{1}"アカウントと{2}ユーザーの"{0}"アカウントのリンクが要求されました。以下のリンクをクリックしてアカウントのリンクを行ってください。\n\n{3}\n\nこのリンクは{5}だけ有効です。\n\nもしアカウントのリンクを行わない場合は、このメッセージを無視してください。アカウントのリンクを行うことで、{0}経由で{1}にログインすることができるようになります。 -identityProviderLinkBodyHtml=<p>あなたの<b>{1}</b>アカウントと{2}ユーザーの<b>{0}</b>アカウントのリンクが要求されました。以下のリンクをクリックしてアカウントのリンクを行ってください。</p><p><a href="{3}">アカウントリンクの確認</a></p><p>このリンクは{5}だけ有効です。</p><p>もしアカウントのリンクを行わない場合は、このメッセージを無視してください。アカウントのリンクを行うことで、{0}経由で{1}にログインすることができるようになります。</p> -passwordResetSubject=パスワードのリセット -passwordResetBody=あなたの{2}アカウントのパスワードの変更が要求されています。以下のリンクをクリックしてパスワードのリセットを行ってください。\n\n{0}\n\nこのリンクは{3}だけ有効です。\n\nもしパスワードのリセットを行わない場合は、このメッセージを無視してください。何も変更されません。 -passwordResetBodyHtml=<p>あなたの{2}アカウントのパスワードの変更が要求されています。以下のリンクをクリックしてパスワードのリセットを行ってください。</p><p><a href="{0}">パスワードのリセット</a></p><p>このリンクは{3}だけ有効です。</p><p>もしパスワードのリセットを行わない場合は、このメッセージを無視してください。何も変更されません。</p> -executeActionsSubject=アカウントの更新 -executeActionsBody=次のアクションを実行することにより、管理者よりあなたの{2}アカウントの更新が要求されています: {3}。以下のリンクをクリックしてこのプロセスを開始してください。\n\n{0}\n\nこのリンクは{4}だけ有効です。\n\n管理者からのこの変更要求についてご存知ない場合は、このメッセージを無視してください。何も変更されません。 -executeActionsBodyHtml=<p>次のアクションを実行することにより、管理者よりあなたの{2}アカウントの更新が要求されています: {3}。以下のリンクをクリックしてこのプロセスを開始してください。</p><p><a href="{0}">アカウントの更新</a></p><p>このリンクは{4}だけ有効です。</p><p>管理者からのこの変更要求についてご存知ない場合は、このメッセージを無視してください。何も変更されません。</p> -eventLoginErrorSubject=ログインエラー -eventLoginErrorBody={0}に{1}からのログイン失敗があなたのアカウントで検出されました。心当たりがない場合は、管理者に連絡してください。 -eventLoginErrorBodyHtml=<p>{0}に{1}からのログイン失敗があなたのアカウントで検出されました。心当たりがない場合は管理者に連絡してください。</p> -eventRemoveTotpSubject=OTPの削除 -eventRemoveTotpBody={0}に{1}からの操作でOTPが削除されました。心当たりがない場合は、管理者に連絡してください。 -eventRemoveTotpBodyHtml=<p>{0}に{1}からの操作でOTPが削除されました。心当たりがない場合は、管理者に連絡してください。</p> -eventUpdatePasswordSubject=パスワードの更新 -eventUpdatePasswordBody={0}に{1}からの操作であなたのパスワードが変更されました。心当たりがない場合は、管理者に連絡してください。 -eventUpdatePasswordBodyHtml=<p>{0}に{1}からの操作であなたのパスワードが変更されました。心当たりがない場合は、管理者に連絡してください。</p> -eventUpdateTotpSubject=OTPの更新 -eventUpdateTotpBody={0}に{1}からの操作でOTPが更新されました。心当たりがない場合は、管理者に連絡してください。 -eventUpdateTotpBodyHtml=<p>{0}に{1}からの操作でOTPが更新されました。心当たりがない場合は、管理者に連絡してください。</p> - -requiredAction.CONFIGURE_TOTP=OTPの設定 -requiredAction.terms_and_conditions=利用規約 -requiredAction.UPDATE_PASSWORD=パスワードの更新 -requiredAction.UPDATE_PROFILE=プロファイルの更新 -requiredAction.VERIFY_EMAIL=Eメールの確認 - -# units for link expiration timeout formatting -linkExpirationFormatter.timePeriodUnit.seconds=秒 -linkExpirationFormatter.timePeriodUnit.seconds.1=秒 -linkExpirationFormatter.timePeriodUnit.minutes=分 -linkExpirationFormatter.timePeriodUnit.minutes.1=分 -#for language which have more unit plural forms depending on the value (eg. Czech and other Slavic langs) you can override unit text for some other values like this: -#linkExpirationFormatter.timePeriodUnit.minutes.2=minuty -#linkExpirationFormatter.timePeriodUnit.minutes.3=minuty -#linkExpirationFormatter.timePeriodUnit.minutes.4=minuty -linkExpirationFormatter.timePeriodUnit.hours=時間 -linkExpirationFormatter.timePeriodUnit.hours.1=時間 -linkExpirationFormatter.timePeriodUnit.days=日 -linkExpirationFormatter.timePeriodUnit.days.1=日 - -emailVerificationBodyCode=次のコードを入力してメールアドレスを確認してください。\n\n{0}\n\n. -emailVerificationBodyCodeHtml=<p>次のコードを入力してメールアドレスを確認してください。</p><p><b>{0}</b></p> - diff --git a/keycloak_email/messages/messages_lt.properties b/keycloak_email/messages/messages_lt.properties deleted file mode 100644 index abf1659..0000000 --- a/keycloak_email/messages/messages_lt.properties +++ /dev/null @@ -1,25 +0,0 @@ -# encoding: utf-8 -emailVerificationSubject=El. pašto patvirtinimas -emailVerificationBody=Paskyra {2} sukurta naudojant šį el. pašto adresą. Jei tai buvote Jūs, tuomet paspauskite žemiau esančią nuorodą\n\n{0}\n\nŠi nuoroda galioja {1} min.\n\nJei paskyros nekūrėte, tuomet ignuoruokite šį laišką. -emailVerificationBodyHtml=<p>Paskyra {2} sukurta naudojant šį el. pašto adresą. Jei tao buvote Jūs, tuomet paspauskite žemiau esančią nuorodą</p><p><a href=LT"{0}">{0}</a></p><p>Ši nuoroda galioja {1} min.</p><p>nJei paskyros nekūrėte, tuomet ignuoruokite šį laišką.</p> -identityProviderLinkSubject=Sąsaja {0} -identityProviderLinkBody=Kažas pageidauja susieti Jūsų "{1}" paskyrą su "{0}" {2} naudotojo paskyrą. Jei tai buvote Jūs, tuomet paspauskite žemiau esančią nuorodą norėdami susieti paskyras\n\n{3}\n\nŠi nuoroda galioja {4} min.\n\nJei paskyrų susieti nenorite, tuomet ignoruokite šį laišką. Jei paskyras susiesite, tuomet prie {1} galėsiste prisijungti per {0}. -identityProviderLinkBodyHtml=<p>žas pageidauja susieti Jūsų <b>{1}</b> paskyrą su <b>{0}</b> {2} naudotojo paskyrą. Jei tai buvote Jūs, tuomet paspauskite žemiau esančią nuorodą norėdami susieti paskyras</p><p><a href=LT"{3}">{3}</a></p><p>Ši nuoroda galioja {4} min.</p><p>Jei paskyrų susieti nenorite, tuomet ignoruokite šį laišką. Jei paskyras susiesite, tuomet prie {1} galėsiste prisijungti per {0}.</p> -passwordResetSubject=Slaptažodžio atkūrimas -passwordResetBody=Kažkas pageidauja pakeisti Jūsų paskyros {2} slaptažodį. Jei tai buvote Jūs, tuomet paspauskite žemiau esančią nuorodą slaptažodžio pakeitimui.\n\n{0}\n\nŠi nuoroda ir kodas galioja {1} min.\n\nJei nepageidajate keisti slaptažodžio, tuomet ignoruokite šį laišką ir niekas nebus pakeista. -passwordResetBodyHtml=<p>Kažkas pageidauja pakeisti Jūsų paskyros {2} slaptažodį. Jei tai buvote Jūs, tuomet paspauskite žemiau esančią nuorodą slaptažodžio pakeitimui.</p><p><a href=LT"{0}">{0}</a></p><p>Ši nuoroda ir kodas galioja {1} min.</p><p>Jei nepageidajate keisti slaptažodžio, tuomet ignoruokite šį laišką ir niekas nebus pakeista.</p> -executeActionsSubject=Atnaujinkite savo paskyrą -executeActionsBody=Sistemos administratorius pageidauja, kad Jūs atnaujintumėte savo {2} paskyrą. Paspauskite žemiau esančią nuorodą paskyros duomenų atnaujinimui.\n\n{0}\n\nŠi nuoroda galioja {1} min.\n\nJei Jūs neasate tikri, kad tai administratoriaus pageidavimas, tuomet ignoruokite šį laišką ir niekas nebus pakeista. -executeActionsBodyHtml=<p>Sistemos administratorius pageidauja, kad Jūs atnaujintumėte savo {2} paskyrą. Paspauskite žemiau esančią nuorodą paskyros duomenų atnaujinimui.</p><p><a href=LT"{0}">{0}</a></p><p>Ši nuoroda galioja {1} min.</p><p>Jei Jūs neasate tikri, kad tai administratoriaus pageidavimas, tuomet ignoruokite šį laišką ir niekas nebus pakeista.</p> -eventLoginErrorSubject=Nesėkmingas bandymas prisijungti prie jūsų paskyros -eventLoginErrorBody=Bandymas prisijungti prie jūsų paskyros {0} iš {1} nesėkmingas. Jei tai nebuvote jūs, tuomet susisiekite su administratoriumi -eventLoginErrorBodyHtml=<p>Bandymas prisijungti prie jūsų paskyros {0} iš {1} nesėkmingas. Jei tai nebuvote jūs, tuomet susisiekite su administratoriumi</p> -eventRemoveTotpSubject=OTP pašalinimas -eventRemoveTotpBody=Kažkas pageidauja atsieti TOPT Jūsų {1} paskyroje su {0}. Jei tai nebuvote Jūs, tuomet susisiekite su administratoriumi -eventRemoveTotpBodyHtml=<p>Kažkas pageidauja atsieti TOPT Jūsų <b>{1}</b> paskyroje su <b>{0}</b>. Jei tai nebuvote Jūs, tuomet susisiekite su administratoriumi</p> -eventUpdatePasswordSubject=Slaptažodžio atnaujinimas -eventUpdatePasswordBody={1} paskyroje {0} pakeisas jūsų slaptažodis. Jei Jūs nekeitėte, tuomet susisiekite su administratoriumi -eventUpdatePasswordBodyHtml=<p>{1} paskyroje {0} pakeisas jūsų slaptažodis. Jei Jūs nekeitėte, tuomet susisiekite su administratoriumi</p> -eventUpdateTotpSubject=OTP atnaujinimas -eventUpdateTotpBody=OTP Jūsų {1} paskyroje su {0} buvo atnaujintas. Jei tai nebuvote Jūs, tuomet susisiekite su administratoriumi -eventUpdateTotpBodyHtml=<p>OTP Jūsų {1} paskyroje su {0} buvo atnaujintas. Jei tai nebuvote Jūs, tuomet susisiekite su administratoriumi</p>
\ No newline at end of file diff --git a/keycloak_email/messages/messages_nl.properties b/keycloak_email/messages/messages_nl.properties deleted file mode 100644 index 9e6efbe..0000000 --- a/keycloak_email/messages/messages_nl.properties +++ /dev/null @@ -1,38 +0,0 @@ -emailVerificationSubject=Bevestig e-mailadres -emailVerificationBody=Iemand heeft een {2} account aangemaakt met dit e-mailadres. Als u dit was, klikt u op de onderstaande koppeling om uw e-mailadres te bevestigen \n\n{0}\n\nDeze koppeling zal binnen {3} vervallen.\n\nU kunt dit bericht negeren indien u dit account niet heeft aangemaakt. -emailVerificationBodyHtml=<p>Iemand heeft een {2} account aangemaakt met dit e-mailadres. Als u dit was, klikt u op de onderstaande koppeling om uw e-mailadres te bevestigen</p><p><a href="{0}">Koppeling naar e-mailadres bevestiging</a></p><p>Deze koppeling zal binnen {3} vervallen.</p<p>U kunt dit bericht negeren indien u dit account niet heeft aangemaakt.</p> -emailTestSubject=[KEYCLOAK] - SMTP testbericht -emailTestBody=Dit is een testbericht -emailTestBodyHtml=<p>Dit is een testbericht</p> -identityProviderLinkSubject=Koppel {0} -identityProviderLinkBody=Iemand wil uw "{1}" account koppelen met "{0}" account van gebruiker {2}. Als u dit was, klik dan op de onderstaande link om de accounts te koppelen\n\n{3}\n\nDeze link zal over {5} vervallen.\n\nAls u de accounts niet wilt koppelen, negeer dan dit bericht. Als u accounts koppelt, dan kunt u bij {1} inloggen via {0}. -identityProviderLinkBodyHtml=<p>Iemand wil uw "{1}" account koppelen met "{0}" account van gebruiker {2}. Als u dit was, klik dan op de onderstaande link om de accounts te koppelen</p><p><a href="{3}">Link om accounts te koppelen</a></p><p>Deze link zal over {5} vervallen.</p><p>Als u de accounts niet wilt koppelen, negeer dan dit bericht. Als u accounts koppelt, dan kunt u bij {1} inloggen via {0}.</p> -passwordResetSubject=Wijzig wachtwoord -passwordResetBody=Iemand verzocht de aanmeldgegevens van uw {2} account te wijzigen. Als u dit was, klik dan op de onderstaande koppeling om ze te wijzigen.\n\n{0}\n\nDe link en de code zullen binnen {3} vervallen.\n\nAls u uw aanmeldgegevens niet wilt wijzigen, negeer dan dit bericht en er zal niets gewijzigd worden. -passwordResetBodyHtml=<p>Iemand verzocht de aanmeldgegevens van uw {2} account te wijzigen. Als u dit was, klik dan op de onderstaande koppeling om ze te wijzigen.</p><p><a href="{0}">Wijzig aanmeldgegevens</a></p><p>De link en de code zullen binnen {3} vervallen.</p><p>Als u uw aanmeldgegevens niet wilt wijzigen, negeer dan dit bericht en er zal niets gewijzigd worden.</p> -executeActionsSubject=Wijzig uw account -executeActionsBody=Uw beheerder heeft u verzocht uw {2} account te wijzigen. Klik op de onderstaande koppeling om dit proces te starten. \n\n{0}\n\nDeze link zal over {4} vervallen. \n\nAls u niet over dit verzoek op de hoogte was, negeer dan dit bericht om uw account ongewijzigd te laten. -executeActionsBodyHtml=<p>Uw beheerder heeft u verzocht uw {2} account te wijzigen. Klik op de onderstaande koppeling om dit proces te starten.</p><p><a href="{0}">Link naar account wijziging</a></p><p>Deze link zal over {4} vervallen.</p><p>Als u niet over dit verzoek op de hoogte was, negeer dan dit bericht om uw account ongewijzigd te laten.</p> -eventLoginErrorSubject=Inlogfout -eventLoginErrorBody=Er is een foutieve inlogpoging gedetecteerd op uw account om {0} vanuit {1}. Als u dit niet was, neem dan contact op met de beheerder. -eventLoginErrorBodyHtml=<p>Er is een foutieve inlogpoging gedetecteerd op uw account om {0} vanuit {1}. Als u dit niet was, neem dan contact op met de beheerder.</p> -eventRemoveTotpSubject=OTP verwijderd -eventRemoveTotpBody=OTP is verwijderd van uw account om {0} vanuit {1}. Als u dit niet was, neem dan contact op met uw beheerder. -eventRemoveTotpBodyHtml=<p>OTP is verwijderd van uw account om {0} vanuit {1}. Als u dit niet was, neem dan contact op met uw beheerder.</p> -eventUpdatePasswordSubject=Wachtwoord gewijzigd -eventUpdatePasswordBody=Uw wachtwoord is gewijzigd om {0} door {1}. Als u dit niet was, neem dan contact op met uw beheerder. -eventUpdatePasswordBodyHtml=<p>Uw wachtwoord is gewijzigd om {0} door {1}. Als u dit niet was, neem dan contact op met uw beheerder.</p> -eventUpdateTotpSubject=OTP gewijzigd -eventUpdateTotpBody=OTP is gewijzigd voor uw account om {0} door {1}. Als u dit niet was, neem dan contact op met uw beheerder. -eventUpdateTotpBodyHtml=<p>OTP is gewijzigd voor uw account om {0} door {1}. Als u dit niet was, neem dan contact op met uw beheerder.</p> - - -# units for link expiration timeout formatting -linkExpirationFormatter.timePeriodUnit.seconds=seconden -linkExpirationFormatter.timePeriodUnit.seconds.1=seconde -linkExpirationFormatter.timePeriodUnit.minutes=minuten -linkExpirationFormatter.timePeriodUnit.minutes.1=minuut -linkExpirationFormatter.timePeriodUnit.hours=uur -linkExpirationFormatter.timePeriodUnit.hours.1=uur -linkExpirationFormatter.timePeriodUnit.days=dagen -linkExpirationFormatter.timePeriodUnit.days.1=dag diff --git a/keycloak_email/messages/messages_no.properties b/keycloak_email/messages/messages_no.properties deleted file mode 100644 index 32334e9..0000000 --- a/keycloak_email/messages/messages_no.properties +++ /dev/null @@ -1,24 +0,0 @@ -emailVerificationSubject=Bekreft e-postadresse -emailVerificationBody=Noen har opprettet en {2} konto med denne e-postadressen. Hvis dette var deg, klikk p\u00E5 lenken nedenfor for \u00E5 bekrefte e-postadressen din\n\n{0}\n\nDenne lenken vil utl\u00F8pe om {1} minutter.\n\nHvis du ikke opprettet denne kontoen, vennligst ignorer denne meldingen. -emailVerificationBodyHtml=<p>Noen har opprettet en {2} konto med denne e-postadressen. Hvis dette var deg, klikk p\u00E5 lenken nedenfor for \u00E5 bekrefte e-postadressen din</p><p><a href="{0}">{0}</a></p><p>Denne lenken vil utl\u00F8pe om {1} minutter.</p><p>Hvis du ikke opprettet denne kontoen, vennligst ignorer denne meldingen.</p> -identityProviderLinkSubject=Lenke {0} -identityProviderLinkBody=Noen vil koble din <b>{1}</b> konto med <b>{0}</b> konto til bruker {2}. Hvis dette var deg, klikk p\u00E5 lenken nedenfor for \u00E5 koble kontoene\n\n{3}\n\nDenne lenken vil utl\u00F8pe om {4} minutter\n\nHvis du ikke vil koble kontoene, vennligst ignorer denne meldingen. Hvis du kobler kontoene sammen vil du kunne logge inn til {1} gjennom {0}. -identityProviderLinkBodyHtml=<p>Noen vil koble din <b>{1}</b> konto med <b>{0}</b> konto til bruker {2}. Hvis dette var deg, klikk p\u00E5 lenken nedenfor for \u00E5 koble kontoene.</p><p><a href="{3}">{3}</a></p><p>Denne lenken vil utl\u00F8pe om {4} minutter.</p><p>Hvis du ikke vil koble kontoene, vennligst ignorer denne meldingen. Hvis du kobler kontoene sammen vil du kunne logge inn til {1} gjennom {0}.</p> -passwordResetSubject=Tilbakestill passord -passwordResetBody=Noen har bedt om \u00E5 endre innloggingsdetaljene til din konto {2}. Hvis dette var deg, klikk p\u00E5 lenken nedenfor for \u00E5 tilbakestille dem.\n\n{0}\n\nDenne lenken vil utl\u00F8pe om {1} minutter.\n\nHvis du ikke vil tilbakestille din innloggingsdata, vennligst ignorer denne meldingen og ingenting vil bli endret. -passwordResetBodyHtml=<p>Noen har bedt om \u00E5 endre innloggingsdetaljene til din konto {2}. Hvis dette var deg, klikk p\u00E5 lenken nedenfor for \u00E5 tilbakestille dem.</p><p><a href="{0}">{0}</a></p><p>Denne lenken vil utl\u00F8pe om {1} minutter.</p><p>Hvis du ikke vil tilbakestille din innloggingsdata, vennligst ignorer denne meldingen og ingenting vil bli endret.</p> -executeActionsSubject=Oppdater kontoen din -executeActionsBody=Administrator har anmodet at du oppdaterer din {2} konto. Klikk p\u00E5 lenken nedenfor for \u00E5 starte denne prosessen\n\n{0}\n\nDenne lenken vil utl\u00F8pe om {1} minutter.\n\nHvis du ikke var klar over at administrator har bedt om dette, vennligst ignorer denne meldingen og ingenting vil bli endret. -executeActionsBodyHtml=<p>Administrator har anmodet at du oppdaterer din {2} konto. Klikk p\u00E5 linken nedenfor for \u00E5 starte denne prosessen.</p><p><a href="{0}">{0}</a></p><p>Denne lenken vil utl\u00F8pe om {1} minutter.</p><p>Hvis du ikke var klar over at administrator har bedt om dette, ignorer denne meldingen og ingenting vil bli endret. </p> -eventLoginErrorSubject=Innlogging feilet -eventLoginErrorBody=Et mislykket innloggingsfors\u00F8k ble oppdaget p\u00E5 din konto p\u00E5 {0} fra {1}. Hvis dette ikke var deg, vennligst kontakt administrator. -eventLoginErrorBodyHtml=<p>Et mislykket innloggingsfors\u00F8k ble oppdaget p\u00E5 din konto p\u00E5 {0} fra {1}. Hvis dette ikke var deg, vennligst kontakt administrator.</p> -eventRemoveTotpSubject=Fjern engangskode -eventRemoveTotpBody=Engangskode ble fjernet fra kontoen din p\u00E5 {0} fra {1}. Hvis dette ikke var deg, vennligst kontakt administrator. -eventRemoveTotpBodyHtml=<p>Engangskode ble fjernet fra kontoen din p\u00E5 {0} fra {1}. Hvis dette ikke var deg, vennligst kontakt administrator.</p> -eventUpdatePasswordSubject=Oppdater passord -eventUpdatePasswordBody=Ditt passord ble endret i {0} fra {1}. Hvis dette ikke var deg, vennligst kontakt administrator. -eventUpdatePasswordBodyHtml=<p>Ditt passord ble endret i {0} fra {1}. Hvis dette ikke var deg, vennligst kontakt administrator. </p> -eventUpdateTotpSubject=Oppdater engangskode -eventUpdateTotpBody=Engangskode ble oppdatert for kontoen din p\u00E5 {0} fra {1}. Hvis dette ikke var deg, vennligst kontakt administrator. -eventUpdateTotpBodyHtml=<p>Engangskode ble oppdatert for kontoen din p\u00E5 {0} fra {1}. Hvis dette ikke var deg, vennligst kontakt administrator. </p> diff --git a/keycloak_email/messages/messages_pl.properties b/keycloak_email/messages/messages_pl.properties deleted file mode 100644 index 757f1bd..0000000 --- a/keycloak_email/messages/messages_pl.properties +++ /dev/null @@ -1,56 +0,0 @@ -# encoding: UTF-8 -emailVerificationSubject=Zweryfikuj email -emailVerificationBody=Ktoś utworzył już konto {2} z tym adresem e-mail. Jeśli to Ty, kliknij poniższy link, aby zweryfikować swój adres e-mail \n\n{0}\n\nLink ten wygaśnie w ciągu {3}.\n\nJeśli nie utworzyłeś tego konta, po prostu zignoruj tę wiadomość. -emailVerificationBodyHtml=<p>Ktoś utworzył już konto {2} z tym adresem e-mail. Jeśli to Ty, kliknij <a href="{0}">ten link</a> aby zweryfikować swój adres e-mail</p><p>Link ten wygaśnie w ciągu {3}</p><p>Jeśli nie utworzyłeś tego konta, po prostu zignoruj tę wiadomość.</p> -emailTestSubject=[KEYCLOAK] - wiadomość testowa SMTP -emailTestBody=To jest wiadomość testowa -emailTestBodyHtml=<p>To jest wiadomość testowa</p> -identityProviderLinkSubject=Link {0} -identityProviderLinkBody=Ktoś chce połączyć Twoje konto "{1}" z kontem "{0}" użytkownika {2}. Jeśli to Ty, kliknij poniższy link by połączyć konta\n\n{3}\n\nTen link wygaśnie w ciągu {5}.\n\nJeśli nie chcesz połączyć konta to zignoruj tę wiadomość. Jeśli połączysz konta, będziesz mógł się zalogować na {1} przez {0}. -identityProviderLinkBodyHtml=<p>Ktoś chce połączyć Twoje konto <b>{1}</b> z kontem <b>{0}</b> użytkownika {2}. Jeśli to Ty, kliknij <a href="{3}">ten link</a> by połączyć konta.</p><p>Ten link wygaśnie w ciągu {5}.</p><p>Jeśli nie chcesz połączyć konta to zignoruj tę wiadomość. Jeśli połączysz konta, będziesz mógł się zalogować na {1} przez {0}.</p> -passwordResetSubject=Zresetuj hasło -passwordResetBody=Ktoś właśnie poprosił o zmianę danych logowania Twojego konta {2}. Jeśli to Ty, kliknij poniższy link, aby je zresetować.\n\n{0}\n\nTen link i kod stracą ważność w ciągu {3}.\n\nJeśli nie chcesz zresetować swoich danych logowania, po prostu zignoruj tę wiadomość i nic się nie zmieni. -passwordResetBodyHtml=<p>Ktoś właśnie poprosił o zmianę poświadczeń Twojego konta {2}. Jeśli to Ty, kliknij poniższy link, aby je zresetować.</p><p><a href="{0}">Link do resetowania poświadczeń</a></p><p>Ten link wygaśnie w ciągu {3}.</p><p>Jeśli nie chcesz resetować swoich poświadczeń, po prostu zignoruj tę wiadomość i nic się nie zmieni.</p> -executeActionsSubject=Zaktualizuj swoje konto -executeActionsBody=Administrator właśnie zażądał aktualizacji konta {2} poprzez wykonanie następujących działań: {3}. Kliknij poniższy link, aby rozpocząć ten proces.\n\n{0}\n\nTen link wygaśnie w ciągu {4}.\n\nJeśli nie masz pewności, że administrator tego zażądał, po prostu zignoruj tę wiadomość i nic się nie zmieni. -executeActionsBodyHtml=<p>Administrator właśnie zażądał aktualizacji konta {2} poprzez wykonanie następujących działań: {3}. Kliknij <a href="{0}">ten link</a>, aby rozpocząć proces.</p><p>Link ten wygaśnie w ciągu {4}.</p><p>Jeśli nie masz pewności, że administrator tego zażądał, po prostu zignoruj tę wiadomość i nic się nie zmieni.</p> -eventLoginErrorSubject=Błąd logowania -eventLoginErrorBody=Nieudana próba logowania została wykryta na Twoim koncie {0} z {1}. Jeśli to nie Ty, skontaktuj się z administratorem. -eventLoginErrorBodyHtml=<p>Nieudana próba logowania została wykryta na Twoim koncie {0} z {1}. Jeśli to nie Ty, skontaktuj się z administratorem.</p> -eventRemoveTotpSubject=Usuń hasło jednorazowe (OTP) -eventRemoveTotpBody=Hasło jednorazowe (OTP) zostało usunięte z Twojego konta w {0} z {1}. Jeśli to nie Ty, skontaktuj się z administratorem. -eventRemoveTotpBodyHtml=<p>Hasło jednorazowe (OTP) zostało usunięte z Twojego konta w {0} z {1}. Jeśli to nie Ty, skontaktuj się z administratorem.</p> -eventUpdatePasswordSubject=Aktualizuj hasło -eventUpdatePasswordBody=Twoje hasło zostało zmienione {0} z {1}. Jeśli to nie Ty, skontaktuj się z administratorem. -eventUpdatePasswordBodyHtml=<p>Twoje hasło zostało zmienione {0} z {1}. Jeśli to nie Ty, skontaktuj się z administratorem.</p> -eventUpdateTotpSubject=Aktualizuj hasło jednorazowe (OTP) -eventUpdateTotpBody=Hasło jednorazowe (OTP) zostało zaktualizowane na Twoim koncie {0} z {1}. Jeśli to nie Ty, skontaktuj się z administratorem. -eventUpdateTotpBodyHtml=<p>Hasło jednorazowe (OTP) zostało zaktualizowane na Twoim koncie {0} z {1}. Jeśli to nie Ty, skontaktuj się z administratorem.</p> - -requiredAction.CONFIGURE_TOTP=Konfiguracja hasła jednorazowego (OTP) -requiredAction.terms_and_conditions=Regulamin -requiredAction.UPDATE_PASSWORD=Aktualizacja hasła -requiredAction.UPDATE_PROFILE=Aktualizacja profilu -requiredAction.VERIFY_EMAIL=Weryfikacja adresu e-mail - -# units for link expiration timeout formatting -linkExpirationFormatter.timePeriodUnit.seconds=sekund -linkExpirationFormatter.timePeriodUnit.seconds.1=sekunda -linkExpirationFormatter.timePeriodUnit.seconds.2=sekundy -linkExpirationFormatter.timePeriodUnit.seconds.3=sekundy -linkExpirationFormatter.timePeriodUnit.seconds.4=sekundy -linkExpirationFormatter.timePeriodUnit.minutes=minut -linkExpirationFormatter.timePeriodUnit.minutes.1=minuta -linkExpirationFormatter.timePeriodUnit.minutes.2=minuty -linkExpirationFormatter.timePeriodUnit.minutes.3=minuty -linkExpirationFormatter.timePeriodUnit.minutes.4=minuty -linkExpirationFormatter.timePeriodUnit.hours=godzin -linkExpirationFormatter.timePeriodUnit.hours.1=godzina -linkExpirationFormatter.timePeriodUnit.hours.2=godziny -linkExpirationFormatter.timePeriodUnit.hours.3=godziny -linkExpirationFormatter.timePeriodUnit.hours.4=godziny -linkExpirationFormatter.timePeriodUnit.days=dni -linkExpirationFormatter.timePeriodUnit.days.1=dzień - -emailVerificationBodyCode=Potwierdź swój adres e-mail wprowadzając następujący kod.\n\n{0}\n\n. -emailVerificationBodyCodeHtml=<p>Potwierdź swój adres e-mail, wprowadzając następujący kod.</p><p><b>{0}</b></p> diff --git a/keycloak_email/messages/messages_pt_BR.properties b/keycloak_email/messages/messages_pt_BR.properties deleted file mode 100644 index d8fa214..0000000 --- a/keycloak_email/messages/messages_pt_BR.properties +++ /dev/null @@ -1,51 +0,0 @@ -emailVerificationSubject=Verifica\u00E7\u00E3o de endere\u00e7o de e-mail -emailVerificationBody=Algu\u00E9m criou uma conta {2} com este endere\u00E7o de e-mail. Se foi voc\u00EA, clique no link abaixo para verificar o seu endere\u00E7o de email.\n\n{0}\n\nEste link ir\u00E1 expirar dentro de {3}.\n\nSe n\u00E3o foi voc\u00EA quem criou esta conta, basta ignorar esta mensagem. -emailVerificationBodyHtml=<p>Algu\u00E9m criou uma conta {2} com este endere\u00E7o de e-mail. Se foi voc\u00EA, clique no link abaixo para verificar o seu endere\u00E7o de email.</p><p><a href="{0}">Link para verifica\u00e7\u00e3o de endere\u00e7o de e-mail</a></p><p>Este link ir\u00E1 expirar dentro de {3}.</p><p>Se n\u00E3o foi voc\u00EA quem criou esta conta, basta ignorar esta mensagem.</p> -emailTestSubject=[KEYCLOAK] - Mensagem de teste SMTP -emailTestBody=Esta \u00E9 uma mensagem de teste -emailTestBodyHtml=<p>Esta \u00E9 uma mensagem de teste</p> -identityProviderLinkSubject=Vincular {0} -identityProviderLinkBody=Algu\u00E9m quer vincular a sua conta "{1}" com a conta "{0}" do usu\u00E1rio {2} . Se foi voc\u00EA, clique no link abaixo para vincular as contas.\n\n{3}\n\nEste link ir\u00E1 expirar em {5}.\n\nSe voc\u00EA n\u00E3o quer vincular a conta, apenas ignore esta mensagem. Se voc\u00EA vincular as contas, voc\u00EA ser\u00E1 capaz de logar em {1} fazendo login em {0}. -identityProviderLinkBodyHtml=<p>Algu\u00E9m quer vincular a sua conta <b>{1}</b> com a conta <b>{0}</b> do usu\u00E1rio {2} . Se foi voc\u00EA, clique no link abaixo para vincular as contas.</p><p><a href="{3}">Link para confirmar vincula\u00e7\u00e3o de contas</a></p><p>Este link ir\u00E1 expirar em {5}.</p><p>Se voc\u00EA n\u00E3o quer vincular a conta, apenas ignore esta mensagem. Se voc\u00EA vincular as contas, voc\u00EA ser\u00E1 capaz de logar em {1} fazendo login em {0}.</p> -passwordResetSubject=Redefini\u00E7\u00E3o de senha -passwordResetBody=Algu\u00E9m solicitou uma altera\u00E7\u00E3o de senha da sua conta {2}. Se foi voc\u00EA, clique no link abaixo para redefini-la.\n\n{0}\n\nEste link e c\u00F3digo expiram em {3}.\n\nSe voc\u00EA n\u00E3o deseja redefinir sua senha, apenas ignore esta mensagem e nada ser\u00E1 alterado. -passwordResetBodyHtml=<p>Algu\u00E9m solicitou uma altera\u00E7\u00E3o de senha da sua conta {2}. Se foi voc\u00EA, clique no link abaixo para redefini-la.</p><p><a href="{0}">Link para redefinir a senha</a></p><p>Este link ir\u00E1 expirar em {3}.</p><p>Se voc\u00EA n\u00E3o deseja redefinir sua senha, apenas ignore esta mensagem e nada ser\u00E1 alterado.</p> -executeActionsSubject=Atualiza\u00E7\u00E3o de conta -executeActionsBody=Um administrador solicitou que voc\u00EA atualize sua conta {2} com a(s) seguinte(s) etapa(s): {3}. Clique no link abaixo para iniciar o processo.\n\n{0}\n\nEste link ir\u00E1 expirar em {4}.\n\nSe voc\u00EA n\u00E3o tem conhecimento de que o administrador solicitou isso, basta ignorar esta mensagem e nada ser\u00E1 alterado. -executeActionsBodyHtml=<p>Um administrador solicitou que voc\u00EA atualize sua conta {2} com a(s) seguinte(s) etapa(s): {3}. Clique no link abaixo para iniciar o processo.</p><p><a href="{0}">Link para atualizar a conta</a></p><p>Este link ir\u00E1 expirar em {4}.</p><p>Se voc\u00EA n\u00E3o tem conhecimento de que o administrador solicitou isso, basta ignorar esta mensagem e nada ser\u00E1 alterado.</p> -eventLoginErrorSubject=Erro de login -eventLoginErrorBody=Uma tentativa de login malsucedida da sua conta foi detectada em {0} de {1}. Se n\u00E3o foi voc\u00EA, por favor, entre em contato com um administrador. -eventLoginErrorBodyHtml=<p>Uma tentativa de login malsucedida da sua conta foi detectada em {0} de {1}. Se n\u00E3o foi voc\u00EA, por favor, entre em contato com um administrador.</p> -eventRemoveTotpSubject=Remover autentica\u00e7\u00e3o de dois fatores -eventRemoveTotpBody=A autentica\u00e7\u00e3o de dois fatores foi removida da sua conta em {0} de {1}. Se n\u00E3o foi voc\u00EA, por favor, entre em contato com um administrador. -eventRemoveTotpBodyHtml=<p>A autentica\u00e7\u00e3o de dois fatores foi removida da sua conta em {0} de {1}. Se n\u00E3o foi voc\u00EA, por favor, entre em contato com um administrador.</p> -eventUpdatePasswordSubject=Atualiza\u00E7\u00E3o de senha -eventUpdatePasswordBody=Sua senha foi alterada em {0} de {1}. Se n\u00E3o foi voc\u00EA, por favor, entre em contato com um administrador. -eventUpdatePasswordBodyHtml=<p>Sua senha foi alterada em {0} de {1}. Se n\u00E3o foi voc\u00EA, por favor, entre em contato com um administrador.</p> -eventUpdateTotpSubject=Atualiza\u00E7\u00E3o de autentica\u00e7\u00e3o de dois fatores -eventUpdateTotpBody=A autentica\u00e7\u00e3o de dois fatores foi atualizada para a sua conta em {0} de {1}. Se n\u00E3o foi voc\u00EA, por favor, entre em contato com um administrador. -eventUpdateTotpBodyHtml=<p>A autentica\u00e7\u00e3o de dois fatores foi atualizada para a sua conta em {0} de {1}. Se n\u00E3o foi voc\u00EA, por favor, entre em contato com um administrador.</p> - -requiredAction.CONFIGURE_TOTP=Configurar Autentica\u00e7\u00e3o de Dois Fatores -requiredAction.terms_and_conditions=Termos e Condi\u00E7\u00F5es -requiredAction.UPDATE_PASSWORD=Atualizar Senha -requiredAction.UPDATE_PROFILE=Atualizar Perfil -requiredAction.VERIFY_EMAIL=Verificar Endere\u00e7o de E-mail - -# units for link expiration timeout formatting -linkExpirationFormatter.timePeriodUnit.seconds=segundos -linkExpirationFormatter.timePeriodUnit.seconds.1=segundo -linkExpirationFormatter.timePeriodUnit.minutes=minutos -linkExpirationFormatter.timePeriodUnit.minutes.1=minuto -#for language which have more unit plural forms depending on the value (eg. Czech and other Slavic langs) you can override unit text for some other values like this: -#linkExpirationFormatter.timePeriodUnit.minutes.2=minuty -#linkExpirationFormatter.timePeriodUnit.minutes.3=minuty -#linkExpirationFormatter.timePeriodUnit.minutes.4=minuty -linkExpirationFormatter.timePeriodUnit.hours=horas -linkExpirationFormatter.timePeriodUnit.hours.1=hora -linkExpirationFormatter.timePeriodUnit.days=dias -linkExpirationFormatter.timePeriodUnit.days.1=dia - -emailVerificationBodyCode=Verifique o seu endere\u00E7o de e-mail inserindo o seguinte c\u00F3digo.\n\n{0}\n\n. -emailVerificationBodyCodeHtml=<p>Verifique o seu endere\u00E7o de e-mail inserindo o seguinte c\u00F3digo.</p><p><b>{0}</b></p> - diff --git a/keycloak_email/messages/messages_ru.properties b/keycloak_email/messages/messages_ru.properties deleted file mode 100644 index 7f6886b..0000000 --- a/keycloak_email/messages/messages_ru.properties +++ /dev/null @@ -1,25 +0,0 @@ -# encoding: utf-8 -emailVerificationSubject=Подтверждение E-mail -emailVerificationBody=Кто-то создал учетную запись {2} с этим E-mail. Если это были Вы, нажмите на следующую ссылку для подтверждения вашего email\n\n{0}\n\nЭта ссылка устареет через {1} минут.\n\nЕсли Вы не создавали учетную запись, просто проигнорируйте это письмо. -emailVerificationBodyHtml=<p>Кто-то создал учетную запись {2} с этим E-mail. Если это были Вы, нажмите по ссылке для подтверждения вашего E-mail</p><p><a href="{0}">{0}</a></p><p>Эта ссылка устареет через {1} минут.</p><p>Если Вы не создавали учетную запись, просто проигнорируйте это письмо.</p> -identityProviderLinkSubject=Ссылка {0} -identityProviderLinkBody=Кто-то хочет связать вашу учетную запись "{1}" с "{0}" учетной записью пользователя {2} . Если это были Вы, нажмите по следующей ссылке, чтобы связать учетные записи\n\n{3}\n\nЭта ссылка устареет через {4} минут.\n\nЕсли это не хотите объединять учетные записи, просто проигнориуйте это письмо. После объединения учетных записей Вы можете войти в {1} через {0}. -identityProviderLinkBodyHtml=<p>Кто-то хочет связать вашу учетную запись <b>{1}</b> с <b>{0}</b> учетной записью пользователя {2} . Если это были Вы, нажмите по следующей ссылке, чтобы связать учетные записи</p><p><a href="{3}">{3}</a></p><p>Эта ссылка устареет через {4} минут.</p><p>Если это не хотите объединять учетные записи, просто проигнориуйте это письмо. После объединения учетных записей Вы можете войти в {1} через {0}.</p> -passwordResetSubject=Сброс пароля -passwordResetBody=Кто-то только что запросил изменение пароля от Вашей учетной записи {2}. Если это были Вы, нажмите на следующую ссылку, чтобы сбросить его.\n\n{0}\n\nЭта ссылка устареет через {1} минут.\n\nЕсли Вы не хотите сбрасывать пароль, просто проигнорируйте это письмо. -passwordResetBodyHtml=<p>Кто-то только что запросил изменение пароля от Вашей учетной записи {2}. Если это были Вы, нажмите на следующую ссылку, чтобы сбросить его.</p><p><a href="{0}">{0}</a></p><p>Эта ссылка устареет через {1} минут.</p><p>Если Вы не хотите сбрасывать пароль, просто проигнорируйте это письмо и ничего не изменится.</p> -executeActionsSubject=Обновление Вашей учетной записи -executeActionsBody=Администратор просит Вас обновить данные Вашей учетной записи {2}. Нажмите по следующей ссылке чтобы начать этот процесс.\n\n{0}\n\nЭта ссылка устареет через {1} минут.\n\nЕсли у вас есть подозрения, что администратор не мог сделать такой запрос, просто проигнорируйте это письмо. -executeActionsBodyHtml=<p>Администратор просит Вас обновить данные Вашей учетной записи {2}. Нажмите по следующей ссылке чтобы начать этот процесс.</p><p><a href="{0}">{0}</a></p><p>Эта ссылка устареет через {1} минут.</p><p>Если у вас есть подозрения, что администратор не мог сделать такой запрос, просто проигнорируйте это письмо.</p> -eventLoginErrorSubject=Ошибка входа -eventLoginErrorBody=Была зафиксирована неудачная попытка входа в Вашу учетную запись {0} с {1}. Если это были не Вы, пожалуйста, свяжитесь с администратором. -eventLoginErrorBodyHtml=<p>Была зафиксирована неудачная попытка входа в Вашу учетную запись {0} с {1}. Если это были не Вы, пожалуйста, свяжитесь с администратором.</p> -eventRemoveTotpSubject=Удалить OTP -eventRemoveTotpBody=OTP был удален из вашей учетной записи {0} c {1}. Если это были не Вы, пожалуйста, свяжитесь с администратором. -eventRemoveTotpBodyHtml=<p>OTP был удален из вашей учетной записи {0} c {1}. Если это были не Вы, пожалуйста, свяжитесь с администратором.</p> -eventUpdatePasswordSubject=Обновление пароля -eventUpdatePasswordBody=Ваш пароль был изменен в {0} с {1}. Если это были не Вы, пожалуйста, свяжитесь с администратором. -eventUpdatePasswordBodyHtml=<p>Ваш пароль был изменен в {0} с {1}. Если это были не Вы, пожалуйста, свяжитесь с администратором.</p> -eventUpdateTotpSubject=Обновление OTP -eventUpdateTotpBody=OTP был обновлен в вашей учетной записи {0} с {1}. Если это были не Вы, пожалуйста, свяжитесь с администратором. -eventUpdateTotpBodyHtml=<p>OTP был обновлен в вашей учетной записи {0} с {1}. Если это были не Вы, пожалуйста, свяжитесь с администратором.</p> diff --git a/keycloak_email/messages/messages_sk.properties b/keycloak_email/messages/messages_sk.properties deleted file mode 100644 index a87972c..0000000 --- a/keycloak_email/messages/messages_sk.properties +++ /dev/null @@ -1,48 +0,0 @@ -# encoding: utf-8 -emailVerificationSubject=Overenie e-mailu -emailVerificationBody=Niekto vytvoril účet {2} s touto e-mailovou adresou. Ak ste to vy, kliknite na nižšie uvedený odkaz a overte svoju e-mailovú adresu \n\n{0}\n\nTento odkaz uplynie do {1} minút.\n\nAk ste tento účet nevytvorili, ignorujte túto správu. -emailVerificationBodyHtml=<p>Niekto vytvoril účet {2} s touto e-mailovou adresou. Ak ste to vy, kliknite na nižšie uvedený odkaz na overenie svojej e-mailovej adresy.</p><p><a href="{0}"> Odkaz na overenie e-mailovej adresy </a></p><p>Platnosť odkazu vyprší za {1} minút.</p><p> Ak ste tento účet nevytvorili, ignorujte túto správu.</p> -emailTestSubject=[KEYCLOAK] - Testovacia správa SMTP -emailTestBody=Toto je skúšobná správa -emailTestBodyHtml=<p>Toto je skúšobná správa</p> -identityProviderLinkSubject=Odkaz {0} -identityProviderLinkBody=Niekto chce prepojiť váš účet "{1}" s účtom {0}"používateľa {2}. Ak ste to vy, kliknutím na odkaz nižšie prepojte účty. \n\n{3}\n\nTento odkaz uplynie do {4} minút.\n\nAk nechcete prepojiť účet, jednoducho ignorujte túto správu , Ak prepájate účty, budete sa môcť prihlásiť do {1} až {0}. -identityProviderLinkBodyHtml=<p>Niekto chce prepojiť váš účet <b>{1}</b> s účtom <b>{0}</b> používateľa {2}. Ak ste to vy, kliknutím na odkaz nižšie prepojte účty</p><p><a href="{3}">Odkaz na potvrdenie prepojenia účtu </a></p><p> Platnosť tohto odkazu vyprší v rámci {4} minút.</p><p>Ak nechcete prepojiť účet, ignorujte túto správu. Ak prepojujete účty, budete sa môcť prihlásiť do {1} až {0}.</p> -passwordResetSubject=Obnovenie hesla -passwordResetBody=Niekto požiadal, aby ste zmenili svoje poverenia účtu {2}. Ak ste to vy, kliknite na odkaz uvedený nižšie, aby ste ich vynulovali.\n\n{0}\n\nTento odkaz a kód uplynie do {1} minút.\n\nAk nechcete obnoviť svoje poverenia , ignorujte túto správu a nič sa nezmení. -passwordResetBodyHtml=<p>Niekto požiadal, aby ste zmenili svoje poverenia účtu {2}. Ak ste to vy, kliknutím na odkaz nižšie ich resetujte.</p><p><a href="{0}">Odkaz na obnovenie poverení </a></p><p>Platnosť tohto odkazu vyprší v priebehu {1} minút.</p><p>Ak nechcete obnoviť svoje poverenia, ignorujte túto správu a nič sa nezmení.</p> -executeActionsSubject=Aktualizujte svoj účet -executeActionsBody=Váš administrátor práve požiadal o aktualizáciu vášho účtu {2} vykonaním nasledujúcich akcií: {3}. Kliknutím na odkaz uvedený nižšie spustíte tento proces.\n\n{0}\n\nTento odkaz vyprší za {1} minúty.\n\nAk si nie ste vedomý, že váš adminstrátor o toto požiadal, ignorujte túto správu a nič bude zmenené. -executeActionsBodyHtml=<p>Váš správca práve požiadal o aktualizáciu vášho účtu {2} vykonaním nasledujúcich akcií: {3}. Kliknutím na odkaz uvedený nižšie spustíte tento proces.</p><p><a href="{0}"> Odkaz na aktualizáciu účtu </a></p><p> Platnosť tohto odkazu uplynie do {1} minúty.</p><p> Ak si nie ste vedomí, že váš adminstrátor o toto požiadal, ignorujte túto správu a nič sa nezmení.</p> -eventLoginErrorSubject=Chyba prihlásenia -eventLoginErrorBody=Bol zistený neúspešný pokus o prihlásenie do vášho účtu v {0} z {1}. Ak ste to neboli vy, obráťte sa na administrátora. -eventLoginErrorBodyHtml=<p>Bol zistený neúspešný pokus o prihlásenie vášho účtu na {0} z {1}. Ak ste to neboli vy, kontaktujte administrátora.</p> -eventRemoveTotpSubject=Odstrániť TOTP -eventRemoveTotpBody=OTP bol odstránený z vášho účtu dňa {0} z {1}. Ak ste to neboli vy, obráťte sa na administrátora. -eventRemoveTotpBodyHtml=<p>OTP bol odstránený z vášho účtu dňa {0} z {1}. Ak ste to neboli vy, kontaktujte administrátora.</p> -eventUpdatePasswordSubject=Aktualizovať heslo -eventUpdatePasswordBody=Vaše heslo bolo zmenené na {0} z {1}. Ak ste to neboli vy, obráťte sa na administrátora. -eventUpdatePasswordBodyHtml=<p>Vaše heslo bolo zmenené na {0} z {1}. Ak ste to neboli vy, kontaktujte administrátora.</p> -eventUpdateTotpSubject=Aktualizácia TOTP -eventUpdateTotpBody=TOTP bol aktualizovaný pre váš účet na {0} z {1}. Ak ste to neboli vy, obráťte sa na administrátora. -eventUpdateTotpBodyHtml=<p>TOTP bol aktualizovaný pre váš účet dňa {0} z {1}. Ak ste to neboli vy, kontaktujte administrátora.</p> - -requiredAction.CONFIGURE_TOTP=Konfigurácia OTP -requiredAction.terms_and_conditions=Zmluvné podmienky -requiredAction.UPDATE_PASSWORD=Aktualizovať heslo -requiredAction.UPDATE_PROFILE=Aktualizovať profil -requiredAction.VERIFY_EMAIL=Overiť e-mail - -# units for link expiration timeout formatting -linkExpirationFormatter.timePeriodUnit.seconds=sekundy -linkExpirationFormatter.timePeriodUnit.seconds.1=sekunda -linkExpirationFormatter.timePeriodUnit.minutes=minuty -linkExpirationFormatter.timePeriodUnit.minutes.1=minúta -#for language which have more unit plural forms depending on the value (eg. Czech and other Slavic langs) you can override unit text for some other values like this: -#linkExpirationFormatter.timePeriodUnit.minutes.2=minuty -#linkExpirationFormatter.timePeriodUnit.minutes.3=minuty -#linkExpirationFormatter.timePeriodUnit.minutes.4=minutu -linkExpirationFormatter.timePeriodUnit.hours=hodiny -linkExpirationFormatter.timePeriodUnit.hours.1=hodina -linkExpirationFormatter.timePeriodUnit.days=dni -linkExpirationFormatter.timePeriodUnit.days.1=deň diff --git a/keycloak_email/messages/messages_sv.properties b/keycloak_email/messages/messages_sv.properties deleted file mode 100644 index 15199c1..0000000 --- a/keycloak_email/messages/messages_sv.properties +++ /dev/null @@ -1,25 +0,0 @@ -# encoding: utf-8 -emailVerificationSubject=Verifiera e-post -emailVerificationBody=Någon har skapat ett {2} konto med den här e-postadressen. Om det var du, klicka då på länken nedan för att verifiera din e-postadress\n\n{0}\n\nDen här länken kommer att upphöra inom {1} minuter.\n\nOm det inte var du som skapade det här kontot, ignorera i så fall det här meddelandet. -emailVerificationBodyHtml=<p>Någon har skapat ett {2} konto med den här e-postadressen. Om det var du, klicka då på länken nedan för att verifiera din e-postadress</p><p><a href="{0}">{0}</a></p><p>Den här länken kommer att upphöra inom {1} minuter.</p><p>Om det inte var du som skapade det här kontot, ignorera i så fall det här meddelandet.</p> -identityProviderLinkSubject=Länk {0} -identityProviderLinkBody=Någon vill länka ditt "{1}" konto med "{0}" kontot tillhörande användaren {2} . Om det var du, klicka då på länken nedan för att länka kontona\n\n{3}\n\nDen här länken kommer att upphöra inom {4} minuter.\n\nOm du inte vill länka kontot, ignorera i så fall det här meddelandet. Om du länkar kontona, så kan du logga in till {1} genom {0}. -identityProviderLinkBodyHtml=<p>Någon vill länka ditt <b>{1}</b> konto med <b>{0}</b> kontot tillhörande användaren {2} . Om det var du, klicka då på länken nedan för att länka kontona</p><p><a href="{3}">{3}</a></p><p>Den här länken kommer att upphöra inom {4} minuter.</p><p>Om du inte vill länka kontot, ignorera i så fall det här meddelandet. Om du länkar kontona, så kan du logga in till {1} genom {0}.</p> -passwordResetSubject=Återställ lösenord -passwordResetBody=Någon har precis bett om att ändra användaruppgifter för ditt konto {2}. Om det var du, klicka då på länken nedan för att återställa dem.\n\n{0}\n\nDen här länken och koden kommer att upphöra inom {1} minuter.\n\nOm du inte vill återställa dina kontouppgifter, ignorera i så fall det här meddelandet så kommer inget att ändras. -passwordResetBodyHtml=<p>Någon har precis bett om att ändra användaruppgifter för ditt konto {2}. Om det var du, klicka då på länken nedan för att återställa dem.</p><p><a href="{0}">{0}</a></p><p>Den här länken och koden kommer att upphöra inom {1} minuter.</p><p>Om du inte vill återställa dina kontouppgifter, ignorera i så fall det här meddelandet så kommer inget att ändras.</p> -executeActionsSubject=Uppdatera ditt konto -executeActionsBody=Din administratör har precis bett om att du skall uppdatera ditt {2} konto. Klicka på länken för att påbörja processen.\n\n{0}\n\nDen här länken kommer att upphöra inom {1} minuter.\n\nOm du är omedveten om att din administratör har bett om detta, ignorera i så fall det här meddelandet så kommer inget att ändras. -executeActionsBodyHtml=<p>Din administratör har precis bett om att du skall uppdatera ditt {2} konto. Klicka på länken för att påbörja processen.</p><p><a href="{0}">{0}</a></p><p>Den här länken kommer att upphöra inom {1} minuter.</p><p>Om du är omedveten om att din administratör har bett om detta, ignorera i så fall det här meddelandet så kommer inget att ändras.</p> -eventLoginErrorSubject=Inloggningsfel -eventLoginErrorBody=Ett misslyckat inloggningsförsök har upptäckts på ditt konto på {0} från {1}. Om det inte var du, vänligen kontakta i så fall en administratör. -eventLoginErrorBodyHtml=<p>Ett misslyckat inloggningsförsök har upptäckts på ditt konto den {0} från {1}. Om det inte var du, vänligen kontakta i så fall en administratör.</p> -eventRemoveTotpSubject=Ta bort OTP -eventRemoveTotpBody=OTP togs bort från ditt konto den {0} från {1}. Om det inte var du, vänligen kontakta i så fall en administratör. -eventRemoveTotpBodyHtml=<p>OTP togs bort från ditt konto den {0} från {1}. Om det inte var du, vänligen kontakta i så fall en administratör.</p> -eventUpdatePasswordSubject=Uppdatera lösenord -eventUpdatePasswordBody=Ditt lösenord ändrades den {0} från {1}. Om det inte var du, vänligen kontakta i så fall en administratör. -eventUpdatePasswordBodyHtml=<p>Ditt lösenord ändrades den {0} från {1}. Om det inte var du, vänligen kontakta i så fall en administratör.</p> -eventUpdateTotpSubject=Uppdatera OTP -eventUpdateTotpBody=OTP uppdaterades för ditt konto den {0} från {1}. Om det inte var du, vänligen kontakta i så fall en administratör. -eventUpdateTotpBodyHtml=<p>OTP uppdaterades för ditt konto den {0} från {1}. Om det inte var du, vänligen kontakta i så fall en administratör.</p>
\ No newline at end of file diff --git a/keycloak_email/messages/messages_tr.properties b/keycloak_email/messages/messages_tr.properties deleted file mode 100644 index a260ef1..0000000 --- a/keycloak_email/messages/messages_tr.properties +++ /dev/null @@ -1,51 +0,0 @@ -emailVerificationSubject=E-postay\u0131 do\u011Frula -emailVerificationBody=Birisi bu e-posta adresiyle bir {2} hesap olu\u015Fturdu. Bu sizseniz, e-posta adresinizi do\u011Frulamak i\u00E7in a\u015Fa\u011F\u0131daki ba\u011Flant\u0131ya t\u0131klay\u0131n\n\n{0}\n\nBu ba\u011Flant\u0131 {3} i\u00E7inde sona erecek.\n\nBu hesab\u0131 olu\u015Fturmad\u0131ysan\u0131z, sadece bu iletiyi yoksay\u0131n\u0131z. -emailVerificationBodyHtml=<p>Birisi bu e-posta adresiyle bir {2} hesap olu\u015Fturdu. Bu sizseniz, e-posta adresinizi do\u011Frulamak i\u00E7in a\u015Fa\u011F\u0131daki ba\u011Flant\u0131y\u0131 t\u0131klay\u0131n.</p><p><a href="{0}">E-posta adresi do\u011Frulama adresi</a></p><p>Bu ba\u011Flant\u0131n\u0131n s\u00FCresi {3} i\u00E7erisinde sona erecek.</p><p>Bu hesab\u0131 siz olu\u015Fturmad\u0131ysan\u0131z, bu mesaj\u0131 g\u00F6z ard\u0131 edin.</p> -emailTestSubject=[KEYCLOAK] - SMTP test mesaj\u0131 -emailTestBody=Bu bir test mesaj\u0131 -emailTestBodyHtml=<p>Bu bir test mesaj\u0131</p> -identityProviderLinkSubject=Link {0} -identityProviderLinkBody=Birisi "{1}" hesab\u0131n\u0131z\u0131 "{0}" kullan\u0131c\u0131 hesab\u0131 {2} ile ba\u011Flamak istiyor. Bu sizseniz, hesaplar\u0131 ba\u011Flamak i\u00E7in a\u015Fa\u011F\u0131daki ba\u011Flant\u0131y\u0131 t\u0131klay\u0131n:\n\n{3}\n\nBu ba\u011Flant\u0131 {5} i\u00E7inde sona erecek.\n\nHesab\u0131n\u0131z\u0131 ba\u011Flamak istemiyorsan\u0131z bu mesaj\u0131 g\u00F6z ard\u0131 edin. Hesaplar\u0131 ba\u011Flarsan\u0131z, {1} ile {0} aras\u0131nda oturum a\u00E7abilirsiniz. -identityProviderLinkBodyHtml=<p>Birisi <b> {1} </ b> hesab\u0131n\u0131z\u0131 {2} kullan\u0131c\u0131s\u0131 <b> {0} </ b> hesab\u0131na ba\u011Flamak istiyor. Bu sizseniz, ba\u011Flant\u0131 vermek i\u00E7in a\u015Fa\u011F\u0131daki ba\u011Flant\u0131y\u0131 t\u0131klay\u0131n</p><p><a href="{3}">Hesap ba\u011Flant\u0131s\u0131n\u0131 onaylamak i\u00E7in ba\u011Flant\u0131</a></p><p>Bu ba\u011Flant\u0131n\u0131n s\u00FCresi {5} i\u00E7erisinde sona erecek.</p><p>Hesab\u0131 ba\u011Flamak istemiyorsan\u0131z, bu mesaj\u0131 g\u00F6z ard\u0131 edin. Hesaplar\u0131 ba\u011Flarsan\u0131z, {1} ile {0} aras\u0131nda oturum a\u00E7abilirsiniz.</p> -passwordResetSubject=\u015Eifreyi s\u0131f\u0131rla -passwordResetBody=Birisi, {2} hesab\u0131n\u0131z\u0131n kimlik bilgilerini de\u011Fi\u015Ftirmeyi istedi.Bu sizseniz, s\u0131f\u0131rlamak i\u00E7in a\u015Fa\u011F\u0131daki ba\u011Flant\u0131y\u0131 t\u0131klay\u0131n.\n\n{0}\n\nBu ba\u011Flant\u0131 ve kod {3} i\u00E7inde sona erecek.\n\nFakat bilgilerinizi s\u0131f\u0131rlamak istemiyorsan\u0131z, Sadece bu mesaj\u0131 g\u00F6rmezden gelin ve hi\u00E7bir \u015Fey de\u011Fi\u015Fmeyecek. -passwordResetBodyHtml=<p>Birisi, {2} hesab\u0131n\u0131z\u0131n kimlik bilgilerini de\u011Fi\u015Ftirmeyi istedi. Sizseniz, s\u0131f\u0131rlamak i\u00E7in a\u015Fa\u011F\u0131daki linke t\u0131klay\u0131n\u0131z.</p><p><a href="{0}">Kimlik bilgilerini s\u0131f\u0131rlamak i\u00E7in ba\u011Flant\u0131</a></p><p>Bu ba\u011Flant\u0131n\u0131n s\u00FCresi {3} i\u00E7erisinde sona erecek.</p><p>Kimlik bilgilerinizi s\u0131f\u0131rlamak istemiyorsan\u0131z, bu mesaj\u0131 g\u00F6z ard\u0131 edin.</p> -executeActionsSubject=Hesab\u0131n\u0131z\u0131 G\u00FCncelleyin -executeActionsBody=Y\u00F6neticiniz a\u015Fa\u011F\u0131daki i\u015Flemleri ger\u00E7ekle\u015Ftirerek {2} hesab\u0131n\u0131z\u0131 g\u00FCncelledi: {3}. Bu i\u015Flemi ba\u015Flatmak i\u00E7in a\u015Fa\u011F\u0131daki linke t\u0131klay\u0131n.\n\n{0}\n\nBu ba\u011Flant\u0131n\u0131n s\u00FCresi {4} i\u00E7erisinde sona erecek.\n\nY\u00F6neticinizin bunu istedi\u011Finden habersizseniz, bu mesaj\u0131 g\u00F6z ard\u0131 edin ve hi\u00E7bir \u015Fey de\u011Fi\u015Fmez. -executeActionsBodyHtml=<p>Y\u00F6neticiniz a\u015Fa\u011F\u0131daki i\u015Flemleri ger\u00E7ekle\u015Ftirerek {2} hesab\u0131n\u0131z\u0131 g\u00FCncelledi: {3}. Bu i\u015Flemi ba\u015Flatmak i\u00E7in a\u015Fa\u011F\u0131daki linke t\u0131klay\u0131n.</p><p><a href="{0}">Hesap g\u00FCncelleme ba\u011Flant\u0131s\u0131</a></p><p>Bu ba\u011Flant\u0131n\u0131n s\u00FCresi {4} i\u00E7erisinde sona erecek.</p><p>Y\u00F6neticinizin bunu istedi\u011Finden habersizseniz, bu mesaj\u0131 g\u00F6z ard\u0131 edin ve hi\u00E7bir \u015Fey de\u011Fi\u015Fmez.</p> -eventLoginErrorSubject=Giri\u015F hatas\u0131 -eventLoginErrorBody={1} ''den {0} tarihinde ba\u015Far\u0131s\u0131z bir giri\u015F denemesi yap\u0131ld\u0131. Bu siz de\u011Filseniz, l\u00FCtfen y\u00F6neticiyle ileti\u015Fime ge\u00E7in. -eventLoginErrorBodyHtml=<p>{1} ''den {0} tarihinde ba\u015Far\u0131s\u0131z bir giri\u015F denemesi yap\u0131ld\u0131. Bu siz de\u011Filseniz, l\u00FCtfen y\u00F6neticiyle ileti\u015Fime ge\u00E7in.</p> -eventRemoveTotpSubject=OTP''yi kald\u0131r -eventRemoveTotpBody=OTP, {0} tarihinden {1} tarihinde hesab\u0131n\u0131zdan kald\u0131r\u0131ld\u0131. Bu siz de\u011Filseniz, l\u00FCtfen y\u00F6neticiyle ileti\u015Fime ge\u00E7in. -eventRemoveTotpBodyHtml=<p>OTP, {0} tarihinden {1} tarihinde hesab\u0131n\u0131zdan kald\u0131r\u0131ld\u0131. Bu siz de\u011Filseniz, l\u00FCtfen y\u00F6neticiyle ileti\u015Fime ge\u00E7in.</p> -eventUpdatePasswordSubject=\u015Eifreyi g\u00FCncelle -eventUpdatePasswordBody=\u015Eifreniz {0} tarihinde {0} tarihinde de\u011Fi\u015Ftirildi. Bu siz de\u011Filseniz, l\u00FCtfen y\u00F6neticiyle ileti\u015Fime ge\u00E7in. -eventUpdatePasswordBodyHtml=<p>\u015Eifreniz {0} tarihinde {0} tarihinde de\u011Fi\u015Ftirildi. Bu siz de\u011Filseniz, l\u00FCtfen y\u00F6neticiyle ileti\u015Fime ge\u00E7in.</p> -eventUpdateTotpSubject=OTP''yi G\u00FCncelle -eventUpdateTotpBody=OTP, {0} tarihinden {1} tarihinde hesab\u0131n\u0131z i\u00E7in g\u00FCncellendi. Bu siz de\u011Filseniz, l\u00FCtfen y\u00F6neticiyle ileti\u015Fime ge\u00E7in. -eventUpdateTotpBodyHtml=<p>OTP, {0} tarihinden {1} tarihinde hesab\u0131n\u0131z i\u00E7in g\u00FCncellendi. Bu siz de\u011Filseniz, l\u00FCtfen y\u00F6neticiyle ileti\u015Fime ge\u00E7in.</p> - -requiredAction.CONFIGURE_TOTP=OTP''yi yap\u0131land\u0131r -requiredAction.terms_and_conditions=\u015Eartlar ve Ko\u015Fullar -requiredAction.UPDATE_PASSWORD=\u015Eifre G\u00FCncelleme -requiredAction.UPDATE_PROFILE=Profilleri g\u00FCncelle -requiredAction.VERIFY_EMAIL=E-mail do\u011Frula - -# units for link expiration timeout formatting -linkExpirationFormatter.timePeriodUnit.seconds=saniye -linkExpirationFormatter.timePeriodUnit.seconds.1=saniye -linkExpirationFormatter.timePeriodUnit.minutes=dakika -linkExpirationFormatter.timePeriodUnit.minutes.1=dakika -#for language which have more unit plural forms depending on the value (eg. Czech and other Slavic langs) you can override unit text for some other values like this: -#linkExpirationFormatter.timePeriodUnit.minutes.2=minuty -#linkExpirationFormatter.timePeriodUnit.minutes.3=minuty -#linkExpirationFormatter.timePeriodUnit.minutes.4=minuty -linkExpirationFormatter.timePeriodUnit.hours=saat -linkExpirationFormatter.timePeriodUnit.hours.1=saat -linkExpirationFormatter.timePeriodUnit.days=g\u00FCn -linkExpirationFormatter.timePeriodUnit.days.1=g\u00FCn - -emailVerificationBodyCode=L\u00FCtfen a\u015Fa\u011F\u0131daki kodu girerek e-posta adresinizi do\u011Frulay\u0131n.\n\n{0}\n\n. -emailVerificationBodyCodeHtml=<p>L\u00FCtfen a\u015Fa\u011F\u0131daki kodu girerek e-posta adresinizi do\u011Frulay\u0131n.</p><p><b>{0}</b></p> - diff --git a/keycloak_email/messages/messages_zh_CN.properties b/keycloak_email/messages/messages_zh_CN.properties deleted file mode 100644 index 42f59f8..0000000 --- a/keycloak_email/messages/messages_zh_CN.properties +++ /dev/null @@ -1,25 +0,0 @@ -# encoding: utf-8 -emailVerificationSubject=验证电子邮件 -emailVerificationBody=用户使用当前电子邮件注册 {2} 账户。如是本人操作,请点击以下链接完成邮箱验证\n\n{0}\n\n这个链接会在 {1} 分钟后过期.\n\n如果您没有注册用户,请忽略这条消息。 -emailVerificationBodyHtml=<p>用户使用当前电子邮件注册 {2} 账户。如是本人操作,请点击以下链接完成邮箱验证</p><p><a href="{0}">{0}</a></p><p>这个链接会在 {1} 分钟后过期.</p><p>如果您没有注册用户,请忽略这条消息。</p> -identityProviderLinkSubject=链接 {0} -identityProviderLinkBody=有用户想要将账户 "{1}" 与用户{2}的账户"{0}" 做链接 . 如果是本人操作,请点击以下链接完成链接请求\n\n{3}\n\n这个链接会在 {4} 分钟后过期.\n\n如非本人操作,请忽略这条消息。如果您链接账户,您将可以通过{0}登录账户 {1}. -identityProviderLinkBodyHtml=<p>有用户想要将账户 <b>{1}</b> 与用户{2} 的账户<b>{0}</b> 做链接 . 如果是本人操作,请点击以下链接完成链接请求</p><p><a href="{3}">{3}</a></p><p>这个链接会在 {4} 分钟后过期。</p><p>如非本人操作,请忽略这条消息。如果您链接账户,您将可以通过{0}登录账户 {1}.</p> -passwordResetSubject=重置密码 -passwordResetBody=有用户要求修改账户 {2} 的密码.如是本人操作,请点击下面链接进行重置.\n\n{0}\n\n这个链接会在 {1} 分钟后过期.\n\n如果您不想重置您的密码,请忽略这条消息,密码不会改变。 -passwordResetBodyHtml=<p>有用户要求修改账户 {2} 的密码如是本人操作,请点击下面链接进行重置.</p><p><a href="{0}">{0}</a></p><p>这个链接会在 {1} 分钟后过期</p><p>如果您不想重置您的密码,请忽略这条消息,密码不会改变。</p> -executeActionsSubject=更新您的账户 -executeActionsBody=您的管理员要求您更新账户 {2}. 点击以下链接开始更新\n\n{0}\n\n这个链接会在 {1} 分钟后失效.\n\n如果您不知道管理员要求更新账户信息,请忽略这条消息。账户信息不会修改。 -executeActionsBodyHtml=<p>您的管理员要求您更新账户{2}. 点击以下链接开始更新.</p><p><a href="{0}">{0}</a></p><p>这个链接会在 {1} 分钟后失效.</p><p>如果您不知道管理员要求更新账户信息,请忽略这条消息。账户信息不会修改。</p> -eventLoginErrorSubject=登录错误 -eventLoginErrorBody=在{0} 由 {1}使用您的账户登录失败. 如果这不是您本人操作,请联系管理员. -eventLoginErrorBodyHtml=<p>在{0} 由 {1}使用您的账户登录失败. 如果这不是您本人操作,请联系管理员.</p> -eventRemoveTotpSubject=删除 OTP -eventRemoveTotpBody=OTP在 {0} 由{1} 从您的账户中删除.如果这不是您本人操作,请联系管理员 -eventRemoveTotpBodyHtml=<p>OTP在 {0} 由{1} 从您的账户中删除.如果这不是您本人操作,请联系管理员。</p> -eventUpdatePasswordSubject=更新密码 -eventUpdatePasswordBody=您的密码在{0} 由 {1}更改. 如非本人操作,请联系管理员 -eventUpdatePasswordBodyHtml=<p>您的密码在{0} 由 {1}更改. 如非本人操作,请联系管理员</p> -eventUpdateTotpSubject=更新 OTP -eventUpdateTotpBody=您账户的OTP 配置在{0} 由 {1}更改. 如非本人操作,请联系管理员。 -eventUpdateTotpBodyHtml=<p>您账户的OTP 配置在{0} 由 {1}更改. 如非本人操作,请联系管理员。</p> diff --git a/keycloak_email/text/email-test.ftl b/keycloak_email/text/email-test.ftl deleted file mode 100644 index f1becdd..0000000 --- a/keycloak_email/text/email-test.ftl +++ /dev/null @@ -1,2 +0,0 @@ -<#ftl output_format="plainText"> -${msg("emailTestBody", realmName)}
\ No newline at end of file diff --git a/keycloak_email/text/email-update-confirmation.ftl b/keycloak_email/text/email-update-confirmation.ftl deleted file mode 100644 index 335d9a8..0000000 --- a/keycloak_email/text/email-update-confirmation.ftl +++ /dev/null @@ -1,2 +0,0 @@ -<#ftl output_format="plainText"> -${msg("emailUpdateConfirmationBody",link, newEmail, realmName, linkExpirationFormatter(linkExpiration))} diff --git a/keycloak_email/text/email-verification-with-code.ftl b/keycloak_email/text/email-verification-with-code.ftl deleted file mode 100644 index 4ffb7d8..0000000 --- a/keycloak_email/text/email-verification-with-code.ftl +++ /dev/null @@ -1,2 +0,0 @@ -<#ftl output_format="plainText"> -${msg("emailVerificationBodyCode",code)}
\ No newline at end of file diff --git a/keycloak_email/text/email-verification.ftl b/keycloak_email/text/email-verification.ftl deleted file mode 100644 index 9e39696..0000000 --- a/keycloak_email/text/email-verification.ftl +++ /dev/null @@ -1,2 +0,0 @@ -<#ftl output_format="plainText"> -${msg("emailVerificationBody",link, linkExpiration, realmName, linkExpirationFormatter(linkExpiration))}
\ No newline at end of file diff --git a/keycloak_email/text/event-login_error.ftl b/keycloak_email/text/event-login_error.ftl deleted file mode 100644 index bfb4036..0000000 --- a/keycloak_email/text/event-login_error.ftl +++ /dev/null @@ -1,2 +0,0 @@ -<#ftl output_format="plainText"> -${msg("eventLoginErrorBody",event.date,event.ipAddress)}
\ No newline at end of file diff --git a/keycloak_email/text/event-remove_totp.ftl b/keycloak_email/text/event-remove_totp.ftl deleted file mode 100644 index a7e3b68..0000000 --- a/keycloak_email/text/event-remove_totp.ftl +++ /dev/null @@ -1,2 +0,0 @@ -<#ftl output_format="plainText"> -${msg("eventRemoveTotpBody",event.date, event.ipAddress)}
\ No newline at end of file diff --git a/keycloak_email/text/event-update_password.ftl b/keycloak_email/text/event-update_password.ftl deleted file mode 100644 index 2ec7ea0..0000000 --- a/keycloak_email/text/event-update_password.ftl +++ /dev/null @@ -1,2 +0,0 @@ -<#ftl output_format="plainText"> -${msg("eventUpdatePasswordBody",event.date, event.ipAddress)}
\ No newline at end of file diff --git a/keycloak_email/text/event-update_totp.ftl b/keycloak_email/text/event-update_totp.ftl deleted file mode 100644 index 14778b5..0000000 --- a/keycloak_email/text/event-update_totp.ftl +++ /dev/null @@ -1,2 +0,0 @@ -<#ftl output_format="plainText"> -${msg("eventUpdateTotpBody",event.date, event.ipAddress)}
\ No newline at end of file diff --git a/keycloak_email/text/executeActions.ftl b/keycloak_email/text/executeActions.ftl deleted file mode 100644 index 6610c7a..0000000 --- a/keycloak_email/text/executeActions.ftl +++ /dev/null @@ -1,4 +0,0 @@ -<#ftl output_format="plainText"> -<#assign requiredActionsText><#if requiredActions??><#list requiredActions><#items as reqActionItem>${msg("requiredAction.${reqActionItem}")}<#sep>, </#items></#list><#else></#if></#assign> - -${msg("executeActionsBody",link, linkExpiration, realmName, requiredActionsText, linkExpirationFormatter(linkExpiration))}
\ No newline at end of file diff --git a/keycloak_email/text/identity-provider-link.ftl b/keycloak_email/text/identity-provider-link.ftl deleted file mode 100644 index ed9d246..0000000 --- a/keycloak_email/text/identity-provider-link.ftl +++ /dev/null @@ -1,2 +0,0 @@ -<#ftl output_format="plainText"> -${msg("identityProviderLinkBody", identityProviderAlias, realmName, identityProviderContext.username, link, linkExpiration, linkExpirationFormatter(linkExpiration))}
\ No newline at end of file diff --git a/keycloak_email/text/password-reset.ftl b/keycloak_email/text/password-reset.ftl deleted file mode 100644 index 27405c9..0000000 --- a/keycloak_email/text/password-reset.ftl +++ /dev/null @@ -1,2 +0,0 @@ -<#ftl output_format="plainText"> -${msg("passwordResetBody",link, linkExpiration, realmName, linkExpirationFormatter(linkExpiration))}
\ No newline at end of file diff --git a/keycloak_email/theme.properties b/keycloak_email/theme.properties deleted file mode 100644 index d8b7627..0000000 --- a/keycloak_email/theme.properties +++ /dev/null @@ -1 +0,0 @@ -locales=ca,cs,da,de,en,es,fr,fi,hu,it,ja,lt,nl,no,pl,pt-BR,ru,sk,sv,tr,zh-CN diff --git a/package.json b/package.json index 5aa644b..a568c2d 100755 --- a/package.json +++ b/package.json @@ -11,12 +11,13 @@ "start": "react-scripts start", "build": "react-scripts build", "build-keycloak-theme": "yarn build && keycloakify", + "eject-keycloak-page": "eject-keycloak-page", "download-builtin-keycloak-theme": "download-builtin-keycloak-theme", "storybook": "start-storybook -p 6006", "build-storybook": "build-storybook" }, "keycloakify": { - "extraPages": [ + "extraLoginPages": [ "my-extra-page-1.ftl", "my-extra-page-2.ftl" ] @@ -28,7 +29,7 @@ "evt": "^2.4.15", "jwt-decode": "^3.1.2", "keycloak-js": "^21.0.1", - "keycloakify": "^6.13.1", + "keycloakify": "7.0.0-rc.6", "powerhooks": "^0.26.2", "react": "18.1.0", "react-dom": "18.1.0", @@ -48,8 +49,8 @@ "@types/node": "^15.3.1", "@types/react": "18.0.9", "@types/react-dom": "18.0.4", - "react-scripts": "5.0.0", - "typescript": "~4.8.0" + "react-scripts": "5.0.1", + "typescript": "~4.7.0" }, "eslintConfig": { "extends": [ diff --git a/src/App/App.tsx b/src/App/App.tsx index c0f9222..68f1393 100644 --- a/src/App/App.tsx +++ b/src/App/App.tsx @@ -2,7 +2,7 @@ import "./App.css"; import logo from "./logo.svg"; import myimg from "./myimg.png"; import { createOidcClientProvider, useOidcClient } from "./oidc"; -import { addFooToQueryParams, addBarToQueryParams } from "../keycloak-theme/valuesTransferredOverUrl"; +import { addFooToQueryParams, addBarToQueryParams } from "../keycloak-theme/login/valuesTransferredOverUrl"; import jwt_decode from "jwt-decode"; const { OidcClientProvider } = createOidcClientProvider({ @@ -29,7 +29,6 @@ export default function App() { <ContextualizedApp /> </OidcClientProvider> ); - } function ContextualizedApp() { diff --git a/src/App/oidc.tsx b/src/App/oidc.tsx index ce4a854..44eb9e1 100644 --- a/src/App/oidc.tsx +++ b/src/App/oidc.tsx @@ -23,7 +23,7 @@ export declare namespace OidcClient { export type LoggedIn = { isUserLoggedIn: true; - getAccessToken: ()=> string; + getAccessToken: () => string; logout: (params: { redirectTo: "home" | "current page" }) => Promise<never>; //If we have sent a API request to change user's email for example //and we want that jwt_decode(oidcClient.getAccessToken()).email be the new email @@ -36,8 +36,8 @@ type Params = { url: string; realm: string; clientId: string; - transformUrlBeforeRedirect: (url: string) => string; - getUiLocales: () => string; + transformUrlBeforeRedirect?: (url: string) => string; + getUiLocales?: () => string; log?: typeof console.log; }; @@ -65,14 +65,19 @@ async function createKeycloakOidcClient(params: Params): Promise<OidcClient> { checkLoginIframe: false, adapter: createKeycloakAdapter({ transformUrlBeforeRedirect: url => - [url].map(transformUrlBeforeRedirect).map( - url => - addParamToUrl({ - url, - "name": "ui_locales", - "value": getUiLocales() - }).newUrl - )[0], + [url] + .map(transformUrlBeforeRedirect ?? (url => url)) + .map( + getUiLocales === undefined ? + (url => url) : + url => + addParamToUrl({ + url, + "name": "ui_locales", + "value": getUiLocales() + }).newUrl + ) + [0], keycloakInstance, getRedirectMethod: () => redirectMethod }) @@ -103,11 +108,11 @@ async function createKeycloakOidcClient(params: Params): Promise<OidcClient> { }); } - let currentAccessToken= keycloakInstance.token!; + let currentAccessToken = keycloakInstance.token!; const oidcClient = id<OidcClient.LoggedIn>({ "isUserLoggedIn": true, - "getAccessToken": ()=> currentAccessToken, + "getAccessToken": () => currentAccessToken, "logout": async ({ redirectTo }) => { await keycloakInstance.logout({ "redirectUri": (() => { @@ -157,7 +162,7 @@ async function createKeycloakOidcClient(params: Params): Promise<OidcClient> { currentAccessToken = keycloakInstance.token!; callee(); - + }, msBeforeExpiration - minValiditySecond * 1000); })(); diff --git a/src/index.tsx b/src/index.tsx index 37d6a5e..ba55bfe 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,17 +1,22 @@ import { createRoot } from "react-dom/client"; import { StrictMode, lazy, Suspense } from "react"; -import { kcContext } from "./keycloak-theme/kcContext"; +import { kcContext as kcLoginThemeContext } from "./keycloak-theme/login/kcContext"; const App = lazy(() => import("./App")); -const KcApp = lazy(() => import("./keycloak-theme/KcApp")); +const KcLoginThemeApp = lazy(() => import("./keycloak-theme/login/KcApp")); createRoot(document.getElementById("root")!).render( <StrictMode> <Suspense> - {kcContext === undefined ? - <App /> : - <KcApp kcContext={kcContext} /> - } + {(()=>{ + + if( kcLoginThemeContext !== undefined ){ + return <KcLoginThemeApp kcContext={kcLoginThemeContext} />; + } + + return <App />; + + })()} </Suspense> </StrictMode> ); diff --git a/src/keycloak-theme/KcApp.css b/src/keycloak-theme/login/KcApp.css index aeaebbe..aeaebbe 100644 --- a/src/keycloak-theme/KcApp.css +++ b/src/keycloak-theme/login/KcApp.css diff --git a/src/keycloak-theme/KcApp.tsx b/src/keycloak-theme/login/KcApp.tsx index 81d83ca..f41f00d 100644 --- a/src/keycloak-theme/KcApp.tsx +++ b/src/keycloak-theme/login/KcApp.tsx @@ -1,11 +1,11 @@ import "./KcApp.css"; import { lazy, Suspense } from "react"; +import Fallback, { type PageProps } from "keycloakify/login"; import type { KcContext } from "./kcContext"; import { useI18n } from "./i18n"; -import Fallback, { type PageProps } from "keycloakify"; const Template = lazy(() => import("./Template")); -const DefaultTemplate = lazy(() => import("keycloakify/Template")); +const DefaultTemplate = lazy(() => import("keycloakify/login/Template")); // You can uncomment this to see the values passed by the main app before redirecting. //import { foo, bar } from "./valuesTransferredOverUrl"; @@ -18,7 +18,7 @@ const RegisterUserProfile = lazy(() => import("./pages/RegisterUserProfile")); const Terms = lazy(() => import("./pages/Terms")); const MyExtraPage1 = lazy(() => import("./pages/MyExtraPage1")); const MyExtraPage2 = lazy(() => import("./pages/MyExtraPage2")); -const Info = lazy(() => import("keycloakify/pages/Info")); +const Info = lazy(() => import("keycloakify/login/pages/Info")); // This is like adding classes to theme.properties // https://github.com/keycloak/keycloak/blob/11.0.3/themes/src/main/resources/theme/keycloak/login/theme.properties @@ -49,15 +49,15 @@ export default function App(props: { kcContext: KcContext; }) { <Suspense> {(() => { switch (kcContext.pageId) { - case "login.ftl": return <Login {...{ kcContext, i18n, Template, classes, "doUseDefaultCss": true }} />; - case "register.ftl": return <Register {...{ kcContext, i18n, Template, classes, "doUseDefaultCss": true }} />; - case "register-user-profile.ftl": return <RegisterUserProfile {...{ kcContext, i18n, Template, classes, "doUseDefaultCss": true }} /> - case "terms.ftl": return <Terms {...{ kcContext, i18n, Template, classes, "doUseDefaultCss": true }} />; - case "my-extra-page-1.ftl": return <MyExtraPage1 {...{ kcContext, i18n, Template, classes, "doUseDefaultCss": true }} />; - case "my-extra-page-2.ftl": return <MyExtraPage2 {...{ kcContext, i18n, Template, classes, "doUseDefaultCss": true }} />; + case "login.ftl": return <Login {...{ kcContext, i18n, Template, classes }} doUseDefaultCss={true} />; + case "register.ftl": return <Register {...{ kcContext, i18n, Template, classes }} doUseDefaultCss={true} />; + case "register-user-profile.ftl": return <RegisterUserProfile {...{ kcContext, i18n, Template, classes }} doUseDefaultCss={true} /> + case "terms.ftl": return <Terms {...{ kcContext, i18n, Template, classes }} doUseDefaultCss={true} />; + case "my-extra-page-1.ftl": return <MyExtraPage1 {...{ kcContext, i18n, Template, classes }} doUseDefaultCss={true} />; + case "my-extra-page-2.ftl": return <MyExtraPage2 {...{ kcContext, i18n, Template, classes }} doUseDefaultCss={true} />; // We choose to use the default Template for the Info page and to download the theme resources. - case "info.ftl": return <Info {...{ kcContext, i18n, "Template": DefaultTemplate, classes, "doUseDefaultCss": true }} />; - default: return <Fallback {...{ kcContext, i18n, "Template": DefaultTemplate, classes, "doUseDefaultCss": true }} />; + case "info.ftl": return <Info {...{ kcContext, i18n, classes }} Template={DefaultTemplate} doUseDefaultCss={true} />; + default: return <Fallback {...{ kcContext, i18n, classes }} Template={DefaultTemplate} doUseDefaultCss={true} />; } })()} </Suspense> diff --git a/src/keycloak-theme/Template.tsx b/src/keycloak-theme/login/Template.tsx index 57a1566..1fd077a 100644 --- a/src/keycloak-theme/Template.tsx +++ b/src/keycloak-theme/login/Template.tsx @@ -2,7 +2,7 @@ import { assert } from "keycloakify/tools/assert"; import { clsx } from "keycloakify/tools/clsx"; import { usePrepareTemplate } from "keycloakify/lib/usePrepareTemplate"; -import { type TemplateProps, defaultTemplateClasses } from "keycloakify/TemplateProps"; +import { type TemplateProps, defaultTemplateClasses } from "keycloakify/login/TemplateProps"; import { useGetClassName } from "keycloakify/lib/useGetClassName"; import type { KcContext } from "./kcContext"; import type { I18n } from "./i18n"; @@ -16,12 +16,12 @@ export default function Template(props: TemplateProps<KcContext, I18n>) { showAnotherWayIfPresent = true, headerNode, showUsernameNode = null, - formNode, infoNode = null, kcContext, i18n, doUseDefaultCss, - classes + classes, + children } = props; const { getClassName } = useGetClassName({ @@ -42,7 +42,8 @@ export default function Template(props: TemplateProps<KcContext, I18n>) { "lib/zocial/zocial.css" ], "styles": ["css/login.css"], - "htmlClassName": getClassName("kcHtmlClass") + "htmlClassName": getClassName("kcHtmlClass"), + "bodyClassName": undefined }); if (!isReady) { @@ -153,7 +154,7 @@ export default function Template(props: TemplateProps<KcContext, I18n>) { /> </div> )} - {formNode} + {children} {auth !== undefined && auth.showTryAnotherWayLink && showAnotherWayIfPresent && ( <form id="kc-select-try-another-way-form" diff --git a/src/keycloak-theme/assets/background.svg b/src/keycloak-theme/login/assets/background.svg index 0e1cada..0e1cada 100644 --- a/src/keycloak-theme/assets/background.svg +++ b/src/keycloak-theme/login/assets/background.svg diff --git a/src/keycloak-theme/assets/tos_en.md b/src/keycloak-theme/login/assets/tos_en.md index 9436328..9436328 100644 --- a/src/keycloak-theme/assets/tos_en.md +++ b/src/keycloak-theme/login/assets/tos_en.md diff --git a/src/keycloak-theme/assets/tos_fr.md b/src/keycloak-theme/login/assets/tos_fr.md index 0621cd3..0621cd3 100644 --- a/src/keycloak-theme/assets/tos_fr.md +++ b/src/keycloak-theme/login/assets/tos_fr.md diff --git a/src/keycloak-theme/i18n.ts b/src/keycloak-theme/login/i18n.ts index bbeab0b..fadaca5 100644 --- a/src/keycloak-theme/i18n.ts +++ b/src/keycloak-theme/login/i18n.ts @@ -1,4 +1,4 @@ -import { createUseI18n } from "keycloakify"; +import { createUseI18n } from "keycloakify/login"; export const { useI18n } = createUseI18n({ // NOTE: Here you can override the default i18n messages diff --git a/src/keycloak-theme/kcContext.ts b/src/keycloak-theme/login/kcContext.ts index 44b8069..3e86c20 100644 --- a/src/keycloak-theme/kcContext.ts +++ b/src/keycloak-theme/login/kcContext.ts @@ -1,4 +1,4 @@ -import { getKcContext } from "keycloakify"; +import { getKcContext } from "keycloakify/login"; export type KcContextExtension = // NOTE: A 'keycloakify' field must be added diff --git a/src/keycloak-theme/login/pages/Login.tsx b/src/keycloak-theme/login/pages/Login.tsx new file mode 100644 index 0000000..f89c259 --- /dev/null +++ b/src/keycloak-theme/login/pages/Login.tsx @@ -0,0 +1,201 @@ +import { useState, type FormEventHandler } from "react"; +import { clsx } from "keycloakify/tools/clsx"; +import { useConstCallback } from "keycloakify/tools/useConstCallback"; +import { type PageProps, defaultClasses } from "keycloakify/login/pages/PageProps"; +import { useGetClassName } from "keycloakify/lib/useGetClassName"; +import type { KcContext } from "../kcContext"; +import type { I18n } from "../i18n"; + +export default function Login(props: PageProps<Extract<KcContext, { pageId: "login.ftl" }>, I18n>) { + const { kcContext, i18n, doUseDefaultCss, Template, classes } = props; + + const { getClassName } = useGetClassName({ + "defaultClasses": !doUseDefaultCss ? undefined : defaultClasses, + classes + }); + + const { social, realm, url, usernameEditDisabled, login, auth, registrationDisabled } = kcContext; + + const { msg, msgStr } = i18n; + + const [isLoginButtonDisabled, setIsLoginButtonDisabled] = useState(false); + + const onSubmit = useConstCallback<FormEventHandler<HTMLFormElement>>(e => { + e.preventDefault(); + + setIsLoginButtonDisabled(true); + + const formElement = e.target as HTMLFormElement; + + //NOTE: Even if we login with email Keycloak expect username and password in + //the POST request. + formElement.querySelector("input[name='email']")?.setAttribute("name", "username"); + + formElement.submit(); + }); + + return ( + <Template + {...{ kcContext, i18n, doUseDefaultCss, classes }} + displayInfo={social.displayInfo} + displayWide={realm.password && social.providers !== undefined} + headerNode={msg("doLogIn")} + infoNode={ + realm.password && + realm.registrationAllowed && + !registrationDisabled && ( + <div id="kc-registration"> + <span> + {msg("noAccount")} + <a tabIndex={6} href={url.registrationUrl}> + {msg("doRegister")} + </a> + </span> + </div> + ) + } + > + <div id="kc-form" className={clsx(realm.password && social.providers !== undefined && getClassName("kcContentWrapperClass"))}> + <div + id="kc-form-wrapper" + className={clsx( + realm.password && + social.providers && [getClassName("kcFormSocialAccountContentClass"), getClassName("kcFormSocialAccountClass")] + )} + > + {realm.password && ( + <form id="kc-form-login" onSubmit={onSubmit} action={url.loginAction} method="post"> + <div className={getClassName("kcFormGroupClass")}> + {(() => { + const label = !realm.loginWithEmailAllowed + ? "username" + : realm.registrationEmailAsUsername + ? "email" + : "usernameOrEmail"; + + const autoCompleteHelper: typeof label = label === "usernameOrEmail" ? "username" : label; + + return ( + <> + <label htmlFor={autoCompleteHelper} className={getClassName("kcLabelClass")}> + {msg(label)} + </label> + <input + tabIndex={1} + id={autoCompleteHelper} + className={getClassName("kcInputClass")} + //NOTE: This is used by Google Chrome auto fill so we use it to tell + //the browser how to pre fill the form but before submit we put it back + //to username because it is what keycloak expects. + name={autoCompleteHelper} + defaultValue={login.username ?? ""} + type="text" + {...(usernameEditDisabled + ? { "disabled": true } + : { + "autoFocus": true, + "autoComplete": "off" + })} + /> + </> + ); + })()} + </div> + <div className={getClassName("kcFormGroupClass")}> + <label htmlFor="password" className={getClassName("kcLabelClass")}> + {msg("password")} + </label> + <input + tabIndex={2} + id="password" + className={getClassName("kcInputClass")} + name="password" + type="password" + autoComplete="off" + /> + </div> + <div className={clsx(getClassName("kcFormGroupClass"), getClassName("kcFormSettingClass"))}> + <div id="kc-form-options"> + {realm.rememberMe && !usernameEditDisabled && ( + <div className="checkbox"> + <label> + <input + tabIndex={3} + id="rememberMe" + name="rememberMe" + type="checkbox" + {...(login.rememberMe + ? { + "checked": true + } + : {})} + /> + {msg("rememberMe")} + </label> + </div> + )} + </div> + <div className={getClassName("kcFormOptionsWrapperClass")}> + {realm.resetPasswordAllowed && ( + <span> + <a tabIndex={5} href={url.loginResetCredentialsUrl}> + {msg("doForgotPassword")} + </a> + </span> + )} + </div> + </div> + <div id="kc-form-buttons" className={getClassName("kcFormGroupClass")}> + <input + type="hidden" + id="id-hidden-input" + name="credentialId" + {...(auth?.selectedCredential !== undefined + ? { + "value": auth.selectedCredential + } + : {})} + /> + <input + tabIndex={4} + className={clsx( + getClassName("kcButtonClass"), + getClassName("kcButtonPrimaryClass"), + getClassName("kcButtonBlockClass"), + getClassName("kcButtonLargeClass") + )} + name="login" + id="kc-login" + type="submit" + value={msgStr("doLogIn")} + disabled={isLoginButtonDisabled} + /> + </div> + </form> + )} + </div> + {realm.password && social.providers !== undefined && ( + <div + id="kc-social-providers" + className={clsx(getClassName("kcFormSocialAccountContentClass"), getClassName("kcFormSocialAccountClass"))} + > + <ul + className={clsx( + getClassName("kcFormSocialAccountListClass"), + social.providers.length > 4 && getClassName("kcFormSocialAccountDoubleListClass") + )} + > + {social.providers.map(p => ( + <li key={p.providerId} className={getClassName("kcFormSocialAccountListLinkClass")}> + <a href={p.loginUrl} id={`zocial-${p.alias}`} className={clsx("zocial", p.providerId)}> + <span>{p.displayName}</span> + </a> + </li> + ))} + </ul> + </div> + )} + </div> + </Template> + ); +} diff --git a/src/keycloak-theme/pages/MyExtraPage1.tsx b/src/keycloak-theme/login/pages/MyExtraPage1.tsx index ed82c60..b7c73bd 100644 --- a/src/keycloak-theme/pages/MyExtraPage1.tsx +++ b/src/keycloak-theme/login/pages/MyExtraPage1.tsx @@ -1,4 +1,4 @@ -import type { PageProps } from "keycloakify/pages/PageProps"; +import type { PageProps } from "keycloakify/login/pages/PageProps"; import type { KcContext } from "../kcContext"; import type { I18n } from "../i18n"; @@ -10,13 +10,12 @@ export default function MyExtraPage1(props: PageProps<Extract<KcContext, { pageI <Template {...{ kcContext, i18n, doUseDefaultCss, classes }} headerNode={<>Header <i>text</i></>} - formNode={ - <form> - {/*...*/} - </form> - } infoNode={<span>footer</span>} - /> + > + <form> + {/*...*/} + </form> + </Template> ); } diff --git a/src/keycloak-theme/pages/MyExtraPage2.tsx b/src/keycloak-theme/login/pages/MyExtraPage2.tsx index e086f99..e0ce046 100644 --- a/src/keycloak-theme/pages/MyExtraPage2.tsx +++ b/src/keycloak-theme/login/pages/MyExtraPage2.tsx @@ -1,4 +1,4 @@ -import type { PageProps } from "keycloakify/pages/PageProps"; +import type { PageProps } from "keycloakify/login/pages/PageProps"; import type { KcContext } from "../kcContext"; import type { I18n } from "../i18n"; @@ -13,13 +13,13 @@ export default function MyExtraPage1(props: PageProps<Extract<KcContext, { pageI <Template {...{ kcContext, i18n, doUseDefaultCss, classes }} headerNode={<>Header <i>text</i></>} - formNode={ - <form> - {/*...*/} - </form> - } - infoNode={<span>footer</span> } - /> + infoNode={<span>footer</span>} + > + + <form> + {/*...*/} + </form> + </Template> ); } diff --git a/src/keycloak-theme/login/pages/Register.tsx b/src/keycloak-theme/login/pages/Register.tsx new file mode 100644 index 0000000..20fbed0 --- /dev/null +++ b/src/keycloak-theme/login/pages/Register.tsx @@ -0,0 +1,182 @@ +import { clsx } from "keycloakify/tools/clsx"; +import { type PageProps, defaultClasses } from "keycloakify/login/pages/PageProps"; +import { useGetClassName } from "keycloakify/lib/useGetClassName"; +import type { KcContext } from "../kcContext"; +import type { I18n } from "../i18n"; + +export default function Register(props: PageProps<Extract<KcContext, { pageId: "register.ftl" }>, I18n>) { + const { kcContext, i18n, doUseDefaultCss, Template, classes } = props; + + const { getClassName } = useGetClassName({ + "defaultClasses": !doUseDefaultCss ? undefined : defaultClasses, + classes + }); + + const { url, messagesPerField, register, realm, passwordRequired, recaptchaRequired, recaptchaSiteKey } = kcContext; + + const { msg, msgStr } = i18n; + + return ( + <Template {...{ kcContext, i18n, doUseDefaultCss, classes }} headerNode={msg("registerTitle")}> + <form id="kc-register-form" className={getClassName("kcFormClass")} action={url.registrationAction} method="post"> + <div + className={clsx( + getClassName("kcFormGroupClass"), + messagesPerField.printIfExists("firstName", getClassName("kcFormGroupErrorClass")) + )} + > + <div className={getClassName("kcLabelWrapperClass")}> + <label htmlFor="firstName" className={getClassName("kcLabelClass")}> + {msg("firstName")} + </label> + </div> + <div className={getClassName("kcInputWrapperClass")}> + <input + type="text" + id="firstName" + className={getClassName("kcInputClass")} + name="firstName" + defaultValue={register.formData.firstName ?? ""} + /> + </div> + </div> + + <div + className={clsx( + getClassName("kcFormGroupClass"), + messagesPerField.printIfExists("lastName", getClassName("kcFormGroupErrorClass")) + )} + > + <div className={getClassName("kcLabelWrapperClass")}> + <label htmlFor="lastName" className={getClassName("kcLabelClass")}> + {msg("lastName")} + </label> + </div> + <div className={getClassName("kcInputWrapperClass")}> + <input + type="text" + id="lastName" + className={getClassName("kcInputClass")} + name="lastName" + defaultValue={register.formData.lastName ?? ""} + /> + </div> + </div> + + <div + className={clsx(getClassName("kcFormGroupClass"), messagesPerField.printIfExists("email", getClassName("kcFormGroupErrorClass")))} + > + <div className={getClassName("kcLabelWrapperClass")}> + <label htmlFor="email" className={getClassName("kcLabelClass")}> + {msg("email")} + </label> + </div> + <div className={getClassName("kcInputWrapperClass")}> + <input + type="text" + id="email" + className={getClassName("kcInputClass")} + name="email" + defaultValue={register.formData.email ?? ""} + autoComplete="email" + /> + </div> + </div> + {!realm.registrationEmailAsUsername && ( + <div + className={clsx( + getClassName("kcFormGroupClass"), + messagesPerField.printIfExists("username", getClassName("kcFormGroupErrorClass")) + )} + > + <div className={getClassName("kcLabelWrapperClass")}> + <label htmlFor="username" className={getClassName("kcLabelClass")}> + {msg("username")} + </label> + </div> + <div className={getClassName("kcInputWrapperClass")}> + <input + type="text" + id="username" + className={getClassName("kcInputClass")} + name="username" + defaultValue={register.formData.username ?? ""} + autoComplete="username" + /> + </div> + </div> + )} + {passwordRequired && ( + <> + <div + className={clsx( + getClassName("kcFormGroupClass"), + messagesPerField.printIfExists("password", getClassName("kcFormGroupErrorClass")) + )} + > + <div className={getClassName("kcLabelWrapperClass")}> + <label htmlFor="password" className={getClassName("kcLabelClass")}> + {msg("password")} + </label> + </div> + <div className={getClassName("kcInputWrapperClass")}> + <input + type="password" + id="password" + className={getClassName("kcInputClass")} + name="password" + autoComplete="new-password" + /> + </div> + </div> + + <div + className={clsx( + getClassName("kcFormGroupClass"), + messagesPerField.printIfExists("password-confirm", getClassName("kcFormGroupErrorClass")) + )} + > + <div className={getClassName("kcLabelWrapperClass")}> + <label htmlFor="password-confirm" className={getClassName("kcLabelClass")}> + {msg("passwordConfirm")} + </label> + </div> + <div className={getClassName("kcInputWrapperClass")}> + <input type="password" id="password-confirm" className={getClassName("kcInputClass")} name="password-confirm" /> + </div> + </div> + </> + )} + {recaptchaRequired && ( + <div className="form-group"> + <div className={getClassName("kcInputWrapperClass")}> + <div className="g-recaptcha" data-size="compact" data-sitekey={recaptchaSiteKey}></div> + </div> + </div> + )} + <div className={getClassName("kcFormGroupClass")}> + <div id="kc-form-options" className={getClassName("kcFormOptionsClass")}> + <div className={getClassName("kcFormOptionsWrapperClass")}> + <span> + <a href={url.loginUrl}>{msg("backToLogin")}</a> + </span> + </div> + </div> + + <div id="kc-form-buttons" className={getClassName("kcFormButtonsClass")}> + <input + className={clsx( + getClassName("kcButtonClass"), + getClassName("kcButtonPrimaryClass"), + getClassName("kcButtonBlockClass"), + getClassName("kcButtonLargeClass") + )} + type="submit" + value={msgStr("doRegister")} + /> + </div> + </div> + </form> + </Template> + ); +} diff --git a/src/keycloak-theme/login/pages/RegisterUserProfile.tsx b/src/keycloak-theme/login/pages/RegisterUserProfile.tsx new file mode 100644 index 0000000..1955845 --- /dev/null +++ b/src/keycloak-theme/login/pages/RegisterUserProfile.tsx @@ -0,0 +1,70 @@ +import { useState } from "react"; +import { clsx } from "keycloakify/tools/clsx"; +import { UserProfileFormFields } from "./shared/UserProfileCommons"; +import { type PageProps, defaultClasses } from "keycloakify/login/pages/PageProps"; +import { useGetClassName } from "keycloakify/lib/useGetClassName"; +import type { KcContext } from "../kcContext"; +import type { I18n } from "../i18n"; + +export default function RegisterUserProfile(props: PageProps<Extract<KcContext, { pageId: "register-user-profile.ftl" }>, I18n>) { + const { kcContext, i18n, doUseDefaultCss, Template, classes } = props; + + const { getClassName } = useGetClassName({ + "defaultClasses": !doUseDefaultCss ? undefined : defaultClasses, + classes + }); + + const { url, messagesPerField, recaptchaRequired, recaptchaSiteKey } = kcContext; + + const { msg, msgStr } = i18n; + + const [isFomSubmittable, setIsFomSubmittable] = useState(false); + + return ( + <Template + {...{ kcContext, i18n, doUseDefaultCss, classes }} + displayMessage={messagesPerField.exists("global")} + displayRequiredFields={true} + headerNode={msg("registerTitle")} + > + <form id="kc-register-form" className={getClassName("kcFormClass")} action={url.registrationAction} method="post"> + <UserProfileFormFields + kcContext={kcContext} + onIsFormSubmittableValueChange={setIsFomSubmittable} + i18n={i18n} + getClassName={getClassName} + /> + {recaptchaRequired && ( + <div className="form-group"> + <div className={getClassName("kcInputWrapperClass")}> + <div className="g-recaptcha" data-size="compact" data-sitekey={recaptchaSiteKey} /> + </div> + </div> + )} + <div className={getClassName("kcFormGroupClass")} style={{ "marginBottom": 30 }}> + <div id="kc-form-options" className={getClassName("kcFormOptionsClass")}> + <div className={getClassName("kcFormOptionsWrapperClass")}> + <span> + <a href={url.loginUrl}>{msg("backToLogin")}</a> + </span> + </div> + </div> + + <div id="kc-form-buttons" className={getClassName("kcFormButtonsClass")}> + <input + className={clsx( + getClassName("kcButtonClass"), + getClassName("kcButtonPrimaryClass"), + getClassName("kcButtonBlockClass"), + getClassName("kcButtonLargeClass") + )} + type="submit" + value={msgStr("doRegister")} + disabled={!isFomSubmittable} + /> + </div> + </div> + </form> + </Template> + ); +} diff --git a/src/keycloak-theme/login/pages/Terms.tsx b/src/keycloak-theme/login/pages/Terms.tsx new file mode 100644 index 0000000..819db53 --- /dev/null +++ b/src/keycloak-theme/login/pages/Terms.tsx @@ -0,0 +1,56 @@ +import { clsx } from "keycloakify/tools/clsx"; +import { useRerenderOnStateChange } from "evt/hooks"; +import { Markdown } from "keycloakify/tools/Markdown"; +import { type PageProps, defaultClasses } from "keycloakify/login/pages/PageProps"; +import { useGetClassName } from "keycloakify/lib/useGetClassName"; +import { evtTermMarkdown } from "keycloakify/login/lib/useDownloadTerms"; +import type { KcContext } from "../kcContext"; +import type { I18n } from "../i18n"; + +export default function Terms(props: PageProps<Extract<KcContext, { pageId: "terms.ftl" }>, I18n>) { + const { kcContext, i18n, doUseDefaultCss, Template, classes } = props; + + const { getClassName } = useGetClassName({ + "defaultClasses": !doUseDefaultCss ? undefined : defaultClasses, + classes + }); + + const { msg, msgStr } = i18n; + + useRerenderOnStateChange(evtTermMarkdown); + + const { url } = kcContext; + + if (evtTermMarkdown.state === undefined) { + return null; + } + + return ( + <Template {...{ kcContext, i18n, doUseDefaultCss, classes }} displayMessage={false} headerNode={msg("termsTitle")}> + <div id="kc-terms-text">{evtTermMarkdown.state && <Markdown>{evtTermMarkdown.state}</Markdown>}</div> + <form className="form-actions" action={url.loginAction} method="POST"> + <input + className={clsx( + getClassName("kcButtonClass"), + getClassName("kcButtonClass"), + getClassName("kcButtonClass"), + getClassName("kcButtonPrimaryClass"), + getClassName("kcButtonLargeClass") + )} + name="accept" + id="kc-accept" + type="submit" + value={msgStr("doAccept")} + /> + <input + className={clsx(getClassName("kcButtonClass"), getClassName("kcButtonDefaultClass"), getClassName("kcButtonLargeClass"))} + name="cancel" + id="kc-decline" + type="submit" + value={msgStr("doDecline")} + /> + </form> + <div className="clearfix" /> + </Template> + ); +} diff --git a/src/keycloak-theme/pages/shared/UserProfileCommons.tsx b/src/keycloak-theme/login/pages/shared/UserProfileCommons.tsx index 08b9442..0a50bfd 100644 --- a/src/keycloak-theme/pages/shared/UserProfileCommons.tsx +++ b/src/keycloak-theme/login/pages/shared/UserProfileCommons.tsx @@ -1,28 +1,22 @@ -//NOTE: Copy pasted from: https://github.com/InseeFrLab/keycloakify/blob/main/src/lib/pages/shared/UserProfileCommons.tsx - import { useEffect, Fragment } from "react"; -import type { KcProps } from "keycloakify/lib/KcProps"; -import { clsx } from "keycloakify/lib/tools/clsx"; -import type { I18nBase } from "keycloakify/lib/i18n"; -import type { Attribute } from "keycloakify/lib/getKcContext"; -import { useFormValidation } from "keycloakify/lib/pages/shared/UserProfileCommons"; +import type { ClassKey } from "keycloakify/login/pages/PageProps"; +import { clsx } from "keycloakify/tools/clsx"; +import { useFormValidation } from "keycloakify/login/lib/useFormValidation"; +import type { Attribute } from "keycloakify/login/kcContext/KcContext"; +import type { I18n } from "../../i18n"; export type UserProfileFormFieldsProps = { kcContext: Parameters<typeof useFormValidation>[0]["kcContext"]; - i18n: I18nBase; -} & KcProps & - Partial<Record<"BeforeField" | "AfterField", (props: { attribute: Attribute }) => JSX.Element | null>> & { - onIsFormSubmittableValueChange: (isFormSubmittable: boolean) => void; - }; + i18n: I18n; + getClassName: (classKey: ClassKey) => string; + onIsFormSubmittableValueChange: (isFormSubmittable: boolean) => void; + BeforeField?: (props: { attribute: Attribute }) => JSX.Element | null; + AfterField?: (props: { attribute: Attribute }) => JSX.Element | null; +}; + +export function UserProfileFormFields(props: UserProfileFormFieldsProps) { + const { kcContext, onIsFormSubmittableValueChange, i18n, getClassName, BeforeField, AfterField } = props; -export function UserProfileFormFields({ - kcContext, - onIsFormSubmittableValueChange, - i18n, - BeforeField, - AfterField, - ...props -}: UserProfileFormFieldsProps) { const { advancedMsg } = i18n; const { @@ -47,20 +41,23 @@ export function UserProfileFormFields({ const { value, displayableErrors } = fieldStateByAttributeName[attribute.name]; - const formGroupClassName = clsx(props.kcFormGroupClass, displayableErrors.length !== 0 && props.kcFormGroupErrorClass); + const formGroupClassName = clsx( + getClassName("kcFormGroupClass"), + displayableErrors.length !== 0 && getClassName("kcFormGroupErrorClass") + ); return ( <Fragment key={i}> {group !== currentGroup && (currentGroup = group) !== "" && ( <div className={formGroupClassName}> - <div className={clsx(props.kcContentWrapperClass)}> - <label id={`header-${group}`} className={clsx(props.kcFormGroupHeader)}> + <div className={getClassName("kcContentWrapperClass")}> + <label id={`header-${group}`} className={getClassName("kcFormGroupHeader")}> {advancedMsg(groupDisplayHeader) || currentGroup} </label> </div> {groupDisplayDescription !== "" && ( - <div className={clsx(props.kcLabelWrapperClass)}> - <label id={`description-${group}`} className={`${clsx(props.kcLabelClass)}`}> + <div className={getClassName("kcLabelWrapperClass")}> + <label id={`description-${group}`} className={getClassName("kcLabelClass")}> {advancedMsg(groupDisplayDescription)} </label> </div> @@ -71,13 +68,13 @@ export function UserProfileFormFields({ {BeforeField && <BeforeField attribute={attribute} />} <div className={formGroupClassName}> - <div className={clsx(props.kcLabelWrapperClass)}> - <label htmlFor={attribute.name} className={clsx(props.kcLabelClass)}> + <div className={getClassName("kcLabelWrapperClass")}> + <label htmlFor={attribute.name} className={getClassName("kcLabelClass")}> {advancedMsg(attribute.displayName ?? "")} </label> {attribute.required && <>*</>} </div> - <div className={clsx(props.kcInputWrapperClass)}> + <div className={getClassName("kcInputWrapperClass")}> {(() => { const { options } = attribute.validators; @@ -137,7 +134,7 @@ export function UserProfileFormFields({ "name": attribute.name }) } - className={clsx(props.kcInputClass)} + className={getClassName("kcInputClass")} aria-invalid={displayableErrors.length !== 0} disabled={attribute.readOnly} autoComplete={attribute.autocomplete} @@ -153,7 +150,7 @@ export function UserProfileFormFields({ <style>{`#${divId} > span: { display: block; }`}</style> <span id={divId} - className={clsx(props.kcInputErrorMessageClass)} + className={getClassName("kcInputErrorMessageClass")} style={{ "position": displayableErrors.length === 1 ? "absolute" : undefined }} @@ -173,4 +170,3 @@ export function UserProfileFormFields({ </> ); } - diff --git a/src/keycloak-theme/valuesTransferredOverUrl.ts b/src/keycloak-theme/login/valuesTransferredOverUrl.ts index 18dd4f9..18dd4f9 100644 --- a/src/keycloak-theme/valuesTransferredOverUrl.ts +++ b/src/keycloak-theme/login/valuesTransferredOverUrl.ts diff --git a/src/keycloak-theme/pages/Login.tsx b/src/keycloak-theme/pages/Login.tsx deleted file mode 100644 index 932f1ae..0000000 --- a/src/keycloak-theme/pages/Login.tsx +++ /dev/null @@ -1,204 +0,0 @@ -// Copy pasted from: https://github.com/InseeFrLab/keycloakify/blob/main/src/pages/Login.tsx - -import { useState, type FormEventHandler } from "react"; -import { clsx } from "keycloakify/tools/clsx"; -import { useConstCallback } from "keycloakify/tools/useConstCallback"; -import { type PageProps, defaultClasses } from "keycloakify/pages/PageProps"; -import { useGetClassName } from "keycloakify/lib/useGetClassName"; -import type { KcContext } from "../kcContext"; -import type { I18n } from "../i18n"; - -export default function Login(props: PageProps<Extract<KcContext, { pageId: "login.ftl" }>, I18n>) { - const { kcContext, i18n, doUseDefaultCss, Template, classes } = props; - - const { getClassName } = useGetClassName({ - "defaultClasses": !doUseDefaultCss ? undefined : defaultClasses, - classes - }); - - const { social, realm, url, usernameEditDisabled, login, auth, registrationDisabled } = kcContext; - - const { msg, msgStr } = i18n; - - const [isLoginButtonDisabled, setIsLoginButtonDisabled] = useState(false); - - const onSubmit = useConstCallback<FormEventHandler<HTMLFormElement>>(e => { - e.preventDefault(); - - setIsLoginButtonDisabled(true); - - const formElement = e.target as HTMLFormElement; - - //NOTE: Even if we login with email Keycloak expect username and password in - //the POST request. - formElement.querySelector("input[name='email']")?.setAttribute("name", "username"); - - formElement.submit(); - }); - - return ( - <Template - {...{ kcContext, i18n, doUseDefaultCss, classes }} - displayInfo={social.displayInfo} - displayWide={realm.password && social.providers !== undefined} - headerNode={msg("doLogIn")} - formNode={ - <div id="kc-form" className={clsx(realm.password && social.providers !== undefined && getClassName("kcContentWrapperClass"))}> - <div - id="kc-form-wrapper" - className={clsx( - realm.password && - social.providers && [getClassName("kcFormSocialAccountContentClass"), getClassName("kcFormSocialAccountClass")] - )} - > - {realm.password && ( - <form id="kc-form-login" onSubmit={onSubmit} action={url.loginAction} method="post"> - <div className={getClassName("kcFormGroupClass")}> - {(() => { - const label = !realm.loginWithEmailAllowed - ? "username" - : realm.registrationEmailAsUsername - ? "email" - : "usernameOrEmail"; - - const autoCompleteHelper: typeof label = label === "usernameOrEmail" ? "username" : label; - - return ( - <> - <label htmlFor={autoCompleteHelper} className={getClassName("kcLabelClass")}> - {msg(label)} - </label> - <input - tabIndex={1} - id={autoCompleteHelper} - className={getClassName("kcInputClass")} - //NOTE: This is used by Google Chrome auto fill so we use it to tell - //the browser how to pre fill the form but before submit we put it back - //to username because it is what keycloak expects. - name={autoCompleteHelper} - defaultValue={login.username ?? ""} - type="text" - {...(usernameEditDisabled - ? { "disabled": true } - : { - "autoFocus": true, - "autoComplete": "off" - })} - /> - </> - ); - })()} - </div> - <div className={getClassName("kcFormGroupClass")}> - <label htmlFor="password" className={getClassName("kcLabelClass")}> - {msg("password")} - </label> - <input - tabIndex={2} - id="password" - className={getClassName("kcInputClass")} - name="password" - type="password" - autoComplete="off" - /> - </div> - <div className={clsx(getClassName("kcFormGroupClass"), getClassName("kcFormSettingClass"))}> - <div id="kc-form-options"> - {realm.rememberMe && !usernameEditDisabled && ( - <div className="checkbox"> - <label> - <input - tabIndex={3} - id="rememberMe" - name="rememberMe" - type="checkbox" - {...(login.rememberMe - ? { - "checked": true - } - : {})} - /> - {msg("rememberMe")} - </label> - </div> - )} - </div> - <div className={getClassName("kcFormOptionsWrapperClass")}> - {realm.resetPasswordAllowed && ( - <span> - <a tabIndex={5} href={url.loginResetCredentialsUrl}> - {msg("doForgotPassword")} - </a> - </span> - )} - </div> - </div> - <div id="kc-form-buttons" className={getClassName("kcFormGroupClass")}> - <input - type="hidden" - id="id-hidden-input" - name="credentialId" - {...(auth?.selectedCredential !== undefined - ? { - "value": auth.selectedCredential - } - : {})} - /> - <input - tabIndex={4} - className={clsx( - getClassName("kcButtonClass"), - getClassName("kcButtonPrimaryClass"), - getClassName("kcButtonBlockClass"), - getClassName("kcButtonLargeClass") - )} - name="login" - id="kc-login" - type="submit" - value={msgStr("doLogIn")} - disabled={isLoginButtonDisabled} - /> - </div> - </form> - )} - </div> - {realm.password && social.providers !== undefined && ( - <div - id="kc-social-providers" - className={clsx(getClassName("kcFormSocialAccountContentClass"), getClassName("kcFormSocialAccountClass"))} - > - <ul - className={clsx( - getClassName("kcFormSocialAccountListClass"), - social.providers.length > 4 && getClassName("kcFormSocialAccountDoubleListClass") - )} - > - {social.providers.map(p => ( - <li key={p.providerId} className={getClassName("kcFormSocialAccountListLinkClass")}> - <a href={p.loginUrl} id={`zocial-${p.alias}`} className={clsx("zocial", p.providerId)}> - <span>{p.displayName}</span> - </a> - </li> - ))} - </ul> - </div> - )} - </div> - } - infoNode={ - realm.password && - realm.registrationAllowed && - !registrationDisabled && ( - <div id="kc-registration"> - <span> - {msg("noAccount")} - <a tabIndex={6} href={url.registrationUrl}> - {msg("doRegister")} - </a> - </span> - </div> - ) - } - /> - ); -} diff --git a/src/keycloak-theme/pages/Register.tsx b/src/keycloak-theme/pages/Register.tsx deleted file mode 100644 index 666d8b8..0000000 --- a/src/keycloak-theme/pages/Register.tsx +++ /dev/null @@ -1,191 +0,0 @@ -// Copy pasted from: https://github.com/InseeFrLab/keycloakify/blob/main/src/pages/Register.tsx - -import { clsx } from "keycloakify/tools/clsx"; -import { type PageProps, defaultClasses } from "keycloakify/pages/PageProps"; -import { useGetClassName } from "keycloakify/lib/useGetClassName"; -import type { KcContext } from "../kcContext"; -import type { I18n } from "../i18n"; - -export default function Register(props: PageProps<Extract<KcContext, { pageId: "register.ftl" }>, I18n>) { - const { kcContext, i18n, doUseDefaultCss, Template, classes } = props; - - const { getClassName } = useGetClassName({ - "defaultClasses": !doUseDefaultCss ? undefined : defaultClasses, - classes - }); - - const { url, messagesPerField, register, realm, passwordRequired, recaptchaRequired, recaptchaSiteKey } = kcContext; - - const { msg, msgStr } = i18n; - - return ( - <Template - {...{ kcContext, i18n, doUseDefaultCss, classes }} - headerNode={msg("registerTitle")} - formNode={ - <form id="kc-register-form" className={getClassName("kcFormClass")} action={url.registrationAction} method="post"> - <div - className={clsx( - getClassName("kcFormGroupClass"), - messagesPerField.printIfExists("firstName", getClassName("kcFormGroupErrorClass")) - )} - > - <div className={getClassName("kcLabelWrapperClass")}> - <label htmlFor="firstName" className={getClassName("kcLabelClass")}> - {msg("firstName")} - </label> - </div> - <div className={getClassName("kcInputWrapperClass")}> - <input - type="text" - id="firstName" - className={getClassName("kcInputClass")} - name="firstName" - defaultValue={register.formData.firstName ?? ""} - /> - </div> - </div> - - <div - className={clsx( - getClassName("kcFormGroupClass"), - messagesPerField.printIfExists("lastName", getClassName("kcFormGroupErrorClass")) - )} - > - <div className={getClassName("kcLabelWrapperClass")}> - <label htmlFor="lastName" className={getClassName("kcLabelClass")}> - {msg("lastName")} - </label> - </div> - <div className={getClassName("kcInputWrapperClass")}> - <input - type="text" - id="lastName" - className={getClassName("kcInputClass")} - name="lastName" - defaultValue={register.formData.lastName ?? ""} - /> - </div> - </div> - - <div - className={clsx( - getClassName("kcFormGroupClass"), - messagesPerField.printIfExists("email", getClassName("kcFormGroupErrorClass")) - )} - > - <div className={getClassName("kcLabelWrapperClass")}> - <label htmlFor="email" className={getClassName("kcLabelClass")}> - {msg("email")} - </label> - </div> - <div className={getClassName("kcInputWrapperClass")}> - <input - type="text" - id="email" - className={getClassName("kcInputClass")} - name="email" - defaultValue={register.formData.email ?? ""} - autoComplete="email" - /> - </div> - </div> - {!realm.registrationEmailAsUsername && ( - <div - className={clsx( - getClassName("kcFormGroupClass"), - messagesPerField.printIfExists("username", getClassName("kcFormGroupErrorClass")) - )} - > - <div className={getClassName("kcLabelWrapperClass")}> - <label htmlFor="username" className={getClassName("kcLabelClass")}> - {msg("username")} - </label> - </div> - <div className={getClassName("kcInputWrapperClass")}> - <input - type="text" - id="username" - className={getClassName("kcInputClass")} - name="username" - defaultValue={register.formData.username ?? ""} - autoComplete="username" - /> - </div> - </div> - )} - {passwordRequired && ( - <> - <div - className={clsx( - getClassName("kcFormGroupClass"), - messagesPerField.printIfExists("password", getClassName("kcFormGroupErrorClass")) - )} - > - <div className={getClassName("kcLabelWrapperClass")}> - <label htmlFor="password" className={getClassName("kcLabelClass")}> - {msg("password")} - </label> - </div> - <div className={getClassName("kcInputWrapperClass")}> - <input - type="password" - id="password" - className={getClassName("kcInputClass")} - name="password" - autoComplete="new-password" - /> - </div> - </div> - - <div - className={clsx( - getClassName("kcFormGroupClass"), - messagesPerField.printIfExists("password-confirm", getClassName("kcFormGroupErrorClass")) - )} - > - <div className={getClassName("kcLabelWrapperClass")}> - <label htmlFor="password-confirm" className={getClassName("kcLabelClass")}> - {msg("passwordConfirm")} - </label> - </div> - <div className={getClassName("kcInputWrapperClass")}> - <input type="password" id="password-confirm" className={getClassName("kcInputClass")} name="password-confirm" /> - </div> - </div> - </> - )} - {recaptchaRequired && ( - <div className="form-group"> - <div className={getClassName("kcInputWrapperClass")}> - <div className="g-recaptcha" data-size="compact" data-sitekey={recaptchaSiteKey}></div> - </div> - </div> - )} - <div className={getClassName("kcFormGroupClass")}> - <div id="kc-form-options" className={getClassName("kcFormOptionsClass")}> - <div className={getClassName("kcFormOptionsWrapperClass")}> - <span> - <a href={url.loginUrl}>{msg("backToLogin")}</a> - </span> - </div> - </div> - - <div id="kc-form-buttons" className={getClassName("kcFormButtonsClass")}> - <input - className={clsx( - getClassName("kcButtonClass"), - getClassName("kcButtonPrimaryClass"), - getClassName("kcButtonBlockClass"), - getClassName("kcButtonLargeClass") - )} - type="submit" - value={msgStr("doRegister")} - /> - </div> - </div> - </form> - } - /> - ); -} diff --git a/src/keycloak-theme/pages/RegisterUserProfile.tsx b/src/keycloak-theme/pages/RegisterUserProfile.tsx deleted file mode 100644 index 48d791f..0000000 --- a/src/keycloak-theme/pages/RegisterUserProfile.tsx +++ /dev/null @@ -1,73 +0,0 @@ -// Copy pasted from: https://github.com/InseeFrLab/keycloakify/blob/main/src/pages/RegisterUserProfile.tsx - -import { useState } from "react"; -import { clsx } from "keycloakify/tools/clsx"; -import { UserProfileFormFields } from "./shared/UserProfileCommons"; -import { type PageProps, defaultClasses } from "keycloakify/pages/PageProps"; -import { useGetClassName } from "keycloakify/lib/useGetClassName"; -import type { KcContext } from "../kcContext"; -import type { I18n } from "../i18n"; - -export default function RegisterUserProfile(props: PageProps<Extract<KcContext, { pageId: "register-user-profile.ftl" }>, I18n>) { - const { kcContext, i18n, doUseDefaultCss, Template, classes } = props; - - const { getClassName } = useGetClassName({ - "defaultClasses": !doUseDefaultCss ? undefined : defaultClasses, - classes - }); - - const { url, messagesPerField, recaptchaRequired, recaptchaSiteKey } = kcContext; - - const { msg, msgStr } = i18n; - - const [isFomSubmittable, setIsFomSubmittable] = useState(false); - - return ( - <Template - {...{ kcContext, i18n, doUseDefaultCss, classes }} - displayMessage={messagesPerField.exists("global")} - displayRequiredFields={true} - headerNode={msg("registerTitle")} - formNode={ - <form id="kc-register-form" className={getClassName("kcFormClass")} action={url.registrationAction} method="post"> - <UserProfileFormFields - kcContext={kcContext} - onIsFormSubmittableValueChange={setIsFomSubmittable} - i18n={i18n} - getClassName={getClassName} - /> - {recaptchaRequired && ( - <div className="form-group"> - <div className={getClassName("kcInputWrapperClass")}> - <div className="g-recaptcha" data-size="compact" data-sitekey={recaptchaSiteKey} /> - </div> - </div> - )} - <div className={getClassName("kcFormGroupClass")} style={{ "marginBottom": 30 }}> - <div id="kc-form-options" className={getClassName("kcFormOptionsClass")}> - <div className={getClassName("kcFormOptionsWrapperClass")}> - <span> - <a href={url.loginUrl}>{msg("backToLogin")}</a> - </span> - </div> - </div> - - <div id="kc-form-buttons" className={getClassName("kcFormButtonsClass")}> - <input - className={clsx( - getClassName("kcButtonClass"), - getClassName("kcButtonPrimaryClass"), - getClassName("kcButtonBlockClass"), - getClassName("kcButtonLargeClass") - )} - type="submit" - value={msgStr("doRegister")} - disabled={!isFomSubmittable} - /> - </div> - </div> - </form> - } - /> - ); -} diff --git a/src/keycloak-theme/pages/Terms.tsx b/src/keycloak-theme/pages/Terms.tsx deleted file mode 100644 index 19d490f..0000000 --- a/src/keycloak-theme/pages/Terms.tsx +++ /dev/null @@ -1,70 +0,0 @@ -/** - * NOTE: You do not need to do all this to put your own Terms and conditions - * this is if you want component level customization. - * If the default works for you, you can just use the useDownloadTerms hook - * in the KcApp.tsx - * Example: https://github.com/garronej/keycloakify-starter/blob/a20c21b2aae7c6dc6dbea294f3d321955ddf9355/src/KcApp/KcApp.tsx#L14-L30 - */ -import { clsx } from "keycloakify/tools/clsx"; -import { useRerenderOnStateChange } from "evt/hooks"; -import { Markdown } from "keycloakify/tools/Markdown"; -import { type PageProps, defaultClasses } from "keycloakify/pages/PageProps"; -import { useGetClassName } from "keycloakify/lib/useGetClassName"; -import { evtTermMarkdown } from "keycloakify/lib/useDownloadTerms"; -import type { KcContext } from "../kcContext"; -import type { I18n } from "../i18n"; - -export default function Terms(props: PageProps<Extract<KcContext, { pageId: "terms.ftl" }>, I18n>) { - const { kcContext, i18n, doUseDefaultCss, Template, classes } = props; - - const { getClassName } = useGetClassName({ - "defaultClasses": !doUseDefaultCss ? undefined : defaultClasses, - classes - }); - - const { msg, msgStr } = i18n; - - useRerenderOnStateChange(evtTermMarkdown); - - const { url } = kcContext; - - if (evtTermMarkdown.state === undefined) { - return null; - } - - return ( - <Template - {...{ kcContext, i18n, doUseDefaultCss, classes }} - displayMessage={false} - headerNode={msg("termsTitle")} - formNode={ - <> - <div id="kc-terms-text">{evtTermMarkdown.state && <Markdown>{evtTermMarkdown.state}</Markdown>}</div> - <form className="form-actions" action={url.loginAction} method="POST"> - <input - className={clsx( - getClassName("kcButtonClass"), - getClassName("kcButtonClass"), - getClassName("kcButtonClass"), - getClassName("kcButtonPrimaryClass"), - getClassName("kcButtonLargeClass") - )} - name="accept" - id="kc-accept" - type="submit" - value={msgStr("doAccept")} - /> - <input - className={clsx(getClassName("kcButtonClass"), getClassName("kcButtonDefaultClass"), getClassName("kcButtonLargeClass"))} - name="cancel" - id="kc-decline" - type="submit" - value={msgStr("doDecline")} - /> - </form> - <div className="clearfix" /> - </> - } - /> - ); -} @@ -7415,7 +7415,7 @@ escodegen@^2.0.0: optionalDependencies: source-map "~0.6.1" -eslint-config-react-app@^7.0.0: +eslint-config-react-app@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz#73ba3929978001c5c86274c017ea57eb5fa644b4" integrity sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA== @@ -7739,6 +7739,15 @@ evt@^2.4.15: run-exclusive "^2.2.18" tsafe "^1.4.3" +evt@^2.4.18: + version "2.4.18" + resolved "https://registry.yarnpkg.com/evt/-/evt-2.4.18.tgz#931012610dcd3bc7c0877d61018a704e9e5511db" + integrity sha512-kMYW3DPrUWvFsOUf3cN1NMdg0MEFYLMLqC7hPSasNs8TOZCOBsDgazr6nXda2iUur/2L6BtRu0oCl2++oGYZxA== + dependencies: + minimal-polyfills "^2.2.2" + run-exclusive "^2.2.18" + tsafe "^1.6.0" + exec-sh@^0.3.2: version "0.3.6" resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" @@ -10432,22 +10441,22 @@ keycloak-js@^21.0.1: base64-js "^1.5.1" js-sha256 "^0.9.0" -keycloakify@^6.13.1: - version "6.13.1" - resolved "https://registry.yarnpkg.com/keycloakify/-/keycloakify-6.13.1.tgz#258a6b0d55f7e520bcfec8616aa9f38783c674e8" - integrity sha512-bLrWYomKUodEFWdI0p/Y30FBh4j/LRFUM7di5pxnF/GDC2WGT6QXntid5QK55tkLTUY/GNTWdWN8of2KxdwBjw== + version "7.0.0-rc.6" + resolved "https://registry.yarnpkg.com/keycloakify/-/keycloakify-7.0.0-rc.6.tgz#3bd53be93588b14b6b23b1f01cb12cfb16b73ab3" + integrity sha512-vjMM3fdW1mVemuwCzfEgqKSMMMVfTH8Ti+tI1cq/26L1/G3tv2V0hGrCf9PqOOPSVIxdjQPNeAkOCrPX70h+CQ== dependencies: "@octokit/rest" "^18.12.0" cheerio "^1.0.0-rc.5" cli-select "^1.1.2" - evt "^2.4.15" + evt "^2.4.18" make-fetch-happen "^11.0.3" minimal-polyfills "^2.2.2" minimist "^1.2.6" path-browserify "^1.0.1" react-markdown "^5.0.3" rfc4648 "^1.5.2" - tsafe "^1.4.3" + tsafe "^1.6.0" zod "^3.17.10" kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: @@ -13076,7 +13085,7 @@ react-app-polyfill@^3.0.0: regenerator-runtime "^0.13.9" whatwg-fetch "^3.6.2" -react-dev-utils@^12.0.0: +react-dev-utils@^12.0.1: version "12.0.1" resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-12.0.1.tgz#ba92edb4a1f379bd46ccd6bcd4e7bc398df33e73" integrity sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ== @@ -13199,10 +13208,10 @@ react-refresh@^0.11.0: resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.11.0.tgz#77198b944733f0f1f1a90e791de4541f9f074046" integrity sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A== - version "5.0.0" - resolved "https://registry.yarnpkg.com/react-scripts/-/react-scripts-5.0.0.tgz#6547a6d7f8b64364ef95273767466cc577cb4b60" - integrity sha512-3i0L2CyIlROz7mxETEdfif6Sfhh9Lfpzi10CtcGs1emDQStmZfWjJbAIMtRD0opVUjQuFWqHZyRZ9PPzKCFxWg== + version "5.0.1" + resolved "https://registry.yarnpkg.com/react-scripts/-/react-scripts-5.0.1.tgz#6285dbd65a8ba6e49ca8d651ce30645a6d980003" + integrity sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ== dependencies: "@babel/core" "^7.16.0" "@pmmmwh/react-refresh-webpack-plugin" "^0.5.3" @@ -13220,7 +13229,7 @@ [email protected]: dotenv "^10.0.0" dotenv-expand "^5.1.0" eslint "^8.3.0" - eslint-config-react-app "^7.0.0" + eslint-config-react-app "^7.0.1" eslint-webpack-plugin "^3.1.1" file-loader "^6.2.0" fs-extra "^10.0.0" @@ -13237,7 +13246,7 @@ [email protected]: postcss-preset-env "^7.0.1" prompts "^2.4.2" react-app-polyfill "^3.0.0" - react-dev-utils "^12.0.0" + react-dev-utils "^12.0.1" react-refresh "^0.11.0" resolve "^1.20.0" resolve-url-loader "^4.0.0" @@ -15103,6 +15112,11 @@ tsafe@^1.4.3: resolved "https://registry.yarnpkg.com/tsafe/-/tsafe-1.4.3.tgz#a98ce83616f0d9c01e3c6167a2ead45ba455b2ae" integrity sha512-KjCdgjIqsbKW9oeJGSMVC23jhWm/VXJwkaZ7jffo/WaTioLGTHJqliHe9dECEVzIACNVNs/fwtKwU8wWK4jY4g== +tsafe@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/tsafe/-/tsafe-1.6.0.tgz#48a9bd0a4c43df43d289bdfc1d89f0d7fffbd612" + integrity sha512-wlUeRBnyN3EN2chXznpLm7vBEvJLEOziDU+MN6NRlD99AkwmXgtChNQhp+V97VyRa3Bp05IaL4Cocsc7JlyEUg== + tsconfig-paths@^3.14.1: version "3.14.1" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a" @@ -15223,10 +15237,10 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== -typescript@~4.8.0: - version "4.8.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.4.tgz#c464abca159669597be5f96b8943500b238e60e6" - integrity sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ== +typescript@~4.7.0: + version "4.7.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" + integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== uglify-js@^3.1.4: version "3.17.4" |