Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

fix(po-i18n): permite mesclar contextos adicionados em "lazy modules"#421

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Open
rubinhos wants to merge1 commit intopo-ui:master
base:master
Choose a base branch
Loading
fromrubinhos:po-i18n/321
Open
Show file tree
Hide file tree
Changes fromall commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
fix(po-i18n): permite mesclar contextos adicionados em "lazy modules"
  • Loading branch information
Rubens dos Santos Filho committedMay 21, 2020
commitcfa49be27cc3e018e522f2e6694d002c700c46ff
1 change: 1 addition & 0 deletionspackage.json
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -69,6 +69,7 @@
"@po-ui/style": "2.3.0",
"core-js": "3.6.4",
"custom-idle-queue": "2.1.2",
"deepmerge": "^4.2.2",
"http-status-codes": "^1.4.0",
"localforage": "1.4.0",
"lokijs": "1.5.8",
Expand Down
8 changes: 6 additions & 2 deletionsprojects/ui/ng-package.json
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,11 @@
"$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
"dest": "../../dist/ng-components",
"lib": {
"entryFile": "./src/public-api.ts"
"entryFile": "./src/public-api.ts",
"umdModuleIds": {
"deepmerge": "deepmerge",
"uuid": "uuid"
}
},
"whitelistedNonPeerDependencies": ["@po-ui/style", "@po-ui/ng-schematics"]
"whitelistedNonPeerDependencies": ["@po-ui/style", "@po-ui/ng-schematics", "deepmerge", "uuid"]
}
1 change: 1 addition & 0 deletionsprojects/ui/src/lib/services/po-i18n/index.ts
View file
Open in desktop
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
export * from './interfaces/po-i18n-config.interface';
export * from './interfaces/po-i18n-config-context.interface';
export * from './interfaces/po-i18n-config-default.interface';
export * from './interfaces/po-i18n-literals.interface';
export * from './po-i18n.pipe';
Expand Down
View file
Open in desktop
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
/**
* @description
*
* <a id="poI18nConfigContext"></a>
*
* Interface para a configuração dos contextos do módulo `PoI18nModule`.
*
* @usedBy PoI18nModule
*/
export interface PoI18nConfigContext {
[name: string]: { [language: string]: { [literal: string]: string } } | { url: string };
}
View file
Open in desktop
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
import { PoI18nConfigContext } from './po-i18n-config-context.interface';
import { PoI18nConfigDefault } from './po-i18n-config-default.interface';

/**
Expand All@@ -10,7 +11,9 @@ import { PoI18nConfigDefault } from './po-i18n-config-default.interface';
* @usedBy PoI18nModule
*/
export interface PoI18nConfig {
/** Configurações padrões. */
/**
* Configurações padrões.
*/
default?: PoI18nConfigDefault;

/**
Expand All@@ -20,30 +23,34 @@ export interface PoI18nConfig {
*
* Portanto podemos utilizar constantes, onde devemos informar o nome do contexto recebendo um objeto com os
* idiomas suportados e o arquivo de literais, por exemplo:
* ```
* import { generalEn } from './i18n/general-en';
* import { generalPt } from './i18n/general-pt';
*
* ```typescript
* import { generalEn } from './i18n/general-en';
* import { generalPt } from './i18n/general-pt';
*
* ...
*general: {
*pt: generalPt,
*en: generalEn
*}
* general: {
* pt: generalPt,
* en: generalEn
* }
* ...
* ```
*
* E como informado, podemos utilizar a propriedade `url` que deve receber a URL do serviço que
* retorne as literais traduzidas, por exemplo:
* ```
* hcm: {
* url: 'http://localhost:3000/api/translations/hcm/'
* }
*
* ```typescript
* hcm: {
* url: 'http://localhost:3000/api/translations/hcm/'
* }
* ```
*
* Ao optar por utilizar um serviço, deverá ser definida a URL específica do contexto,
* como nos exemplos abaixo:
*
* ```
*http://server:port/api/translations/crm
*http://server:port/api/translations/general
* http://server:port/api/translations/crm
* http://server:port/api/translations/general
* ```
*
* Os idiomas e literais serão automaticamente buscados com parâmetros na própria URL:
Expand All@@ -53,28 +60,30 @@ export interface PoI18nConfig {
* serviço deve retornar todas as literais do idioma.
*
* Exemplos de requisição:
*
* ```
*http://server:port/api/translations/crm?language=pt-br
*http://server:port/api/translations/crm?language=pt-br&literals=add,remove,text
* http://server:port/api/translations/crm?language=pt-br
* http://server:port/api/translations/crm?language=pt-br&literals=add,remove,text
* ```
*
* > Sempre que o idioma solicitado não for encontrado, será buscado por `pt-br`.
*
* Existe também a possibilidade de utilizar ambos, onde será feito a busca das literais nas constantes e depois efetua
* a busca no serviço, com isso as constantes podem servir como *backup* caso o serviço esteja indisponível, por exemplo:
*
* ```
* import { generalEn } from './i18n/general-en';
* import { generalPt } from './i18n/general-pt';
* ```typescript
* import { generalEn } from './i18n/general-en';
* import { generalPt } from './i18n/general-pt';
*
* ...
*general: {
*pt: generalPt,
*en: generalEn,
*url: 'http://localhost:3000/api/translations/hcm/'
*}
* general: {
* pt: generalPt,
* en: generalEn,
* url: 'http://localhost:3000/api/translations/hcm/'
* }
* ...
* ```
* > Caso a constante contenha alguma literal que o serviço não possua será utilizado a literal da constante.
*/
contexts:object;
contexts:PoI18nConfigContext;
}
View file
Open in desktop
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,33 @@
import { fakeAsync, TestBed, tick } from '@angular/core/testing';
import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
import { HttpRequest } from '@angular/common/http';

