UNPKG

@progress/kendo-angular-intl

Version:

Kendo UI Internationalization for Angular components

258 lines (257 loc) 10.1 kB
/**----------------------------------------------------------------------------------------- * Copyright © 2025 Progress Software Corporation. All rights reserved. * Licensed under commercial license. See LICENSE.md in the project root for more information *-------------------------------------------------------------------------------------------*/ import { Injectable, EventEmitter, Inject, LOCALE_ID } from '@angular/core'; import { validatePackage } from '@progress/kendo-licensing'; import { packageMetadata } from './package-metadata'; import { formatDate, parseDate, dateFieldName, dateFormatNames, firstDay, splitDateFormat, weekendRange, format as intlFormat, toString, parseNumber, formatNumber, numberSymbols } from './intl-members'; import * as i0 from "@angular/core"; const LOCALE_REGEX = /_/g; /** * @hidden */ export function cldrServiceFactory(localeId) { return new CldrIntlService(localeId); } /** * Represents the abstract base class for the Kendo UI for Angular Internationalization service. * Provides methods for formatting and parsing dates, numbers, and strings according to the current locale. * * Extend this class to implement custom internationalization logic or use the default CLDR-based implementation. */ export class IntlService { /** * @hidden */ changes = new EventEmitter(); /** * @hidden */ constructor() { validatePackage(packageMetadata); } /** * Specifies that the service was changed. */ notify() { this.changes.emit(); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IntlService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IntlService, providedIn: 'root', useFactory: cldrServiceFactory, deps: [{ token: LOCALE_ID }] }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IntlService, decorators: [{ type: Injectable, args: [{ providedIn: 'root', useFactory: cldrServiceFactory, deps: [LOCALE_ID] }] }], ctorParameters: function () { return []; } }); /** * Represents the Internationalization service implemented using the CLDR Database via the `@progress/kendo-intl` package. * Provides locale-aware formatting and parsing for dates, numbers, and strings. * * @example * ```ts * import { CldrIntlService } from '@progress/kendo-angular-intl'; * const intl = new CldrIntlService('en-US'); * intl.formatDate(new Date(), { date: 'short' }); * ``` */ export class CldrIntlService extends IntlService { locale; /** * Specifies or gets the current locale ID. */ get localeId() { return this.locale; } set localeId(value) { // Angular locales use underscore, for example, en_US // while IETF BCP-47 specifies a dash. // https://tools.ietf.org/html/bcp47 const locale = value.replace(LOCALE_REGEX, '-'); if (locale !== this.locale) { this.locale = locale; this.notify(); } } /** * Creates a new instance of the service with the ID of the specified locale. * * Note that the parts of the locale ID can be separated by either `_` (underscore) * or `-` (dash). * * @param localeId - The default locale ID. */ constructor(localeId) { super(); this.localeId = localeId; } /** * Formats a string with placeholders such as * `Total amount {0:c}`. * * @param format - The format string. * @param values - One or more values to output in the format string placeholders. * @returns The formatted string. */ format(format, ...values) { return intlFormat(format, values, this.localeId); } /** * Converts an object into a string based on the specified format. * * @param value - The value to format. * @param format - The format to use. * @param localeId - The locale ID to use in place of the default one (optional). * @returns The formatted object as a string. */ toString(value, format, localeId) { return toString(value, format, localeId || this.localeId); } /** * Converts a `Date` object into a string based on the specified format. * If no format is provided, the default short date format is used. * * @param value - The date to format. * @param format - The format string or options (optional). * @param localeId - The locale ID to use in place of the default one (optional). * @returns The formatted date as a string. */ formatDate(value, format, localeId) { return formatDate(value, format, localeId || this.localeId); } /** * Converts a string into a `Date` object based on the specified format. * * @param value - The string to convert. * @param format - The format strings or options (optional). * @param localeId - The locale ID to use in place of the default one (optional). * @returns The parsed date. */ parseDate(value, format, localeId) { return parseDate(value, format, localeId || this.localeId); } /** * Converts a string into a `Number`. * * @param value - The string to convert. * @param format - The format string or options (optional). * @param localeId - The locale ID to use in place of the default one (optional). * @returns The parsed number. */ parseNumber(value, format, localeId) { return parseNumber(value, localeId || this.localeId, format); } /** * Converts a `Number` into a string based on the specified format. * * @param value - The number to format. * @param format - The format string or options. * @param localeId - The locale ID to use in place of the default one (optional). * @returns The formatted number as a string. */ formatNumber(value, format, localeId) { return formatNumber(value, format, localeId || this.localeId); } /** * Returns the date names from the current locale based on the option. * * The available `type` values are: * - `era` * - `year` * - `quarter` * - `month` * - `week` * - `day` * - `dayperiod` * - `hour` * - `minute` * - `second` * - `zone` * * The available `nameType` values are: * - `wide` * - `narrow` * - `short` * * @param options - Detailed configuration for the desired date field name. * @param localeId - The locale ID to use in place of the default one (optional). * @returns The day names from the current locale based on the option. * * @example * ```ts * dateFieldName({ type: 'day' }); //returns 'day'; * dateFieldName({ type: 'day', nameType: 'wide' }); //returns 'day'; * dateFieldName({ type: 'month', nameType: 'short' }); //returns 'mo.'; * dateFieldName({ type: 'month', nameType: 'wide' }); //returns 'month'; * ``` */ dateFieldName(options, localeId) { return dateFieldName(options, localeId || this.localeId); } /** * Returns a localized date field name based on specific `dateFieldName` options. * * The available type values are: * - `day` * - `dayperiod` * - `months` * - `quarters` * - `eras` * * @param options - Detailed configuration for the desired date format. * @param localeId - The locale ID to use in place of the default one (optional). * @returns The day names from the current locale based on the option. */ dateFormatNames(options, localeId) { return dateFormatNames(localeId || this.localeId, options); } /** * Splits the date format into objects containing information about each part of the pattern. * * @param format - The format string or options. * @param localeId - The locale ID to use (optional). If not specified, the `"en"` locale ID is used. * @returns The date format parts. */ splitDateFormat(format, localeId) { return splitDateFormat(format, localeId || this.localeId); } /** * Returns the number symbols from the current locale based on the option. * * @param localeId - The locale ID to use in place of the default one (optional). * @returns The number symbols from the current locale. */ numberSymbols(localeId) { return numberSymbols(localeId || this.localeId); } /** * Returns the first day index starting from Sunday. * * @param localeId - The locale ID (optional). Defaults to the current locale ID. * @returns The index of the first day of the week (0 == Sunday). */ firstDay(localeId) { return firstDay(localeId || this.localeId); } /** * Returns the start and end index of the locale weekend starting from Sunday. * * @param localeId - The locale ID (optional). Defaults to the current locale ID. * @returns The start and end index of the locale weekend (0 == Sunday). */ weekendRange(localeId) { return weekendRange(localeId || this.localeId); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CldrIntlService, deps: [{ token: LOCALE_ID }], target: i0.ɵɵFactoryTarget.Injectable }); static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CldrIntlService }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CldrIntlService, decorators: [{ type: Injectable }], ctorParameters: function () { return [{ type: undefined, decorators: [{ type: Inject, args: [LOCALE_ID] }] }]; } });