Skip to content

Commit ddc1d08

Browse files
committed
feat(navbar): permite traduzir literais usando serviço i18n
1 parent 9d88206 commit ddc1d08

File tree

3 files changed

+27
-15
lines changed

3 files changed

+27
-15
lines changed

projects/ui/src/lib/components/po-navbar/po-navbar-base.component.spec.ts

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { Directive } from '@angular/core';
33
import { expectPropertiesValues } from '../../util-test/util-expect.spec';
44

55
import * as utilsFunctions from '../../utils/util';
6+
import { PoLanguageService } from '../../services/po-language/po-language.service';
67

78
import { PoNavbarBaseComponent, poNavbarLiteralsDefault } from './po-navbar-base.component';
89

@@ -12,7 +13,8 @@ export class PoNavbarComponent extends PoNavbarBaseComponent {
1213
}
1314

1415
describe('PoNavbarBaseComponent:', () => {
15-
const component = new PoNavbarComponent();
16+
const languageService = new PoLanguageService();
17+
const component = new PoNavbarComponent(languageService);
1618

1719
it('should be created', () => {
1820
expect(component instanceof PoNavbarBaseComponent).toBeTruthy();
@@ -44,47 +46,47 @@ describe('PoNavbarBaseComponent:', () => {
4446
});
4547

4648
it('literals: should be in portuguese if browser is setted with an unsupported language', () => {
47-
spyOn(utilsFunctions, <any>'browserLanguage').and.returnValue('zw');
49+
component['language'] = 'zw';
4850

4951
component.literals = {};
5052

5153
expect(component.literals).toEqual(poNavbarLiteralsDefault[utilsFunctions.poLocaleDefault]);
5254
});
5355

5456
it('literals: should be in portuguese if browser is setted with `pt`', () => {
55-
spyOn(utilsFunctions, <any>'browserLanguage').and.returnValue('pt');
57+
component['language'] = 'pt';
5658

5759
component.literals = {};
5860

5961
expect(component.literals).toEqual(poNavbarLiteralsDefault.pt);
6062
});
6163

6264
it('literals: should be in english if browser is setted with `en`', () => {
63-
spyOn(utilsFunctions, <any>'browserLanguage').and.returnValue('en');
65+
component['language'] = 'en';
6466

6567
component.literals = {};
6668

6769
expect(component.literals).toEqual(poNavbarLiteralsDefault.en);
6870
});
6971

7072
it('literals: should be in spanish if browser is setted with `es`', () => {
71-
spyOn(utilsFunctions, <any>'browserLanguage').and.returnValue('es');
73+
component['language'] = 'es';
7274

7375
component.literals = {};
7476

7577
expect(component.literals).toEqual(poNavbarLiteralsDefault.es);
7678
});
7779

7880
it('literals: should be in russian if browser is setted with `ru`', () => {
79-
spyOn(utilsFunctions, <any>'browserLanguage').and.returnValue('ru');
81+
component['language'] = 'ru';
8082

8183
component.literals = {};
8284

8385
expect(component.literals).toEqual(poNavbarLiteralsDefault.ru);
8486
});
8587

8688
it('literals: should accept custom literals', () => {
87-
spyOn(utilsFunctions, <any>'browserLanguage').and.returnValue(utilsFunctions.poLocaleDefault);
89+
component['language'] = utilsFunctions.poLocaleDefault;
8890

8991
const customLiterals = Object.assign({}, poNavbarLiteralsDefault[utilsFunctions.poLocaleDefault]);
9092

@@ -99,7 +101,7 @@ describe('PoNavbarBaseComponent:', () => {
99101
it('literals: should update property with default literals if is setted with invalid values', () => {
100102
const invalidValues = [null, undefined, false, true, '', 'literals', 0, 10, [], [1, 2], () => {}];
101103

102-
spyOn(utilsFunctions, <any>'browserLanguage').and.returnValue(utilsFunctions.poLocaleDefault);
104+
component['language'] = utilsFunctions.poLocaleDefault;
103105

104106
expectPropertiesValues(
105107
component,

projects/ui/src/lib/components/po-navbar/po-navbar-base.component.ts

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import { Input, Directive } from '@angular/core';
22

3-
import { browserLanguage, convertToBoolean, poLocaleDefault } from '../../utils/util';
4-
3+
import { convertToBoolean, poLocaleDefault } from '../../utils/util';
4+
import { PoLanguageService } from '../../services/po-language/po-language.service';
55
import { PoMenuComponent } from '../po-menu';
6+
67
import { PoNavbarIconAction } from './interfaces/po-navbar-icon-action.interface';
78
import { PoNavbarItem } from './interfaces/po-navbar-item.interface';
89
import { PoNavbarLiterals } from './interfaces/po-navbar-literals.interface';
@@ -35,6 +36,7 @@ export abstract class PoNavbarBaseComponent {
3536
private _literals: PoNavbarLiterals;
3637
private _logo: string;
3738
private _shadow: boolean = false;
39+
private language: string = poLocaleDefault;
3840

3941
/**
4042
* @optional
@@ -89,21 +91,22 @@ export abstract class PoNavbarBaseComponent {
8991
* </po-navbar>
9092
* ```
9193
*
92-
* > O objeto padrão de literais será traduzido de acordo com o idioma do *browser* (pt, en, es).
94+
* > O objeto padrão de literais será traduzido de acordo com o idioma do
95+
* [`PoI18nService`](/documentation/po-i18n) ou do browser.
9396
*/
9497
@Input('p-literals') set literals(value: PoNavbarLiterals) {
9598
if (value instanceof Object && !(value instanceof Array)) {
9699
this._literals = {
97100
...poNavbarLiteralsDefault[poLocaleDefault],
98-
...poNavbarLiteralsDefault[browserLanguage()],
101+
...poNavbarLiteralsDefault[this.language],
99102
...value
100103
};
101104
} else {
102-
this._literals = poNavbarLiteralsDefault[browserLanguage()];
105+
this._literals = poNavbarLiteralsDefault[this.language];
103106
}
104107
}
105108
get literals() {
106-
return this._literals || poNavbarLiteralsDefault[browserLanguage()];
109+
return this._literals || poNavbarLiteralsDefault[this.language];
107110
}
108111

109112
/**
@@ -168,5 +171,9 @@ export abstract class PoNavbarBaseComponent {
168171
return this._shadow;
169172
}
170173

174+
constructor(languageService: PoLanguageService) {
175+
this.language = languageService.getShortLanguage();
176+
}
177+
171178
protected abstract validateMenuLogo(): void;
172179
}

projects/ui/src/lib/components/po-navbar/po-navbar.component.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ import {
99
} from '@angular/core';
1010
import { animate, AnimationBuilder, AnimationFactory, AnimationPlayer, keyframes, style } from '@angular/animations';
1111

12+
import { PoLanguageService } from '../../services/po-language/po-language.service';
1213
import { PoMenuItem } from '../po-menu';
14+
1315
import { PoNavbarBaseComponent } from './po-navbar-base.component';
1416
import { PoNavbarItem } from './interfaces/po-navbar-item.interface';
1517
import { PoNavbarItemsComponent } from './po-navbar-items/po-navbar-items.component';
@@ -50,11 +52,12 @@ export class PoNavbarComponent extends PoNavbarBaseComponent implements AfterVie
5052
@ViewChild(PoNavbarItemsComponent, { static: true }) navbarItems: PoNavbarItemsComponent;
5153

5254
constructor(
55+
poLanguageService: PoLanguageService,
5356
private renderer: Renderer2,
5457
private builder: AnimationBuilder,
5558
private changeDetector: ChangeDetectorRef
5659
) {
57-
super();
60+
super(poLanguageService);
5861
this.windowResizeListener = this.renderer.listen(window, 'resize', this.displayItemsNavigation.bind(this));
5962
}
6063

0 commit comments

Comments
 (0)