Skip to content

Commit

Permalink
[Qol] Make i18n money formatter controlled by translators (#4550)
Browse files Browse the repository at this point in the history
* fix: i18n money formatter

* fix wrongful console.warn on i18n money formatter

* update locales submodule

update reference to `56eeb809eb5a2de40cfc5bc6128a78bef14deea9` (from `3ccef8472dd7cc7c362538489954cb8fdad27e5f`)
  • Loading branch information
flx-sta authored Oct 5, 2024
1 parent f562a76 commit 42b75e8
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 19 deletions.
2 changes: 1 addition & 1 deletion public/locales
Submodule locales updated 107 files
38 changes: 20 additions & 18 deletions src/plugins/i18n.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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

/**
Expand Down Expand Up @@ -249,24 +265,10 @@ export async function initI18n(): Promise<void> {
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);
}
Expand Down

0 comments on commit 42b75e8

Please sign in to comment.