keycloakify 10.0.0-rc.108 → 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/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 +100 -88
- package/src/bin/keycloakify/generateResources/generateMessageProperties.ts +1 -1
- 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/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
package/src/login/i18n/i18n.tsx
CHANGED
@@ -1,9 +1,10 @@
|
|
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?: {
|
@@ -17,9 +18,7 @@ export type KcContextLike = {
|
|
17
18
|
|
18
19
|
assert<KcContext extends KcContextLike ? true : false>();
|
19
20
|
|
20
|
-
export type MessageKey
|
21
|
-
|
22
|
-
export type GenericI18n<MessageKey extends string> = {
|
21
|
+
export type GenericI18n_noJsx<MessageKey extends string> = {
|
23
22
|
/**
|
24
23
|
* e.g: "en", "fr", "zh-CN"
|
25
24
|
*
|
@@ -39,16 +38,21 @@ export type GenericI18n<MessageKey extends string> = {
|
|
39
38
|
* */
|
40
39
|
labelBySupportedLanguageTag: Record<string, string>;
|
41
40
|
/**
|
41
|
+
*
|
42
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
|
+
* }
|
43
50
|
*
|
44
|
-
*
|
45
|
-
*
|
46
|
-
*/
|
47
|
-
msg: (key: MessageKey, ...args: (string | undefined)[]) => JSX.Element;
|
48
|
-
/**
|
49
|
-
* It's the same thing as msg() but instead of returning a JSX.Element it returns a string.
|
50
|
-
* 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
|
51
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.
|
52
56
|
*/
|
53
57
|
msgStr: (key: MessageKey, ...args: (string | undefined)[]) => string;
|
54
58
|
/**
|
@@ -59,24 +63,11 @@ export type GenericI18n<MessageKey extends string> = {
|
|
59
63
|
* {
|
60
64
|
* en: {
|
61
65
|
* "access-denied": "Access denied",
|
62
|
-
* "foo": "Foo {0} {1}",
|
63
|
-
* "bar": "Bar {0}"
|
64
66
|
* }
|
65
67
|
* }
|
66
68
|
*
|
67
|
-
*
|
68
|
-
*
|
69
|
-
* advancedMsg("${not-a-message-key}") === advancedMsg(not-a-message-key") === <span>not-a-message-key</span>
|
70
|
-
* advancedMsg("${bar}", "<strong>c</strong>")
|
71
|
-
* === <span>{msgStr("bar", "<strong>XXX</strong>")}<span>
|
72
|
-
* === <span>Bar <strong>XXX</strong></span> (The html in the arg is partially escaped for security reasons, it might be untrusted)
|
73
|
-
* advancedMsg("${foo} xx ${bar}", "a", "b", "c")
|
74
|
-
* === <span>{msgStr("foo", "a", "b")} xx {msgStr("bar")}<span>
|
75
|
-
* === <span>Foo a b xx Bar {0}</span> (The substitution are only applied in the first message)
|
76
|
-
*/
|
77
|
-
advancedMsg: (key: string, ...args: (string | undefined)[]) => JSX.Element;
|
78
|
-
/**
|
79
|
-
* 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"
|
80
71
|
*/
|
81
72
|
advancedMsgStr: (key: string, ...args: (string | undefined)[]) => string;
|
82
73
|
|
@@ -88,10 +79,12 @@ export type GenericI18n<MessageKey extends string> = {
|
|
88
79
|
isFetchingTranslations: boolean;
|
89
80
|
};
|
90
81
|
|
91
|
-
export
|
92
|
-
|
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 };
|
93
86
|
}) {
|
94
|
-
type I18n =
|
87
|
+
type I18n = GenericI18n_noJsx<MessageKey_defaultSet | MessageKey_themeDefined>;
|
95
88
|
|
96
89
|
type Result = { i18n: I18n; prI18n_currentLanguage: Promise<I18n> | undefined };
|
97
90
|
|
@@ -126,11 +119,18 @@ export function createGetI18n<ExtraMessageKey extends string = never>(messageBun
|
|
126
119
|
labelBySupportedLanguageTag: Object.fromEntries((kcContext.locale?.supported ?? []).map(({ languageTag, label }) => [languageTag, label]))
|
127
120
|
};
|
128
121
|
|
129
|
-
const { createI18nTranslationFunctions } = createI18nTranslationFunctionsFactory<
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
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
|
134
134
|
});
|
135
135
|
|
136
136
|
const isCurrentLanguageFallbackLanguage = partialI18n.currentLanguageTag === fallbackLanguageTag;
|
@@ -139,18 +139,18 @@ export function createGetI18n<ExtraMessageKey extends string = never>(messageBun
|
|
139
139
|
i18n: {
|
140
140
|
...partialI18n,
|
141
141
|
...createI18nTranslationFunctions({
|
142
|
-
|
142
|
+
messages_defaultSet_currentLanguage: isCurrentLanguageFallbackLanguage ? messages_defaultSet_fallbackLanguage : undefined
|
143
143
|
}),
|
144
144
|
isFetchingTranslations: !isCurrentLanguageFallbackLanguage
|
145
145
|
},
|
146
146
|
prI18n_currentLanguage: isCurrentLanguageFallbackLanguage
|
147
147
|
? undefined
|
148
148
|
: (async () => {
|
149
|
-
const
|
149
|
+
const messages_defaultSet_currentLanguage = await fetchMessages_defaultSet(partialI18n.currentLanguageTag);
|
150
150
|
|
151
151
|
const i18n_currentLanguage: I18n = {
|
152
152
|
...partialI18n,
|
153
|
-
...createI18nTranslationFunctions({
|
153
|
+
...createI18nTranslationFunctions({ messages_defaultSet_currentLanguage }),
|
154
154
|
isFetchingTranslations: false
|
155
155
|
};
|
156
156
|
|
@@ -173,155 +173,72 @@ export function createGetI18n<ExtraMessageKey extends string = never>(messageBun
|
|
173
173
|
return { getI18n };
|
174
174
|
}
|
175
175
|
|
176
|
-
function createI18nTranslationFunctionsFactory<
|
177
|
-
|
178
|
-
|
179
|
-
messageBundle_currentLanguage: Partial<Record<ExtraMessageKey, string>> | undefined;
|
180
|
-
messageBundle_realm: Record<string, string>;
|
176
|
+
function createI18nTranslationFunctionsFactory<MessageKey_themeDefined extends string>(params: {
|
177
|
+
messages_themeDefined: Record<MessageKey_themeDefined, string> | undefined;
|
178
|
+
messages_fromKcServer: Record<string, string>;
|
181
179
|
}) {
|
182
|
-
const {
|
183
|
-
|
184
|
-
const messages_fallbackLanguage = {
|
185
|
-
...params.messages_fallbackLanguage,
|
186
|
-
...params.messageBundle_fallbackLanguage
|
187
|
-
};
|
180
|
+
const { messages_themeDefined, messages_fromKcServer } = params;
|
188
181
|
|
189
182
|
function createI18nTranslationFunctions(params: {
|
190
|
-
|
191
|
-
}): Pick<
|
192
|
-
const
|
193
|
-
...params.messages_currentLanguage,
|
194
|
-
...messageBundle_currentLanguage
|
195
|
-
};
|
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;
|
196
186
|
|
197
|
-
function resolveMsg(props: { key: string; args: (string | undefined)[]
|
198
|
-
const { key, args
|
199
|
-
|
200
|
-
const messageOrUndefined: string | undefined = (() => {
|
201
|
-
terms_text: {
|
202
|
-
if (key !== "termsText") {
|
203
|
-
break terms_text;
|
204
|
-
}
|
205
|
-
const termsTextMessage = messageBundle_realm[key];
|
206
|
-
|
207
|
-
if (termsTextMessage === undefined) {
|
208
|
-
break terms_text;
|
209
|
-
}
|
210
|
-
|
211
|
-
return termsTextMessage;
|
212
|
-
}
|
187
|
+
function resolveMsg(props: { key: string; args: (string | undefined)[] }): string | undefined {
|
188
|
+
const { key, args } = props;
|
213
189
|
|
214
|
-
|
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];
|
215
195
|
|
216
|
-
|
217
|
-
})();
|
218
|
-
|
219
|
-
if (messageOrUndefined === undefined) {
|
196
|
+
if (message === undefined) {
|
220
197
|
return undefined;
|
221
198
|
}
|
222
199
|
|
223
|
-
const
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
?.map(g => g.match(/{([0-9]+)}/)![1])
|
229
|
-
.map(indexStr => parseInt(indexStr))
|
230
|
-
.sort((a, b) => a - b)[0];
|
231
|
-
|
232
|
-
if (startIndex === undefined) {
|
233
|
-
// No {0} in message (no arguments expected)
|
234
|
-
return message;
|
235
|
-
}
|
236
|
-
|
237
|
-
let messageWithArgsInjected = message;
|
238
|
-
|
239
|
-
args.forEach((arg, i) => {
|
240
|
-
if (arg === undefined) {
|
241
|
-
return;
|
242
|
-
}
|
243
|
-
|
244
|
-
messageWithArgsInjected = messageWithArgsInjected.replace(
|
245
|
-
new RegExp(`\\{${i + startIndex}\\}`, "g"),
|
246
|
-
arg.replace(/</g, "<").replace(/>/g, ">")
|
247
|
-
);
|
248
|
-
});
|
249
|
-
|
250
|
-
return messageWithArgsInjected;
|
251
|
-
})();
|
252
|
-
|
253
|
-
return doRenderAsHtml ? (
|
254
|
-
<span
|
255
|
-
// NOTE: The message is trusted. The arguments are not but are escaped.
|
256
|
-
dangerouslySetInnerHTML={{
|
257
|
-
__html: messageWithArgsInjectedIfAny
|
258
|
-
}}
|
259
|
-
/>
|
260
|
-
) : (
|
261
|
-
messageWithArgsInjectedIfAny
|
262
|
-
);
|
263
|
-
}
|
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];
|
264
205
|
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
realm_messages: {
|
269
|
-
const resolvedMessage = messageBundle_realm[key] ?? messageBundle_realm["${" + key + "}"];
|
270
|
-
|
271
|
-
if (resolvedMessage === undefined) {
|
272
|
-
break realm_messages;
|
273
|
-
}
|
274
|
-
|
275
|
-
return doRenderAsHtml ? (
|
276
|
-
<span
|
277
|
-
// NOTE: The message is trusted. The arguments are not but are escaped.
|
278
|
-
dangerouslySetInnerHTML={{
|
279
|
-
__html: resolvedMessage
|
280
|
-
}}
|
281
|
-
/>
|
282
|
-
) : (
|
283
|
-
resolvedMessage
|
284
|
-
);
|
206
|
+
if (startIndex === undefined) {
|
207
|
+
// No {0} in message (no arguments expected)
|
208
|
+
return message;
|
285
209
|
}
|
286
210
|
|
287
|
-
|
288
|
-
const resolvedMessage = resolveMsg({ key, args, doRenderAsHtml });
|
211
|
+
let messageWithArgsInjected = message;
|
289
212
|
|
290
|
-
|
291
|
-
|
213
|
+
args.forEach((arg, i) => {
|
214
|
+
if (arg === undefined) {
|
215
|
+
return;
|
292
216
|
}
|
293
217
|
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
218
|
+
messageWithArgsInjected = messageWithArgsInjected.replace(
|
219
|
+
new RegExp(`\\{${i + startIndex}\\}`, "g"),
|
220
|
+
arg.replace(/</g, "<").replace(/>/g, ">")
|
221
|
+
);
|
222
|
+
});
|
298
223
|
|
299
|
-
|
300
|
-
|
224
|
+
return messageWithArgsInjected;
|
225
|
+
}
|
301
226
|
|
302
|
-
|
227
|
+
function resolveMsgAdvanced(props: { key: string; args: (string | undefined)[] }): string {
|
228
|
+
const { key, args } = props;
|
303
229
|
|
304
|
-
|
305
|
-
});
|
230
|
+
const match = key.match(/^\$\{(.+)\}$/);
|
306
231
|
|
307
|
-
return
|
232
|
+
return resolveMsg({ key: match !== null ? match[1] : key, args }) ?? key;
|
308
233
|
}
|
309
234
|
|
310
235
|
return {
|
311
|
-
msgStr: (key, ...args) =>
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
doRenderAsHtml: true
|
318
|
-
}) as JSX.Element,
|
319
|
-
advancedMsgStr: (key, ...args) =>
|
320
|
-
resolveMsgAdvanced({
|
321
|
-
key,
|
322
|
-
args,
|
323
|
-
doRenderAsHtml: false
|
324
|
-
}) as string
|
236
|
+
msgStr: (key, ...args) => {
|
237
|
+
const resolvedMessage = resolveMsg({ key, args });
|
238
|
+
assert(resolvedMessage !== undefined, `Message with key "${key}" not found`);
|
239
|
+
return resolvedMessage;
|
240
|
+
},
|
241
|
+
advancedMsgStr: (key, ...args) => resolveMsgAdvanced({ key, args })
|
325
242
|
};
|
326
243
|
}
|
327
244
|
|
package/src/login/i18n/index.ts
CHANGED
@@ -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,90 @@
|
|
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
|
+
return (
|
27
|
+
<span
|
28
|
+
dangerouslySetInnerHTML={{
|
29
|
+
"__html": htmlString
|
30
|
+
}}
|
31
|
+
/>
|
32
|
+
);
|
33
|
+
*/
|
34
|
+
}
|
35
|
+
|
36
|
+
function withJsx(i18n_noJsx: GenericI18n_noJsx<MessageKey>): I18n {
|
37
|
+
use_cache: {
|
38
|
+
const i18n = cache.get(i18n_noJsx);
|
39
|
+
|
40
|
+
if (i18n === undefined) {
|
41
|
+
break use_cache;
|
42
|
+
}
|
43
|
+
|
44
|
+
return i18n;
|
45
|
+
}
|
46
|
+
|
47
|
+
const i18n: I18n = {
|
48
|
+
...i18n_noJsx,
|
49
|
+
msg: (...args) => renderHtmlString(i18n_noJsx.msgStr(...args)),
|
50
|
+
advancedMsg: (...args) => renderHtmlString(i18n_noJsx.advancedMsgStr(...args))
|
51
|
+
};
|
52
|
+
|
53
|
+
cache.set(i18n_noJsx, i18n);
|
54
|
+
|
55
|
+
return i18n;
|
56
|
+
}
|
57
|
+
|
58
|
+
return { withJsx };
|
59
|
+
})();
|
60
|
+
|
61
|
+
const { getI18n } = createGetI18n(messageBundle);
|
62
|
+
|
63
|
+
function useI18n(params: { kcContext: KcContextLike }): { i18n: I18n } {
|
64
|
+
const { kcContext } = params;
|
65
|
+
|
66
|
+
const { i18n, prI18n_currentLanguage } = getI18n({ kcContext });
|
67
|
+
|
68
|
+
const [i18n_toReturn, setI18n_toReturn] = useState<I18n>(withJsx(i18n));
|
69
|
+
|
70
|
+
useEffect(() => {
|
71
|
+
let isActive = true;
|
72
|
+
|
73
|
+
prI18n_currentLanguage?.then(i18n => {
|
74
|
+
if (!isActive) {
|
75
|
+
return;
|
76
|
+
}
|
77
|
+
|
78
|
+
setI18n_toReturn(withJsx(i18n));
|
79
|
+
});
|
80
|
+
|
81
|
+
return () => {
|
82
|
+
isActive = false;
|
83
|
+
};
|
84
|
+
}, []);
|
85
|
+
|
86
|
+
return { i18n: i18n_toReturn };
|
87
|
+
}
|
88
|
+
|
89
|
+
return { useI18n, ofTypeI18n: Reflect<I18n>() };
|
90
|
+
}
|
@@ -9,7 +9,7 @@ import { formatNumber } from "keycloakify/tools/formatNumber";
|
|
9
9
|
import { useInsertScriptTags } from "keycloakify/tools/useInsertScriptTags";
|
10
10
|
import type { PasswordPolicies, Attribute, Validators } from "keycloakify/login/KcContext";
|
11
11
|
import type { KcContext } from "../KcContext";
|
12
|
-
import type {
|
12
|
+
import type { MessageKey_defaultSet } from "keycloakify/login/i18n";
|
13
13
|
import { KcContextLike as KcContextLike_i18n } from "keycloakify/login/i18n";
|
14
14
|
import type { I18n } from "../i18n";
|
15
15
|
|
@@ -148,7 +148,7 @@ export function useUserProfileForm(params: UseUserProfileFormParams): ReturnType
|
|
148
148
|
.map(name =>
|
149
149
|
id<Attribute>({
|
150
150
|
name: name,
|
151
|
-
displayName: id<`\${${
|
151
|
+
displayName: id<`\${${MessageKey_defaultSet}}`>(`\${${name}}`),
|
152
152
|
required: true,
|
153
153
|
value: (kcContext.register as any).formData[name] ?? "",
|
154
154
|
html5DataAnnotations: {},
|
@@ -176,7 +176,7 @@ export function useUserProfileForm(params: UseUserProfileFormParams): ReturnType
|
|
176
176
|
.map(name =>
|
177
177
|
id<Attribute>({
|
178
178
|
name: name,
|
179
|
-
displayName: id<`\${${
|
179
|
+
displayName: id<`\${${MessageKey_defaultSet}}`>(`\${${name}}`),
|
180
180
|
required: true,
|
181
181
|
value: (kcContext as any).user[name] ?? "",
|
182
182
|
html5DataAnnotations: {},
|
@@ -202,7 +202,7 @@ export function useUserProfileForm(params: UseUserProfileFormParams): ReturnType
|
|
202
202
|
return [
|
203
203
|
id<Attribute>({
|
204
204
|
name: "email",
|
205
|
-
displayName: id<`\${${
|
205
|
+
displayName: id<`\${${MessageKey_defaultSet}}`>(`\${email}`),
|
206
206
|
required: true,
|
207
207
|
value: (kcContext.email as any).value ?? "",
|
208
208
|
html5DataAnnotations: {},
|
@@ -227,7 +227,7 @@ export function useUserProfileForm(params: UseUserProfileFormParams): ReturnType
|
|
227
227
|
break patch_legacy_group;
|
228
228
|
}
|
229
229
|
|
230
|
-
const { group, groupDisplayHeader, groupDisplayDescription
|
230
|
+
const { group, groupDisplayHeader, groupDisplayDescription, groupAnnotations } = attribute as Attribute & {
|
231
231
|
group: string;
|
232
232
|
groupDisplayHeader?: string;
|
233
233
|
groupDisplayDescription?: string;
|
@@ -250,6 +250,7 @@ export function useUserProfileForm(params: UseUserProfileFormParams): ReturnType
|
|
250
250
|
name: group,
|
251
251
|
displayHeader: groupDisplayHeader,
|
252
252
|
displayDescription: groupDisplayDescription,
|
253
|
+
annotations: groupAnnotations,
|
253
254
|
html5DataAnnotations: {}
|
254
255
|
};
|
255
256
|
}
|
@@ -292,7 +293,7 @@ export function useUserProfileForm(params: UseUserProfileFormParams): ReturnType
|
|
292
293
|
0,
|
293
294
|
{
|
294
295
|
name: "password",
|
295
|
-
displayName: id<`\${${
|
296
|
+
displayName: id<`\${${MessageKey_defaultSet}}`>("${password}"),
|
296
297
|
required: true,
|
297
298
|
readOnly: false,
|
298
299
|
validators: {},
|
@@ -302,7 +303,7 @@ export function useUserProfileForm(params: UseUserProfileFormParams): ReturnType
|
|
302
303
|
},
|
303
304
|
{
|
304
305
|
name: "password-confirm",
|
305
|
-
displayName: id<`\${${
|
306
|
+
displayName: id<`\${${MessageKey_defaultSet}}`>("${passwordConfirm}"),
|
306
307
|
required: true,
|
307
308
|
readOnly: false,
|
308
309
|
validators: {},
|
@@ -1133,7 +1134,7 @@ function useGetErrors(params: { kcContext: KcContextLike_useGetErrors; i18n: I18
|
|
1133
1134
|
break validator_x;
|
1134
1135
|
}
|
1135
1136
|
|
1136
|
-
const msgArgs = [errorMessageKey ?? id<
|
1137
|
+
const msgArgs = [errorMessageKey ?? id<MessageKey_defaultSet>("shouldMatchPattern"), pattern] as const;
|
1137
1138
|
|
1138
1139
|
errors.push({
|
1139
1140
|
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{advancedMsg(...msgArgs)}</Fragment>,
|
@@ -1172,7 +1173,7 @@ function useGetErrors(params: { kcContext: KcContextLike_useGetErrors; i18n: I18
|
|
1172
1173
|
break validator_x;
|
1173
1174
|
}
|
1174
1175
|
|
1175
|
-
const msgArgs = [id<
|
1176
|
+
const msgArgs = [id<MessageKey_defaultSet>("invalidEmailMessage")] as const;
|
1176
1177
|
|
1177
1178
|
errors.push({
|
1178
1179
|
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
@@ -1264,11 +1265,11 @@ function useGetErrors(params: { kcContext: KcContextLike_useGetErrors; i18n: I18
|
|
1264
1265
|
break validator_x;
|
1265
1266
|
}
|
1266
1267
|
|
1267
|
-
const msgArgs = [id<
|
1268
|
+
const msgArgs = [id<MessageKey_defaultSet>("notAValidOption")] as const;
|
1268
1269
|
|
1269
1270
|
errors.push({
|
1270
|
-
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{
|
1271
|
-
errorMessageStr:
|
1271
|
+
errorMessage: <Fragment key={`${attributeName}-${errors.length}`}>{msg(...msgArgs)}</Fragment>,
|
1272
|
+
errorMessageStr: msgStr(...msgArgs),
|
1272
1273
|
fieldIndex: undefined,
|
1273
1274
|
source: {
|
1274
1275
|
type: "validator",
|
package/src/login/pages/Info.tsx
CHANGED
@@ -34,7 +34,7 @@ export default function Info(props: PageProps<Extract<KcContext, { pageId: "info
|
|
34
34
|
if (requiredActions) {
|
35
35
|
html += "<b>";
|
36
36
|
|
37
|
-
html += requiredActions.map(requiredAction => advancedMsgStr(`requiredAction.${requiredAction}`)).join(",");
|
37
|
+
html += requiredActions.map(requiredAction => advancedMsgStr(`requiredAction.${requiredAction}`)).join(", ");
|
38
38
|
|
39
39
|
html += "</b>";
|
40
40
|
}
|
@@ -70,8 +70,8 @@ export const WithRestrictedToMITStudents: Story = {
|
|
70
70
|
},
|
71
71
|
"x-keycloakify": {
|
72
72
|
messages: {
|
73
|
-
"
|
74
|
-
"
|
73
|
+
"profile.attributes.email.inputHelperTextBefore": "Please use your MIT or Berkeley email.",
|
74
|
+
"profile.attributes.email.pattern.error":
|
75
75
|
"This is not an MIT (<strong>@mit.edu</strong>) nor a Berkeley (<strong>@berkeley.edu</strong>) email."
|
76
76
|
}
|
77
77
|
}
|
@@ -104,10 +104,10 @@ export const WithFavoritePet: Story = {
|
|
104
104
|
},
|
105
105
|
"x-keycloakify": {
|
106
106
|
messages: {
|
107
|
-
"
|
108
|
-
"
|
109
|
-
"
|
110
|
-
"
|
107
|
+
"profile.attributes.favoritePet": "Favorite Pet",
|
108
|
+
"profile.attributes.favoritePet.options.cat": "Fluffy Cat",
|
109
|
+
"profile.attributes.favoritePet.options.dog": "Loyal Dog",
|
110
|
+
"profile.attributes.favoritePet.options.fish": "Peaceful Fish"
|
111
111
|
}
|
112
112
|
}
|
113
113
|
}}
|
@@ -53,14 +53,29 @@ export const WithRealmTranslations: Story = {
|
|
53
53
|
displayName: "home-idp-discovery-display-name",
|
54
54
|
helpText: "home-idp-discovery-help-text",
|
55
55
|
iconCssClass: "kcAuthenticatorDefaultClass"
|
56
|
+
},
|
57
|
+
{
|
58
|
+
authExecId: "20456f5a-8b2b-45f3-98e0-551dcb27e3e1",
|
59
|
+
displayName: "identity-provider-redirctor-display-name",
|
60
|
+
helpText: "identity-provider-redirctor-help-text",
|
61
|
+
iconCssClass: "kcAuthenticatorDefaultClass"
|
62
|
+
},
|
63
|
+
{
|
64
|
+
authExecId: "eb435db9-474e-473a-8da7-c184fa510b96",
|
65
|
+
displayName: "auth-username-password-form-display-name",
|
66
|
+
helpText: "auth-username-password-help-text",
|
67
|
+
iconCssClass: "kcAuthenticatorDefaultClass"
|
56
68
|
}
|
57
69
|
]
|
58
70
|
},
|
59
|
-
|
71
|
+
"x-keycloakify": {
|
60
72
|
messages: {
|
61
|
-
"
|
62
|
-
"
|
63
|
-
"Sign in via your home identity provider which will be automatically determined based on your provided email address."
|
73
|
+
"home-idp-discovery-display-name": "Home identity provider",
|
74
|
+
"home-idp-discovery-help-text":
|
75
|
+
"Sign in via your home identity provider which will be automatically determined based on your provided email address.",
|
76
|
+
"identity-provider-redirctor-display-name": "Identity Provider Redirector",
|
77
|
+
"identity-provider-redirctor-help-text": "Sign in via your identity provider.",
|
78
|
+
"auth-username-password-help-text": "Sign in via your username and password."
|
64
79
|
}
|
65
80
|
}
|
66
81
|
}}
|