From cfaca9fb4026b84e57f03a2b5b7012f437ab00e5 Mon Sep 17 00:00:00 2001 From: Liam Date: Mon, 6 Nov 2023 18:43:21 +0000 Subject: [PATCH] feat(ssr): format numbers using browser locale --- src/utils/numberUtils.ts | 4 +++- src/utils/utils.ts | 27 +++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/utils/numberUtils.ts b/src/utils/numberUtils.ts index 76659bb..3597dd7 100644 --- a/src/utils/numberUtils.ts +++ b/src/utils/numberUtils.ts @@ -1,3 +1,5 @@ +import { getBrowserLocales } from "./utils"; + /** * Checks if the given value is an number. * @@ -24,7 +26,7 @@ export function formatNumber(number: any, decimals?: number) { if (typeof number !== "number") { return number; } - return number.toLocaleString(undefined, { + return number.toLocaleString(getBrowserLocales(), { minimumFractionDigits: decimals, maximumFractionDigits: decimals, }); diff --git a/src/utils/utils.ts b/src/utils/utils.ts index 5bee235..a9b059a 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -49,3 +49,30 @@ export function getPageFromSearchQuery( return page; } + +/** + * Gets the users locales from the browser + * + * @param options the options to use + * @returns the browser locales + */ +export function getBrowserLocales(options = {}) { + const defaultOptions = { + languageCodeOnly: false, + }; + const opt = { + ...defaultOptions, + ...options, + }; + const browserLocales = + navigator.languages === undefined + ? [navigator.language] + : navigator.languages; + if (!browserLocales) { + return undefined; + } + return browserLocales.map((locale) => { + const trimmedLocale = locale.trim(); + return opt.languageCodeOnly ? trimmedLocale.split(/-|_/)[0] : trimmedLocale; + }); +}