keycloakify 10.0.0-rc.108 → 10.0.0-rc.110

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.
Files changed (334) hide show
  1. package/account/KcContext/KcContext.d.ts +4 -1
  2. package/account/KcContext/KcContext.js.map +1 -1
  3. package/account/KcContext/kcContextMocks.js +4 -1
  4. package/account/KcContext/kcContextMocks.js.map +1 -1
  5. package/account/i18n/GenericI18n.d.ts +6 -0
  6. package/account/i18n/GenericI18n.js +2 -0
  7. package/account/i18n/GenericI18n.js.map +1 -0
  8. package/account/i18n/i18n.d.ts +24 -30
  9. package/account/i18n/i18n.js +47 -67
  10. package/account/i18n/i18n.js.map +1 -1
  11. package/account/i18n/index.d.ts +4 -3
  12. package/account/i18n/index.js.map +1 -1
  13. package/account/i18n/messages_defaultSet/ar.js.map +1 -0
  14. package/account/i18n/messages_defaultSet/ca.js.map +1 -0
  15. package/account/i18n/messages_defaultSet/cs.js.map +1 -0
  16. package/account/i18n/messages_defaultSet/da.js.map +1 -0
  17. package/account/i18n/messages_defaultSet/de.js.map +1 -0
  18. package/account/i18n/messages_defaultSet/el.js.map +1 -0
  19. package/account/i18n/messages_defaultSet/en.js.map +1 -0
  20. package/account/i18n/messages_defaultSet/es.js.map +1 -0
  21. package/account/i18n/messages_defaultSet/fa.js.map +1 -0
  22. package/account/i18n/messages_defaultSet/fi.js.map +1 -0
  23. package/account/i18n/messages_defaultSet/fr.js.map +1 -0
  24. package/account/i18n/messages_defaultSet/hu.js.map +1 -0
  25. package/account/i18n/{baseMessages → messages_defaultSet}/index.d.ts +1 -1
  26. package/account/i18n/{baseMessages → messages_defaultSet}/index.js +3 -3
  27. package/account/i18n/messages_defaultSet/index.js.map +1 -0
  28. package/account/i18n/messages_defaultSet/it.js.map +1 -0
  29. package/account/i18n/messages_defaultSet/ja.js.map +1 -0
  30. package/account/i18n/messages_defaultSet/lt.js.map +1 -0
  31. package/account/i18n/messages_defaultSet/lv.js.map +1 -0
  32. package/account/i18n/messages_defaultSet/nl.js.map +1 -0
  33. package/account/i18n/messages_defaultSet/no.js.map +1 -0
  34. package/account/i18n/messages_defaultSet/pl.js.map +1 -0
  35. package/account/i18n/messages_defaultSet/pt-BR.js.map +1 -0
  36. package/account/i18n/messages_defaultSet/ru.js.map +1 -0
  37. package/account/i18n/messages_defaultSet/sk.js.map +1 -0
  38. package/account/i18n/messages_defaultSet/sv.js.map +1 -0
  39. package/account/i18n/messages_defaultSet/th.js.map +1 -0
  40. package/account/i18n/messages_defaultSet/tr.js.map +1 -0
  41. package/account/i18n/messages_defaultSet/uk.js.map +1 -0
  42. package/account/i18n/messages_defaultSet/zh-CN.js.map +1 -0
  43. package/account/i18n/useI18n.d.ts +6 -5
  44. package/account/i18n/useI18n.js +24 -2
  45. package/account/i18n/useI18n.js.map +1 -1
  46. package/bin/440.index.js +8 -9
  47. package/login/KcContext/KcContext.d.ts +1 -0
  48. package/login/KcContext/KcContext.js.map +1 -1
  49. package/login/i18n/GenericI18n.d.ts +6 -0
  50. package/login/i18n/GenericI18n.js +2 -0
  51. package/login/i18n/GenericI18n.js.map +1 -0
  52. package/login/i18n/i18n.d.ts +21 -30
  53. package/login/i18n/i18n.js +44 -93
  54. package/login/i18n/i18n.js.map +1 -1
  55. package/login/i18n/index.d.ts +4 -3
  56. package/login/i18n/index.js.map +1 -1
  57. package/login/i18n/messages_defaultSet/ar.js.map +1 -0
  58. package/login/i18n/messages_defaultSet/ca.js.map +1 -0
  59. package/login/i18n/messages_defaultSet/cs.js.map +1 -0
  60. package/login/i18n/messages_defaultSet/da.js.map +1 -0
  61. package/login/i18n/messages_defaultSet/de.js.map +1 -0
  62. package/login/i18n/messages_defaultSet/el.js.map +1 -0
  63. package/login/i18n/messages_defaultSet/en.js.map +1 -0
  64. package/login/i18n/messages_defaultSet/es.js.map +1 -0
  65. package/login/i18n/messages_defaultSet/fa.js.map +1 -0
  66. package/login/i18n/messages_defaultSet/fi.js.map +1 -0
  67. package/login/i18n/messages_defaultSet/fr.js.map +1 -0
  68. package/login/i18n/messages_defaultSet/hu.js.map +1 -0
  69. package/login/i18n/{baseMessages → messages_defaultSet}/index.d.ts +1 -1
  70. package/login/i18n/{baseMessages → messages_defaultSet}/index.js +3 -3
  71. package/login/i18n/messages_defaultSet/index.js.map +1 -0
  72. package/login/i18n/messages_defaultSet/it.js.map +1 -0
  73. package/login/i18n/messages_defaultSet/ja.js.map +1 -0
  74. package/login/i18n/messages_defaultSet/lt.js.map +1 -0
  75. package/login/i18n/messages_defaultSet/lv.js.map +1 -0
  76. package/login/i18n/messages_defaultSet/nl.js.map +1 -0
  77. package/login/i18n/messages_defaultSet/no.js.map +1 -0
  78. package/login/i18n/messages_defaultSet/pl.js.map +1 -0
  79. package/login/i18n/messages_defaultSet/pt-BR.js.map +1 -0
  80. package/login/i18n/messages_defaultSet/ru.js.map +1 -0
  81. package/login/i18n/messages_defaultSet/sk.js.map +1 -0
  82. package/login/i18n/messages_defaultSet/sv.js.map +1 -0
  83. package/login/i18n/messages_defaultSet/th.js.map +1 -0
  84. package/login/i18n/messages_defaultSet/tr.js.map +1 -0
  85. package/login/i18n/messages_defaultSet/uk.js.map +1 -0
  86. package/login/i18n/messages_defaultSet/zh-CN.js.map +1 -0
  87. package/login/i18n/useI18n.d.ts +6 -5
  88. package/login/i18n/useI18n.js +33 -2
  89. package/login/i18n/useI18n.js.map +1 -1
  90. package/login/lib/useUserProfileForm.js +4 -3
  91. package/login/lib/useUserProfileForm.js.map +1 -1
  92. package/login/pages/Info.js +1 -1
  93. package/login/pages/Info.js.map +1 -1
  94. package/package.json +235 -227
  95. package/src/account/KcContext/KcContext.ts +4 -1
  96. package/src/account/KcContext/kcContextMocks.ts +4 -1
  97. package/src/account/i18n/GenericI18n.tsx +6 -0
  98. package/src/account/i18n/i18n.tsx +88 -126
  99. package/src/account/i18n/index.ts +4 -3
  100. package/src/account/i18n/{baseMessages → messages_defaultSet}/index.ts +3 -3
  101. package/src/account/i18n/useI18n.tsx +81 -0
  102. package/src/bin/keycloakify/buildJars/buildJar.ts +10 -14
  103. package/src/bin/keycloakify/generateFtl/kcContextDeclarationTemplate.ftl +100 -88
  104. package/src/bin/keycloakify/generateResources/generateMessageProperties.ts +1 -1
  105. package/src/login/KcContext/KcContext.ts +1 -0
  106. package/src/login/i18n/GenericI18n.tsx +6 -0
  107. package/src/login/i18n/i18n.tsx +82 -165
  108. package/src/login/i18n/index.ts +4 -3
  109. package/src/login/i18n/{baseMessages → messages_defaultSet}/index.ts +3 -3
  110. package/src/login/i18n/useI18n.tsx +90 -0
  111. package/src/login/lib/useUserProfileForm.tsx +13 -12
  112. package/src/login/pages/Info.tsx +1 -1
  113. package/stories/login/pages/Register.stories.tsx +6 -6
  114. package/stories/login/pages/SelectAuthenticator.stories.tsx +19 -4
  115. package/account/i18n/baseMessages/ar.js.map +0 -1
  116. package/account/i18n/baseMessages/ca.js.map +0 -1
  117. package/account/i18n/baseMessages/cs.js.map +0 -1
  118. package/account/i18n/baseMessages/da.js.map +0 -1
  119. package/account/i18n/baseMessages/de.js.map +0 -1
  120. package/account/i18n/baseMessages/el.js.map +0 -1
  121. package/account/i18n/baseMessages/en.js.map +0 -1
  122. package/account/i18n/baseMessages/es.js.map +0 -1
  123. package/account/i18n/baseMessages/fa.js.map +0 -1
  124. package/account/i18n/baseMessages/fi.js.map +0 -1
  125. package/account/i18n/baseMessages/fr.js.map +0 -1
  126. package/account/i18n/baseMessages/hu.js.map +0 -1
  127. package/account/i18n/baseMessages/index.js.map +0 -1
  128. package/account/i18n/baseMessages/it.js.map +0 -1
  129. package/account/i18n/baseMessages/ja.js.map +0 -1
  130. package/account/i18n/baseMessages/lt.js.map +0 -1
  131. package/account/i18n/baseMessages/lv.js.map +0 -1
  132. package/account/i18n/baseMessages/nl.js.map +0 -1
  133. package/account/i18n/baseMessages/no.js.map +0 -1
  134. package/account/i18n/baseMessages/pl.js.map +0 -1
  135. package/account/i18n/baseMessages/pt-BR.js.map +0 -1
  136. package/account/i18n/baseMessages/ru.js.map +0 -1
  137. package/account/i18n/baseMessages/sk.js.map +0 -1
  138. package/account/i18n/baseMessages/sv.js.map +0 -1
  139. package/account/i18n/baseMessages/th.js.map +0 -1
  140. package/account/i18n/baseMessages/tr.js.map +0 -1
  141. package/account/i18n/baseMessages/uk.js.map +0 -1
  142. package/account/i18n/baseMessages/zh-CN.js.map +0 -1
  143. package/login/i18n/baseMessages/ar.js.map +0 -1
  144. package/login/i18n/baseMessages/ca.js.map +0 -1
  145. package/login/i18n/baseMessages/cs.js.map +0 -1
  146. package/login/i18n/baseMessages/da.js.map +0 -1
  147. package/login/i18n/baseMessages/de.js.map +0 -1
  148. package/login/i18n/baseMessages/el.js.map +0 -1
  149. package/login/i18n/baseMessages/en.js.map +0 -1
  150. package/login/i18n/baseMessages/es.js.map +0 -1
  151. package/login/i18n/baseMessages/fa.js.map +0 -1
  152. package/login/i18n/baseMessages/fi.js.map +0 -1
  153. package/login/i18n/baseMessages/fr.js.map +0 -1
  154. package/login/i18n/baseMessages/hu.js.map +0 -1
  155. package/login/i18n/baseMessages/index.js.map +0 -1
  156. package/login/i18n/baseMessages/it.js.map +0 -1
  157. package/login/i18n/baseMessages/ja.js.map +0 -1
  158. package/login/i18n/baseMessages/lt.js.map +0 -1
  159. package/login/i18n/baseMessages/lv.js.map +0 -1
  160. package/login/i18n/baseMessages/nl.js.map +0 -1
  161. package/login/i18n/baseMessages/no.js.map +0 -1
  162. package/login/i18n/baseMessages/pl.js.map +0 -1
  163. package/login/i18n/baseMessages/pt-BR.js.map +0 -1
  164. package/login/i18n/baseMessages/ru.js.map +0 -1
  165. package/login/i18n/baseMessages/sk.js.map +0 -1
  166. package/login/i18n/baseMessages/sv.js.map +0 -1
  167. package/login/i18n/baseMessages/th.js.map +0 -1
  168. package/login/i18n/baseMessages/tr.js.map +0 -1
  169. package/login/i18n/baseMessages/uk.js.map +0 -1
  170. package/login/i18n/baseMessages/zh-CN.js.map +0 -1
  171. package/src/account/i18n/useI18n.ts +0 -44
  172. package/src/login/i18n/useI18n.ts +0 -44
  173. /package/account/i18n/{baseMessages → messages_defaultSet}/ar.d.ts +0 -0
  174. /package/account/i18n/{baseMessages → messages_defaultSet}/ar.js +0 -0
  175. /package/account/i18n/{baseMessages → messages_defaultSet}/ca.d.ts +0 -0
  176. /package/account/i18n/{baseMessages → messages_defaultSet}/ca.js +0 -0
  177. /package/account/i18n/{baseMessages → messages_defaultSet}/cs.d.ts +0 -0
  178. /package/account/i18n/{baseMessages → messages_defaultSet}/cs.js +0 -0
  179. /package/account/i18n/{baseMessages → messages_defaultSet}/da.d.ts +0 -0
  180. /package/account/i18n/{baseMessages → messages_defaultSet}/da.js +0 -0
  181. /package/account/i18n/{baseMessages → messages_defaultSet}/de.d.ts +0 -0
  182. /package/account/i18n/{baseMessages → messages_defaultSet}/de.js +0 -0
  183. /package/account/i18n/{baseMessages → messages_defaultSet}/el.d.ts +0 -0
  184. /package/account/i18n/{baseMessages → messages_defaultSet}/el.js +0 -0
  185. /package/account/i18n/{baseMessages → messages_defaultSet}/en.d.ts +0 -0
  186. /package/account/i18n/{baseMessages → messages_defaultSet}/en.js +0 -0
  187. /package/account/i18n/{baseMessages → messages_defaultSet}/es.d.ts +0 -0
  188. /package/account/i18n/{baseMessages → messages_defaultSet}/es.js +0 -0
  189. /package/account/i18n/{baseMessages → messages_defaultSet}/fa.d.ts +0 -0
  190. /package/account/i18n/{baseMessages → messages_defaultSet}/fa.js +0 -0
  191. /package/account/i18n/{baseMessages → messages_defaultSet}/fi.d.ts +0 -0
  192. /package/account/i18n/{baseMessages → messages_defaultSet}/fi.js +0 -0
  193. /package/account/i18n/{baseMessages → messages_defaultSet}/fr.d.ts +0 -0
  194. /package/account/i18n/{baseMessages → messages_defaultSet}/fr.js +0 -0
  195. /package/account/i18n/{baseMessages → messages_defaultSet}/hu.d.ts +0 -0
  196. /package/account/i18n/{baseMessages → messages_defaultSet}/hu.js +0 -0
  197. /package/account/i18n/{baseMessages → messages_defaultSet}/it.d.ts +0 -0
  198. /package/account/i18n/{baseMessages → messages_defaultSet}/it.js +0 -0
  199. /package/account/i18n/{baseMessages → messages_defaultSet}/ja.d.ts +0 -0
  200. /package/account/i18n/{baseMessages → messages_defaultSet}/ja.js +0 -0
  201. /package/account/i18n/{baseMessages → messages_defaultSet}/lt.d.ts +0 -0
  202. /package/account/i18n/{baseMessages → messages_defaultSet}/lt.js +0 -0
  203. /package/account/i18n/{baseMessages → messages_defaultSet}/lv.d.ts +0 -0
  204. /package/account/i18n/{baseMessages → messages_defaultSet}/lv.js +0 -0
  205. /package/account/i18n/{baseMessages → messages_defaultSet}/nl.d.ts +0 -0
  206. /package/account/i18n/{baseMessages → messages_defaultSet}/nl.js +0 -0
  207. /package/account/i18n/{baseMessages → messages_defaultSet}/no.d.ts +0 -0
  208. /package/account/i18n/{baseMessages → messages_defaultSet}/no.js +0 -0
  209. /package/account/i18n/{baseMessages → messages_defaultSet}/pl.d.ts +0 -0
  210. /package/account/i18n/{baseMessages → messages_defaultSet}/pl.js +0 -0
  211. /package/account/i18n/{baseMessages → messages_defaultSet}/pt-BR.d.ts +0 -0
  212. /package/account/i18n/{baseMessages → messages_defaultSet}/pt-BR.js +0 -0
  213. /package/account/i18n/{baseMessages → messages_defaultSet}/ru.d.ts +0 -0
  214. /package/account/i18n/{baseMessages → messages_defaultSet}/ru.js +0 -0
  215. /package/account/i18n/{baseMessages → messages_defaultSet}/sk.d.ts +0 -0
  216. /package/account/i18n/{baseMessages → messages_defaultSet}/sk.js +0 -0
  217. /package/account/i18n/{baseMessages → messages_defaultSet}/sv.d.ts +0 -0
  218. /package/account/i18n/{baseMessages → messages_defaultSet}/sv.js +0 -0
  219. /package/account/i18n/{baseMessages → messages_defaultSet}/th.d.ts +0 -0
  220. /package/account/i18n/{baseMessages → messages_defaultSet}/th.js +0 -0
  221. /package/account/i18n/{baseMessages → messages_defaultSet}/tr.d.ts +0 -0
  222. /package/account/i18n/{baseMessages → messages_defaultSet}/tr.js +0 -0
  223. /package/account/i18n/{baseMessages → messages_defaultSet}/uk.d.ts +0 -0
  224. /package/account/i18n/{baseMessages → messages_defaultSet}/uk.js +0 -0
  225. /package/account/i18n/{baseMessages → messages_defaultSet}/zh-CN.d.ts +0 -0
  226. /package/account/i18n/{baseMessages → messages_defaultSet}/zh-CN.js +0 -0
  227. /package/login/i18n/{baseMessages → messages_defaultSet}/ar.d.ts +0 -0
  228. /package/login/i18n/{baseMessages → messages_defaultSet}/ar.js +0 -0
  229. /package/login/i18n/{baseMessages → messages_defaultSet}/ca.d.ts +0 -0
  230. /package/login/i18n/{baseMessages → messages_defaultSet}/ca.js +0 -0
  231. /package/login/i18n/{baseMessages → messages_defaultSet}/cs.d.ts +0 -0
  232. /package/login/i18n/{baseMessages → messages_defaultSet}/cs.js +0 -0
  233. /package/login/i18n/{baseMessages → messages_defaultSet}/da.d.ts +0 -0
  234. /package/login/i18n/{baseMessages → messages_defaultSet}/da.js +0 -0
  235. /package/login/i18n/{baseMessages → messages_defaultSet}/de.d.ts +0 -0
  236. /package/login/i18n/{baseMessages → messages_defaultSet}/de.js +0 -0
  237. /package/login/i18n/{baseMessages → messages_defaultSet}/el.d.ts +0 -0
  238. /package/login/i18n/{baseMessages → messages_defaultSet}/el.js +0 -0
  239. /package/login/i18n/{baseMessages → messages_defaultSet}/en.d.ts +0 -0
  240. /package/login/i18n/{baseMessages → messages_defaultSet}/en.js +0 -0
  241. /package/login/i18n/{baseMessages → messages_defaultSet}/es.d.ts +0 -0
  242. /package/login/i18n/{baseMessages → messages_defaultSet}/es.js +0 -0
  243. /package/login/i18n/{baseMessages → messages_defaultSet}/fa.d.ts +0 -0
  244. /package/login/i18n/{baseMessages → messages_defaultSet}/fa.js +0 -0
  245. /package/login/i18n/{baseMessages → messages_defaultSet}/fi.d.ts +0 -0
  246. /package/login/i18n/{baseMessages → messages_defaultSet}/fi.js +0 -0
  247. /package/login/i18n/{baseMessages → messages_defaultSet}/fr.d.ts +0 -0
  248. /package/login/i18n/{baseMessages → messages_defaultSet}/fr.js +0 -0
  249. /package/login/i18n/{baseMessages → messages_defaultSet}/hu.d.ts +0 -0
  250. /package/login/i18n/{baseMessages → messages_defaultSet}/hu.js +0 -0
  251. /package/login/i18n/{baseMessages → messages_defaultSet}/it.d.ts +0 -0
  252. /package/login/i18n/{baseMessages → messages_defaultSet}/it.js +0 -0
  253. /package/login/i18n/{baseMessages → messages_defaultSet}/ja.d.ts +0 -0
  254. /package/login/i18n/{baseMessages → messages_defaultSet}/ja.js +0 -0
  255. /package/login/i18n/{baseMessages → messages_defaultSet}/lt.d.ts +0 -0
  256. /package/login/i18n/{baseMessages → messages_defaultSet}/lt.js +0 -0
  257. /package/login/i18n/{baseMessages → messages_defaultSet}/lv.d.ts +0 -0
  258. /package/login/i18n/{baseMessages → messages_defaultSet}/lv.js +0 -0
  259. /package/login/i18n/{baseMessages → messages_defaultSet}/nl.d.ts +0 -0
  260. /package/login/i18n/{baseMessages → messages_defaultSet}/nl.js +0 -0
  261. /package/login/i18n/{baseMessages → messages_defaultSet}/no.d.ts +0 -0
  262. /package/login/i18n/{baseMessages → messages_defaultSet}/no.js +0 -0
  263. /package/login/i18n/{baseMessages → messages_defaultSet}/pl.d.ts +0 -0
  264. /package/login/i18n/{baseMessages → messages_defaultSet}/pl.js +0 -0
  265. /package/login/i18n/{baseMessages → messages_defaultSet}/pt-BR.d.ts +0 -0
  266. /package/login/i18n/{baseMessages → messages_defaultSet}/pt-BR.js +0 -0
  267. /package/login/i18n/{baseMessages → messages_defaultSet}/ru.d.ts +0 -0
  268. /package/login/i18n/{baseMessages → messages_defaultSet}/ru.js +0 -0
  269. /package/login/i18n/{baseMessages → messages_defaultSet}/sk.d.ts +0 -0
  270. /package/login/i18n/{baseMessages → messages_defaultSet}/sk.js +0 -0
  271. /package/login/i18n/{baseMessages → messages_defaultSet}/sv.d.ts +0 -0
  272. /package/login/i18n/{baseMessages → messages_defaultSet}/sv.js +0 -0
  273. /package/login/i18n/{baseMessages → messages_defaultSet}/th.d.ts +0 -0
  274. /package/login/i18n/{baseMessages → messages_defaultSet}/th.js +0 -0
  275. /package/login/i18n/{baseMessages → messages_defaultSet}/tr.d.ts +0 -0
  276. /package/login/i18n/{baseMessages → messages_defaultSet}/tr.js +0 -0
  277. /package/login/i18n/{baseMessages → messages_defaultSet}/uk.d.ts +0 -0
  278. /package/login/i18n/{baseMessages → messages_defaultSet}/uk.js +0 -0
  279. /package/login/i18n/{baseMessages → messages_defaultSet}/zh-CN.d.ts +0 -0
  280. /package/login/i18n/{baseMessages → messages_defaultSet}/zh-CN.js +0 -0
  281. /package/src/account/i18n/{baseMessages → messages_defaultSet}/ar.ts +0 -0
  282. /package/src/account/i18n/{baseMessages → messages_defaultSet}/ca.ts +0 -0
  283. /package/src/account/i18n/{baseMessages → messages_defaultSet}/cs.ts +0 -0
  284. /package/src/account/i18n/{baseMessages → messages_defaultSet}/da.ts +0 -0
  285. /package/src/account/i18n/{baseMessages → messages_defaultSet}/de.ts +0 -0
  286. /package/src/account/i18n/{baseMessages → messages_defaultSet}/el.ts +0 -0
  287. /package/src/account/i18n/{baseMessages → messages_defaultSet}/en.ts +0 -0
  288. /package/src/account/i18n/{baseMessages → messages_defaultSet}/es.ts +0 -0
  289. /package/src/account/i18n/{baseMessages → messages_defaultSet}/fa.ts +0 -0
  290. /package/src/account/i18n/{baseMessages → messages_defaultSet}/fi.ts +0 -0
  291. /package/src/account/i18n/{baseMessages → messages_defaultSet}/fr.ts +0 -0
  292. /package/src/account/i18n/{baseMessages → messages_defaultSet}/hu.ts +0 -0
  293. /package/src/account/i18n/{baseMessages → messages_defaultSet}/it.ts +0 -0
  294. /package/src/account/i18n/{baseMessages → messages_defaultSet}/ja.ts +0 -0
  295. /package/src/account/i18n/{baseMessages → messages_defaultSet}/lt.ts +0 -0
  296. /package/src/account/i18n/{baseMessages → messages_defaultSet}/lv.ts +0 -0
  297. /package/src/account/i18n/{baseMessages → messages_defaultSet}/nl.ts +0 -0
  298. /package/src/account/i18n/{baseMessages → messages_defaultSet}/no.ts +0 -0
  299. /package/src/account/i18n/{baseMessages → messages_defaultSet}/pl.ts +0 -0
  300. /package/src/account/i18n/{baseMessages → messages_defaultSet}/pt-BR.ts +0 -0
  301. /package/src/account/i18n/{baseMessages → messages_defaultSet}/ru.ts +0 -0
  302. /package/src/account/i18n/{baseMessages → messages_defaultSet}/sk.ts +0 -0
  303. /package/src/account/i18n/{baseMessages → messages_defaultSet}/sv.ts +0 -0
  304. /package/src/account/i18n/{baseMessages → messages_defaultSet}/th.ts +0 -0
  305. /package/src/account/i18n/{baseMessages → messages_defaultSet}/tr.ts +0 -0
  306. /package/src/account/i18n/{baseMessages → messages_defaultSet}/uk.ts +0 -0
  307. /package/src/account/i18n/{baseMessages → messages_defaultSet}/zh-CN.ts +0 -0
  308. /package/src/login/i18n/{baseMessages → messages_defaultSet}/ar.ts +0 -0
  309. /package/src/login/i18n/{baseMessages → messages_defaultSet}/ca.ts +0 -0
  310. /package/src/login/i18n/{baseMessages → messages_defaultSet}/cs.ts +0 -0
  311. /package/src/login/i18n/{baseMessages → messages_defaultSet}/da.ts +0 -0
  312. /package/src/login/i18n/{baseMessages → messages_defaultSet}/de.ts +0 -0
  313. /package/src/login/i18n/{baseMessages → messages_defaultSet}/el.ts +0 -0
  314. /package/src/login/i18n/{baseMessages → messages_defaultSet}/en.ts +0 -0
  315. /package/src/login/i18n/{baseMessages → messages_defaultSet}/es.ts +0 -0
  316. /package/src/login/i18n/{baseMessages → messages_defaultSet}/fa.ts +0 -0
  317. /package/src/login/i18n/{baseMessages → messages_defaultSet}/fi.ts +0 -0
  318. /package/src/login/i18n/{baseMessages → messages_defaultSet}/fr.ts +0 -0
  319. /package/src/login/i18n/{baseMessages → messages_defaultSet}/hu.ts +0 -0
  320. /package/src/login/i18n/{baseMessages → messages_defaultSet}/it.ts +0 -0
  321. /package/src/login/i18n/{baseMessages → messages_defaultSet}/ja.ts +0 -0
  322. /package/src/login/i18n/{baseMessages → messages_defaultSet}/lt.ts +0 -0
  323. /package/src/login/i18n/{baseMessages → messages_defaultSet}/lv.ts +0 -0
  324. /package/src/login/i18n/{baseMessages → messages_defaultSet}/nl.ts +0 -0
  325. /package/src/login/i18n/{baseMessages → messages_defaultSet}/no.ts +0 -0
  326. /package/src/login/i18n/{baseMessages → messages_defaultSet}/pl.ts +0 -0
  327. /package/src/login/i18n/{baseMessages → messages_defaultSet}/pt-BR.ts +0 -0
  328. /package/src/login/i18n/{baseMessages → messages_defaultSet}/ru.ts +0 -0
  329. /package/src/login/i18n/{baseMessages → messages_defaultSet}/sk.ts +0 -0
  330. /package/src/login/i18n/{baseMessages → messages_defaultSet}/sv.ts +0 -0
  331. /package/src/login/i18n/{baseMessages → messages_defaultSet}/th.ts +0 -0
  332. /package/src/login/i18n/{baseMessages → messages_defaultSet}/tr.ts +0 -0
  333. /package/src/login/i18n/{baseMessages → messages_defaultSet}/uk.ts +0 -0
  334. /package/src/login/i18n/{baseMessages → messages_defaultSet}/zh-CN.ts +0 -0
