intl-locales-supported
Version:
Utility to help you polyfill the Node.js runtime when the Intl APIs are missing, or if the built-in Intl is missing locale data that you need.
48 lines (39 loc) • 1.06 kB
text/typescript
/*
* Copyright 2015, Yahoo Inc.
* Copyrights licensed under the New BSD License.
* See the accompanying LICENSE file for terms.
*/
type IntlConstructor = {
supportedLocalesOf(locales: string | string[], options?: any): string[];
};
export default function areIntlLocalesSupported(
locales: string | string[],
constructorsToCheck?: Array<IntlConstructor>
): boolean {
if (typeof Intl === 'undefined') {
return false;
}
if (!locales) {
throw new Error('locales must be supplied.');
}
if (!Array.isArray(locales)) {
locales = [locales];
}
let intlConstructors = constructorsToCheck || [
Intl.DateTimeFormat,
Intl.NumberFormat,
Intl.PluralRules,
];
intlConstructors = intlConstructors.filter(Boolean);
if (
intlConstructors.length === 0 ||
(constructorsToCheck &&
intlConstructors.length !== constructorsToCheck.length)
) {
return false;
}
return intlConstructors.every(
intlConstructor =>
intlConstructor.supportedLocalesOf(locales).length === locales.length
);
}