Как говорится в названии, есть ли способ сделать приведенное ниже более эффективным? Основная проблема заключается в том, что невозможно предсказать ввод пользователя, однако я открыт для альтернативных способов, если использование будет примерно таким же
import base from "../locale/base.json";
import en from "../locale/en.json";
type Language = keyof typeof languages;
const languages: Record<"en", typeof base> = { en };
export const setLanguage = <T extends Language>(
lang: T
): ((placholders?: object) => typeof base) => {
return (placeholders) => {
let translation = languages[lang];
for (const [placeholderKey, placeholderValue] of Object.entries(
placeholders ?? {}
)) {
for (const [key, value] of Object.entries(translation)) {
if (typeof value === "string") {
translation = {
...translation,
[key]: value.replace(
new RegExp(`{{${placeholderKey}}}`, "g"),
placeholderValue
),
};
}
if (Array.isArray(value)) {
translation = {
...translation,
[key]: value.map((val) =>
val.replace(
new RegExp(`{{${placeholderKey}}}`, "g"),
placeholderValue
)
),
};
}
}
}
return translation;
};
};
const x = setLanguage("en");
x().test;