diff --git a/packages/localize/src/date/formatDate.js b/packages/localize/src/date/formatDate.js index 9cee2a552..2bde7f856 100644 --- a/packages/localize/src/date/formatDate.js +++ b/packages/localize/src/date/formatDate.js @@ -1,6 +1,6 @@ import { localize } from '../localize.js'; -import { getLocale } from './getLocale.js'; -import { normalizeIntlDate } from './normalizeIntlDate.js'; +import { getLocale } from '../utils/getLocale.js'; +import { normalizeIntlDate } from './utils/normalizeIntlDate.js'; /** @typedef {import('../../types/LocalizeMixinTypes').DatePostProcessor} DatePostProcessor */ diff --git a/packages/localize/src/date/getDateFormatBasedOnLocale.js b/packages/localize/src/date/getDateFormatBasedOnLocale.js index 5336a7380..c5e976246 100644 --- a/packages/localize/src/date/getDateFormatBasedOnLocale.js +++ b/packages/localize/src/date/getDateFormatBasedOnLocale.js @@ -1,5 +1,5 @@ -import { sanitizedDateTimeFormat } from './sanitizedDateTimeFormat.js'; -import { splitDate } from './splitDate.js'; +import { sanitizedDateTimeFormat } from './utils/sanitizedDateTimeFormat.js'; +import { splitDate } from './utils/splitDate.js'; /** * To compute the localized date format diff --git a/packages/localize/src/date/getLocale.js b/packages/localize/src/date/getLocale.js deleted file mode 100644 index 88cba75bc..000000000 --- a/packages/localize/src/date/getLocale.js +++ /dev/null @@ -1,17 +0,0 @@ -import { localize } from '../localize.js'; - -/** - * Gets the locale to use - * - * @param {string|undefined} locale Locale to override browser locale - * @returns {string} - */ -export function getLocale(locale) { - if (locale) { - return locale; - } - if (localize && localize.locale) { - return localize.locale; - } - return 'en-GB'; -} diff --git a/packages/localize/src/date/getMonthNames.js b/packages/localize/src/date/getMonthNames.js index 716db16c7..72c2997c7 100644 --- a/packages/localize/src/date/getMonthNames.js +++ b/packages/localize/src/date/getMonthNames.js @@ -1,4 +1,5 @@ -import { normalizeIntlDate } from './normalizeIntlDate.js'; +import { normalizeIntlDate } from './utils/normalizeIntlDate.js'; +import { forceShortMonthNamesForEnGb } from './utils/forceShortMonthNamesForEnGb.js'; /** @type {Object.>} */ const monthsLocaleCache = {}; @@ -26,7 +27,9 @@ export function getMonthNames({ locale, style = 'long' } = {}) { const normalizedDate = normalizeIntlDate(formattedDate); months.push(normalizedDate); } - + if (locale === 'en-GB' && style === 'short') { + months = forceShortMonthNamesForEnGb(months); + } monthsLocaleCache[locale] = monthsLocaleCache[locale] || {}; monthsLocaleCache[locale][style] = months; diff --git a/packages/localize/src/date/getWeekdayNames.js b/packages/localize/src/date/getWeekdayNames.js index d96f8dd14..e4bb00c6a 100644 --- a/packages/localize/src/date/getWeekdayNames.js +++ b/packages/localize/src/date/getWeekdayNames.js @@ -1,4 +1,4 @@ -import { normalizeIntlDate } from './normalizeIntlDate.js'; +import { normalizeIntlDate } from './utils/normalizeIntlDate.js'; /** @type {Object.>} */ const weekdayNamesCache = {}; diff --git a/packages/localize/src/date/parseDate.js b/packages/localize/src/date/parseDate.js index 4dd5a59fb..228534733 100644 --- a/packages/localize/src/date/parseDate.js +++ b/packages/localize/src/date/parseDate.js @@ -1,6 +1,6 @@ import { localize } from '../localize.js'; import { getDateFormatBasedOnLocale } from './getDateFormatBasedOnLocale.js'; -import { addLeadingZero } from './addLeadingZero.js'; +import { addLeadingZero } from './utils/addLeadingZero.js'; /** * @param {function} fn diff --git a/packages/localize/src/date/addLeadingZero.js b/packages/localize/src/date/utils/addLeadingZero.js similarity index 100% rename from packages/localize/src/date/addLeadingZero.js rename to packages/localize/src/date/utils/addLeadingZero.js diff --git a/packages/localize/src/date/clean.js b/packages/localize/src/date/utils/clean.js similarity index 100% rename from packages/localize/src/date/clean.js rename to packages/localize/src/date/utils/clean.js diff --git a/packages/localize/src/date/utils/forceShortMonthNamesForEnGb.js b/packages/localize/src/date/utils/forceShortMonthNamesForEnGb.js new file mode 100644 index 000000000..d2be41d7b --- /dev/null +++ b/packages/localize/src/date/utils/forceShortMonthNamesForEnGb.js @@ -0,0 +1,10 @@ +/** + * @param {string[]} months + */ +export function forceShortMonthNamesForEnGb(months) { + if (months[8] === 'Sept') { + // eslint-disable-next-line no-param-reassign + months[8] = 'Sep'; + } + return months; +} diff --git a/packages/localize/src/date/normalizeIntlDate.js b/packages/localize/src/date/utils/normalizeIntlDate.js similarity index 100% rename from packages/localize/src/date/normalizeIntlDate.js rename to packages/localize/src/date/utils/normalizeIntlDate.js diff --git a/packages/localize/src/date/pad.js b/packages/localize/src/date/utils/pad.js similarity index 100% rename from packages/localize/src/date/pad.js rename to packages/localize/src/date/utils/pad.js diff --git a/packages/localize/src/date/sanitizedDateTimeFormat.js b/packages/localize/src/date/utils/sanitizedDateTimeFormat.js similarity index 83% rename from packages/localize/src/date/sanitizedDateTimeFormat.js rename to packages/localize/src/date/utils/sanitizedDateTimeFormat.js index c31a79b63..78e26df2d 100644 --- a/packages/localize/src/date/sanitizedDateTimeFormat.js +++ b/packages/localize/src/date/utils/sanitizedDateTimeFormat.js @@ -1,4 +1,4 @@ -import { formatDate } from './formatDate.js'; +import { formatDate } from '../formatDate.js'; import { clean } from './clean.js'; /** diff --git a/packages/localize/src/date/splitDate.js b/packages/localize/src/date/utils/splitDate.js similarity index 100% rename from packages/localize/src/date/splitDate.js rename to packages/localize/src/date/utils/splitDate.js diff --git a/packages/localize/src/date/trim.js b/packages/localize/src/date/utils/trim.js similarity index 100% rename from packages/localize/src/date/trim.js rename to packages/localize/src/date/utils/trim.js diff --git a/packages/localize/src/number/formatNumber.js b/packages/localize/src/number/formatNumber.js index 829873301..a80da0958 100644 --- a/packages/localize/src/number/formatNumber.js +++ b/packages/localize/src/number/formatNumber.js @@ -1,5 +1,5 @@ import { localize } from '../localize.js'; -import { getLocale } from './getLocale.js'; +import { getLocale } from '../utils/getLocale.js'; import { formatNumberToParts } from './formatNumberToParts.js'; /** @typedef {import('../../types/LocalizeMixinTypes').NumberPostProcessor} NumberPostProcessor */ diff --git a/packages/localize/src/number/formatNumberToParts.js b/packages/localize/src/number/formatNumberToParts.js index 1a5f4c1d3..d34dc7cab 100644 --- a/packages/localize/src/number/formatNumberToParts.js +++ b/packages/localize/src/number/formatNumberToParts.js @@ -1,10 +1,30 @@ -import { emptyStringWhenNumberNan } from './emptyStringWhenNumberNan.js'; +import { emptyStringWhenNumberNan } from './utils/emptyStringWhenNumberNan.js'; import { getDecimalSeparator } from './getDecimalSeparator.js'; import { getGroupSeparator } from './getGroupSeparator.js'; -import { getLocale } from './getLocale.js'; -import { normalizeIntl } from './normalizeIntl.js'; -import { normalSpaces } from './normalSpaces.js'; -import { roundNumber } from './roundNumber.js'; +import { getLocale } from '../utils/getLocale.js'; +import { normalizeIntl } from './utils/normalize-format-number-to-parts/normalizeIntl.js'; +import { normalSpaces } from './utils/normalSpaces.js'; + +/** + * Round the number based on the options + * + * @param {number} number + * @param {string} roundMode + * @throws {Error} roundMode can only be round|floor|ceiling + * @returns {number} + */ +export function roundNumber(number, roundMode) { + switch (roundMode) { + case 'floor': + return Math.floor(number); + case 'ceiling': + return Math.ceil(number); + case 'round': + return Math.round(number); + default: + throw new Error('roundMode can only be round|floor|ceiling'); + } +} /** * Splits a number up in parts for integer, fraction, group, literal, decimal and currency. diff --git a/packages/localize/src/number/getCurrencyName.js b/packages/localize/src/number/getCurrencyName.js index 14fe56e14..1cc14a162 100644 --- a/packages/localize/src/number/getCurrencyName.js +++ b/packages/localize/src/number/getCurrencyName.js @@ -1,4 +1,6 @@ import { formatNumberToParts } from './formatNumberToParts.js'; +import { localize } from '../localize.js'; +import { forceCurrencyNameForPHPEnGB } from './utils/normalize-get-currency-name/forceCurrencyNameForPHPEnGB.js'; /** * Based on number, returns currency name like 'US dollar' @@ -15,9 +17,13 @@ export function getCurrencyName(currencyIso, options) { currency: currencyIso, currencyDisplay: 'name', })); - const currencyName = parts + let currencyName = parts .filter(p => p.type === 'currency') .map(o => o.value) .join(' '); + const locale = options?.locale || localize.locale; + if (currencyIso === 'PHP' && locale === 'en-GB') { + currencyName = forceCurrencyNameForPHPEnGB(currencyName); + } return currencyName; } diff --git a/packages/localize/src/number/getDecimalSeparator.js b/packages/localize/src/number/getDecimalSeparator.js index 5df3b68eb..5dc9f2005 100644 --- a/packages/localize/src/number/getDecimalSeparator.js +++ b/packages/localize/src/number/getDecimalSeparator.js @@ -1,4 +1,4 @@ -import { getLocale } from './getLocale.js'; +import { getLocale } from '../utils/getLocale.js'; /** * To get the decimal separator diff --git a/packages/localize/src/number/getGroupSeparator.js b/packages/localize/src/number/getGroupSeparator.js index 5f97eca6d..6bfa21d0c 100644 --- a/packages/localize/src/number/getGroupSeparator.js +++ b/packages/localize/src/number/getGroupSeparator.js @@ -1,5 +1,5 @@ -import { getLocale } from './getLocale.js'; -import { normalSpaces } from './normalSpaces.js'; +import { getLocale } from '../utils/getLocale.js'; +import { normalSpaces } from './utils/normalSpaces.js'; /** * Gets the group separator diff --git a/packages/localize/src/number/roundNumber.js b/packages/localize/src/number/roundNumber.js deleted file mode 100644 index c7438e94a..000000000 --- a/packages/localize/src/number/roundNumber.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Round the number based on the options - * - * @param {number} number - * @param {string} roundMode - * @throws {Error} roundMode can only be round|floor|ceiling - * @returns {number} - */ -export function roundNumber(number, roundMode) { - switch (roundMode) { - case 'floor': - return Math.floor(number); - case 'ceiling': - return Math.ceil(number); - case 'round': - return Math.round(number); - default: - throw new Error('roundMode can only be round|floor|ceiling'); - } -} diff --git a/packages/localize/src/number/emptyStringWhenNumberNan.js b/packages/localize/src/number/utils/emptyStringWhenNumberNan.js similarity index 85% rename from packages/localize/src/number/emptyStringWhenNumberNan.js rename to packages/localize/src/number/utils/emptyStringWhenNumberNan.js index 6a4140f96..1d20fb4a1 100644 --- a/packages/localize/src/number/emptyStringWhenNumberNan.js +++ b/packages/localize/src/number/utils/emptyStringWhenNumberNan.js @@ -1,4 +1,4 @@ -import { localize } from '../localize.js'; +import { localize } from '../../localize.js'; /** * When number is NaN we should return an empty string or returnIfNaN param diff --git a/packages/localize/src/number/normalSpaces.js b/packages/localize/src/number/utils/normalSpaces.js similarity index 100% rename from packages/localize/src/number/normalSpaces.js rename to packages/localize/src/number/utils/normalSpaces.js diff --git a/packages/localize/src/number/forceAddGroupSeparators.js b/packages/localize/src/number/utils/normalize-format-number-to-parts/forceAddGroupSeparators.js similarity index 95% rename from packages/localize/src/number/forceAddGroupSeparators.js rename to packages/localize/src/number/utils/normalize-format-number-to-parts/forceAddGroupSeparators.js index b3528d150..fb2c4b791 100644 --- a/packages/localize/src/number/forceAddGroupSeparators.js +++ b/packages/localize/src/number/utils/normalize-format-number-to-parts/forceAddGroupSeparators.js @@ -1,7 +1,7 @@ /** * Add separators when they are not present * - * @typedef {import('../../types/LocalizeMixinTypes').FormatNumberPart} FormatNumberPart + * @typedef {import('../../../../types/LocalizeMixinTypes').FormatNumberPart} FormatNumberPart * @param {FormatNumberPart[]} formattedParts * @param {string} groupSeparator * @returns {FormatNumberPart[]} diff --git a/packages/localize/src/number/forceCurrencyToEnd.js b/packages/localize/src/number/utils/normalize-format-number-to-parts/forceCurrencyToEnd.js similarity index 88% rename from packages/localize/src/number/forceCurrencyToEnd.js rename to packages/localize/src/number/utils/normalize-format-number-to-parts/forceCurrencyToEnd.js index d4f02f5b4..4199e486a 100644 --- a/packages/localize/src/number/forceCurrencyToEnd.js +++ b/packages/localize/src/number/utils/normalize-format-number-to-parts/forceCurrencyToEnd.js @@ -1,7 +1,7 @@ /** * For Dutch and Belgian amounts the currency should be at the end of the string * - * @typedef {import('../../types/LocalizeMixinTypes').FormatNumberPart} FormatNumberPart + * @typedef {import('../../../../types/LocalizeMixinTypes').FormatNumberPart} FormatNumberPart * @param {FormatNumberPart[]} formattedParts * @returns {FormatNumberPart[]} */ diff --git a/packages/localize/src/number/forceENAUSymbols.js b/packages/localize/src/number/utils/normalize-format-number-to-parts/forceENAUSymbols.js similarity index 77% rename from packages/localize/src/number/forceENAUSymbols.js rename to packages/localize/src/number/utils/normalize-format-number-to-parts/forceENAUSymbols.js index e477783fc..4d67caca0 100644 --- a/packages/localize/src/number/forceENAUSymbols.js +++ b/packages/localize/src/number/utils/normalize-format-number-to-parts/forceENAUSymbols.js @@ -8,9 +8,9 @@ const CURRENCY_CODE_SYMBOL_MAP = { /** * Change the symbols for locale 'en-AU', due to bug in Chrome * - * @typedef {import('../../types/LocalizeMixinTypes').FormatNumberPart} FormatNumberPart + * @typedef {import('../../../../types/LocalizeMixinTypes').FormatNumberPart} FormatNumberPart * @param {FormatNumberPart[]} formattedParts - * @param {import('../../types/LocalizeMixinTypes').FormatNumberOptions} [options] + * @param {import('../../../../types/LocalizeMixinTypes').FormatNumberOptions} [options] * @returns {FormatNumberPart[]} */ export function forceENAUSymbols(formattedParts, { currency, currencyDisplay } = {}) { diff --git a/packages/localize/src/number/forceNormalSpaces.js b/packages/localize/src/number/utils/normalize-format-number-to-parts/forceNormalSpaces.js similarity index 72% rename from packages/localize/src/number/forceNormalSpaces.js rename to packages/localize/src/number/utils/normalize-format-number-to-parts/forceNormalSpaces.js index b8d083f47..cdaffa88b 100644 --- a/packages/localize/src/number/forceNormalSpaces.js +++ b/packages/localize/src/number/utils/normalize-format-number-to-parts/forceNormalSpaces.js @@ -1,9 +1,9 @@ -import { normalSpaces } from './normalSpaces.js'; +import { normalSpaces } from '../normalSpaces.js'; /** * Parts with forced "normal" spaces * - * @typedef {import('../../types/LocalizeMixinTypes').FormatNumberPart} FormatNumberPart + * @typedef {import('../../../../types/LocalizeMixinTypes').FormatNumberPart} FormatNumberPart * @param {FormatNumberPart[]} formattedParts * @returns {FormatNumberPart[]} */ diff --git a/packages/localize/src/number/forceSpaceBetweenCurrencyCodeAndNumber.js b/packages/localize/src/number/utils/normalize-format-number-to-parts/forceSpaceBetweenCurrencyCodeAndNumber.js similarity index 86% rename from packages/localize/src/number/forceSpaceBetweenCurrencyCodeAndNumber.js rename to packages/localize/src/number/utils/normalize-format-number-to-parts/forceSpaceBetweenCurrencyCodeAndNumber.js index f43822c2f..883705fcc 100644 --- a/packages/localize/src/number/forceSpaceBetweenCurrencyCodeAndNumber.js +++ b/packages/localize/src/number/utils/normalize-format-number-to-parts/forceSpaceBetweenCurrencyCodeAndNumber.js @@ -1,9 +1,9 @@ /** * When in some locales there is no space between currency and amount it is added * - * @typedef {import('../../types/LocalizeMixinTypes').FormatNumberPart} FormatNumberPart + * @typedef {import('../../../../types/LocalizeMixinTypes').FormatNumberPart} FormatNumberPart * @param {FormatNumberPart[]} formattedParts - * @param {import('../../types/LocalizeMixinTypes').FormatNumberOptions} [options] + * @param {import('../../../../types/LocalizeMixinTypes').FormatNumberOptions} [options] * @returns {FormatNumberPart[]} */ export function forceSpaceBetweenCurrencyCodeAndNumber( diff --git a/packages/localize/src/number/forceSpaceInsteadOfZeroForGroup.js b/packages/localize/src/number/utils/normalize-format-number-to-parts/forceSpaceInsteadOfZeroForGroup.js similarity index 82% rename from packages/localize/src/number/forceSpaceInsteadOfZeroForGroup.js rename to packages/localize/src/number/utils/normalize-format-number-to-parts/forceSpaceInsteadOfZeroForGroup.js index 18c2acc74..7206ab417 100644 --- a/packages/localize/src/number/forceSpaceInsteadOfZeroForGroup.js +++ b/packages/localize/src/number/utils/normalize-format-number-to-parts/forceSpaceInsteadOfZeroForGroup.js @@ -2,7 +2,7 @@ * @desc Intl uses 0 as group separator for bg-BG locale. * This should be a ' ' * - * @typedef {import('../../types/LocalizeMixinTypes').FormatNumberPart} FormatNumberPart + * @typedef {import('../../../../types/LocalizeMixinTypes').FormatNumberPart} FormatNumberPart * @param {FormatNumberPart[]} formattedParts * @returns {FormatNumberPart[]} corrected formatted parts */ diff --git a/packages/localize/src/number/forceTryCurrencyCode.js b/packages/localize/src/number/utils/normalize-format-number-to-parts/forceTryCurrencyCode.js similarity index 71% rename from packages/localize/src/number/forceTryCurrencyCode.js rename to packages/localize/src/number/utils/normalize-format-number-to-parts/forceTryCurrencyCode.js index 3882a0273..e3c958e7d 100644 --- a/packages/localize/src/number/forceTryCurrencyCode.js +++ b/packages/localize/src/number/utils/normalize-format-number-to-parts/forceTryCurrencyCode.js @@ -1,7 +1,7 @@ /** - * @typedef {import('../../types/LocalizeMixinTypes').FormatNumberPart} FormatNumberPart + * @typedef {import('../../../../types/LocalizeMixinTypes').FormatNumberPart} FormatNumberPart * @param {FormatNumberPart[]} formattedParts - * @param {import('../../types/LocalizeMixinTypes').FormatNumberOptions} [options] + * @param {import('../../../../types/LocalizeMixinTypes').FormatNumberOptions} [options] * @returns {FormatNumberPart[]} */ diff --git a/packages/localize/src/number/forceYenSymbol.js b/packages/localize/src/number/utils/normalize-format-number-to-parts/forceYenSymbol.js similarity index 71% rename from packages/localize/src/number/forceYenSymbol.js rename to packages/localize/src/number/utils/normalize-format-number-to-parts/forceYenSymbol.js index ccb9dfec1..2f39bb5f7 100644 --- a/packages/localize/src/number/forceYenSymbol.js +++ b/packages/localize/src/number/utils/normalize-format-number-to-parts/forceYenSymbol.js @@ -1,7 +1,7 @@ /** - * @typedef {import('../../types/LocalizeMixinTypes').FormatNumberPart} FormatNumberPart + * @typedef {import('../../../../types/LocalizeMixinTypes').FormatNumberPart} FormatNumberPart * @param {FormatNumberPart[]} formattedParts - * @param {import('../../types/LocalizeMixinTypes').FormatNumberOptions} [options] + * @param {import('../../../../types/LocalizeMixinTypes').FormatNumberOptions} [options] * @returns {FormatNumberPart[]} */ export function forceYenSymbol(formattedParts, { currency, currencyDisplay } = {}) { diff --git a/packages/localize/src/number/normalizeIntl.js b/packages/localize/src/number/utils/normalize-format-number-to-parts/normalizeIntl.js similarity index 87% rename from packages/localize/src/number/normalizeIntl.js rename to packages/localize/src/number/utils/normalize-format-number-to-parts/normalizeIntl.js index b66ee582c..23b4f86aa 100644 --- a/packages/localize/src/number/normalizeIntl.js +++ b/packages/localize/src/number/utils/normalize-format-number-to-parts/normalizeIntl.js @@ -1,4 +1,4 @@ -import { getGroupSeparator } from './getGroupSeparator.js'; +import { getGroupSeparator } from '../../getGroupSeparator.js'; import { forceAddGroupSeparators } from './forceAddGroupSeparators.js'; import { forceCurrencyToEnd } from './forceCurrencyToEnd.js'; import { forceNormalSpaces } from './forceNormalSpaces.js'; @@ -9,11 +9,11 @@ import { forceTryCurrencyCode } from './forceTryCurrencyCode.js'; import { forceENAUSymbols } from './forceENAUSymbols.js'; /** - * Function with all fixes on localize + * Normalizes function "formatNumberToParts" * - * @typedef {import('../../types/LocalizeMixinTypes').FormatNumberPart} FormatNumberPart + * @typedef {import('../../../../types/LocalizeMixinTypes').FormatNumberPart} FormatNumberPart * @param {FormatNumberPart[]} formattedParts - * @param {import('../../types/LocalizeMixinTypes').FormatNumberOptions} options + * @param {import('../../../../types/LocalizeMixinTypes').FormatNumberOptions} options * @param {string} _locale * @returns {FormatNumberPart[]} */ diff --git a/packages/localize/src/number/utils/normalize-get-currency-name/forceCurrencyNameForPHPEnGB.js b/packages/localize/src/number/utils/normalize-get-currency-name/forceCurrencyNameForPHPEnGB.js new file mode 100644 index 000000000..2d1b5af15 --- /dev/null +++ b/packages/localize/src/number/utils/normalize-get-currency-name/forceCurrencyNameForPHPEnGB.js @@ -0,0 +1,10 @@ +/** + * @param {string} currencyName + */ +export function forceCurrencyNameForPHPEnGB(currencyName) { + if (currencyName === 'Philippine pesos') { + // eslint-disable-next-line no-param-reassign + currencyName = 'Philippine pisos'; + } + return currencyName; +} diff --git a/packages/localize/src/number/getLocale.js b/packages/localize/src/utils/getLocale.js similarity index 100% rename from packages/localize/src/number/getLocale.js rename to packages/localize/src/utils/getLocale.js