refactor(common): move the low level locale registering to core (#33523)
To limit the exposure of the private `LOCALE_DATA` from outside `@angular/core` this commit exposes private functions in the core to hide the internal structures better. * The `registerLocaleData()` implementation has moved from `@angular/common` to `@angular/core`. A stub that delegates to core has been left in common for backward compatibility. * A new `ɵunregisterLocaleData()` function has been provided, which is particularly useful in tests to clear out registered locales to prevent subsequent tests from being affected. * A private export of `ɵregisterLocaleData()` has been removed from `@angular/common`. This was not being used and is accessible via `@angular/core` anyway. PR Close #33523
This commit is contained in:

committed by
atscott

parent
5b21b71c9a
commit
7e8eec57f0
@ -6,40 +6,16 @@
|
||||
* found in the LICENSE file at https://angular.io/license
|
||||
*/
|
||||
|
||||
import {ɵLOCALE_DATA as LOCALE_DATA, ɵLocaleDataIndex as LocaleDataIndex} from '@angular/core';
|
||||
import {ɵregisterLocaleData} from '@angular/core';
|
||||
|
||||
/**
|
||||
* Register global data to be used internally by Angular. See the
|
||||
* ["I18n guide"](guide/i18n#i18n-pipes) to know how to import additional locale data.
|
||||
*
|
||||
* The signature registerLocaleData(data: any, extraData?: any) is deprecated since v5.1
|
||||
*
|
||||
* @publicApi
|
||||
*/
|
||||
// The signature registerLocaleData(data: any, extraData?: any) is deprecated since v5.1
|
||||
export function registerLocaleData(data: any, localeId?: string | any, extraData?: any): void {
|
||||
if (typeof localeId !== 'string') {
|
||||
extraData = localeId;
|
||||
localeId = data[LocaleDataIndex.LocaleId];
|
||||
}
|
||||
|
||||
localeId = localeId.toLowerCase().replace(/_/g, '-');
|
||||
|
||||
LOCALE_DATA[localeId] = data;
|
||||
|
||||
if (extraData) {
|
||||
LOCALE_DATA[localeId][LocaleDataIndex.ExtraData] = extraData;
|
||||
}
|
||||
return ɵregisterLocaleData(data, localeId, extraData);
|
||||
}
|
||||
|
||||
/**
|
||||
* Index of each type of locale data from the extra locale data array
|
||||
*/
|
||||
export const enum ExtraLocaleDataIndex {
|
||||
ExtraDayPeriodFormats = 0,
|
||||
ExtraDayPeriodStandalone,
|
||||
ExtraDayPeriodsRules
|
||||
}
|
||||
|
||||
/**
|
||||
* Index of each value in currency data (used to describe CURRENCIES_EN in currencies.ts)
|
||||
*/
|
||||
export const enum CurrencyIndex {Symbol = 0, SymbolNarrow, NbOfDigits}
|
||||
|
@ -6,9 +6,8 @@
|
||||
* found in the LICENSE file at https://angular.io/license
|
||||
*/
|
||||
|
||||
import {ɵLocaleDataIndex, ɵfindLocaleData, ɵgetLocalePluralCase} from '@angular/core';
|
||||
import {ɵCurrencyIndex, ɵExtraLocaleDataIndex, ɵLocaleDataIndex, ɵfindLocaleData, ɵgetLocalePluralCase} from '@angular/core';
|
||||
import {CURRENCIES_EN, CurrenciesSymbols} from './currencies';
|
||||
import {CurrencyIndex, ExtraLocaleDataIndex} from './locale_data';
|
||||
|
||||
/**
|
||||
* Format styles that can be used to represent numbers.
|
||||
@ -524,7 +523,7 @@ function checkFullData(data: any) {
|
||||
export function getLocaleExtraDayPeriodRules(locale: string): (Time | [Time, Time])[] {
|
||||
const data = ɵfindLocaleData(locale);
|
||||
checkFullData(data);
|
||||
const rules = data[ɵLocaleDataIndex.ExtraData][ExtraLocaleDataIndex.ExtraDayPeriodsRules] || [];
|
||||
const rules = data[ɵLocaleDataIndex.ExtraData][ɵExtraLocaleDataIndex.ExtraDayPeriodsRules] || [];
|
||||
return rules.map((rule: string | [string, string]) => {
|
||||
if (typeof rule === 'string') {
|
||||
return extractTime(rule);
|
||||
@ -555,8 +554,8 @@ export function getLocaleExtraDayPeriods(
|
||||
const data = ɵfindLocaleData(locale);
|
||||
checkFullData(data);
|
||||
const dayPeriodsData = <string[][][]>[
|
||||
data[ɵLocaleDataIndex.ExtraData][ExtraLocaleDataIndex.ExtraDayPeriodFormats],
|
||||
data[ɵLocaleDataIndex.ExtraData][ExtraLocaleDataIndex.ExtraDayPeriodStandalone]
|
||||
data[ɵLocaleDataIndex.ExtraData][ɵExtraLocaleDataIndex.ExtraDayPeriodFormats],
|
||||
data[ɵLocaleDataIndex.ExtraData][ɵExtraLocaleDataIndex.ExtraDayPeriodStandalone]
|
||||
];
|
||||
const dayPeriods = getLastDefinedValue(dayPeriodsData, formStyle) || [];
|
||||
return getLastDefinedValue(dayPeriods, width) || [];
|
||||
@ -621,13 +620,13 @@ function extractTime(time: string): Time {
|
||||
*/
|
||||
export function getCurrencySymbol(code: string, format: 'wide' | 'narrow', locale = 'en'): string {
|
||||
const currency = getLocaleCurrencies(locale)[code] || CURRENCIES_EN[code] || [];
|
||||
const symbolNarrow = currency[CurrencyIndex.SymbolNarrow];
|
||||
const symbolNarrow = currency[ɵCurrencyIndex.SymbolNarrow];
|
||||
|
||||
if (format === 'narrow' && typeof symbolNarrow === 'string') {
|
||||
return symbolNarrow;
|
||||
}
|
||||
|
||||
return currency[CurrencyIndex.Symbol] || code;
|
||||
return currency[ɵCurrencyIndex.Symbol] || code;
|
||||
}
|
||||
|
||||
// Most currencies have cents, that's why the default is 2
|
||||
@ -647,7 +646,7 @@ export function getNumberOfCurrencyDigits(code: string): number {
|
||||
let digits;
|
||||
const currency = CURRENCIES_EN[code];
|
||||
if (currency) {
|
||||
digits = currency[CurrencyIndex.NbOfDigits];
|
||||
digits = currency[ɵCurrencyIndex.NbOfDigits];
|
||||
}
|
||||
return typeof digits === 'number' ? digits : DEFAULT_NB_OF_CURRENCY_DIGITS;
|
||||
}
|
||||
|
Reference in New Issue
Block a user