@ngx-translate/core
Version:
Translation library (i18n) for Angular
547 lines (533 loc) • 23.6 kB
TypeScript
import { Observable, Subscription } from 'rxjs';
import * as i0 from '@angular/core';
import { InjectionToken, AfterViewChecked, OnDestroy, PipeTransform, Provider, Type, ClassProvider, ModuleWithProviders } from '@angular/core';
declare function _<T extends string | string[]>(key: T): T;
type InterpolateFunction = (params?: InterpolationParameters) => string;
declare abstract class TranslateParser {
/**
* Interpolates a string to replace parameters
* "This is a {{ key }}" ==> "This is a value", with params = { key: "value" }
* @param expr
* @param params
*/
abstract interpolate(expr: InterpolateFunction | string, params?: InterpolationParameters): string | undefined;
}
declare class TranslateDefaultParser extends TranslateParser {
templateMatcher: RegExp;
interpolate(expr: InterpolateFunction | string, params?: InterpolationParameters): string | undefined;
protected interpolateFunction(fn: InterpolateFunction, params?: InterpolationParameters): string;
protected interpolateString(expr: string, params?: InterpolationParameters): string;
/**
* Returns the replacement for an interpolation parameter
* @params:
*/
protected getInterpolationReplacement(params: InterpolationParameters, key: string): string | undefined;
/**
* Converts a value into a useful string representation.
* @param value The value to format.
* @returns A string representation of the value.
*/
protected formatValue(value: unknown): string | undefined;
static ɵfac: i0.ɵɵFactoryDeclaration<TranslateDefaultParser, never>;
static ɵprov: i0.ɵɵInjectableDeclaration<TranslateDefaultParser>;
}
declare abstract class TranslateCompiler {
abstract compile(value: string, lang: string): InterpolatableTranslation;
abstract compileTranslations(translations: TranslationObject, lang: string): InterpolatableTranslationObject;
}
/**
* This compiler is just a placeholder that does nothing; in case you don't need a compiler at all
*/
declare class TranslateNoOpCompiler extends TranslateCompiler {
compile(value: string, lang: string): string | InterpolateFunction;
compileTranslations(translations: TranslationObject, lang: string): InterpolatableTranslationObject;
static ɵfac: i0.ɵɵFactoryDeclaration<TranslateNoOpCompiler, never>;
static ɵprov: i0.ɵɵInjectableDeclaration<TranslateNoOpCompiler>;
}
declare abstract class TranslateLoader {
abstract getTranslation(lang: string): Observable<TranslationObject>;
}
/**
* This loader is just a placeholder that does nothing; in case you don't need a loader at all
*/
declare class TranslateNoOpLoader extends TranslateLoader {
getTranslation(lang: string): Observable<TranslationObject>;
static ɵfac: i0.ɵɵFactoryDeclaration<TranslateNoOpLoader, never>;
static ɵprov: i0.ɵɵInjectableDeclaration<TranslateNoOpLoader>;
}
/**
* Configuration object for the translation service.
*
* Provides options to customize translation behavior, including setting the primary language,
* specifying a fallback language, and other deprecated flags for legacy support.
*/
interface TranslateServiceConfig {
lang?: Language;
fallbackLang?: Language | null;
extend: boolean;
}
declare const TRANSLATE_SERVICE_CONFIG: InjectionToken<TranslateServiceConfig>;
type InterpolationParameters = Record<string, any>;
type StrictTranslation = string | StrictTranslation[] | TranslationObject | undefined | null;
type Translation = StrictTranslation | any;
interface TranslationObject {
[]: StrictTranslation;
}
type InterpolatableTranslation = string | InterpolatableTranslation[] | InterpolateFunction | InterpolatableTranslationObject | undefined | null;
interface InterpolatableTranslationObject {
[]: InterpolatableTranslation;
}
type Language = string;
interface TranslationChangeEvent {
translations: InterpolatableTranslationObject;
lang: string;
}
interface LangChangeEvent {
lang: string;
translations: InterpolatableTranslationObject;
}
interface FallbackLangChangeEvent {
lang: string;
translations: InterpolatableTranslationObject;
}
/** @deprecated use `FallbackLangChangeEvent` */
type DefaultLangChangeEvent = FallbackLangChangeEvent;
declare abstract class ITranslateService {
abstract readonly onTranslationChange: Observable<TranslationChangeEvent>;
abstract readonly onLangChange: Observable<LangChangeEvent>;
abstract readonly onFallbackLangChange: Observable<FallbackLangChangeEvent>;
abstract use(lang: Language): Observable<InterpolatableTranslationObject>;
abstract setFallbackLang(lang: Language): Observable<InterpolatableTranslationObject>;
abstract getFallbackLang(): Language | null;
abstract addLangs(languages: Language[]): void;
abstract getLangs(): readonly Language[];
abstract reloadLang(lang: Language): Observable<InterpolatableTranslationObject>;
abstract resetLang(lang: Language): void;
abstract instant(key: string | string[], interpolateParams?: InterpolationParameters): Translation;
abstract stream(key: string | string[], interpolateParams?: InterpolationParameters): Observable<Translation>;
abstract getStreamOnTranslationChange(key: string | string[], interpolateParams?: InterpolationParameters): Observable<Translation>;
abstract set(key: string, translation: string | TranslationObject, lang?: Language): void;
abstract get(key: string | string[], interpolateParams?: InterpolationParameters): Observable<Translation>;
abstract setTranslation(lang: Language, translations: TranslationObject, shouldMerge?: boolean): void;
abstract getParsedResult(key: string | string[], interpolateParams?: InterpolationParameters): StrictTranslation | Observable<StrictTranslation>;
abstract getBrowserLang(): Language | undefined;
abstract getBrowserCultureLang(): Language | undefined;
/**
* Returns the current language
* @deprecated use `getCurrentLang()`
*/
abstract readonly currentLang: Language;
/**
* Returns a list of known languages - either loaded
* or set by using `addLangs()`
* @deprecated use `getLangs()`
*/
abstract readonly langs: readonly Language[];
/**
* Sets the fallback language
* @param lang The language to set
* @deprecated use `setFallbackLang(lang)`
*/
abstract setDefaultLang(lang: Language): Observable<InterpolatableTranslationObject>;
/**
* Gets the fallback language
* @deprecated use `getFallbackLang()`
*/
abstract getDefaultLang(): Language | null;
/**
* Returns the fallback language
* @deprectated use `getFallbackLang()`
*/
abstract readonly defaultLang: Language | null;
/**
* @deprectated use `getFallbackLang()`
*/
abstract readonly onDefaultLangChange: Observable<DefaultLangChangeEvent>;
}
declare class TranslateService implements ITranslateService {
private loadingTranslations;
private pending;
private _translationRequests;
private lastUseLanguage;
currentLoader: TranslateLoader;
compiler: TranslateCompiler;
private parser;
private missingTranslationHandler;
private store;
private readonly extend;
/**
* An Observable to listen to translation change events
* onTranslationChange.subscribe((params: TranslationChangeEvent) => {
* // do something
* });
*/
get onTranslationChange(): Observable<TranslationChangeEvent>;
/**
* An Observable to listen to lang change events
* onLangChange.subscribe((params: LangChangeEvent) => {
* // do something
* });
*/
get onLangChange(): Observable<LangChangeEvent>;
/**
* An Observable to listen to fallback lang change events
* onFallbackLangChange.subscribe((params: FallbackLangChangeEvent) => {
* // do something
* });
*/
get onFallbackLangChange(): Observable<FallbackLangChangeEvent>;
/**
* @deprecated Use onFallbackLangChange() instead
*/
get onDefaultLangChange(): Observable<DefaultLangChangeEvent>;
constructor();
/**
* Sets the fallback language to use if a translation is not found in the
* current language
*/
setFallbackLang(lang: Language): Observable<InterpolatableTranslationObject>;
/**
* Changes the lang currently used
*/
use(lang: Language): Observable<InterpolatableTranslationObject>;
/**
* Retrieves the given translations
*/
private loadOrExtendLanguage;
/**
* Changes the current lang
*/
private changeLang;
getCurrentLang(): Language;
private loadAndCompileTranslations;
/**
* Manually sets an object of translations for a given language
* after passing it through the compiler
*/
setTranslation(lang: Language, translations: TranslationObject, shouldMerge?: boolean): void;
getLangs(): readonly Language[];
/**
* Add available languages
*/
addLangs(languages: Language[]): void;
private getParsedResultForKey;
/**
* Gets the fallback language. null if none is defined
*/
getFallbackLang(): Language | null;
private getTextToInterpolate;
private runInterpolation;
private runInterpolationOnArray;
private runInterpolationOnDict;
/**
* Returns the parsed result of the translations
*/
getParsedResult(key: string | string[], interpolateParams?: InterpolationParameters): StrictTranslation | Observable<StrictTranslation>;
private getParsedResultForArray;
/**
* Gets the translated value of a key (or an array of keys)
* @returns the translated key, or an object of translated keys
*/
get(key: string | string[], interpolateParams?: InterpolationParameters): Observable<Translation>;
/**
* Returns a stream of translated values of a key (or an array of keys) which updates
* whenever the translation changes.
* @returns A stream of the translated key, or an object of translated keys
*/
getStreamOnTranslationChange(key: string | string[], interpolateParams?: InterpolationParameters): Observable<Translation>;
/**
* Returns a stream of translated values of a key (or an array of keys) which updates
* whenever the language changes.
* @returns A stream of the translated key, or an object of translated keys
*/
stream(key: string | string[], interpolateParams?: InterpolationParameters): Observable<Translation>;
/**
* Returns a translation instantly from the internal state of loaded translation.
* All rules regarding the current language, the preferred language of even fallback languages
* will be used except any promise handling.
*/
instant(key: string | string[], interpolateParams?: InterpolationParameters): Translation;
/**
* Sets the translated value of a key, after compiling it
*/
set(key: string, translation: string | TranslationObject, lang?: Language): void;
/**
* Allows reloading the lang file from the file
*/
reloadLang(lang: Language): Observable<InterpolatableTranslationObject>;
/**
* Deletes inner translation
*/
resetLang(lang: Language): void;
/**
* Returns the language code name from the browser, e.g. "de"
*/
static getBrowserLang(): Language | undefined;
/**
* Returns the culture language code name from the browser, e.g. "de-DE"
*/
static getBrowserCultureLang(): Language | undefined;
getBrowserLang(): Language | undefined;
getBrowserCultureLang(): Language | undefined;
/** Deprecations **/
/**
* @deprecated use `getFallbackLang()`
*/
get defaultLang(): Language | null;
/**
* The lang currently used
* @deprecated use `getCurrentLang()`
*/
get currentLang(): Language;
/**
* @deprecated use `getLangs()`
*/
get langs(): readonly Language[];
/**
* Sets the language to use as a fallback
* @deprecated use setFallbackLanguage()
*/
setDefaultLang(lang: Language): Observable<InterpolatableTranslationObject>;
/**
* Gets the fallback language used
* @deprecated use getFallbackLang()
*/
getDefaultLang(): Language | null;
static ɵfac: i0.ɵɵFactoryDeclaration<TranslateService, never>;
static ɵprov: i0.ɵɵInjectableDeclaration<TranslateService>;
}
interface MissingTranslationHandlerParams {
/**
* the key that's missing in translation files
*/
key: string;
/**
* an instance of the service that was unable to translate the key.
*/
translateService: TranslateService;
/**
* interpolation params that were passed along for translating the given key.
*/
interpolateParams?: object;
}
declare abstract class MissingTranslationHandler {
/**
* A function that handles missing translations.
*
* @param params context for resolving a missing translation
* @returns a value or an observable
*
* If it returns a value, then this value is used.
* If it returns an observable, the value returned by this observable will be used (except if the method was "instant").
* If it returns undefined, the key will be used as a value
*/
abstract handle(params: MissingTranslationHandlerParams): StrictTranslation | Observable<StrictTranslation>;
}
/**
* This handler is just a placeholder that does nothing; in case you don't need a missing translation handler at all
*/
declare class DefaultMissingTranslationHandler implements MissingTranslationHandler {
handle(params: MissingTranslationHandlerParams): string;
static ɵfac: i0.ɵɵFactoryDeclaration<DefaultMissingTranslationHandler, never>;
static ɵprov: i0.ɵɵInjectableDeclaration<DefaultMissingTranslationHandler>;
}
interface ExtendedNode extends Text {
originalContent: string;
currentValue: string;
lookupKey: string;
lastKey: string | null;
data: string;
}
declare class TranslateDirective implements AfterViewChecked, OnDestroy {
private translateService;
private element;
private _ref;
private key;
private lastParams?;
private currentParams?;
private readonly onLangChangeSub;
private readonly onFallbackLangChangeSub;
private readonly onTranslationChangeSub;
set translate(key: string);
set translateParams(params: InterpolationParameters);
constructor();
ngAfterViewChecked(): void;
checkNodes(forceUpdate?: boolean, translations?: InterpolatableTranslation): void;
updateValue(key: string, node: ExtendedNode, translations?: InterpolatableTranslation): void;
getContent(node: ExtendedNode): string;
setContent(node: ExtendedNode, content: string): void;
ngOnDestroy(): void;
static ɵfac: i0.ɵɵFactoryDeclaration<TranslateDirective, never>;
static ɵdir: i0.ɵɵDirectiveDeclaration<TranslateDirective, "[translate],[ngx-translate]", never, { "translate": { "alias": "translate"; "required": false; }; "translateParams": { "alias": "translateParams"; "required": false; }; }, {}, never, never, true, never>;
}
declare class TranslatePipe implements PipeTransform, OnDestroy {
private translate;
private _ref;
private value;
lastKey: string | null;
lastParams: InterpolationParameters[];
onTranslationChange: Subscription | undefined;
onLangChange: Subscription | undefined;
onFallbackLangChange: Subscription | undefined;
updateValue(key: string, interpolateParams?: InterpolationParameters, translations?: InterpolatableTranslationObject): void;
transform(query: string | undefined | null, ...args: any[]): any;
/**
* Clean any existing subscription to change events
*/
private _dispose;
ngOnDestroy(): void;
static ɵfac: i0.ɵɵFactoryDeclaration<TranslatePipe, never>;
static ɵpipe: i0.ɵɵPipeDeclaration<TranslatePipe, "translate", true>;
static ɵprov: i0.ɵɵInjectableDeclaration<TranslatePipe>;
}
type DeepReadonly<T> = {
readonly [K in keyof T]: T[K] extends object ? DeepReadonly<T[K]> : T[K];
};
declare class TranslateStore {
private _onTranslationChange;
private _onLangChange;
private _onFallbackLangChange;
private fallbackLang;
private currentLang;
private translations;
private languages;
getTranslations(language: Language): DeepReadonly<InterpolatableTranslationObject>;
setTranslations(language: Language, translations: InterpolatableTranslationObject, extend: boolean): void;
getLanguages(): readonly Language[];
getCurrentLang(): Language;
getFallbackLang(): Language | null;
/**
* Changes the fallback lang
*/
setFallbackLang(lang: string, emitChange?: boolean): void;
setCurrentLang(lang: string, emitChange?: boolean): void;
/**
* An Observable to listen to translation change events
* onTranslationChange.subscribe((params: TranslationChangeEvent) => {
* // do something
* });
*/
get onTranslationChange(): Observable<TranslationChangeEvent>;
/**
* An Observable to listen to lang change events
* onLangChange.subscribe((params: LangChangeEvent) => {
* // do something
* });
*/
get onLangChange(): Observable<LangChangeEvent>;
/**
* An Observable to listen to fallback lang change events
* onFallbackLangChange.subscribe((params: FallbackLangChangeEvent) => {
* // do something
* });
*/
get onFallbackLangChange(): Observable<FallbackLangChangeEvent>;
addLanguages(languages: Language[]): void;
hasTranslationFor(lang: string): boolean;
deleteTranslations(lang: string): void;
getTranslation(key: string): InterpolatableTranslation;
protected getValue(language: Language, key: string): InterpolatableTranslation;
static ɵfac: i0.ɵɵFactoryDeclaration<TranslateStore, never>;
static ɵprov: i0.ɵɵInjectableDeclaration<TranslateStore>;
}
interface TranslateProviders {
loader?: Provider;
compiler?: Provider;
parser?: Provider;
missingTranslationHandler?: Provider;
}
interface ChildTranslateServiceConfig extends Partial<TranslateProviders> {
extend?: boolean;
}
interface RootTranslateServiceConfig extends ChildTranslateServiceConfig {
fallbackLang?: Language;
lang?: Language;
useDefaultLang?: boolean;
defaultLanguage?: Language;
}
declare function provideTranslateLoader(loader: Type<TranslateLoader>): ClassProvider;
declare function provideTranslateCompiler(compiler: Type<TranslateCompiler>): ClassProvider;
declare function provideTranslateParser(parser: Type<TranslateParser>): ClassProvider;
declare function provideMissingTranslationHandler(handler: Type<MissingTranslationHandler>): ClassProvider;
declare function provideTranslateService(config?: RootTranslateServiceConfig): Provider[];
declare function provideChildTranslateService(config?: ChildTranslateServiceConfig): Provider[];
declare function defaultProviders(config: RootTranslateServiceConfig | undefined, provideStore: boolean): Provider[];
interface TranslateModuleConfig extends TranslateProviders {
isolate?: boolean;
extend?: boolean;
fallbackLang?: Language;
lang?: Language;
/** @deprecated use fallbackLang */
defaultLanguage?: string;
/** @deprecated use fallbackLang */
useDefaultLang?: boolean;
}
declare class TranslateModule {
/**
* Use this method in your root module to provide the TranslateService
*/
static forRoot(config?: TranslateModuleConfig): ModuleWithProviders<TranslateModule>;
/**
* Use this method in your other (non-root) modules to import the directive/pipe
*/
static forChild(config?: TranslateModuleConfig): ModuleWithProviders<TranslateModule>;
static ɵfac: i0.ɵɵFactoryDeclaration<TranslateModule, never>;
static ɵmod: i0.ɵɵNgModuleDeclaration<TranslateModule, never, [typeof TranslatePipe, typeof TranslateDirective], [typeof TranslatePipe, typeof TranslateDirective]>;
static ɵinj: i0.ɵɵInjectorDeclaration<TranslateModule>;
}
/**
* Determines if two objects or two values are equivalent.
*
* Two objects or values are considered equivalent if at least one of the following is true:
*
* * Both objects or values pass `===` comparison.
* * Both objects or values are of the same type and all of their properties are equal by
* comparing them with `equals`.
*
* @param o1 Object or value to compare.
* @param o2 Object or value to compare.
* @returns true if arguments are equal.
*/
declare function equals(o1: unknown, o2: unknown): boolean;
declare function isDefinedAndNotNull<T>(value: T | null | undefined): value is T;
declare function isDefined<T>(value: T | null | undefined): value is T | null;
declare function isDict(value: unknown): value is InterpolatableTranslationObject;
declare function isObject(value: unknown): value is Record<string, unknown>;
declare function isArray(value: unknown): value is unknown[];
declare function isString(value: unknown): value is string;
declare function isFunction(value: unknown): boolean;
declare function mergeDeep(target: Readonly<unknown>, source: Readonly<unknown>): any;
/**
* Retrieves a value from a nested object using a dot-separated key path.
*
* Example usage:
* ```ts
* getValue({ key1: { keyA: 'valueI' }}, 'key1.keyA'); // returns 'valueI'
* ```
*
* @param target The source object from which to retrieve the value.
* @param key Dot-separated key path specifying the value to retrieve.
* @returns The value at the specified key path, or `undefined` if not found.
*/
declare function getValue(target: unknown, key: string): unknown;
/**
* Sets a value on object using a dot separated key.
* This function modifies the object in place
* parser.setValue({a:{b:{c: "test"}}}, 'a.b.c', "test2") ==> {a:{b:{c: "test2"}}}
* @param target an object
* @param key E.g. "a.b.c"
* @param value to set
* @deprecated use insertValue() instead
*/
declare function setValue(target: Record<string, unknown>, key: string, value: unknown): void;
/**
* Sets a value on object using a dot separated key.
* Returns a clone of the object without modifying it
* parser.setValue({a:{b:{c: "test"}}}, 'a.b.c', "test2") ==> {a:{b:{c: "test2"}}}
* @param target an object
* @param key E.g. "a.b.c"
* @param value to set
*/
declare function insertValue<T>(target: Readonly<T>, key: string, value: unknown): T;
export { DefaultMissingTranslationHandler, ITranslateService, MissingTranslationHandler, TRANSLATE_SERVICE_CONFIG, TranslateCompiler, TranslateDefaultParser, TranslateDirective, TranslateLoader, TranslateModule, TranslateNoOpCompiler, TranslateNoOpLoader, TranslateParser, TranslatePipe, TranslateService, TranslateStore, _, defaultProviders, equals, getValue, insertValue, isArray, isDefined, isDefinedAndNotNull, isDict, isFunction, isObject, isString, mergeDeep, provideChildTranslateService, provideMissingTranslationHandler, provideTranslateCompiler, provideTranslateLoader, provideTranslateParser, provideTranslateService, setValue };
export type { ChildTranslateServiceConfig, DeepReadonly, DefaultLangChangeEvent, FallbackLangChangeEvent, InterpolatableTranslation, InterpolatableTranslationObject, InterpolateFunction, InterpolationParameters, LangChangeEvent, Language, MissingTranslationHandlerParams, RootTranslateServiceConfig, StrictTranslation, TranslateModuleConfig, TranslateProviders, TranslateServiceConfig, Translation, TranslationChangeEvent, TranslationObject };