From 42b75e8440c8b298f0ee7f404f7918f499da6574 Mon Sep 17 00:00:00 2001 From: flx-sta <50131232+flx-sta@users.noreply.github.com> Date: Sat, 5 Oct 2024 14:01:41 -0700 Subject: [PATCH] [Qol] Make i18n money formatter controlled by translators (#4550) * fix: i18n money formatter * fix wrongful console.warn on i18n money formatter * update locales submodule update reference to `56eeb809eb5a2de40cfc5bc6128a78bef14deea9` (from `3ccef8472dd7cc7c362538489954cb8fdad27e5f`) --- public/locales | 2 +- src/plugins/i18n.ts | 38 ++++++++++++++++++++------------------ 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/public/locales b/public/locales index 3ccef8472dd..56eeb809eb5 160000 --- a/public/locales +++ b/public/locales @@ -1 +1 @@ -Subproject commit 3ccef8472dd7cc7c362538489954cb8fdad27e5f +Subproject commit 56eeb809eb5a2de40cfc5bc6128a78bef14deea9 diff --git a/src/plugins/i18n.ts b/src/plugins/i18n.ts index 676e47c19b8..be4c6983c0a 100644 --- a/src/plugins/i18n.ts +++ b/src/plugins/i18n.ts @@ -100,6 +100,22 @@ async function initFonts(language: string | undefined) { } } +/** + * I18n money formatter with. (useful for BBCode coloring of text)\ + * *If you don't want the BBCode tag applied, just use 'number' formatter* + * @example Input: `{{myMoneyValue, money}}` + * Output: `@[MONEY]{₽100,000,000}` + * @param amount the money amount + * @returns a money formatted string + */ +function i18nMoneyFormatter(amount: any): string { + if (isNaN(Number(amount))) { + console.warn(`i18nMoneyFormatter: value "${amount}" is not a number!`); + } + + return `@[MONEY]{${i18next.t("common:money", { amount })}}`; +} + //#region Exports /** @@ -249,24 +265,10 @@ export async function initI18n(): Promise { postProcess: [ "korean-postposition" ], }); - // Input: {{myMoneyValue, money}} - // Output: @[MONEY]{₽100,000,000} (useful for BBCode coloring of text) - // If you don't want the BBCode tag applied, just use 'number' formatter - i18next.services.formatter?.add("money", (value, lng, options) => { - const numberFormattedString = Intl.NumberFormat(lng, options).format(value); - switch (lng) { - case "ja": - return `@[MONEY]{${numberFormattedString}}円`; - case "de": - case "es": - case "fr": - case "it": - return `@[MONEY]{${numberFormattedString} ₽}`; - default: - // English and other languages that use same format - return `@[MONEY]{₽${numberFormattedString}}`; - } - }); + + if (i18next.services.formatter) { + i18next.services.formatter.add("money", i18nMoneyFormatter); + } await initFonts(localStorage.getItem("prLang") ?? undefined); }