import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
import { NgModule } from '@angular/core';
import { fakeAsync, TestBed, tick } from '@angular/core/testing';
import { of } from 'rxjs';

import * as utils from '../../utils/util';

import { PoI18nModule, PoI18nService } from '../po-i18n';
import { PoLanguageModule } from '../po-language';
import { PoI18nConfig } from './interfaces/po-i18n-config.interface';

const lazyConfig: PoI18nConfig = {
contexts: {
general: {
'pt-br': {
insert: 'insert'
}
},
special: {
'pt-br': {
delete: 'delete'
}
}
}
};

@NgModule({
imports: [PoI18nModule.forChild(lazyConfig)]
})
class LazyModule {}

describe('PoI18nService:', () => {
describe('without Service:', () => {
Expand DownExpand Up@@ -43,7 +63,7 @@ describe('PoI18nService:', () => {

beforeEach(() => {
TestBed.configureTestingModule({
imports: [HttpClientTestingModule, PoLanguageModule, PoI18nModule.config(config)]
imports: [HttpClientTestingModule,LazyModule,PoLanguageModule, PoI18nModule.forRoot(config)]
});

service = TestBed.inject(PoI18nService);
Expand DownExpand Up@@ -117,6 +137,22 @@ describe('PoI18nService:', () => {
});
});

it('should return literal merged from context added in a "lazy module"', done => {
service.getLiterals({ context: 'general', language: 'pt-br' }).subscribe(literals => {
expect(literals['insert']).toBeTruthy();
expect(literals['insert']).toBe(lazyConfig.contexts['general']['pt-br']['insert']);
done();
});
});

it('should return literal from context added in a "lazy module"', done => {
service.getLiterals({ context: 'special', language: 'pt-br' }).subscribe(literals => {
expect(literals['delete']).toBeTruthy();
expect(literals['delete']).toBe(lazyConfig.contexts['special']['pt-br']['delete']);
done();
});
});

describe('Methods:', () => {
it('getLanguage: should call `languageService.getLanguage`.', () => {
const languageServiceSpy = spyOn(service['languageService'], 'getLanguage');
Expand Down
View file
Open in desktop
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
import { HttpClient } from '@angular/common/http';
import { Inject } from '@angular/core';

import { Observable } from 'rxjs';

import { isLanguage, reloadCurrentPage } from '../../utils/util';
import { PoLanguageService } from '../po-language/po-language.service';

import { I18N_CONFIG } from './po-i18n-config-injection-token';
import { PoI18nConfig } from './interfaces/po-i18n-config.interface';
import { PoI18nLiterals } from './interfaces/po-i18n-literals.interface';
import { I18N_CONFIG } from './po-i18n-config-injection-token';

/**
* @description
Expand DownExpand Up@@ -256,7 +254,7 @@ export class PoI18nBaseService {
const context = options['context'] ? options['context'] : this.contextDefault;
const literals: Array<string> = options['literals'] ? options['literals'] : [];

return new Observable(observer => {
return new Observable<any>(observer => {
if (this.servicesContext[context]) {
// Faz o processo de busca de um contexto que contém serviço
this.getLiteralsFromContextService(language, context, literals, observer);
Expand Down
View file
Open in desktop
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,4 +2,4 @@ import { InjectionToken } from '@angular/core';

import { PoI18nConfig } from './interfaces/po-i18n-config.interface';

export const I18N_CONFIG = new InjectionToken<PoI18nConfig>('I18N_CONFIG');
export const I18N_CONFIG = new InjectionToken<Array<PoI18nConfig>>('I18N_CONFIG');
Loading

[8]ページ先頭

©2009-2025 Movatter.jp