import { Observable, Subject } from 'rxjs';
import { LocaleService } from './locale.service';
import { TranslationProvider } from './translation-provider';
import { TranslationHandler } from './translation-handler';
import { InjectorRef } from '../models/injector-ref';
import { L10nConfigRef } from "../models/l10n-config";
export interface ITranslationService {
    translationError: Subject<any>;
    getConfiguration(): L10nConfigRef['translation'];
    init(): Promise<any>;
    loadTranslation(): Promise<any>;
    translationChanged(): Observable<string>;
    latestTranslation(): Observable<string>;
    translate(keys: string | string[], args?: any, lang?: string): string | any;
    translateAsync(keys: string | string[], args?: any, lang?: string): Observable<string | any>;
    has(key: string, lang?: string): boolean;
}
/**
 * Manages the translation data.
 */
export declare class TranslationService implements ITranslationService {
    private configuration;
    private locale;
    private translationProvider;
    private translationHandler;
    private injector;
    /**
     * Fired when the translation data could not been loaded. Returns the error.
     */
    translationError: Subject<any>;
    private translation;
    /**
     * The translation data: {language: {key: value}}.
     */
    private translationData;
    constructor(configuration: L10nConfigRef, locale: LocaleService, translationProvider: TranslationProvider, translationHandler: TranslationHandler, injector: InjectorRef);
    getConfiguration(): L10nConfigRef['translation'];
    init(): Promise<any>;
    /**
     * Forces the translation loading for the current language.
     */
    loadTranslation(): Promise<any>;
    /**
     * Fired when the translation data has been loaded. Returns the translation language.
     */
    translationChanged(): Observable<string>;
    /**
     * Fired when the latest 'translationChanged' is emitted. Returns the translation language.
     * Used when the reference to the service is not known, as in decorators.
     */
    latestTranslation(): Observable<string>;
    /**
     * Translates a key or an array of keys.
     * @param keys The key or an array of keys to be translated
     * @param args Optional parameters contained in the key
     * @param lang The current language of the service is used by default
     * @return The translated value or an object: {key: value}
     */
    translate(keys: string | string[], args?: any, lang?: string): string | any;
    translateAsync(keys: string | string[], args?: any, lang?: string): Observable<string | any>;
    /**
     * Checks if a translation exists.
     * @param key The key to be tested
     * @param lang The current language of the service is used by default
     */
    has(key: string, lang?: string): boolean;
    private translateKey;
    private getValue;
    private extractKey;
    private translateI18nPlural;
    private getTranslation;
    private getTranslationAsync;
    private addData;
    private releaseTranslation;
    private handleError;
}
