import { ModuleWithProviders } from '@angular/core';
import { PoLanguageService } from './../po-language/po-language.service';
import { PoI18nConfig } from './interfaces/po-i18n-config.interface';
/**
* @description
*
* Módulo do serviço `PoI18nService` para controle de idiomas com PO.
*
* Para utilização do serviço de idiomas `PoI18nService`, deve-se importar este módulo mesmo já havendo importado
* o módulo `PoModule`. Na importação deve ser invocado o método `config`, informando um objeto que deve implementar
* a interface [`PoI18nConfig`](documentation/po-i18n#poI18nConfig) para configuração.
*
*
* **Exemplo de configuração do módulo do i18n:**
* ```
* import { PoI18nConfig } from '@po-ui/ng-components';
*
* import { generalEn } from './i18n/general-en';
* import { generalPt } from './i18n/general-pt';
*
* const i18nConfig: PoI18nConfig = {
* default: {
* language: 'pt-BR',
* context: 'general',
* cache: true
* },
* contexts: {
* general: {
* 'pt-BR': generalPt,
* 'en-US': generalEn
* },
* hcm: {
* url: 'http://10.1.1.1/api/translations/hcm/'
* }
* }
* };
*
* @NgModule({
* declarations: [],
* imports: [
* PoModule,
* PoI18nModule.config(i18nConfig)
* ],
* bootstrap: [AppComponent]
* })
* ```
*
* Para cada contexto é possível definir a origem das literais, que podem ser de um serviço REST ou
* de um objeto. Exemplo:
*
* Arquivo general-pt.ts
* ```
* export const generalPt = {
* add: 'Adicionar',
* greeting: 'Prazer, {0} {1}',
* people: '{0} Pessoas,
* remove: 'Remover'
* }
* ```
*
* Arquivo general-en.ts
* ```
* export const generalEn = {
* add: 'Add',
* greeting: 'Nice to meet you, {0} {1}',
* people: '{0} People,
* remove: 'Remove'
* }
* ```
*
* **Exemplo de configuração de contextos usando constantes externas:**
* ```
* import { PoI18nConfig } from '@po-ui/ng-components';
*
* import { generalEn } from './i18n/general-en';
* import { generalPt } from './i18n/general-pt';
*
* const i18nConfig: PoI18nConfig = {
* contexts: {
* general: {
* 'pt-BR': generalPt, // constantes em arquivos separados
* 'en-US': generalEn // constantes em arquivos separados
* },
* crm: {
* url: 'http://10.0.0.1:3000/api/translations/crm'
* }
* },
* default: {}
* }
* ```
*
* **Exemplo de configuração de um contexto utilizando serviço:**
*
* Ao optar por utilizar um serviço para configuração de contexto, deverá ser definida a URL
* específica do contexto, como nos exemplos abaixo:
*
* - http://10.0.0.1:3000/api/translations/crm
* - http://10.0.0.1:3000/api/translations/general
*
* Os idiomas e literais serão automaticamente buscados com parâmetros na própria URL:
* - **language**: o idioma será sempre passado por parâmetro e é recomendado utilizar uma das linguagens
* suportadas pelo PO (`pt-br`, `en-us`, `es-es` ou `ru`).
* - **literals**: as literais serão separadas por vírgula. Caso esse parâmetro não seja informado, o
* serviço deve retornar todas as literais do idioma.
*
* Exemplos de requisição:
*
* - http://10.0.0.1:3000/api/translations/crm?language=pt-br
* - http://10.0.0.1:3000/api/translations/crm?language=pt-br&literals=add,remove,text
*
* > Sempre que o idioma solicitado não for encontrado, será buscado por `pt-br`.
*
* Além dos contextos, é possível definir as configurações *default* do sistema na configuração do
* módulo utilizando a interface [`PoI18nConfig`](documentation/po-i18n#poI18nConfig):
*
* **Exemplo de padrões definidos:**
* ```
* const i18nConfig: PoI18nConfig = {
* contexts: {
* general: { }
* },
* default: {
* language: 'pt-BR',
* context: 'general',
* cache: true
* }
* }
* ```
*
* **Importante:**
*
* Recomenda-se que as definições *default* sejam realizadas apenas uma vez na aplicação,
* preferencialmente no módulo `AppModule`.
*
* **i18n com *Lazy loading***
*
* Para aplicações que utilizem a abordagem de módulos com carregamento *lazy loading*, caso seja
* definida outra configuração do `PoI18nModule`, deve-se atentar os seguintes detalhes:
*
* - Não defina outra *default language* para este módulo. Caso for definida, será sobreposta para
* toda a aplicação;
* - Caso precise de módulos carregados via *lazy loading* com linguagens diferentes, utilize o
* método [`setLanguage()`](documentation/po-i18n#setLanguage) disponibilizado pelo `PoI18nService`
* para definir a linguagem da aplicação e dos módulos com as linguagens diferentes.
*/
export declare class PoI18nModule {
static config(config: PoI18nConfig): ModuleWithProviders;
}
export declare function initializeLanguageDefault(configs: Array, languageService: PoLanguageService): () => void;