keycloakify 10.0.0-rc.107 → 10.0.0-rc.109
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/account/KcContext/KcContext.d.ts +4 -1
- package/account/KcContext/KcContext.js.map +1 -1
- package/account/KcContext/kcContextMocks.js +4 -1
- package/account/KcContext/kcContextMocks.js.map +1 -1
- package/account/i18n/GenericI18n.d.ts +6 -0
- package/account/i18n/GenericI18n.js +2 -0
- package/account/i18n/GenericI18n.js.map +1 -0
- package/account/i18n/i18n.d.ts +24 -30
- package/account/i18n/i18n.js +47 -67
- package/account/i18n/i18n.js.map +1 -1
- package/account/i18n/index.d.ts +4 -3
- package/account/i18n/index.js.map +1 -1
- package/account/i18n/messages_defaultSet/ar.js.map +1 -0
- package/account/i18n/messages_defaultSet/ca.js.map +1 -0
- package/account/i18n/messages_defaultSet/cs.js.map +1 -0
- package/account/i18n/messages_defaultSet/da.js.map +1 -0
- package/account/i18n/messages_defaultSet/de.js.map +1 -0
- package/account/i18n/messages_defaultSet/el.js.map +1 -0
- package/account/i18n/messages_defaultSet/en.js.map +1 -0
- package/account/i18n/messages_defaultSet/es.js.map +1 -0
- package/account/i18n/messages_defaultSet/fa.js.map +1 -0
- package/account/i18n/messages_defaultSet/fi.js.map +1 -0
- package/account/i18n/messages_defaultSet/fr.js.map +1 -0
- package/account/i18n/messages_defaultSet/hu.js.map +1 -0
- package/account/i18n/{baseMessages → messages_defaultSet}/index.d.ts +1 -1
- package/account/i18n/{baseMessages → messages_defaultSet}/index.js +3 -3
- package/account/i18n/messages_defaultSet/index.js.map +1 -0
- package/account/i18n/messages_defaultSet/it.js.map +1 -0
- package/account/i18n/messages_defaultSet/ja.js.map +1 -0
- package/account/i18n/messages_defaultSet/lt.js.map +1 -0
- package/account/i18n/messages_defaultSet/lv.js.map +1 -0
- package/account/i18n/messages_defaultSet/nl.js.map +1 -0
- package/account/i18n/messages_defaultSet/no.js.map +1 -0
- package/account/i18n/messages_defaultSet/pl.js.map +1 -0
- package/account/i18n/messages_defaultSet/pt-BR.js.map +1 -0
- package/account/i18n/messages_defaultSet/ru.js.map +1 -0
- package/account/i18n/messages_defaultSet/sk.js.map +1 -0
- package/account/i18n/messages_defaultSet/sv.js.map +1 -0
- package/account/i18n/messages_defaultSet/th.js.map +1 -0
- package/account/i18n/messages_defaultSet/tr.js.map +1 -0
- package/account/i18n/messages_defaultSet/uk.js.map +1 -0
- package/account/i18n/messages_defaultSet/zh-CN.js.map +1 -0
- package/account/i18n/useI18n.d.ts +6 -5
- package/account/i18n/useI18n.js +24 -2
- package/account/i18n/useI18n.js.map +1 -1
- package/bin/440.index.js +1 -1
- package/bin/622.index.js +15 -14
- package/bin/shared/downloadKeycloakDefaultTheme.js.map +1 -1
- package/login/KcContext/KcContext.d.ts +1 -0
- package/login/KcContext/KcContext.js.map +1 -1
- package/login/i18n/GenericI18n.d.ts +6 -0
- package/login/i18n/GenericI18n.js +2 -0
- package/login/i18n/GenericI18n.js.map +1 -0
- package/login/i18n/i18n.d.ts +21 -30
- package/login/i18n/i18n.js +44 -93
- package/login/i18n/i18n.js.map +1 -1
- package/login/i18n/index.d.ts +4 -3
- package/login/i18n/index.js.map +1 -1
- package/login/i18n/messages_defaultSet/ar.js.map +1 -0
- package/login/i18n/messages_defaultSet/ca.js.map +1 -0
- package/login/i18n/messages_defaultSet/cs.js.map +1 -0
- package/login/i18n/messages_defaultSet/da.js.map +1 -0
- package/login/i18n/messages_defaultSet/de.js.map +1 -0
- package/login/i18n/messages_defaultSet/el.js.map +1 -0
- package/login/i18n/messages_defaultSet/en.js.map +1 -0
- package/login/i18n/messages_defaultSet/es.js.map +1 -0
- package/login/i18n/messages_defaultSet/fa.js.map +1 -0
- package/login/i18n/messages_defaultSet/fi.js.map +1 -0
- package/login/i18n/messages_defaultSet/fr.js.map +1 -0
- package/login/i18n/messages_defaultSet/hu.js.map +1 -0
- package/login/i18n/{baseMessages → messages_defaultSet}/index.d.ts +1 -1
- package/login/i18n/{baseMessages → messages_defaultSet}/index.js +3 -3
- package/login/i18n/messages_defaultSet/index.js.map +1 -0
- package/login/i18n/messages_defaultSet/it.js.map +1 -0
- package/login/i18n/messages_defaultSet/ja.js.map +1 -0
- package/login/i18n/messages_defaultSet/lt.js.map +1 -0
- package/login/i18n/messages_defaultSet/lv.js.map +1 -0
- package/login/i18n/messages_defaultSet/nl.js.map +1 -0
- package/login/i18n/messages_defaultSet/no.js.map +1 -0
- package/login/i18n/messages_defaultSet/pl.js.map +1 -0
- package/login/i18n/messages_defaultSet/pt-BR.js.map +1 -0
- package/login/i18n/messages_defaultSet/ru.js.map +1 -0
- package/login/i18n/messages_defaultSet/sk.js.map +1 -0
- package/login/i18n/messages_defaultSet/sv.js.map +1 -0
- package/login/i18n/messages_defaultSet/th.js.map +1 -0
- package/login/i18n/messages_defaultSet/tr.js.map +1 -0
- package/login/i18n/messages_defaultSet/uk.js.map +1 -0
- package/login/i18n/messages_defaultSet/zh-CN.js.map +1 -0
- package/login/i18n/useI18n.d.ts +6 -5
- package/login/i18n/useI18n.js +33 -2
- package/login/i18n/useI18n.js.map +1 -1
- package/login/lib/useUserProfileForm.js +4 -3
- package/login/lib/useUserProfileForm.js.map +1 -1
- package/login/pages/Info.js +1 -1
- package/login/pages/Info.js.map +1 -1
- package/package.json +235 -227
- package/src/account/KcContext/KcContext.ts +4 -1
- package/src/account/KcContext/kcContextMocks.ts +4 -1
- package/src/account/i18n/GenericI18n.tsx +6 -0
- package/src/account/i18n/i18n.tsx +88 -126
- package/src/account/i18n/index.ts +4 -3
- package/src/account/i18n/{baseMessages → messages_defaultSet}/index.ts +3 -3
- package/src/account/i18n/useI18n.tsx +81 -0
- package/src/bin/keycloakify/generateFtl/kcContextDeclarationTemplate.ftl +101 -81
- package/src/bin/keycloakify/generateResources/generateMessageProperties.ts +1 -1
- package/src/bin/shared/downloadKeycloakDefaultTheme.ts +44 -24
- package/src/login/KcContext/KcContext.ts +1 -0
- package/src/login/i18n/GenericI18n.tsx +6 -0
- package/src/login/i18n/i18n.tsx +82 -165
- package/src/login/i18n/index.ts +4 -3
- package/src/login/i18n/{baseMessages → messages_defaultSet}/index.ts +3 -3
- package/src/login/i18n/useI18n.tsx +90 -0
- package/src/login/lib/useUserProfileForm.tsx +13 -12
- package/src/login/pages/Info.tsx +1 -1
- package/stories/login/pages/Register.stories.tsx +6 -6
- package/stories/login/pages/SelectAuthenticator.stories.tsx +19 -4
- package/vite-plugin/index.js +15 -14
- package/account/i18n/baseMessages/ar.js.map +0 -1
- package/account/i18n/baseMessages/ca.js.map +0 -1
- package/account/i18n/baseMessages/cs.js.map +0 -1
- package/account/i18n/baseMessages/da.js.map +0 -1
- package/account/i18n/baseMessages/de.js.map +0 -1
- package/account/i18n/baseMessages/el.js.map +0 -1
- package/account/i18n/baseMessages/en.js.map +0 -1
- package/account/i18n/baseMessages/es.js.map +0 -1
- package/account/i18n/baseMessages/fa.js.map +0 -1
- package/account/i18n/baseMessages/fi.js.map +0 -1
- package/account/i18n/baseMessages/fr.js.map +0 -1
- package/account/i18n/baseMessages/hu.js.map +0 -1
- package/account/i18n/baseMessages/index.js.map +0 -1
- package/account/i18n/baseMessages/it.js.map +0 -1
- package/account/i18n/baseMessages/ja.js.map +0 -1
- package/account/i18n/baseMessages/lt.js.map +0 -1
- package/account/i18n/baseMessages/lv.js.map +0 -1
- package/account/i18n/baseMessages/nl.js.map +0 -1
- package/account/i18n/baseMessages/no.js.map +0 -1
- package/account/i18n/baseMessages/pl.js.map +0 -1
- package/account/i18n/baseMessages/pt-BR.js.map +0 -1
- package/account/i18n/baseMessages/ru.js.map +0 -1
- package/account/i18n/baseMessages/sk.js.map +0 -1
- package/account/i18n/baseMessages/sv.js.map +0 -1
- package/account/i18n/baseMessages/th.js.map +0 -1
- package/account/i18n/baseMessages/tr.js.map +0 -1
- package/account/i18n/baseMessages/uk.js.map +0 -1
- package/account/i18n/baseMessages/zh-CN.js.map +0 -1
- package/login/i18n/baseMessages/ar.js.map +0 -1
- package/login/i18n/baseMessages/ca.js.map +0 -1
- package/login/i18n/baseMessages/cs.js.map +0 -1
- package/login/i18n/baseMessages/da.js.map +0 -1
- package/login/i18n/baseMessages/de.js.map +0 -1
- package/login/i18n/baseMessages/el.js.map +0 -1
- package/login/i18n/baseMessages/en.js.map +0 -1
- package/login/i18n/baseMessages/es.js.map +0 -1
- package/login/i18n/baseMessages/fa.js.map +0 -1
- package/login/i18n/baseMessages/fi.js.map +0 -1
- package/login/i18n/baseMessages/fr.js.map +0 -1
- package/login/i18n/baseMessages/hu.js.map +0 -1
- package/login/i18n/baseMessages/index.js.map +0 -1
- package/login/i18n/baseMessages/it.js.map +0 -1
- package/login/i18n/baseMessages/ja.js.map +0 -1
- package/login/i18n/baseMessages/lt.js.map +0 -1
- package/login/i18n/baseMessages/lv.js.map +0 -1
- package/login/i18n/baseMessages/nl.js.map +0 -1
- package/login/i18n/baseMessages/no.js.map +0 -1
- package/login/i18n/baseMessages/pl.js.map +0 -1
- package/login/i18n/baseMessages/pt-BR.js.map +0 -1
- package/login/i18n/baseMessages/ru.js.map +0 -1
- package/login/i18n/baseMessages/sk.js.map +0 -1
- package/login/i18n/baseMessages/sv.js.map +0 -1
- package/login/i18n/baseMessages/th.js.map +0 -1
- package/login/i18n/baseMessages/tr.js.map +0 -1
- package/login/i18n/baseMessages/uk.js.map +0 -1
- package/login/i18n/baseMessages/zh-CN.js.map +0 -1
- package/src/account/i18n/useI18n.ts +0 -44
- package/src/login/i18n/useI18n.ts +0 -44
- /package/account/i18n/{baseMessages → messages_defaultSet}/ar.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/ar.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/ca.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/ca.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/cs.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/cs.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/da.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/da.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/de.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/de.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/el.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/el.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/en.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/en.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/es.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/es.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/fa.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/fa.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/fi.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/fi.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/fr.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/fr.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/hu.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/hu.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/it.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/it.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/ja.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/ja.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/lt.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/lt.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/lv.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/lv.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/nl.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/nl.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/no.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/no.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/pl.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/pl.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/pt-BR.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/pt-BR.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/ru.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/ru.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/sk.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/sk.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/sv.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/sv.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/th.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/th.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/tr.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/tr.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/uk.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/uk.js +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/zh-CN.d.ts +0 -0
- /package/account/i18n/{baseMessages → messages_defaultSet}/zh-CN.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/ar.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/ar.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/ca.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/ca.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/cs.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/cs.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/da.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/da.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/de.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/de.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/el.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/el.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/en.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/en.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/es.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/es.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/fa.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/fa.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/fi.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/fi.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/fr.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/fr.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/hu.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/hu.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/it.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/it.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/ja.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/ja.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/lt.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/lt.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/lv.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/lv.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/nl.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/nl.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/no.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/no.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/pl.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/pl.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/pt-BR.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/pt-BR.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/ru.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/ru.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/sk.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/sk.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/sv.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/sv.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/th.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/th.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/tr.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/tr.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/uk.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/uk.js +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/zh-CN.d.ts +0 -0
- /package/login/i18n/{baseMessages → messages_defaultSet}/zh-CN.js +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/ar.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/ca.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/cs.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/da.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/de.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/el.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/en.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/es.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/fa.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/fi.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/fr.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/hu.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/it.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/ja.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/lt.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/lv.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/nl.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/no.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/pl.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/pt-BR.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/ru.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/sk.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/sv.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/th.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/tr.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/uk.ts +0 -0
- /package/src/account/i18n/{baseMessages → messages_defaultSet}/zh-CN.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/ar.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/ca.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/cs.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/da.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/de.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/el.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/en.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/es.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/fa.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/fi.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/fr.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/hu.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/it.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/ja.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/lt.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/lv.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/nl.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/no.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/pl.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/pt-BR.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/ru.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/sk.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/sv.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/th.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/tr.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/uk.ts +0 -0
- /package/src/login/i18n/{baseMessages → messages_defaultSet}/zh-CN.ts +0 -0
@@ -1,22 +1,24 @@
|
|
1
1
|
import "keycloakify/tools/Object.fromEntries";
|
2
2
|
import { assert } from "tsafe/assert";
|
3
|
-
import
|
4
|
-
import {
|
3
|
+
import messages_defaultSet_fallbackLanguage from "./messages_defaultSet/en";
|
4
|
+
import { fetchMessages_defaultSet } from "./messages_defaultSet";
|
5
5
|
import type { KcContext } from "../KcContext";
|
6
6
|
import { fallbackLanguageTag } from "keycloakify/bin/shared/constants";
|
7
|
+
import { id } from "tsafe/id";
|
7
8
|
|
8
9
|
export type KcContextLike = {
|
9
10
|
locale?: {
|
10
11
|
currentLanguageTag: string;
|
11
12
|
supported: { languageTag: string; url: string; label: string }[];
|
12
13
|
};
|
14
|
+
"x-keycloakify": {
|
15
|
+
messages: Record<string, string>;
|
16
|
+
};
|
13
17
|
};
|
14
18
|
|
15
19
|
assert<KcContext extends KcContextLike ? true : false>();
|
16
20
|
|
17
|
-
export type MessageKey
|
18
|
-
|
19
|
-
export type GenericI18n<MessageKey extends string> = {
|
21
|
+
export type GenericI18n_noJsx<MessageKey extends string> = {
|
20
22
|
/**
|
21
23
|
* e.g: "en", "fr", "zh-CN"
|
22
24
|
*
|
@@ -36,16 +38,21 @@ export type GenericI18n<MessageKey extends string> = {
|
|
36
38
|
* */
|
37
39
|
labelBySupportedLanguageTag: Record<string, string>;
|
38
40
|
/**
|
41
|
+
*
|
39
42
|
* Examples assuming currentLanguageTag === "en"
|
43
|
+
* {
|
44
|
+
* en: {
|
45
|
+
* "access-denied": "Access denied",
|
46
|
+
* "impersonateTitleHtml": "<strong>{0}</strong> Impersonate User",
|
47
|
+
* "bar": "Bar {0}"
|
48
|
+
* }
|
49
|
+
* }
|
40
50
|
*
|
41
|
-
*
|
42
|
-
*
|
43
|
-
*/
|
44
|
-
msg: (key: MessageKey, ...args: (string | undefined)[]) => JSX.Element;
|
45
|
-
/**
|
46
|
-
* It's the same thing as msg() but instead of returning a JSX.Element it returns a string.
|
47
|
-
* It can be more convenient to manipulate strings but if there are HTML tags it wont render.
|
51
|
+
* msgStr("access-denied") === "Access denied"
|
52
|
+
* msgStr("not-a-message-key") Throws an error
|
48
53
|
* msgStr("impersonateTitleHtml", "Foo") === "<strong>Foo</strong> Impersonate User"
|
54
|
+
* msgStr("${bar}", "<strong>c</strong>") === "Bar <strong>XXX</strong>"
|
55
|
+
* The html in the arg is partially escaped for security reasons, it might come from an untrusted source, it's not safe to render it as html.
|
49
56
|
*/
|
50
57
|
msgStr: (key: MessageKey, ...args: (string | undefined)[]) => string;
|
51
58
|
/**
|
@@ -56,24 +63,11 @@ export type GenericI18n<MessageKey extends string> = {
|
|
56
63
|
* {
|
57
64
|
* en: {
|
58
65
|
* "access-denied": "Access denied",
|
59
|
-
* "foo": "Foo {0} {1}",
|
60
|
-
* "bar": "Bar {0}"
|
61
66
|
* }
|
62
67
|
* }
|
63
68
|
*
|
64
|
-
*
|
65
|
-
*
|
66
|
-
* advancedMsg("${not-a-message-key}") === advancedMsg(not-a-message-key") === <span>not-a-message-key</span>
|
67
|
-
* advancedMsg("${bar}", "<strong>c</strong>")
|
68
|
-
* === <span>{msgStr("bar", "<strong>XXX</strong>")}<span>
|
69
|
-
* === <span>Bar <strong>XXX</strong></span> (The html in the arg is partially escaped for security reasons, it might be untrusted)
|
70
|
-
* advancedMsg("${foo} xx ${bar}", "a", "b", "c")
|
71
|
-
* === <span>{msgStr("foo", "a", "b")} xx {msgStr("bar")}<span>
|
72
|
-
* === <span>Foo a b xx Bar {0}</span> (The substitution are only applied in the first message)
|
73
|
-
*/
|
74
|
-
advancedMsg: (key: string, ...args: (string | undefined)[]) => JSX.Element;
|
75
|
-
/**
|
76
|
-
* See advancedMsg() but instead of returning a JSX.Element it returns a string.
|
69
|
+
* advancedMsgStr("${access-denied}") === advancedMsgStr("access-denied") === msgStr("access-denied") === "Access denied"
|
70
|
+
* advancedMsgStr("${not-a-message-key}") === advancedMsgStr("not-a-message-key") === "not-a-message-key"
|
77
71
|
*/
|
78
72
|
advancedMsgStr: (key: string, ...args: (string | undefined)[]) => string;
|
79
73
|
|
@@ -85,10 +79,12 @@ export type GenericI18n<MessageKey extends string> = {
|
|
85
79
|
isFetchingTranslations: boolean;
|
86
80
|
};
|
87
81
|
|
88
|
-
export
|
89
|
-
|
82
|
+
export type MessageKey_defaultSet = keyof typeof messages_defaultSet_fallbackLanguage;
|
83
|
+
|
84
|
+
export function createGetI18n<MessageKey_themeDefined extends string = never>(messagesByLanguageTag_themeDefined: {
|
85
|
+
[languageTag: string]: { [key in MessageKey_themeDefined]: string };
|
90
86
|
}) {
|
91
|
-
type I18n =
|
87
|
+
type I18n = GenericI18n_noJsx<MessageKey_defaultSet | MessageKey_themeDefined>;
|
92
88
|
|
93
89
|
type Result = { i18n: I18n; prI18n_currentLanguage: Promise<I18n> | undefined };
|
94
90
|
|
@@ -123,10 +119,18 @@ export function createGetI18n<ExtraMessageKey extends string = never>(messageBun
|
|
123
119
|
labelBySupportedLanguageTag: Object.fromEntries((kcContext.locale?.supported ?? []).map(({ languageTag, label }) => [languageTag, label]))
|
124
120
|
};
|
125
121
|
|
126
|
-
const { createI18nTranslationFunctions } = createI18nTranslationFunctionsFactory<
|
127
|
-
|
128
|
-
|
129
|
-
|
122
|
+
const { createI18nTranslationFunctions } = createI18nTranslationFunctionsFactory<MessageKey_themeDefined>({
|
123
|
+
messages_themeDefined:
|
124
|
+
messagesByLanguageTag_themeDefined[partialI18n.currentLanguageTag] ??
|
125
|
+
messagesByLanguageTag_themeDefined[fallbackLanguageTag] ??
|
126
|
+
(() => {
|
127
|
+
const firstLanguageTag = Object.keys(messagesByLanguageTag_themeDefined)[0];
|
128
|
+
if (firstLanguageTag === undefined) {
|
129
|
+
return undefined;
|
130
|
+
}
|
131
|
+
return messagesByLanguageTag_themeDefined[firstLanguageTag];
|
132
|
+
})(),
|
133
|
+
messages_fromKcServer: kcContext["x-keycloakify"].messages
|
130
134
|
});
|
131
135
|
|
132
136
|
const isCurrentLanguageFallbackLanguage = partialI18n.currentLanguageTag === fallbackLanguageTag;
|
@@ -135,18 +139,18 @@ export function createGetI18n<ExtraMessageKey extends string = never>(messageBun
|
|
135
139
|
i18n: {
|
136
140
|
...partialI18n,
|
137
141
|
...createI18nTranslationFunctions({
|
138
|
-
|
142
|
+
messages_defaultSet_currentLanguage: isCurrentLanguageFallbackLanguage ? messages_defaultSet_fallbackLanguage : undefined
|
139
143
|
}),
|
140
144
|
isFetchingTranslations: !isCurrentLanguageFallbackLanguage
|
141
145
|
},
|
142
146
|
prI18n_currentLanguage: isCurrentLanguageFallbackLanguage
|
143
147
|
? undefined
|
144
148
|
: (async () => {
|
145
|
-
const
|
149
|
+
const messages_defaultSet_currentLanguage = await fetchMessages_defaultSet(partialI18n.currentLanguageTag);
|
146
150
|
|
147
151
|
const i18n_currentLanguage: I18n = {
|
148
152
|
...partialI18n,
|
149
|
-
...createI18nTranslationFunctions({
|
153
|
+
...createI18nTranslationFunctions({ messages_defaultSet_currentLanguage }),
|
150
154
|
isFetchingTranslations: false
|
151
155
|
};
|
152
156
|
|
@@ -169,118 +173,76 @@ export function createGetI18n<ExtraMessageKey extends string = never>(messageBun
|
|
169
173
|
return { getI18n };
|
170
174
|
}
|
171
175
|
|
172
|
-
function createI18nTranslationFunctionsFactory<
|
173
|
-
|
174
|
-
|
175
|
-
messageBundle_currentLanguage: Partial<Record<ExtraMessageKey, string>> | undefined;
|
176
|
+
function createI18nTranslationFunctionsFactory<MessageKey_themeDefined extends string>(params: {
|
177
|
+
messages_themeDefined: Record<MessageKey_themeDefined, string> | undefined;
|
178
|
+
messages_fromKcServer: Record<string, string>;
|
176
179
|
}) {
|
177
|
-
const {
|
178
|
-
|
179
|
-
const messages_fallbackLanguage = {
|
180
|
-
...params.messages_fallbackLanguage,
|
181
|
-
...params.messageBundle_fallbackLanguage
|
182
|
-
};
|
180
|
+
const { messages_themeDefined, messages_fromKcServer } = params;
|
183
181
|
|
184
182
|
function createI18nTranslationFunctions(params: {
|
185
|
-
|
186
|
-
}): Pick<
|
187
|
-
const
|
188
|
-
...params.messages_currentLanguage,
|
189
|
-
...messageBundle_currentLanguage
|
190
|
-
};
|
183
|
+
messages_defaultSet_currentLanguage: Partial<Record<MessageKey_defaultSet, string>> | undefined;
|
184
|
+
}): Pick<GenericI18n_noJsx<MessageKey_defaultSet | MessageKey_themeDefined>, "msgStr" | "advancedMsgStr"> {
|
185
|
+
const { messages_defaultSet_currentLanguage } = params;
|
191
186
|
|
192
|
-
function resolveMsg(props: { key: string; args: (string | undefined)[]
|
193
|
-
const { key, args
|
187
|
+
function resolveMsg(props: { key: string; args: (string | undefined)[] }): string | undefined {
|
188
|
+
const { key, args } = props;
|
194
189
|
|
195
|
-
const
|
190
|
+
const message =
|
191
|
+
id<Record<string, string | undefined>>(messages_fromKcServer)[key] ??
|
192
|
+
id<Record<string, string | undefined> | undefined>(messages_themeDefined)?.[key] ??
|
193
|
+
id<Record<string, string | undefined> | undefined>(messages_defaultSet_currentLanguage)?.[key] ??
|
194
|
+
id<Record<string, string | undefined>>(messages_defaultSet_fallbackLanguage)[key];
|
196
195
|
|
197
|
-
if (
|
196
|
+
if (message === undefined) {
|
198
197
|
return undefined;
|
199
198
|
}
|
200
199
|
|
201
|
-
const
|
200
|
+
const startIndex = message
|
201
|
+
.match(/{[0-9]+}/g)
|
202
|
+
?.map(g => g.match(/{([0-9]+)}/)![1])
|
203
|
+
.map(indexStr => parseInt(indexStr))
|
204
|
+
.sort((a, b) => a - b)[0];
|
202
205
|
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
.map(indexStr => parseInt(indexStr))
|
208
|
-
.sort((a, b) => a - b)[0];
|
206
|
+
if (startIndex === undefined) {
|
207
|
+
// No {0} in message (no arguments expected)
|
208
|
+
return message;
|
209
|
+
}
|
209
210
|
|
210
|
-
|
211
|
-
// No {0} in message (no arguments expected)
|
212
|
-
return message;
|
213
|
-
}
|
211
|
+
let messageWithArgsInjected = message;
|
214
212
|
|
215
|
-
|
213
|
+
args.forEach((arg, i) => {
|
214
|
+
if (arg === undefined) {
|
215
|
+
return;
|
216
|
+
}
|
216
217
|
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
218
|
+
messageWithArgsInjected = messageWithArgsInjected.replace(
|
219
|
+
new RegExp(`\\{${i + startIndex}\\}`, "g"),
|
220
|
+
arg.replace(/</g, "<").replace(/>/g, ">")
|
221
|
+
);
|
222
|
+
});
|
221
223
|
|
222
|
-
|
223
|
-
new RegExp(`\\{${i + startIndex}\\}`, "g"),
|
224
|
-
arg.replace(/</g, "<").replace(/>/g, ">")
|
225
|
-
);
|
226
|
-
});
|
227
|
-
|
228
|
-
return messageWithArgsInjected;
|
229
|
-
})();
|
230
|
-
|
231
|
-
return doRenderAsHtml ? (
|
232
|
-
<span
|
233
|
-
// NOTE: The message is trusted. The arguments are not but are escaped.
|
234
|
-
dangerouslySetInnerHTML={{
|
235
|
-
__html: messageWithArgsInjectedIfAny
|
236
|
-
}}
|
237
|
-
/>
|
238
|
-
) : (
|
239
|
-
messageWithArgsInjectedIfAny
|
240
|
-
);
|
224
|
+
return messageWithArgsInjected;
|
241
225
|
}
|
242
226
|
|
243
|
-
function resolveMsgAdvanced(props: { key: string; args: (string | undefined)[]
|
244
|
-
const { key, args
|
227
|
+
function resolveMsgAdvanced(props: { key: string; args: (string | undefined)[] }): string {
|
228
|
+
const { key, args } = props;
|
245
229
|
|
246
|
-
|
247
|
-
const resolvedMessage = resolveMsg({ key, args, doRenderAsHtml });
|
248
|
-
|
249
|
-
if (resolvedMessage === undefined) {
|
250
|
-
return doRenderAsHtml ? <span dangerouslySetInnerHTML={{ __html: key }} /> : key;
|
251
|
-
}
|
230
|
+
const match = key.match(/^\$\{(.+)\}$/);
|
252
231
|
|
253
|
-
|
232
|
+
if (match === null) {
|
233
|
+
return key;
|
254
234
|
}
|
255
235
|
|
256
|
-
|
257
|
-
|
258
|
-
const resolvedComplexMessage = key.replace(/\$\{([^}]+)\}/g, (...[, key_i]) => {
|
259
|
-
const replaceBy = resolveMsg({ key: key_i, args: isFirstMatch ? args : [], doRenderAsHtml: false }) ?? key_i;
|
260
|
-
|
261
|
-
isFirstMatch = false;
|
262
|
-
|
263
|
-
return replaceBy;
|
264
|
-
});
|
265
|
-
|
266
|
-
return doRenderAsHtml ? <span dangerouslySetInnerHTML={{ __html: resolvedComplexMessage }} /> : resolvedComplexMessage;
|
236
|
+
return resolveMsg({ key: match[1], args }) ?? key;
|
267
237
|
}
|
268
238
|
|
269
239
|
return {
|
270
|
-
msgStr: (key, ...args) =>
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
doRenderAsHtml: true
|
277
|
-
}) as JSX.Element,
|
278
|
-
advancedMsgStr: (key, ...args) =>
|
279
|
-
resolveMsgAdvanced({
|
280
|
-
key,
|
281
|
-
args,
|
282
|
-
doRenderAsHtml: false
|
283
|
-
}) as string
|
240
|
+
msgStr: (key, ...args) => {
|
241
|
+
const resolvedMessage = resolveMsg({ key, args });
|
242
|
+
assert(resolvedMessage !== undefined, `Message with key "${key}" not found`);
|
243
|
+
return resolvedMessage;
|
244
|
+
},
|
245
|
+
advancedMsgStr: (key, ...args) => resolveMsgAdvanced({ key, args })
|
284
246
|
};
|
285
247
|
}
|
286
248
|
|
@@ -1,4 +1,5 @@
|
|
1
|
-
import type { GenericI18n
|
2
|
-
|
3
|
-
export type
|
1
|
+
import type { GenericI18n } from "./GenericI18n";
|
2
|
+
import type { MessageKey_defaultSet, KcContextLike } from "./i18n";
|
3
|
+
export type { MessageKey_defaultSet, KcContextLike };
|
4
|
+
export type I18n = GenericI18n<MessageKey_defaultSet>;
|
4
5
|
export { createUseI18n } from "./useI18n";
|
@@ -2,8 +2,8 @@
|
|
2
2
|
//PLEASE DO NOT EDIT MANUALLY
|
3
3
|
import * as en from "./en";
|
4
4
|
|
5
|
-
export async function
|
6
|
-
const { default:
|
5
|
+
export async function fetchMessages_defaultSet(currentLanguageTag: string) {
|
6
|
+
const { default: messages_defaultSet } = await (() => {
|
7
7
|
switch (currentLanguageTag) {
|
8
8
|
case "en": return en;
|
9
9
|
case "ar": return import("./ar");
|
@@ -35,5 +35,5 @@ export async function getMessages(currentLanguageTag: string) {
|
|
35
35
|
default: return { "default": {} };
|
36
36
|
}
|
37
37
|
})();
|
38
|
-
return
|
38
|
+
return messages_defaultSet;
|
39
39
|
}
|
@@ -0,0 +1,81 @@
|
|
1
|
+
import { useEffect, useState } from "react";
|
2
|
+
import { createGetI18n, type GenericI18n_noJsx, type KcContextLike, type MessageKey_defaultSet } from "./i18n";
|
3
|
+
import { GenericI18n } from "./GenericI18n";
|
4
|
+
import { Reflect } from "tsafe/Reflect";
|
5
|
+
|
6
|
+
export function createUseI18n<MessageKey_themeDefined extends string = never>(messageBundle: {
|
7
|
+
[languageTag: string]: { [key in MessageKey_themeDefined]: string };
|
8
|
+
}) {
|
9
|
+
type MessageKey = MessageKey_defaultSet | MessageKey_themeDefined;
|
10
|
+
|
11
|
+
type I18n = GenericI18n<MessageKey>;
|
12
|
+
|
13
|
+
const { withJsx } = (() => {
|
14
|
+
const cache = new WeakMap<GenericI18n_noJsx<MessageKey>, GenericI18n<MessageKey>>();
|
15
|
+
|
16
|
+
function renderHtmlString(htmlString: string): JSX.Element {
|
17
|
+
return (
|
18
|
+
<div
|
19
|
+
style={{ display: "inline-block" }}
|
20
|
+
dangerouslySetInnerHTML={{
|
21
|
+
__html: htmlString
|
22
|
+
}}
|
23
|
+
/>
|
24
|
+
);
|
25
|
+
}
|
26
|
+
|
27
|
+
function withJsx(i18n_noJsx: GenericI18n_noJsx<MessageKey>): I18n {
|
28
|
+
use_cache: {
|
29
|
+
const i18n = cache.get(i18n_noJsx);
|
30
|
+
|
31
|
+
if (i18n === undefined) {
|
32
|
+
break use_cache;
|
33
|
+
}
|
34
|
+
|
35
|
+
return i18n;
|
36
|
+
}
|
37
|
+
|
38
|
+
const i18n: I18n = {
|
39
|
+
...i18n_noJsx,
|
40
|
+
msg: (...args) => renderHtmlString(i18n_noJsx.msgStr(...args)),
|
41
|
+
advancedMsg: (...args) => renderHtmlString(i18n_noJsx.advancedMsgStr(...args))
|
42
|
+
};
|
43
|
+
|
44
|
+
cache.set(i18n_noJsx, i18n);
|
45
|
+
|
46
|
+
return i18n;
|
47
|
+
}
|
48
|
+
|
49
|
+
return { withJsx };
|
50
|
+
})();
|
51
|
+
|
52
|
+
const { getI18n } = createGetI18n(messageBundle);
|
53
|
+
|
54
|
+
function useI18n(params: { kcContext: KcContextLike }): { i18n: I18n } {
|
55
|
+
const { kcContext } = params;
|
56
|
+
|
57
|
+
const { i18n, prI18n_currentLanguage } = getI18n({ kcContext });
|
58
|
+
|
59
|
+
const [i18n_toReturn, setI18n_toReturn] = useState<I18n>(withJsx(i18n));
|
60
|
+
|
61
|
+
useEffect(() => {
|
62
|
+
let isActive = true;
|
63
|
+
|
64
|
+
prI18n_currentLanguage?.then(i18n => {
|
65
|
+
if (!isActive) {
|
66
|
+
return;
|
67
|
+
}
|
68
|
+
|
69
|
+
setI18n_toReturn(withJsx(i18n));
|
70
|
+
});
|
71
|
+
|
72
|
+
return () => {
|
73
|
+
isActive = false;
|
74
|
+
};
|
75
|
+
}, []);
|
76
|
+
|
77
|
+
return { i18n: i18n_toReturn };
|
78
|
+
}
|
79
|
+
|
80
|
+
return { useI18n, ofTypeI18n: Reflect<I18n>() };
|
81
|
+
}
|
@@ -1,6 +1,24 @@
|
|
1
1
|
<#assign pageId="PAGE_ID_xIgLsPgGId9D8e">
|
2
2
|
<#assign themeType="KEYCLOAKIFY_THEME_TYPE_dExKd3xEdr">
|
3
|
+
<#assign xKeycloakifyMessages = {}>
|
4
|
+
<#assign debugMessage="">
|
5
|
+
|
3
6
|
const kcContext = ${ftl_object_to_js_code_declaring_an_object(.data_model, [])?no_esc};
|
7
|
+
|
8
|
+
<@addNonAutomaticallyGatherableMessagesToXKeycloakifyMessages />
|
9
|
+
|
10
|
+
console.log(`${debugMessage}`);
|
11
|
+
|
12
|
+
kcContext["x-keycloakify"] = {};
|
13
|
+
|
14
|
+
{
|
15
|
+
var messages = {};
|
16
|
+
<#list xKeycloakifyMessages as key, resolvedMsg>
|
17
|
+
messages["${key}"] = decodeHtmlEntities("${resolvedMsg?js_string}");
|
18
|
+
</#list>
|
19
|
+
kcContext["x-keycloakify"].messages = messages;
|
20
|
+
}
|
21
|
+
|
4
22
|
if( kcContext.messagesPerField ){
|
5
23
|
var existsError_singleFieldName = kcContext.messagesPerField.existsError;
|
6
24
|
kcContext.messagesPerField.existsError = function (){
|
@@ -42,85 +60,7 @@ if( kcContext.resourceUrl && !kcContext.url ){
|
|
42
60
|
enumerable: false
|
43
61
|
});
|
44
62
|
}
|
45
|
-
|
46
|
-
messages: {}
|
47
|
-
};
|
48
|
-
<#if profile?? && profile.attributes??>
|
49
|
-
{
|
50
|
-
var messages = {
|
51
|
-
<#list profile.attributes as attribute>
|
52
|
-
<#if attribute.displayName??>
|
53
|
-
"${attribute.displayName}": decodeHtmlEntities("${advancedMsg(attribute.displayName)?js_string}"),
|
54
|
-
</#if>
|
55
|
-
<#if attribute.annotations??>
|
56
|
-
<#if attribute.annotations.inputHelperTextBefore??>
|
57
|
-
"${attribute.annotations.inputHelperTextBefore}": decodeHtmlEntities("${advancedMsg(attribute.annotations.inputHelperTextBefore)?js_string}"),
|
58
|
-
</#if>
|
59
|
-
<#if attribute.annotations.inputHelperTextAfter??>
|
60
|
-
"${attribute.annotations.inputHelperTextAfter}": decodeHtmlEntities("${advancedMsg(attribute.annotations.inputHelperTextAfter)?js_string}"),
|
61
|
-
</#if>
|
62
|
-
<#if attribute.annotations.inputTypePlaceholder??>
|
63
|
-
"${attribute.annotations.inputTypePlaceholder}": decodeHtmlEntities("${advancedMsg(attribute.annotations.inputTypePlaceholder)?js_string}"),
|
64
|
-
</#if>
|
65
|
-
<!-- Loop through the options that are in attribute.validators.options.options -->
|
66
|
-
<#if (
|
67
|
-
attribute.annotations.inputOptionLabelsI18nPrefix?? &&
|
68
|
-
attribute.validators?? &&
|
69
|
-
attribute.validators.options??
|
70
|
-
)>
|
71
|
-
<#list attribute.validators.options.options as option>
|
72
|
-
"${attribute.annotations.inputOptionLabelsI18nPrefix}.${option}": decodeHtmlEntities("${msg(attribute.annotations.inputOptionLabelsI18nPrefix + "." + option)?js_string}"),
|
73
|
-
</#list>
|
74
|
-
</#if>
|
75
|
-
</#if>
|
76
|
-
</#list>
|
77
|
-
};
|
78
|
-
Object.assign(kcContext["x-keycloakify"].messages, messages);
|
79
|
-
}
|
80
|
-
</#if>
|
81
|
-
<#if pageId == "terms.ftl" || termsAcceptanceRequired?? && termsAcceptanceRequired>
|
82
|
-
kcContext["x-keycloakify"].messages["termsText"]= decodeHtmlEntities("${msg("termsText")?js_string}");
|
83
|
-
</#if>
|
84
|
-
<#if auth?? && auth.authenticationSelections??>
|
85
|
-
{
|
86
|
-
var messages = {
|
87
|
-
<#list auth.authenticationSelections as authenticationSelection>
|
88
|
-
<#if authenticationSelection.displayName??>
|
89
|
-
"${authenticationSelection.displayName}": decodeHtmlEntities("${advancedMsg(authenticationSelection.displayName)?js_string}"),
|
90
|
-
</#if>
|
91
|
-
<#if authenticationSelection.helpText??>
|
92
|
-
"${authenticationSelection.helpText}": decodeHtmlEntities("${advancedMsg(authenticationSelection.helpText)?js_string}"),
|
93
|
-
</#if>
|
94
|
-
</#list>
|
95
|
-
};
|
96
|
-
Object.assign(kcContext["x-keycloakify"].messages, messages);
|
97
|
-
}
|
98
|
-
</#if>
|
99
|
-
<#if themeType == "login" && pageId == "info.ftl" && requiredActions??>
|
100
|
-
{
|
101
|
-
var messages = {
|
102
|
-
<#list requiredActions as requiredAction>
|
103
|
-
"requiredAction.${requiredAction}": decodeHtmlEntities("${advancedMsg("requiredAction." + requiredAction)?js_string}"),
|
104
|
-
</#list>
|
105
|
-
};
|
106
|
-
Object.assign(kcContext["x-keycloakify"].messages, messages);
|
107
|
-
}
|
108
|
-
</#if>
|
109
|
-
<#if authenticators?? && authenticators.authenticators??>
|
110
|
-
{
|
111
|
-
var messages = {
|
112
|
-
<#list authenticators.authenticators as authenticator>
|
113
|
-
"${authenticator.label}": decodeHtmlEntities("${advancedMsg(authenticator.label)?js_string}"),
|
114
|
-
<#if authenticator.transports?? && authenticator.transports.displayNameProperties??>
|
115
|
-
<#list authenticator.transports.displayNameProperties as displayNameProperty>
|
116
|
-
"${displayNameProperty}": decodeHtmlEntities("${advancedMsg(displayNameProperty)?js_string}"),
|
117
|
-
</#list>
|
118
|
-
</#if>
|
119
|
-
</#list>
|
120
|
-
};
|
121
|
-
Object.assign(kcContext["x-keycloakify"].messages, messages);
|
122
|
-
}
|
123
|
-
</#if>
|
63
|
+
|
124
64
|
attributes_to_attributesByName: {
|
125
65
|
if( !kcContext.profile ){
|
126
66
|
break attributes_to_attributesByName;
|
@@ -128,7 +68,7 @@ attributes_to_attributesByName: {
|
|
128
68
|
if( !kcContext.profile.attributes ){
|
129
69
|
break attributes_to_attributesByName;
|
130
70
|
}
|
131
|
-
var attributes =
|
71
|
+
var attributes = kcContext.profile.attributes;
|
132
72
|
delete kcContext.profile.attributes;
|
133
73
|
kcContext.profile.attributesByName = {};
|
134
74
|
attributes.forEach(function(attribute){
|
@@ -571,6 +511,17 @@ function decodeHtmlEntities(htmlStr){
|
|
571
511
|
<#return object?c>
|
572
512
|
</#if>
|
573
513
|
|
514
|
+
<#local isString = "">
|
515
|
+
<#attempt>
|
516
|
+
<#local isString = object?is_string>
|
517
|
+
<#recover>
|
518
|
+
<#return "ABORT: Can't test if it's a string">
|
519
|
+
</#attempt>
|
520
|
+
|
521
|
+
<#if isString>
|
522
|
+
<@addToXKeycloakifyMessagesIfMessageKey str=object />
|
523
|
+
</#if>
|
524
|
+
|
574
525
|
<#attempt>
|
575
526
|
<#return '"' + object?js_string + '"'>;
|
576
527
|
<#recover>
|
@@ -621,4 +572,73 @@ function decodeHtmlEntities(htmlStr){
|
|
621
572
|
|
622
573
|
<#function are_same_path path searchedPath>
|
623
574
|
<#return path?size == searchedPath?size && is_subpath(path, searchedPath)>
|
624
|
-
</#function>
|
575
|
+
</#function>
|
576
|
+
|
577
|
+
<#macro addToXKeycloakifyMessagesIfMessageKey str>
|
578
|
+
<#if !msg?? || !msg?is_method>
|
579
|
+
<#return>
|
580
|
+
</#if>
|
581
|
+
<#if (str?length > 200)>
|
582
|
+
<#return>
|
583
|
+
</#if>
|
584
|
+
<#local key=removeBrackets(str)>
|
585
|
+
<#if key?length==0>
|
586
|
+
<#return>
|
587
|
+
</#if>
|
588
|
+
<#if !(key?matches(r"^[a-zA-Z0-9-_.]*$"))>
|
589
|
+
<#return>
|
590
|
+
</#if>
|
591
|
+
<#local resolvedMsg=msg(key)>
|
592
|
+
<#if resolvedMsg==key>
|
593
|
+
<#return>
|
594
|
+
</#if>
|
595
|
+
<#assign xKeycloakifyMessages = xKeycloakifyMessages + { "${key}": resolvedMsg }>
|
596
|
+
</#macro>
|
597
|
+
|
598
|
+
<#function removeBrackets str>
|
599
|
+
<#if str?starts_with("${") && str?ends_with("}")>
|
600
|
+
<#return str[2..(str?length-2)]>
|
601
|
+
<#else>
|
602
|
+
<#return str>
|
603
|
+
</#if>
|
604
|
+
</#function>
|
605
|
+
|
606
|
+
<#macro addNonAutomaticallyGatherableMessagesToXKeycloakifyMessages>
|
607
|
+
<#if profile?? && profile?is_hash && profile.attributes?? && profile.attributes?is_enumerable>
|
608
|
+
<#list profile.attributes as attribute>
|
609
|
+
<#if !(
|
610
|
+
attribute.annotations?? && attribute.annotations?is_hash &&
|
611
|
+
attribute.annotations.inputOptionLabelsI18nPrefix?? && attribute.annotations.inputOptionLabelsI18nPrefix?is_string
|
612
|
+
)>
|
613
|
+
<#continue>
|
614
|
+
</#if>
|
615
|
+
<#local prefix=attribute.annotations.inputOptionLabelsI18nPrefix>
|
616
|
+
<#if !(
|
617
|
+
attribute.validators?? && attribute.validators?is_hash &&
|
618
|
+
attribute.validators.options?? && attribute.validators.options?is_hash &&
|
619
|
+
attribute.validators.options.options?? && attribute.validators.options.options?is_enumerable
|
620
|
+
)>
|
621
|
+
<#continue>
|
622
|
+
</#if>
|
623
|
+
<#list attribute.validators.options.options as option>
|
624
|
+
<#if !option?is_string>
|
625
|
+
<#continue>
|
626
|
+
</#if>
|
627
|
+
<@addToXKeycloakifyMessagesIfMessageKey str="${prefix}.${option}" />
|
628
|
+
</#list>
|
629
|
+
</#list>
|
630
|
+
</#if>
|
631
|
+
<#if pageId == "terms.ftl" || termsAcceptanceRequired?? && termsAcceptanceRequired>
|
632
|
+
<@addToXKeycloakifyMessagesIfMessageKey str="termsText" />
|
633
|
+
</#if>
|
634
|
+
<#if requiredActions?? && requiredActions?is_enumerable>
|
635
|
+
<#list requiredActions as requiredAction>
|
636
|
+
<#if !requiredAction?is_string>
|
637
|
+
<#continue>
|
638
|
+
</#if>
|
639
|
+
<@addToXKeycloakifyMessagesIfMessageKey str="requiredAction.${requiredAction}" />
|
640
|
+
</#list>
|
641
|
+
</#if>
|
642
|
+
</#macro>
|
643
|
+
|
644
|
+
|