@@ -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,93 +60,7 @@ if( kcContext.resourceUrl && !kcContext.url ){
42
60
  enumerable: false
43
61
  });
44
62
  }
45
- kcContext["x-keycloakify"] = {
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.group??>
56
- <#if attribute.group.displayDescription??>
57
- "${attribute.group.displayDescription}": decodeHtmlEntities("${advancedMsg(attribute.group.displayDescription)?js_string}"),
58
- </#if>
59
- <#if attribute.group.displayHeader??>
60
- "${attribute.group.displayHeader}": decodeHtmlEntities("${advancedMsg(attribute.group.displayHeader)?js_string}"),
61
- </#if>
62
- </#if>
63
- <#if attribute.annotations??>
64
- <#if attribute.annotations.inputHelperTextBefore??>
65
- "${attribute.annotations.inputHelperTextBefore}": decodeHtmlEntities("${advancedMsg(attribute.annotations.inputHelperTextBefore)?js_string}"),
66
- </#if>
67
- <#if attribute.annotations.inputHelperTextAfter??>
68
- "${attribute.annotations.inputHelperTextAfter}": decodeHtmlEntities("${advancedMsg(attribute.annotations.inputHelperTextAfter)?js_string}"),
69
- </#if>
70
- <#if attribute.annotations.inputTypePlaceholder??>
71
- "${attribute.annotations.inputTypePlaceholder}": decodeHtmlEntities("${advancedMsg(attribute.annotations.inputTypePlaceholder)?js_string}"),
72
- </#if>
73
- <!-- Loop through the options that are in attribute.validators.options.options -->
74
- <#if (
75
- attribute.annotations.inputOptionLabelsI18nPrefix?? &&
76
- attribute.validators?? &&
77
- attribute.validators.options??
78
- )>
79
- <#list attribute.validators.options.options as option>
80
- "${attribute.annotations.inputOptionLabelsI18nPrefix}.${option}": decodeHtmlEntities("${msg(attribute.annotations.inputOptionLabelsI18nPrefix + "." + option)?js_string}"),
81
- </#list>
82
- </#if>
83
- </#if>
84
- </#list>
85
- };
86
- Object.assign(kcContext["x-keycloakify"].messages, messages);
87
- }
88
- </#if>
89
- <#if pageId == "terms.ftl" || termsAcceptanceRequired?? && termsAcceptanceRequired>
90
- kcContext["x-keycloakify"].messages["termsText"]= decodeHtmlEntities("${msg("termsText")?js_string}");
91
- </#if>
92
- <#if auth?? && auth.authenticationSelections??>
93
- {
94
- var messages = {
95
- <#list auth.authenticationSelections as authenticationSelection>
96
- <#if authenticationSelection.displayName??>
97
- "${authenticationSelection.displayName}": decodeHtmlEntities("${advancedMsg(authenticationSelection.displayName)?js_string}"),
98
- </#if>
99
- <#if authenticationSelection.helpText??>
100
- "${authenticationSelection.helpText}": decodeHtmlEntities("${advancedMsg(authenticationSelection.helpText)?js_string}"),
101
- </#if>
102
- </#list>
103
- };
104
- Object.assign(kcContext["x-keycloakify"].messages, messages);
105
- }
106
- </#if>
107
- <#if themeType == "login" && pageId == "info.ftl" && requiredActions??>
108
- {
109
- var messages = {
110
- <#list requiredActions as requiredAction>
111
- "requiredAction.${requiredAction}": decodeHtmlEntities("${advancedMsg("requiredAction." + requiredAction)?js_string}"),
112
- </#list>
113
- };
114
- Object.assign(kcContext["x-keycloakify"].messages, messages);
115
- }
116
- </#if>
117
- <#if authenticators?? && authenticators.authenticators??>
118
- {
119
- var messages = {
120
- <#list authenticators.authenticators as authenticator>
121
- "${authenticator.label}": decodeHtmlEntities("${advancedMsg(authenticator.label)?js_string}"),
122
- <#if authenticator.transports?? && authenticator.transports.displayNameProperties??>
123
- <#list authenticator.transports.displayNameProperties as displayNameProperty>
124
- "${displayNameProperty}": decodeHtmlEntities("${advancedMsg(displayNameProperty)?js_string}"),
125
- </#list>
126
- </#if>
127
- </#list>
128
- };
129
- Object.assign(kcContext["x-keycloakify"].messages, messages);
130
- }
131
- </#if>
63
+
132
64
  attributes_to_attributesByName: {
133
65
  if( !kcContext.profile ){
134
66
  break attributes_to_attributesByName;
@@ -579,6 +511,17 @@ function decodeHtmlEntities(htmlStr){
579
511
  <#return object?c>
580
512
  </#if>
581
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
+
582
525
  <#attempt>
583
526
  <#return '"' + object?js_string + '"'>;
584
527
  <#recover>
@@ -629,4 +572,73 @@ function decodeHtmlEntities(htmlStr){
629
572
 
630
573
  <#function are_same_path path searchedPath>
631
574
  <#return path?size == searchedPath?size && is_subpath(path, searchedPath)>
632
- </#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
+
@@ -22,7 +22,7 @@ export function generateMessageProperties(params: {
22
22
  "src",
23
23
  themeType,
24
24
  "i18n",
25
- "baseMessages"
25
+ "messages_defaultSet"
26
26
  );
27
27
 
28
28
  const baseMessageBundle: { [languageTag: string]: Record<string, string> } =
@@ -591,6 +591,7 @@ export type Attribute = {
591
591
  value?: string;
592
592
  values?: string[];
593
593
  group?: {
594
+ annotations: Record<string, string>;
594
595
  html5DataAnnotations: Record<string, string>;
595
596
  displayHeader?: string;
596
597
  name: string;
@@ -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
+ };
@@ -1,9 +1,10 @@
1
1
  import "keycloakify/tools/Object.fromEntries";
2
2
  import { assert } from "tsafe/assert";
3
- import messages_fallbackLanguage from "./baseMessages/en";
4
- import { getMessages } from "./baseMessages";
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 = keyof typeof messages_fallbackLanguage;
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
- * msg("access-denied") === <span>Access denied</span>
45
- * msg("impersonateTitleHtml", "Foo") === <span><strong>Foo</strong> Impersonate User</span>
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 &lt;strong&gt;XXX&lt;/strong&gt;"
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
- * advancedMsg("${access-denied} foo bar") === <span>{msgStr("access-denied")} foo bar<span> === <span>Access denied foo bar</span>
68
- * advancedMsg("${access-denied}") === advancedMsg("access-denied") === msg("access-denied") === <span>Access denied</span>
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 &lt;strong&gt;XXX&lt;/strong&gt;</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 function createGetI18n<ExtraMessageKey extends string = never>(messageBundle: {
92
- [languageTag: string]: { [key in ExtraMessageKey]: string };
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 = GenericI18n<MessageKey | ExtraMessageKey>;
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<MessageKey, ExtraMessageKey>({
130
- messages_fallbackLanguage,
131
- messageBundle_fallbackLanguage: messageBundle[fallbackLanguageTag],
132
- messageBundle_currentLanguage: messageBundle[partialI18n.currentLanguageTag],
133
- messageBundle_realm: kcContext["x-keycloakify"].messages
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
- messages_currentLanguage: isCurrentLanguageFallbackLanguage ? messages_fallbackLanguage : undefined
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 messages_currentLanguage = await getMessages(partialI18n.currentLanguageTag);
149
+ const messages_defaultSet_currentLanguage = await fetchMessages_defaultSet(partialI18n.currentLanguageTag);
150
150
 
151
151
  const i18n_currentLanguage: I18n = {
152
152
  ...partialI18n,
153
- ...createI18nTranslationFunctions({ messages_currentLanguage }),
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<MessageKey extends string, ExtraMessageKey extends string>(params: {
177
- messages_fallbackLanguage: Record<MessageKey, string>;
178
- messageBundle_fallbackLanguage: Record<ExtraMessageKey, string> | undefined;
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 { messageBundle_currentLanguage, messageBundle_realm } = params;
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
- messages_currentLanguage: Partial<Record<MessageKey, string>> | undefined;
191
- }): Pick<GenericI18n<MessageKey | ExtraMessageKey>, "msg" | "msgStr" | "advancedMsg" | "advancedMsgStr"> {
192
- const messages_currentLanguage = {
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)[]; doRenderAsHtml: boolean }): string | JSX.Element | undefined {
198
- const { key, args, doRenderAsHtml } = props;
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
- const messageOrUndefined = (messages_currentLanguage as any)[key] ?? (messages_fallbackLanguage as any)[key];
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
- return messageOrUndefined;
217
- })();
218
-
219
- if (messageOrUndefined === undefined) {
196
+ if (message === undefined) {
220
197
  return undefined;
221
198
  }
222
199
 
223
- const message = messageOrUndefined;
224
-
225
- const messageWithArgsInjectedIfAny = (() => {
226
- const startIndex = message
227
- .match(/{[0-9]+}/g)
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, "&lt;").replace(/>/g, "&gt;")
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
- function resolveMsgAdvanced(props: { key: string; args: (string | undefined)[]; doRenderAsHtml: boolean }): JSX.Element | string {
266
- const { key, args, doRenderAsHtml } = props;
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
- if (!/\$\{[^}]+\}/.test(key)) {
288
- const resolvedMessage = resolveMsg({ key, args, doRenderAsHtml });
211
+ let messageWithArgsInjected = message;
289
212
 
290
- if (resolvedMessage === undefined) {
291
- return doRenderAsHtml ? <span dangerouslySetInnerHTML={{ __html: key }} /> : key;
213
+ args.forEach((arg, i) => {
214
+ if (arg === undefined) {
215
+ return;
292
216
  }
293
217
 
294
- return resolvedMessage;
295
- }
296
-
297
- let isFirstMatch = true;
218
+ messageWithArgsInjected = messageWithArgsInjected.replace(
219
+ new RegExp(`\\{${i + startIndex}\\}`, "g"),
220
+ arg.replace(/</g, "&lt;").replace(/>/g, "&gt;")
221
+ );
222
+ });
298
223
 
299
- const resolvedComplexMessage = key.replace(/\$\{([^}]+)\}/g, (...[, key_i]) => {
300
- const replaceBy = resolveMsg({ key: key_i, args: isFirstMatch ? args : [], doRenderAsHtml: false }) ?? key_i;
224
+ return messageWithArgsInjected;
225
+ }
301
226
 
302
- isFirstMatch = false;
227
+ function resolveMsgAdvanced(props: { key: string; args: (string | undefined)[] }): string {
228
+ const { key, args } = props;
303
229
 
304
- return replaceBy;
305
- });
230
+ const match = key.match(/^\$\{(.+)\}$/);
306
231
 
307
- return doRenderAsHtml ? <span dangerouslySetInnerHTML={{ __html: resolvedComplexMessage }} /> : resolvedComplexMessage;
232
+ return resolveMsg({ key: match !== null ? match[1] : key, args }) ?? key;
308
233
  }
309
234
 
310
235
  return {
311
- msgStr: (key, ...args) => resolveMsg({ key, args, doRenderAsHtml: false }) as string,
312
- msg: (key, ...args) => resolveMsg({ key, args, doRenderAsHtml: true }) as JSX.Element,
313
- advancedMsg: (key, ...args) =>
314
- resolveMsgAdvanced({
315
- key,
316
- args,
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
 
@@ -1,4 +1,5 @@
1
- import type { GenericI18n, MessageKey, KcContextLike } from "./i18n";
2
- export type { MessageKey, KcContextLike };
3
- export type I18n = GenericI18n<MessageKey>;
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 getMessages(currentLanguageTag: string) {
6
- const { default: messages } = await (() => {
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 messages;
38
+ return messages_defaultSet;
39
39
  }