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
@@ -17,8 +17,8 @@ export async function downloadKeycloakDefaultTheme(params: {
|
|
17
17
|
}): Promise<{ defaultThemeDirPath: string }> {
|
18
18
|
const { keycloakVersion, buildContext } = params;
|
19
19
|
|
20
|
-
let kcNodeModulesKeepFilePaths: string
|
21
|
-
let kcNodeModulesKeepFilePaths_lastAccountV1: string
|
20
|
+
let kcNodeModulesKeepFilePaths: Set<string> | undefined = undefined;
|
21
|
+
let kcNodeModulesKeepFilePaths_lastAccountV1: Set<string> | undefined = undefined;
|
22
22
|
|
23
23
|
const { extractedDirPath } = await downloadAndExtractArchive({
|
24
24
|
url: `https://repo1.maven.org/maven2/org/keycloak/keycloak-themes/${keycloakVersion}/keycloak-themes-${keycloakVersion}.jar`,
|
@@ -72,16 +72,19 @@ export async function downloadKeycloakDefaultTheme(params: {
|
|
72
72
|
}
|
73
73
|
|
74
74
|
skip_node_modules: {
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
75
|
+
const nodeModulesRelativeDirPath = pathJoin(
|
76
|
+
"keycloak",
|
77
|
+
"common",
|
78
|
+
"resources",
|
79
|
+
"node_modules"
|
80
|
+
);
|
81
|
+
|
82
|
+
if (!fileRelativePath.startsWith(nodeModulesRelativeDirPath)) {
|
80
83
|
break skip_node_modules;
|
81
84
|
}
|
82
85
|
|
83
86
|
if (kcNodeModulesKeepFilePaths_lastAccountV1 === undefined) {
|
84
|
-
kcNodeModulesKeepFilePaths_lastAccountV1 = [
|
87
|
+
kcNodeModulesKeepFilePaths_lastAccountV1 = new Set([
|
85
88
|
pathJoin("patternfly", "dist", "css", "patternfly.min.css"),
|
86
89
|
pathJoin(
|
87
90
|
"patternfly",
|
@@ -125,13 +128,19 @@ export async function downloadKeycloakDefaultTheme(params: {
|
|
125
128
|
"fonts",
|
126
129
|
"PatternFlyIcons-webfont.woff"
|
127
130
|
)
|
128
|
-
];
|
131
|
+
]);
|
129
132
|
}
|
130
133
|
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
134
|
+
const fileRelativeToNodeModulesPath = fileRelativePath.substring(
|
135
|
+
nodeModulesRelativeDirPath.length + 1
|
136
|
+
);
|
137
|
+
|
138
|
+
if (
|
139
|
+
kcNodeModulesKeepFilePaths_lastAccountV1.has(
|
140
|
+
fileRelativeToNodeModulesPath
|
141
|
+
)
|
142
|
+
) {
|
143
|
+
break skip_node_modules;
|
135
144
|
}
|
136
145
|
|
137
146
|
return;
|
@@ -165,16 +174,19 @@ export async function downloadKeycloakDefaultTheme(params: {
|
|
165
174
|
}
|
166
175
|
|
167
176
|
skip_node_modules: {
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
177
|
+
const nodeModulesRelativeDirPath = pathJoin(
|
178
|
+
"keycloak",
|
179
|
+
"common",
|
180
|
+
"resources",
|
181
|
+
"node_modules"
|
182
|
+
);
|
183
|
+
|
184
|
+
if (!fileRelativePath.startsWith(nodeModulesRelativeDirPath)) {
|
173
185
|
break skip_node_modules;
|
174
186
|
}
|
175
187
|
|
176
188
|
if (kcNodeModulesKeepFilePaths === undefined) {
|
177
|
-
kcNodeModulesKeepFilePaths = [
|
189
|
+
kcNodeModulesKeepFilePaths = new Set([
|
178
190
|
pathJoin("@patternfly", "patternfly", "patternfly.min.css"),
|
179
191
|
pathJoin("patternfly", "dist", "css", "patternfly.min.css"),
|
180
192
|
pathJoin(
|
@@ -231,15 +243,23 @@ export async function downloadKeycloakDefaultTheme(params: {
|
|
231
243
|
"fonts",
|
232
244
|
"PatternFlyIcons-webfont.woff"
|
233
245
|
),
|
246
|
+
pathJoin(
|
247
|
+
"patternfly",
|
248
|
+
"dist",
|
249
|
+
"fonts",
|
250
|
+
"OpenSans-Semibold-webfont.woff2"
|
251
|
+
),
|
234
252
|
pathJoin("patternfly", "dist", "img", "bg-login.jpg"),
|
235
253
|
pathJoin("jquery", "dist", "jquery.min.js")
|
236
|
-
];
|
254
|
+
]);
|
237
255
|
}
|
238
256
|
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
257
|
+
const fileRelativeToNodeModulesPath = fileRelativePath.substring(
|
258
|
+
nodeModulesRelativeDirPath.length + 1
|
259
|
+
);
|
260
|
+
|
261
|
+
if (kcNodeModulesKeepFilePaths.has(fileRelativeToNodeModulesPath)) {
|
262
|
+
break skip_node_modules;
|
243
263
|
}
|
244
264
|
|
245
265
|
return;
|
@@ -0,0 +1,6 @@
|
|
1
|
+
import type { GenericI18n_noJsx } from "./i18n";
|
2
|
+
|
3
|
+
export type GenericI18n<MessageKey extends string> = GenericI18n_noJsx<MessageKey> & {
|
4
|
+
msg: (key: MessageKey, ...args: (string | undefined)[]) => JSX.Element;
|
5
|
+
advancedMsg: (key: string, ...args: (string | undefined)[]) => JSX.Element;
|
6
|
+
};
|
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
|
+
}
|