Allow to lazily load therms

This commit is contained in:
Joseph Garrone 2021-04-08 17:06:09 +02:00
parent ed7d5eabcb
commit 1bb19f65a2
9 changed files with 55 additions and 15 deletions

View File

@ -49,7 +49,7 @@ crawl(".").forEach(filePath => {
child_process.execSync(`rm -r ${tmpDirPath}`); child_process.execSync(`rm -r ${tmpDirPath}`);
const targetDirPath = pathJoin(getProjectRoot(), "src", "lib", "i18n", "generated_messages"); const targetDirPath = pathJoin(getProjectRoot(), "src", "lib", "i18n", "generated_kcMessages");
fs.mkdirSync(targetDirPath, { "recursive": true }); fs.mkdirSync(targetDirPath, { "recursive": true });
@ -65,7 +65,7 @@ Object.keys(record).forEach(pageType => {
'//PLEASE DO NOT EDIT MANUALLY', '//PLEASE DO NOT EDIT MANUALLY',
'', '',
'/* spell-checker: disable */', '/* spell-checker: disable */',
`export const messages= ${JSON.stringify(record[pageType], null, 2)};`, `export const kcMessages= ${JSON.stringify(record[pageType], null, 2)};`,
'/* spell-checker: enable */' '/* spell-checker: enable */'
].join("\n"), "utf8") ].join("\n"), "utf8")
); );

View File

