diff --git a/src/app/components/language-selector/language-selector.component.spec.ts b/src/app/components/language-selector/language-selector.component.spec.ts index 3f8e9de..4228b86 100644 --- a/src/app/components/language-selector/language-selector.component.spec.ts +++ b/src/app/components/language-selector/language-selector.component.spec.ts @@ -11,16 +11,16 @@ describe("Components", () => { beforeEach(angular.mock.module("templates")); - let languageService: any; + let translatorService: any; let buildComponent = (): Promise => { - languageService = jasmine.createSpyObj("languageService", ["availableLanguages", "currentLanguage"]) + translatorService = jasmine.createSpyObj("translatorService", ["availableLanguages", "currentLanguage"]) return helpers.quickCreateComponent({ template: "", directives: [LanguageSelector], providers: [ - provide('LanguageService', { - useValue: languageService + provide('TranslatorService', { + useValue: translatorService }) ].concat(helpers.provideFilters("translateFilter")) }); diff --git a/src/app/components/language-selector/language-selector.component.ts b/src/app/components/language-selector/language-selector.component.ts index 892ee33..502444d 100644 --- a/src/app/components/language-selector/language-selector.component.ts +++ b/src/app/components/language-selector/language-selector.component.ts @@ -1,24 +1,24 @@ import {Component, Inject} from "ng-forward"; -import {LanguageService} from "./language.service"; +import {TranslatorService} from "../translator/translator.service"; @Component({ selector: "language-selector", templateUrl: "app/components/language-selector/language-selector.html" }) -@Inject(LanguageService) +@Inject(TranslatorService) export class LanguageSelector { - constructor(private languageService: LanguageService) { } + constructor(private translatorService: TranslatorService) { } currentLanguage() { - return this.languageService.currentLanguage(); + return this.translatorService.currentLanguage(); } changeLanguage(language: string) { - this.languageService.changeLanguage(language); + this.translatorService.changeLanguage(language); } availableLanguages() { - return this.languageService.availableLanguages; + return this.translatorService.availableLanguages; } } diff --git a/src/app/components/language-selector/language.service.spec.ts b/src/app/components/language-selector/language.service.spec.ts deleted file mode 100644 index 471c5fb..0000000 --- a/src/app/components/language-selector/language.service.spec.ts +++ /dev/null @@ -1,61 +0,0 @@ -import {ComponentFixture} from 'ng-forward/cjs/testing/test-component-builder'; -import {provide} from 'ng-forward'; - -import {LanguageService} from './language.service'; - -import * as helpers from "../../../spec/helpers"; - -describe("Services", () => { - - describe("Language Service", () => { - - let $rootScope: ng.IScope; - let $q: ng.IQService; - - beforeEach(inject((_$rootScope_: ng.IRootScopeService, _$q_: ng.IQService) => { - $rootScope = _$rootScope_; - $q = _$q_; - })); - - it("set available languages when change language", (done) => { - let component: LanguageService = new LanguageService( - helpers.mocks.$translate, - helpers.mocks.tmhDynamicLocale, - helpers.mocks.amMoment, - helpers.mocks.angularLoad, - helpers.mocks.scopeWithEvents - ); - component.availableLanguages = null; - expect(component.availableLanguages).toBeNull(); - component.changeLanguage('en'); - expect(component.availableLanguages).toBeDefined(); - done(); - }); - - it("change the language", (done) => { - let component: LanguageService = new LanguageService( - helpers.mocks.$translate, - helpers.mocks.tmhDynamicLocale, - helpers.mocks.amMoment, - helpers.mocks.angularLoad, - helpers.mocks.scopeWithEvents - ); - let loadScripPromise = $q.defer(); - loadScripPromise.resolve(); - component["angularLoad"].loadScript = jasmine.createSpy("loadScript").and.returnValue(loadScripPromise.promise); - component["tmhDynamicLocale"].set = jasmine.createSpy("set"); - component["tmhDynamicLocale"].get = jasmine.createSpy("get").and.returnValue("en"); - component["$translate"].use = jasmine.createSpy("use"); - - component.changeLanguage('pt'); - $rootScope.$digest(); - - expect(component["angularLoad"].loadScript).toHaveBeenCalledWith("/bower_components/moment/locale/pt.js"); - expect(component["angularLoad"].loadScript).toHaveBeenCalledWith("/bower_components/messageformat/locale/pt.js"); - expect(component["tmhDynamicLocale"].set).toHaveBeenCalledWith("pt"); - expect(component["$translate"].use).toHaveBeenCalledWith("pt"); - done(); - }); - - }); -}); diff --git a/src/app/components/language-selector/language.service.ts b/src/app/components/language-selector/language.service.ts deleted file mode 100644 index f93c17d..0000000 --- a/src/app/components/language-selector/language.service.ts +++ /dev/null @@ -1,59 +0,0 @@ -import {Injectable, Inject} from "ng-forward"; - -@Injectable() -@Inject("$translate", "tmhDynamicLocale", "amMoment", "angularLoad", "$rootScope") -export class LanguageService { - - availableLanguages: any; - - constructor(private $translate: angular.translate.ITranslateService, - private tmhDynamicLocale: angular.dynamicLocale.tmhDynamicLocaleService, - private amMoment: any, - private angularLoad: any, - private $rootScope: any) { - - this.configAvailableLanguages(); - this.$rootScope.$on("$localeChangeSuccess", () => { - this.changeLanguage(tmhDynamicLocale.get() || $translate.use()); - }); - } - - currentLanguage() { - return this.$translate.use(); - } - - changeLanguage(language: string) { - if (!language) { - console.log("WARN: language undefined"); - return; - } - this.changeMomentLocale(language); - this.tmhDynamicLocale.set(language); - this.angularLoad.loadScript(`/bower_components/messageformat/locale/${language}.js`).then(() => { - return this.$translate.use(language); - }).then(() => { - this.configAvailableLanguages(); - }); - } - - translate(text: string) { - return this.$translate.instant(text); - } - - private configAvailableLanguages() { - this.availableLanguages = { - "en": this.$translate.instant("language.en"), - "pt": this.$translate.instant("language.pt") - }; - } - - private changeMomentLocale(language: string) { - let localePromise = Promise.resolve(); - if (language != "en") { - localePromise = this.angularLoad.loadScript(`/bower_components/moment/locale/${language}.js`); - } - localePromise.then(() => { - this.amMoment.changeLocale(language); - }); - } -} diff --git a/src/app/components/navbar/navbar.spec.ts b/src/app/components/navbar/navbar.spec.ts index 033fbc3..82f41f3 100644 --- a/src/app/components/navbar/navbar.spec.ts +++ b/src/app/components/navbar/navbar.spec.ts @@ -72,8 +72,8 @@ describe("Components", () => { AUTH_EVENTS } }), - provide('LanguageService', { - useValue: helpers.mocks.languageService + provide('TranslatorService', { + useValue: helpers.mocks.translatorService }) ].concat(helpers.provideFilters("translateFilter")), directives: [Navbar], diff --git a/src/app/components/notification/notification.component.spec.ts b/src/app/components/notification/notification.component.spec.ts index 18149c9..c10cf9c 100644 --- a/src/app/components/notification/notification.component.spec.ts +++ b/src/app/components/notification/notification.component.spec.ts @@ -17,7 +17,7 @@ describe("Components", () => { let sweetAlert = jasmine.createSpyObj("sweetAlert", ["swal"]); sweetAlert.swal = jasmine.createSpy("swal"); - let component: Notification = new Notification(helpers.mocks.$log, sweetAlert, helpers.mocks.languageService); + let component: Notification = new Notification(helpers.mocks.$log, sweetAlert, helpers.mocks.translatorService); component.error(); expect(sweetAlert.swal).toHaveBeenCalledWith(jasmine.objectContaining({ text: Notification.DEFAULT_ERROR_MESSAGE, @@ -30,7 +30,7 @@ describe("Components", () => { let sweetAlert = jasmine.createSpyObj("sweetAlert", ["swal"]); sweetAlert.swal = jasmine.createSpy("swal"); - let component: Notification = new Notification(helpers.mocks.$log, sweetAlert, helpers.mocks.languageService); + let component: Notification = new Notification(helpers.mocks.$log, sweetAlert, helpers.mocks.translatorService); component.success("title", "message", 1000); expect(sweetAlert.swal).toHaveBeenCalledWith(jasmine.objectContaining({ type: "success" @@ -42,7 +42,7 @@ describe("Components", () => { let sweetAlert = jasmine.createSpyObj("sweetAlert", ["swal"]); sweetAlert.swal = jasmine.createSpy("swal"); - let component: Notification = new Notification(helpers.mocks.$log, sweetAlert, helpers.mocks.languageService); + let component: Notification = new Notification(helpers.mocks.$log, sweetAlert, helpers.mocks.translatorService); component.httpError(500, {}); expect(sweetAlert.swal).toHaveBeenCalledWith(jasmine.objectContaining({ text: "notification.http_error.500.message" @@ -54,7 +54,7 @@ describe("Components", () => { let sweetAlert = jasmine.createSpyObj("sweetAlert", ["swal"]); sweetAlert.swal = jasmine.createSpy("swal"); - let component: Notification = new Notification(helpers.mocks.$log, sweetAlert, helpers.mocks.languageService); + let component: Notification = new Notification(helpers.mocks.$log, sweetAlert, helpers.mocks.translatorService); component.success("title", "message"); expect(sweetAlert.swal).toHaveBeenCalledWith(jasmine.objectContaining({ type: "success", diff --git a/src/app/components/notification/notification.component.ts b/src/app/components/notification/notification.component.ts index 3118394..35c9e91 100644 --- a/src/app/components/notification/notification.component.ts +++ b/src/app/components/notification/notification.component.ts @@ -1,14 +1,14 @@ import {Injectable, Inject} from "ng-forward"; -import {LanguageService} from "../language-selector/language.service"; +import {TranslatorService} from "../translator/translator.service"; @Injectable() -@Inject("$log", "SweetAlert", LanguageService) +@Inject("$log", "SweetAlert", TranslatorService) export class Notification { constructor( private $log: ng.ILogService, private SweetAlert: any, - private languageService: LanguageService + private translatorService: TranslatorService ) { } public static DEFAULT_ERROR_TITLE = "notification.error.default.title"; @@ -16,10 +16,10 @@ export class Notification { public static DEFAULT_SUCCESS_TIMER = 1000; error(message: string = Notification.DEFAULT_ERROR_MESSAGE, title: string = Notification.DEFAULT_ERROR_TITLE) { - this.$log.debug("Notification error:", title, message, this.languageService.currentLanguage()); + this.$log.debug("Notification error:", title, message, this.translatorService.currentLanguage()); this.SweetAlert.swal({ - title: this.languageService.translate(title), - text: this.languageService.translate(message), + title: this.translatorService.translate(title), + text: this.translatorService.translate(message), type: "error" }); } diff --git a/src/app/components/translator/translator.service.spec.ts b/src/app/components/translator/translator.service.spec.ts new file mode 100644 index 0000000..b0d0782 --- /dev/null +++ b/src/app/components/translator/translator.service.spec.ts @@ -0,0 +1,61 @@ +import {ComponentFixture} from 'ng-forward/cjs/testing/test-component-builder'; +import {provide} from 'ng-forward'; + +import {TranslatorService} from './translator.service'; + +import * as helpers from "../../../spec/helpers"; + +describe("Services", () => { + + describe("Translator Service", () => { + + let $rootScope: ng.IScope; + let $q: ng.IQService; + + beforeEach(inject((_$rootScope_: ng.IRootScopeService, _$q_: ng.IQService) => { + $rootScope = _$rootScope_; + $q = _$q_; + })); + + it("set available languages when change language", (done) => { + let component: TranslatorService = new TranslatorService( + helpers.mocks.$translate, + helpers.mocks.tmhDynamicLocale, + helpers.mocks.amMoment, + helpers.mocks.angularLoad, + helpers.mocks.scopeWithEvents + ); + component.availableLanguages = null; + expect(component.availableLanguages).toBeNull(); + component.changeLanguage('en'); + expect(component.availableLanguages).toBeDefined(); + done(); + }); + + it("change the language", (done) => { + let component: TranslatorService = new TranslatorService( + helpers.mocks.$translate, + helpers.mocks.tmhDynamicLocale, + helpers.mocks.amMoment, + helpers.mocks.angularLoad, + helpers.mocks.scopeWithEvents + ); + let loadScripPromise = $q.defer(); + loadScripPromise.resolve(); + component["angularLoad"].loadScript = jasmine.createSpy("loadScript").and.returnValue(loadScripPromise.promise); + component["tmhDynamicLocale"].set = jasmine.createSpy("set"); + component["tmhDynamicLocale"].get = jasmine.createSpy("get").and.returnValue("en"); + component["$translate"].use = jasmine.createSpy("use"); + + component.changeLanguage('pt'); + $rootScope.$digest(); + + expect(component["angularLoad"].loadScript).toHaveBeenCalledWith("/bower_components/moment/locale/pt.js"); + expect(component["angularLoad"].loadScript).toHaveBeenCalledWith("/bower_components/messageformat/locale/pt.js"); + expect(component["tmhDynamicLocale"].set).toHaveBeenCalledWith("pt"); + expect(component["$translate"].use).toHaveBeenCalledWith("pt"); + done(); + }); + + }); +}); diff --git a/src/app/components/translator/translator.service.ts b/src/app/components/translator/translator.service.ts new file mode 100644 index 0000000..c372dc1 --- /dev/null +++ b/src/app/components/translator/translator.service.ts @@ -0,0 +1,59 @@ +import {Injectable, Inject} from "ng-forward"; + +@Injectable() +@Inject("$translate", "tmhDynamicLocale", "amMoment", "angularLoad", "$rootScope") +export class TranslatorService { + + availableLanguages: any; + + constructor(private $translate: angular.translate.ITranslateService, + private tmhDynamicLocale: angular.dynamicLocale.tmhDynamicLocaleService, + private amMoment: any, + private angularLoad: any, + private $rootScope: any) { + + this.configAvailableLanguages(); + this.$rootScope.$on("$localeChangeSuccess", () => { + this.changeLanguage(tmhDynamicLocale.get() || $translate.use()); + }); + } + + currentLanguage() { + return this.$translate.use(); + } + + changeLanguage(language: string) { + if (!language) { + console.log("WARN: language undefined"); + return; + } + this.changeMomentLocale(language); + this.tmhDynamicLocale.set(language); + this.angularLoad.loadScript(`/bower_components/messageformat/locale/${language}.js`).then(() => { + return this.$translate.use(language); + }).then(() => { + this.configAvailableLanguages(); + }); + } + + translate(text: string) { + return this.$translate.instant(text); + } + + private configAvailableLanguages() { + this.availableLanguages = { + "en": this.$translate.instant("language.en"), + "pt": this.$translate.instant("language.pt") + }; + } + + private changeMomentLocale(language: string) { + let localePromise = Promise.resolve(); + if (language != "en") { + localePromise = this.angularLoad.loadScript(`/bower_components/moment/locale/${language}.js`); + } + localePromise.then(() => { + this.amMoment.changeLocale(language); + }); + } +} diff --git a/src/spec/mocks.ts b/src/spec/mocks.ts index d8c732f..9db6ce6 100644 --- a/src/spec/mocks.ts +++ b/src/spec/mocks.ts @@ -96,7 +96,7 @@ export var mocks = { $log: { debug: () => { } }, - languageService: { + translatorService: { currentLanguage: () => { }, changeLanguage: (lang: string) => { }, translate: (text: string) => { return text } -- libgit2 0.21.2