Commit 74e34a119f995c701ee6efd65742919373d7e54f
1 parent
a2e78a1a
Exists in
master
and in
1 other branch
Change locale of angular moment when change the language
Showing
6 changed files
with
49 additions
and
6 deletions
Show diff stats
bower.json
| @@ -20,7 +20,7 @@ | @@ -20,7 +20,7 @@ | ||
| 20 | "font-awesome": "fontawesome#~4.5.0", | 20 | "font-awesome": "fontawesome#~4.5.0", |
| 21 | "ngstorage": "~0.3.10", | 21 | "ngstorage": "~0.3.10", |
| 22 | "bootswatch": "~3.3.6", | 22 | "bootswatch": "~3.3.6", |
| 23 | - "angular-moment": "~0.10.3", | 23 | + "angular-moment": "~1.0.0-beta.4", |
| 24 | "lodash": "3.10.1", | 24 | "lodash": "3.10.1", |
| 25 | "angular-filter": "~0.5.8", | 25 | "angular-filter": "~0.5.8", |
| 26 | "angular-deckgrid": "~0.5.0", | 26 | "angular-deckgrid": "~0.5.0", |
| @@ -32,7 +32,8 @@ | @@ -32,7 +32,8 @@ | ||
| 32 | "angular-translate-loader-static-files": "^2.10.0", | 32 | "angular-translate-loader-static-files": "^2.10.0", |
| 33 | "angular-translate-handler-log": "^2.10.0", | 33 | "angular-translate-handler-log": "^2.10.0", |
| 34 | "angular-dynamic-locale": "^0.1.30", | 34 | "angular-dynamic-locale": "^0.1.30", |
| 35 | - "angular-i18n": "^1.5.0" | 35 | + "angular-i18n": "^1.5.0", |
| 36 | + "angular-load": "^0.4.1" | ||
| 36 | }, | 37 | }, |
| 37 | "devDependencies": { | 38 | "devDependencies": { |
| 38 | "angular-mocks": "~1.5.0" | 39 | "angular-mocks": "~1.5.0" |
src/app/components/language-selector/language-selector.component.spec.ts
| @@ -25,13 +25,24 @@ describe("Components", () => { | @@ -25,13 +25,24 @@ describe("Components", () => { | ||
| 25 | }), | 25 | }), |
| 26 | provide('tmhDynamicLocale', { | 26 | provide('tmhDynamicLocale', { |
| 27 | useValue: helpers.mocks.tmhDynamicLocale | 27 | useValue: helpers.mocks.tmhDynamicLocale |
| 28 | + }), | ||
| 29 | + provide('amMoment', { | ||
| 30 | + useValue: helpers.mocks.amMoment | ||
| 31 | + }), | ||
| 32 | + provide('angularLoad', { | ||
| 33 | + useValue: helpers.mocks.angularLoad | ||
| 28 | }) | 34 | }) |
| 29 | ].concat(helpers.provideFilters("translateFilter")) | 35 | ].concat(helpers.provideFilters("translateFilter")) |
| 30 | }) | 36 | }) |
| 31 | class BlockContainerComponent { } | 37 | class BlockContainerComponent { } |
| 32 | 38 | ||
| 33 | it("set available languages when change language", () => { | 39 | it("set available languages when change language", () => { |
| 34 | - let component: LanguageSelector = new LanguageSelector(<any>helpers.mocks.$translate, <any>helpers.mocks.tmhDynamicLocale); | 40 | + let component: LanguageSelector = new LanguageSelector( |
| 41 | + <any>helpers.mocks.$translate, | ||
| 42 | + <any>helpers.mocks.tmhDynamicLocale, | ||
| 43 | + <any>helpers.mocks.amMoment, | ||
| 44 | + <any>helpers.mocks.angularLoad | ||
| 45 | + ); | ||
| 35 | component.availableLanguages = null; | 46 | component.availableLanguages = null; |
| 36 | expect(component.availableLanguages).toBeNull(); | 47 | expect(component.availableLanguages).toBeNull(); |
| 37 | component.changeLanguage('en'); | 48 | component.changeLanguage('en'); |
src/app/components/language-selector/language-selector.component.ts
| @@ -4,12 +4,16 @@ import {Component, Inject} from "ng-forward"; | @@ -4,12 +4,16 @@ import {Component, Inject} from "ng-forward"; | ||
| 4 | selector: "language-selector", | 4 | selector: "language-selector", |
| 5 | templateUrl: "app/components/language-selector/language-selector.html" | 5 | templateUrl: "app/components/language-selector/language-selector.html" |
| 6 | }) | 6 | }) |
| 7 | -@Inject("$translate", "tmhDynamicLocale") | 7 | +@Inject("$translate", "tmhDynamicLocale", "amMoment", "angularLoad") |
| 8 | export class LanguageSelector { | 8 | export class LanguageSelector { |
| 9 | 9 | ||
| 10 | availableLanguages: any; | 10 | availableLanguages: any; |
| 11 | 11 | ||
| 12 | - constructor(private $translate: angular.translate.ITranslateService, private tmhDynamicLocale: any) { | 12 | + constructor(private $translate: angular.translate.ITranslateService, |
| 13 | + private tmhDynamicLocale: any, | ||
| 14 | + private amMoment: any, | ||
| 15 | + private angularLoad: any) { | ||
| 16 | + | ||
| 13 | this.changeLanguage(tmhDynamicLocale.get() || $translate.use()); | 17 | this.changeLanguage(tmhDynamicLocale.get() || $translate.use()); |
| 14 | } | 18 | } |
| 15 | 19 | ||
| @@ -18,6 +22,7 @@ export class LanguageSelector { | @@ -18,6 +22,7 @@ export class LanguageSelector { | ||
| 18 | } | 22 | } |
| 19 | 23 | ||
| 20 | changeLanguage(language: string) { | 24 | changeLanguage(language: string) { |
| 25 | + this.changeMomentLocale(language); | ||
| 21 | this.tmhDynamicLocale.set(language); | 26 | this.tmhDynamicLocale.set(language); |
| 22 | this.$translate.use(language).then((lang) => { | 27 | this.$translate.use(language).then((lang) => { |
| 23 | this.availableLanguages = { | 28 | this.availableLanguages = { |
| @@ -27,4 +32,14 @@ export class LanguageSelector { | @@ -27,4 +32,14 @@ export class LanguageSelector { | ||
| 27 | }); | 32 | }); |
| 28 | } | 33 | } |
| 29 | 34 | ||
| 35 | + private changeMomentLocale(language: string) { | ||
| 36 | + let localePromise = Promise.resolve(); | ||
| 37 | + if (language != "en") { | ||
| 38 | + // FIXME fix locale path | ||
| 39 | + localePromise = this.angularLoad.loadScript(`/bower_components/moment/locale/${language}.js`); | ||
| 40 | + } | ||
| 41 | + localePromise.then(() => { | ||
| 42 | + this.amMoment.changeLocale(language); | ||
| 43 | + }); | ||
| 44 | + } | ||
| 30 | } | 45 | } |
src/app/components/navbar/navbar.spec.ts
| @@ -77,6 +77,12 @@ describe("Components", () => { | @@ -77,6 +77,12 @@ describe("Components", () => { | ||
| 77 | }), | 77 | }), |
| 78 | provide('tmhDynamicLocale', { | 78 | provide('tmhDynamicLocale', { |
| 79 | useValue: helpers.mocks.tmhDynamicLocale | 79 | useValue: helpers.mocks.tmhDynamicLocale |
| 80 | + }), | ||
| 81 | + provide('amMoment', { | ||
| 82 | + useValue: helpers.mocks.amMoment | ||
| 83 | + }), | ||
| 84 | + provide('angularLoad', { | ||
| 85 | + useValue: helpers.mocks.angularLoad | ||
| 80 | }) | 86 | }) |
| 81 | ].concat(helpers.provideFilters("translateFilter")), | 87 | ].concat(helpers.provideFilters("translateFilter")), |
| 82 | directives: [Navbar], | 88 | directives: [Navbar], |
src/app/index.ts
| @@ -18,7 +18,7 @@ let noosferoApp: any = bundle("noosferoApp", Main, ["ngAnimate", "ngCookies", "n | @@ -18,7 +18,7 @@ let noosferoApp: any = bundle("noosferoApp", Main, ["ngAnimate", "ngCookies", "n | ||
| 18 | "ui.router", "ui.bootstrap", "toastr", | 18 | "ui.router", "ui.bootstrap", "toastr", |
| 19 | "angularMoment", "angular.filter", "akoenig.deckgrid", | 19 | "angularMoment", "angular.filter", "akoenig.deckgrid", |
| 20 | "angular-timeline", "duScroll", "oitozero.ngSweetAlert", | 20 | "angular-timeline", "duScroll", "oitozero.ngSweetAlert", |
| 21 | - "pascalprecht.translate", "tmh.dynamicLocale"]).publish(); | 21 | + "pascalprecht.translate", "tmh.dynamicLocale", "angularLoad"]).publish(); |
| 22 | 22 | ||
| 23 | NoosferoApp.angularModule = noosferoApp; | 23 | NoosferoApp.angularModule = noosferoApp; |
| 24 | 24 |
src/spec/mocks.ts
| @@ -54,5 +54,15 @@ export var mocks = { | @@ -54,5 +54,15 @@ export var mocks = { | ||
| 54 | tmhDynamicLocale: { | 54 | tmhDynamicLocale: { |
| 55 | get: () => { }, | 55 | get: () => { }, |
| 56 | set: (lang: string) => { } | 56 | set: (lang: string) => { } |
| 57 | + }, | ||
| 58 | + amMoment: { | ||
| 59 | + changeLocale: () => { } | ||
| 60 | + }, | ||
| 61 | + angularLoad: { | ||
| 62 | + loadScript: (script?: string) => { | ||
| 63 | + return { | ||
| 64 | + then: (func?: any) => { if (func) func() } | ||
| 65 | + } | ||
| 66 | + } | ||
| 57 | } | 67 | } |
| 58 | }; | 68 | }; |