From 01bc0518b90b0dbd16fbcef0fd1d9b0baca1eed1 Mon Sep 17 00:00:00 2001 From: Bruno Tot Date: Fri, 15 Sep 2023 11:34:23 +0200 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20[feat]:=20Refactor=20messages=20mod?= =?UTF-8?q?el=20to=20dynamically=20import=20translations?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/src/messages/message.factory.ts | 4 +-- packages/core/src/messages/message.types.ts | 8 +++-- packages/core/src/messages/model/locale.ts | 4 +-- packages/core/src/messages/model/messages.ts | 29 +++++++------------ 4 files changed, 20 insertions(+), 25 deletions(-) diff --git a/packages/core/src/messages/message.factory.ts b/packages/core/src/messages/message.factory.ts index d5c2df429..343a217ad 100644 --- a/packages/core/src/messages/message.factory.ts +++ b/packages/core/src/messages/message.factory.ts @@ -1,5 +1,5 @@ import { getLocale } from "./model/locale"; -import localizedMessages from "./model/messages"; +import localeMessages from "./model/messages"; function sprintf(str: string, ...args: any[]) { return str.replace(/{(\d+)}/g, function (match, number) { @@ -10,7 +10,7 @@ function sprintf(str: string, ...args: any[]) { // Central method for getting translation handlers. const t = (key: string, ...args: any[]) => { const locale = getLocale(); - const service = localizedMessages[locale]; + const service = localeMessages[locale]; return sprintf(service[key], ...args); }; diff --git a/packages/core/src/messages/message.types.ts b/packages/core/src/messages/message.types.ts index 7b4726b52..bf6cfb649 100644 --- a/packages/core/src/messages/message.types.ts +++ b/packages/core/src/messages/message.types.ts @@ -1,7 +1,9 @@ -export type Locale = "hr" | "en" | "de" | "es" | "fr" | "it" | "nl"; +export const Locales = ["hr", "en", "de", "es", "fr", "it", "nl"] as const; -export type LocaleDefault = "en"; +export type Locale = (typeof Locales)[number]; -export type LocalizedMessages = Record; +export const LocaleDefault: Locale = "en"; + +export type LocaleMessages = Record; export type Messages = Record; diff --git a/packages/core/src/messages/model/locale.ts b/packages/core/src/messages/model/locale.ts index 4cb1453e2..e3a47c4b8 100644 --- a/packages/core/src/messages/model/locale.ts +++ b/packages/core/src/messages/model/locale.ts @@ -1,6 +1,6 @@ -import { Locale } from "../message.types"; +import { Locale, LocaleDefault } from "../message.types"; -let locale: Locale = "en"; +let locale: Locale = LocaleDefault; function getLocale(): Locale { return locale; diff --git a/packages/core/src/messages/model/messages.ts b/packages/core/src/messages/model/messages.ts index 40cec4076..f9c04d6d8 100644 --- a/packages/core/src/messages/model/messages.ts +++ b/packages/core/src/messages/model/messages.ts @@ -1,20 +1,13 @@ -import { LocalizedMessages } from "../message.types"; -import * as MessageFormatDe from "../translations/de.json"; -import * as MessageFormatEn from "../translations/en.json"; -import * as MessageFormatEs from "../translations/es.json"; -import * as MessageFormatFr from "../translations/fr.json"; -import * as MessageFormatHr from "../translations/hr.json"; -import * as MessageFormatIt from "../translations/it.json"; -import * as MessageFormatNl from "../translations/nl.json"; +import { LocaleMessages, Locales } from "../message.types"; -const localizedMessages: LocalizedMessages = { - en: MessageFormatEn, - hr: MessageFormatHr, - de: MessageFormatDe, - es: MessageFormatEs, - fr: MessageFormatFr, - it: MessageFormatIt, - nl: MessageFormatNl, -}; +function buildLocaleMessages(): LocaleMessages { + return Locales.reduce( + (result, locale) => ({ + ...result, + [locale]: require(`../translations/${locale}.json`), + }), + {} + ) as LocaleMessages; +} -export default localizedMessages; +export default buildLocaleMessages();