Commit 1963fbdd337614dbccf6c96997dcd75b07323ea3

Authored by Victor Costa
1 parent 34f4d015
Exists in master and in 1 other branch dev-fixes

Rename language service to translator service

src/app/components/language-selector/language-selector.component.spec.ts
@@ -11,16 +11,16 @@ describe("Components", () => { @@ -11,16 +11,16 @@ describe("Components", () => {
11 11
12 beforeEach(angular.mock.module("templates")); 12 beforeEach(angular.mock.module("templates"));
13 13
14 - let languageService: any; 14 + let translatorService: any;
15 15
16 let buildComponent = (): Promise<ComponentFixture> => { 16 let buildComponent = (): Promise<ComponentFixture> => {
17 - languageService = jasmine.createSpyObj("languageService", ["availableLanguages", "currentLanguage"]) 17 + translatorService = jasmine.createSpyObj("translatorService", ["availableLanguages", "currentLanguage"])
18 return helpers.quickCreateComponent({ 18 return helpers.quickCreateComponent({
19 template: "<language-selector></language-selector>", 19 template: "<language-selector></language-selector>",
20 directives: [LanguageSelector], 20 directives: [LanguageSelector],
21 providers: [ 21 providers: [
22 - provide('LanguageService', {  
23 - useValue: languageService 22 + provide('TranslatorService', {
  23 + useValue: translatorService
24 }) 24 })
25 ].concat(helpers.provideFilters("translateFilter")) 25 ].concat(helpers.provideFilters("translateFilter"))
26 }); 26 });
src/app/components/language-selector/language-selector.component.ts
1 import {Component, Inject} from "ng-forward"; 1 import {Component, Inject} from "ng-forward";
2 -import {LanguageService} from "./language.service"; 2 +import {TranslatorService} from "../translator/translator.service";
3 3
4 @Component({ 4 @Component({
5 selector: "language-selector", 5 selector: "language-selector",
6 templateUrl: "app/components/language-selector/language-selector.html" 6 templateUrl: "app/components/language-selector/language-selector.html"
7 }) 7 })
8 -@Inject(LanguageService) 8 +@Inject(TranslatorService)
9 export class LanguageSelector { 9 export class LanguageSelector {
10 10
11 - constructor(private languageService: LanguageService) { } 11 + constructor(private translatorService: TranslatorService) { }
12 12
13 currentLanguage() { 13 currentLanguage() {
14 - return this.languageService.currentLanguage(); 14 + return this.translatorService.currentLanguage();
15 } 15 }
16 16
17 changeLanguage(language: string) { 17 changeLanguage(language: string) {
18 - this.languageService.changeLanguage(language); 18 + this.translatorService.changeLanguage(language);
19 } 19 }
20 20
21 availableLanguages() { 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,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,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,8 +72,8 @@ describe(&quot;Components&quot;, () =&gt; {
72 AUTH_EVENTS 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 ].concat(helpers.provideFilters("translateFilter")), 78 ].concat(helpers.provideFilters("translateFilter")),
79 directives: [Navbar], 79 directives: [Navbar],
src/app/components/notification/notification.component.spec.ts
@@ -17,7 +17,7 @@ describe(&quot;Components&quot;, () =&gt; { @@ -17,7 +17,7 @@ describe(&quot;Components&quot;, () =&gt; {
17 let sweetAlert = jasmine.createSpyObj("sweetAlert", ["swal"]); 17 let sweetAlert = jasmine.createSpyObj("sweetAlert", ["swal"]);
18 sweetAlert.swal = jasmine.createSpy("swal"); 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 component.error(); 21 component.error();
22 expect(sweetAlert.swal).toHaveBeenCalledWith(jasmine.objectContaining({ 22 expect(sweetAlert.swal).toHaveBeenCalledWith(jasmine.objectContaining({
23 text: Notification.DEFAULT_ERROR_MESSAGE, 23 text: Notification.DEFAULT_ERROR_MESSAGE,
@@ -30,7 +30,7 @@ describe(&quot;Components&quot;, () =&gt; { @@ -30,7 +30,7 @@ describe(&quot;Components&quot;, () =&gt; {
30 let sweetAlert = jasmine.createSpyObj("sweetAlert", ["swal"]); 30 let sweetAlert = jasmine.createSpyObj("sweetAlert", ["swal"]);
31 sweetAlert.swal = jasmine.createSpy("swal"); 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 component.success("title", "message", 1000); 34 component.success("title", "message", 1000);
35 expect(sweetAlert.swal).toHaveBeenCalledWith(jasmine.objectContaining({ 35 expect(sweetAlert.swal).toHaveBeenCalledWith(jasmine.objectContaining({
36 type: "success" 36 type: "success"
@@ -42,7 +42,7 @@ describe(&quot;Components&quot;, () =&gt; { @@ -42,7 +42,7 @@ describe(&quot;Components&quot;, () =&gt; {
42 let sweetAlert = jasmine.createSpyObj("sweetAlert", ["swal"]); 42 let sweetAlert = jasmine.createSpyObj("sweetAlert", ["swal"]);
43 sweetAlert.swal = jasmine.createSpy("swal"); 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 component.httpError(500, {}); 46 component.httpError(500, {});
47 expect(sweetAlert.swal).toHaveBeenCalledWith(jasmine.objectContaining({ 47 expect(sweetAlert.swal).toHaveBeenCalledWith(jasmine.objectContaining({
48 text: "notification.http_error.500.message" 48 text: "notification.http_error.500.message"
@@ -54,7 +54,7 @@ describe(&quot;Components&quot;, () =&gt; { @@ -54,7 +54,7 @@ describe(&quot;Components&quot;, () =&gt; {
54 let sweetAlert = jasmine.createSpyObj("sweetAlert", ["swal"]); 54 let sweetAlert = jasmine.createSpyObj("sweetAlert", ["swal"]);
55 sweetAlert.swal = jasmine.createSpy("swal"); 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 component.success("title", "message"); 58 component.success("title", "message");
59 expect(sweetAlert.swal).toHaveBeenCalledWith(jasmine.objectContaining({ 59 expect(sweetAlert.swal).toHaveBeenCalledWith(jasmine.objectContaining({
60 type: "success", 60 type: "success",
src/app/components/notification/notification.component.ts
1 import {Injectable, Inject} from "ng-forward"; 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 @Injectable() 4 @Injectable()
5 -@Inject("$log", "SweetAlert", LanguageService) 5 +@Inject("$log", "SweetAlert", TranslatorService)
6 export class Notification { 6 export class Notification {
7 7
8 constructor( 8 constructor(
9 private $log: ng.ILogService, 9 private $log: ng.ILogService,
10 private SweetAlert: any, 10 private SweetAlert: any,
11 - private languageService: LanguageService 11 + private translatorService: TranslatorService
12 ) { } 12 ) { }
13 13
14 public static DEFAULT_ERROR_TITLE = "notification.error.default.title"; 14 public static DEFAULT_ERROR_TITLE = "notification.error.default.title";
@@ -16,10 +16,10 @@ export class Notification { @@ -16,10 +16,10 @@ export class Notification {
16 public static DEFAULT_SUCCESS_TIMER = 1000; 16 public static DEFAULT_SUCCESS_TIMER = 1000;
17 17
18 error(message: string = Notification.DEFAULT_ERROR_MESSAGE, title: string = Notification.DEFAULT_ERROR_TITLE) { 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 this.SweetAlert.swal({ 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 type: "error" 23 type: "error"
24 }); 24 });
25 } 25 }
src/app/components/translator/translator.service.spec.ts 0 → 100644
@@ -0,0 +1,61 @@ @@ -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 @@ @@ -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,7 +96,7 @@ export var mocks = {
96 $log: { 96 $log: {
97 debug: () => { } 97 debug: () => { }
98 }, 98 },
99 - languageService: { 99 + translatorService: {
100 currentLanguage: () => { }, 100 currentLanguage: () => { },
101 changeLanguage: (lang: string) => { }, 101 changeLanguage: (lang: string) => { },
102 translate: (text: string) => { return text } 102 translate: (text: string) => { return text }