@ -1,8 +1,8 @@
import { objectKeys } from "evt/tools/typeSafety/objectKeys"; import { objectKeys } from "evt/tools/typeSafety/objectKeys";
import { messages } from "./generated_messages/login"; import { kcMessages } from "./kcMessages/login";
export type KcLanguageTag = keyof typeof messages; export type KcLanguageTag = keyof typeof kcMessages;
export type LanguageLabel = export type LanguageLabel =
/* spell-checker: disable */ /* spell-checker: disable */
@ -40,7 +40,7 @@ export function getKcLanguageTagLabel(language: KcLanguageTag): LanguageLabel {
} }
const availableLanguages = objectKeys(messages); const availableLanguages = objectKeys(kcMessages);
/** /**
* Pass in "fr-FR" or "français" for example, it will return the AvailableLanguage * Pass in "fr-FR" or "français" for example, it will return the AvailableLanguage

View File

@ -2,7 +2,7 @@
//PLEASE DO NOT EDIT MANUALLY //PLEASE DO NOT EDIT MANUALLY
/* spell-checker: disable */ /* spell-checker: disable */
export const messages= { export const kcMessages= {
"ca": { "ca": {
"doSave": "Desa", "doSave": "Desa",
"doCancel": "Cancel·la", "doCancel": "Cancel·la",

View File

@ -2,7 +2,7 @@
//PLEASE DO NOT EDIT MANUALLY //PLEASE DO NOT EDIT MANUALLY
/* spell-checker: disable */ /* spell-checker: disable */
export const messages= { export const kcMessages= {
"ca": { "ca": {
"invalidPasswordHistoryMessage": "Contrasenya incorrecta: no pot ser igual a cap de les últimes {0} contrasenyes.", "invalidPasswordHistoryMessage": "Contrasenya incorrecta: no pot ser igual a cap de les últimes {0} contrasenyes.",
"invalidPasswordMinDigitsMessage": "Contraseña incorrecta: debe contener al menos {0} caracteres numéricos.", "invalidPasswordMinDigitsMessage": "Contraseña incorrecta: debe contener al menos {0} caracteres numéricos.",

View File

@ -2,7 +2,7 @@
//PLEASE DO NOT EDIT MANUALLY //PLEASE DO NOT EDIT MANUALLY
/* spell-checker: disable */ /* spell-checker: disable */
export const messages= { export const kcMessages= {
"ca": { "ca": {
"emailVerificationSubject": "Verificació d'email", "emailVerificationSubject": "Verificació d'email",
"emailVerificationBody": "Algú ha creat un compte de {2} amb aquesta adreça de correu electrònic. Si has estat tu, fes clic a l'enllaç següent per verificar la teva adreça de correu electrònic.\n\n{0}\n\nAquest enllaç expirarà en {1} minuts.\n\nSi tu no has creat aquest compte, simplement ignora aquest missatge.", "emailVerificationBody": "Algú ha creat un compte de {2} amb aquesta adreça de correu electrònic. Si has estat tu, fes clic a l'enllaç següent per verificar la teva adreça de correu electrònic.\n\n{0}\n\nAquest enllaç expirarà en {1} minuts.\n\nSi tu no has creat aquest compte, simplement ignora aquest missatge.",

View File

@ -2,7 +2,7 @@
//PLEASE DO NOT EDIT MANUALLY //PLEASE DO NOT EDIT MANUALLY
/* spell-checker: disable */ /* spell-checker: disable */
export const messages= { export const kcMessages= {
"ca": { "ca": {
"doLogIn": "Inicia sessió", "doLogIn": "Inicia sessió",
"doRegister": "Registra't", "doRegister": "Registra't",

View File

@ -0,0 +1,33 @@
import { kcMessages } from "../generated_kcMessages/login";
import { Evt } from "evt";
import { objectKeys } from "evt/tools/typeSafety/objectKeys";
export const evtTermsUpdated = Evt.asNonPostable(Evt.create<void>());
objectKeys(kcMessages).forEach(kcLanguage =>
Object.defineProperty(
kcMessages[kcLanguage],
"termsText",
(() => {
let value = kcMessages[kcLanguage].termsText;
return {
"enumerable": true,
"get": () => value,
"set": (newValue: string) => {
Evt.asPostable(evtTermsUpdated).post();
value = newValue;
}
};
})()
)
);
export { kcMessages };

View File

@ -1,21 +1,26 @@
import { useCallback } from "react"; import { useCallback, useReducer } from "react";
import { useKcLanguageTag } from "./useKcLanguageTag"; import { useKcLanguageTag } from "./useKcLanguageTag";
import { messages } from "./generated_messages/login"; import { kcMessages, evtTermsUpdated } from "./kcMessages/login";
import type { ReactNode } from "react"; import type { ReactNode } from "react";
import { useEvt } from "evt/hooks";
//@ts-ignore //@ts-ignore
import * as markdown from "markdown"; import * as markdown from "markdown";
export type MessageKey = keyof typeof messages["en"]; export type MessageKey = keyof typeof kcMessages["en"];
export function useKcMessage() { export function useKcMessage() {
const { kcLanguageTag } = useKcLanguageTag(); const { kcLanguageTag } = useKcLanguageTag();
const [trigger, forceUpdate] = useReducer((counter: number) => counter + 1, 0);
useEvt(ctx => evtTermsUpdated.attach(ctx, forceUpdate), []);
const msgStr = useCallback( const msgStr = useCallback(
(key: MessageKey, ...args: (string | undefined)[]): string => { (key: MessageKey, ...args: (string | undefined)[]): string => {
let str: string = messages[kcLanguageTag as any as "en"][key] ?? messages["en"][key]; let str: string = kcMessages[kcLanguageTag as any as "en"][key] ?? kcMessages["en"][key];
args.forEach((arg, i) => { args.forEach((arg, i) => {
@ -30,7 +35,7 @@ export function useKcMessage() {
return str; return str;
}, },
[kcLanguageTag] [kcLanguageTag, trigger]
); );
const msg = useCallback<(...args: Parameters<typeof msgStr>) => ReactNode>( const msg = useCallback<(...args: Parameters<typeof msgStr>) => ReactNode>(
@ -43,7 +48,7 @@ export function useKcMessage() {
}} }}
/> />
, ,
[kcLanguageTag] [kcLanguageTag, trigger]
); );
return { msg, msgStr }; return { msg, msgStr };

View File

@ -3,6 +3,7 @@ export * from "./KcContext";
export * from "./i18n/KcLanguageTag"; export * from "./i18n/KcLanguageTag";
export * from "./i18n/useKcLanguageTag"; export * from "./i18n/useKcLanguageTag";
export * from "./i18n/useKcMessage"; export * from "./i18n/useKcMessage";
export * from "./i18n/kcMessages/login";
export * from "./components/KcProps"; export * from "./components/KcProps";
export * from "./components/Login"; export * from "./components/Login";
@ -16,4 +17,5 @@ export * from "./keycloakJsAdapter";
export * from "./tools/assert"; export * from "./tools/assert";
export * as kcContextMocks from "./kcContextMocks"; export * as kcContextMocks from "./kcContextMocks";