Commit 1963fbdd337614dbccf6c96997dcd75b07323ea3

Authored by Victor Costa
1 parent 34f4d015

Rename language service to translator service

src/app/components/language-selector/language-selector.component.spec.ts
... ... @@ -11,16 +11,16 @@ describe("Components", () => {
11 11  
12 12 beforeEach(angular.mock.module("templates"));
13 13  
14   - let languageService: any;
  14 + let translatorService: any;
15 15  
16 16 let buildComponent = (): Promise<ComponentFixture> => {
17   - languageService = jasmine.createSpyObj("languageService", ["availableLanguages", "currentLanguage"])
  17 + translatorService = jasmine.createSpyObj("translatorService", ["availableLanguages", "currentLanguage"])
18 18 return helpers.quickCreateComponent({
19 19 template: "<language-selector></language-selector>",
20 20 directives: [LanguageSelector],
21 21 providers: [
22   - provide('LanguageService', {
23   - useValue: languageService
  22 + provide('TranslatorService', {
  23 + useValue: translatorService
24 24 })
25 25 ].concat(helpers.provideFilters("translateFilter"))
26 26 });
... ...
src/app/components/language-selector/language-selector.component.ts
1 1 import {Component, Inject} from "ng-forward";
2   -import {LanguageService} from "./language.service";
  2 +import {TranslatorService} from "../translator/translator.service";
3 3  
4 4 @Component({
5 5 selector: "language-selector",
6 6 templateUrl: "app/components/language-selector/language-selector.html"
7 7 })
8   -@Inject(LanguageService)
  8 +@Inject(TranslatorService)
9 9 export class LanguageSelector {
10 10  
11   - constructor(private languageService: LanguageService) { }
  11 + constructor(private translatorService: TranslatorService) { }
12 12  
13 13 currentLanguage() {
14   - return this.languageService.currentLanguage();
  14 + return this.translatorService.currentLanguage();
15 15 }
16 16  
17 17 changeLanguage(language: string) {
18   - this.languageService.changeLanguage(language);
  18 + this.translatorService.changeLanguage(language);
19 19 }
20 20  
21 21 availableLanguages() {
22   - return this.languageService.availableLanguages;
  22 + return this.translatorService.availableLanguages;
23 23 }
24 24 }
... ...
src/app/components/language-selector/language.service.spec.ts
... ... @@ -1,61 +0,0 @@
1   -import {ComponentFixture} from 'ng-forward/cjs/testing/test-component-builder';
2   -import {provide} from 'ng-forward';
3   -
4   -import {LanguageService} from './language.service';
5   -
6   -import * as helpers from "../../../spec/helpers";
7   -
8   -describe("Services", () => {
9   -
10   - describe("Language Service", () => {
11   -
12   - let $rootScope: ng.IScope;
13   - let $q: ng.IQService;
14   -
15   - beforeEach(inject((_$rootScope_: ng.IRootScopeService, _$q_: ng.IQService) => {
16   - $rootScope = _$rootScope_;
17   - $q = _$q_;
18   - }));
19   -
20   - it("set available languages when change language", (done) => {
21   - let component: LanguageService = new LanguageService(
22   - <any>helpers.mocks.$translate,
23   - <any>helpers.mocks.tmhDynamicLocale,
24   - <any>helpers.mocks.amMoment,
25   - <any>helpers.mocks.angularLoad,
26   - helpers.mocks.scopeWithEvents
27   - );
28   - component.availableLanguages = null;
29   - expect(component.availableLanguages).toBeNull();
30   - component.changeLanguage('en');
31   - expect(component.availableLanguages).toBeDefined();
32   - done();
33   - });
34   -
35   - it("change the language", (done) => {
36   - let component: LanguageService = new LanguageService(
37   - <any>helpers.mocks.$translate,
38   - <any>helpers.mocks.tmhDynamicLocale,
39   - <any>helpers.mocks.amMoment,
40   - <any>helpers.mocks.angularLoad,
41   - helpers.mocks.scopeWithEvents
42   - );
43   - let loadScripPromise = $q.defer();
44   - loadScripPromise.resolve();
45   - component["angularLoad"].loadScript = jasmine.createSpy("loadScript").and.returnValue(loadScripPromise.promise);
46   - component["tmhDynamicLocale"].set = jasmine.createSpy("set");
47   - component["tmhDynamicLocale"].get = jasmine.createSpy("get").and.returnValue("en");
48   - component["$translate"].use = jasmine.createSpy("use");
49   -
50   - component.changeLanguage('pt');
51   - $rootScope.$digest();
52   -
53   - expect(component["angularLoad"].loadScript).toHaveBeenCalledWith("/bower_components/moment/locale/pt.js");
54   - expect(component["angularLoad"].loadScript).toHaveBeenCalledWith("/bower_components/messageformat/locale/pt.js");
55   - expect(component["tmhDynamicLocale"].set).toHaveBeenCalledWith("pt");
56   - expect(component["$translate"].use).toHaveBeenCalledWith("pt");
57   - done();
58   - });
59   -
60   - });
61   -});
src/app/components/language-selector/language.service.ts
... ... @@ -1,59 +0,0 @@
1   -import {Injectable, Inject} from "ng-forward";
2   -
3   -@Injectable()
4   -@Inject("$translate", "tmhDynamicLocale", "amMoment", "angularLoad", "$rootScope")
5   -export class LanguageService {
6   -
7   - availableLanguages: any;
8   -
9   - constructor(private $translate: angular.translate.ITranslateService,
10   - private tmhDynamicLocale: angular.dynamicLocale.tmhDynamicLocaleService,
11   - private amMoment: any,
12   - private angularLoad: any,
13   - private $rootScope: any) {
14   -
15   - this.configAvailableLanguages();
16   - this.$rootScope.$on("$localeChangeSuccess", () => {
17   - this.changeLanguage(tmhDynamicLocale.get() || $translate.use());
18   - });
19   - }
20   -
21   - currentLanguage() {
22   - return this.$translate.use();
23   - }
24   -
25   - changeLanguage(language: string) {
26   - if (!language) {
27   - console.log("WARN: language undefined");
28   - return;
29   - }
30   - this.changeMomentLocale(language);
31   - this.tmhDynamicLocale.set(language);
32   - this.angularLoad.loadScript(`/bower_components/messageformat/locale/${language}.js`).then(() => {
33   - return this.$translate.use(language);
34   - }).then(() => {
35   - this.configAvailableLanguages();
36   - });
37   - }
38   -
39   - translate(text: string) {
40   - return this.$translate.instant(text);
41   - }
42   -
43   - private configAvailableLanguages() {
44   - this.availableLanguages = {
45   - "en": this.$translate.instant("language.en"),
46   - "pt": this.$translate.instant("language.pt")
47   - };
48   - }
49   -
50   - private changeMomentLocale(language: string) {
51   - let localePromise = Promise.resolve();
52   - if (language != "en") {
53   - localePromise = this.angularLoad.loadScript(`/bower_components/moment/locale/${language}.js`);
54   - }
55   - localePromise.then(() => {
56   - this.amMoment.changeLocale(language);
57   - });
58   - }
59   -}
src/app/components/navbar/navbar.spec.ts
... ... @@ -72,8 +72,8 @@ describe(&quot;Components&quot;, () =&gt; {
72 72 AUTH_EVENTS
73 73 }
74 74 }),
75   - provide('LanguageService', {
76   - useValue: helpers.mocks.languageService
  75 + provide('TranslatorService', {
  76 + useValue: helpers.mocks.translatorService
77 77 })
78 78 ].concat(helpers.provideFilters("translateFilter")),
79 79 directives: [Navbar],
... ...
src/app/components/notification/notification.component.spec.ts
... ... @@ -17,7 +17,7 @@ describe(&quot;Components&quot;, () =&gt; {
17 17 let sweetAlert = jasmine.createSpyObj("sweetAlert", ["swal"]);
18 18 sweetAlert.swal = jasmine.createSpy("swal");
19 19  
20   - let component: Notification = new Notification(<any>helpers.mocks.$log, <any>sweetAlert, <any>helpers.mocks.languageService);
  20 + let component: Notification = new Notification(<any>helpers.mocks.$log, <any>sweetAlert, <any>helpers.mocks.translatorService);
21 21 component.error();
22 22 expect(sweetAlert.swal).toHaveBeenCalledWith(jasmine.objectContaining({
23 23 text: Notification.DEFAULT_ERROR_MESSAGE,
... ... @@ -30,7 +30,7 @@ describe(&quot;Components&quot;, () =&gt; {
30 30 let sweetAlert = jasmine.createSpyObj("sweetAlert", ["swal"]);
31 31 sweetAlert.swal = jasmine.createSpy("swal");
32 32  
33   - let component: Notification = new Notification(<any>helpers.mocks.$log, <any>sweetAlert, <any>helpers.mocks.languageService);
  33 + let component: Notification = new Notification(<any>helpers.mocks.$log, <any>sweetAlert, <any>helpers.mocks.translatorService);
34 34 component.success("title", "message", 1000);
35 35 expect(sweetAlert.swal).toHaveBeenCalledWith(jasmine.objectContaining({
36 36 type: "success"
... ... @@ -42,7 +42,7 @@ describe(&quot;Components&quot;, () =&gt; {
42 42 let sweetAlert = jasmine.createSpyObj("sweetAlert", ["swal"]);
43 43 sweetAlert.swal = jasmine.createSpy("swal");
44 44  
45   - let component: Notification = new Notification(<any>helpers.mocks.$log, <any>sweetAlert, <any>helpers.mocks.languageService);
  45 + let component: Notification = new Notification(<any>helpers.mocks.$log, <any>sweetAlert, <any>helpers.mocks.translatorService);
46 46 component.httpError(500, {});
47 47 expect(sweetAlert.swal).toHaveBeenCalledWith(jasmine.objectContaining({
48 48 text: "notification.http_error.500.message"
... ... @@ -54,7 +54,7 @@ describe(&quot;Components&quot;, () =&gt; {
54 54 let sweetAlert = jasmine.createSpyObj("sweetAlert", ["swal"]);
55 55 sweetAlert.swal = jasmine.createSpy("swal");
56 56  
57   - let component: Notification = new Notification(<any>helpers.mocks.$log, <any>sweetAlert, <any>helpers.mocks.languageService);
  57 + let component: Notification = new Notification(<any>helpers.mocks.$log, <any>sweetAlert, <any>helpers.mocks.translatorService);
58 58 component.success("title", "message");
59 59 expect(sweetAlert.swal).toHaveBeenCalledWith(jasmine.objectContaining({
60 60 type: "success",
... ...
src/app/components/notification/notification.component.ts
1 1 import {Injectable, Inject} from "ng-forward";
2   -import {LanguageService} from "../language-selector/language.service";
  2 +import {TranslatorService} from "../translator/translator.service";
3 3  
4 4 @Injectable()
5   -@Inject("$log", "SweetAlert", LanguageService)
  5 +@Inject("$log", "SweetAlert", TranslatorService)
6 6 export class Notification {
7 7  
8 8 constructor(
9 9 private $log: ng.ILogService,
10 10 private SweetAlert: any,
11   - private languageService: LanguageService
  11 + private translatorService: TranslatorService
12 12 ) { }
13 13  
14 14 public static DEFAULT_ERROR_TITLE = "notification.error.default.title";
... ... @@ -16,10 +16,10 @@ export class Notification {
16 16 public static DEFAULT_SUCCESS_TIMER = 1000;
17 17  
18 18 error(message: string = Notification.DEFAULT_ERROR_MESSAGE, title: string = Notification.DEFAULT_ERROR_TITLE) {
19   - this.$log.debug("Notification error:", title, message, this.languageService.currentLanguage());
  19 + this.$log.debug("Notification error:", title, message, this.translatorService.currentLanguage());
20 20 this.SweetAlert.swal({
21   - title: this.languageService.translate(title),
22   - text: this.languageService.translate(message),
  21 + title: this.translatorService.translate(title),
  22 + text: this.translatorService.translate(message),
23 23 type: "error"
24 24 });
25 25 }
... ...
src/app/components/translator/translator.service.spec.ts 0 → 100644
... ... @@ -0,0 +1,61 @@
  1 +import {ComponentFixture} from 'ng-forward/cjs/testing/test-component-builder';
  2 +import {provide} from 'ng-forward';
  3 +
  4 +import {TranslatorService} from './translator.service';
  5 +
  6 +import * as helpers from "../../../spec/helpers";
  7 +
  8 +describe("Services", () => {
  9 +
  10 + describe("Translator Service", () => {
  11 +
  12 + let $rootScope: ng.IScope;
  13 + let $q: ng.IQService;
  14 +
  15 + beforeEach(inject((_$rootScope_: ng.IRootScopeService, _$q_: ng.IQService) => {
  16 + $rootScope = _$rootScope_;
  17 + $q = _$q_;
  18 + }));
  19 +
  20 + it("set available languages when change language", (done) => {
  21 + let component: TranslatorService = new TranslatorService(
  22 + <any>helpers.mocks.$translate,
  23 + <any>helpers.mocks.tmhDynamicLocale,
  24 + <any>helpers.mocks.amMoment,
  25 + <any>helpers.mocks.angularLoad,
  26 + helpers.mocks.scopeWithEvents
  27 + );
  28 + component.availableLanguages = null;
  29 + expect(component.availableLanguages).toBeNull();
  30 + component.changeLanguage('en');
  31 + expect(component.availableLanguages).toBeDefined();
  32 + done();
  33 + });
  34 +
  35 + it("change the language", (done) => {
  36 + let component: TranslatorService = new TranslatorService(
  37 + <any>helpers.mocks.$translate,
  38 + <any>helpers.mocks.tmhDynamicLocale,
  39 + <any>helpers.mocks.amMoment,
  40 + <any>helpers.mocks.angularLoad,
  41 + helpers.mocks.scopeWithEvents
  42 + );
  43 + let loadScripPromise = $q.defer();
  44 + loadScripPromise.resolve();
  45 + component["angularLoad"].loadScript = jasmine.createSpy("loadScript").and.returnValue(loadScripPromise.promise);
  46 + component["tmhDynamicLocale"].set = jasmine.createSpy("set");
  47 + component["tmhDynamicLocale"].get = jasmine.createSpy("get").and.returnValue("en");
  48 + component["$translate"].use = jasmine.createSpy("use");
  49 +
  50 + component.changeLanguage('pt');
  51 + $rootScope.$digest();
  52 +
  53 + expect(component["angularLoad"].loadScript).toHaveBeenCalledWith("/bower_components/moment/locale/pt.js");
  54 + expect(component["angularLoad"].loadScript).toHaveBeenCalledWith("/bower_components/messageformat/locale/pt.js");
  55 + expect(component["tmhDynamicLocale"].set).toHaveBeenCalledWith("pt");
  56 + expect(component["$translate"].use).toHaveBeenCalledWith("pt");
  57 + done();
  58 + });
  59 +
  60 + });
  61 +});
... ...
src/app/components/translator/translator.service.ts 0 → 100644
... ... @@ -0,0 +1,59 @@
  1 +import {Injectable, Inject} from "ng-forward";
  2 +
  3 +@Injectable()
  4 +@Inject("$translate", "tmhDynamicLocale", "amMoment", "angularLoad", "$rootScope")
  5 +export class TranslatorService {
  6 +
  7 + availableLanguages: any;
  8 +
  9 + constructor(private $translate: angular.translate.ITranslateService,
  10 + private tmhDynamicLocale: angular.dynamicLocale.tmhDynamicLocaleService,
  11 + private amMoment: any,
  12 + private angularLoad: any,
  13 + private $rootScope: any) {
  14 +
  15 + this.configAvailableLanguages();
  16 + this.$rootScope.$on("$localeChangeSuccess", () => {
  17 + this.changeLanguage(tmhDynamicLocale.get() || $translate.use());
  18 + });
  19 + }
  20 +
  21 + currentLanguage() {
  22 + return this.$translate.use();
  23 + }
  24 +
  25 + changeLanguage(language: string) {
  26 + if (!language) {
  27 + console.log("WARN: language undefined");
  28 + return;
  29 + }
  30 + this.changeMomentLocale(language);
  31 + this.tmhDynamicLocale.set(language);
  32 + this.angularLoad.loadScript(`/bower_components/messageformat/locale/${language}.js`).then(() => {
  33 + return this.$translate.use(language);
  34 + }).then(() => {
  35 + this.configAvailableLanguages();
  36 + });
  37 + }
  38 +
  39 + translate(text: string) {
  40 + return this.$translate.instant(text);
  41 + }
  42 +
  43 + private configAvailableLanguages() {
  44 + this.availableLanguages = {
  45 + "en": this.$translate.instant("language.en"),
  46 + "pt": this.$translate.instant("language.pt")
  47 + };
  48 + }
  49 +
  50 + private changeMomentLocale(language: string) {
  51 + let localePromise = Promise.resolve();
  52 + if (language != "en") {
  53 + localePromise = this.angularLoad.loadScript(`/bower_components/moment/locale/${language}.js`);
  54 + }
  55 + localePromise.then(() => {
  56 + this.amMoment.changeLocale(language);
  57 + });
  58 + }
  59 +}
... ...
src/spec/mocks.ts
... ... @@ -96,7 +96,7 @@ export var mocks = {
96 96 $log: {
97 97 debug: () => { }
98 98 },
99   - languageService: {
  99 + translatorService: {
100 100 currentLanguage: () => { },
101 101 changeLanguage: (lang: string) => { },
102 102 translate: (text: string) => { return text }
... ...