diff --git a/global/helpers/numbers.ts b/global/helpers/numbers.ts index 23e04d0ff..989a153d6 100644 --- a/global/helpers/numbers.ts +++ b/global/helpers/numbers.ts @@ -80,3 +80,19 @@ export const adjustValueToStep = (value: number, step: number, precision?: numbe return setDecimalPrecision(floor, precision); }; + +/** + * Format number to international locale string or fallback to default browser locale + * @param number - number to format + * @param locale - locale to format number to + * @returns formatted number + */ +export const formatNumber = (number: number, locale?: string) => { + if (!Intl.NumberFormat || !number || !navigator.language) return number; + + const browserLocale = navigator.language; + + const formatter = new Intl.NumberFormat(locale || browserLocale); + + return Number(formatter.format(number)); +}; diff --git a/packages/readtime/src/factory.ts b/packages/readtime/src/factory.ts index 14d235b69..673159240 100644 --- a/packages/readtime/src/factory.ts +++ b/packages/readtime/src/factory.ts @@ -1,4 +1,4 @@ -import { getInstanceIndex } from '$global/helpers'; +import { formatNumber, getInstanceIndex } from '$global/helpers'; import { ATTRIBUTES, DEFAULT_WPM, queryElement } from './utils/constants'; @@ -20,5 +20,5 @@ export const initReadTime = (timeElement: Element) => { const readTime = wordsCount / wpm; - timeElement.textContent = !decimals && readTime < 0.5 ? '1' : readTime.toFixed(decimals); + timeElement.textContent = readTime < 0.5 ? '1' : formatNumber(readTime).toFixed(decimals); };