Commit 08a6c237f92427c76c42e6b836431116baadc97b
1 parent
1722dc1a
Exists in
master
and in
33 other branches
Keep the last language selected
Showing
8 changed files
with
27 additions
and
10 deletions
Show diff stats
bower.json
| @@ -30,7 +30,9 @@ | @@ -30,7 +30,9 @@ | ||
| 30 | "angular-mocks": "^1.5.0", | 30 | "angular-mocks": "^1.5.0", |
| 31 | "angular-translate": "^2.10.0", | 31 | "angular-translate": "^2.10.0", |
| 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", | ||
| 35 | + "angular-i18n": "^1.5.0" | ||
| 34 | }, | 36 | }, |
| 35 | "devDependencies": { | 37 | "devDependencies": { |
| 36 | "angular-mocks": "~1.5.0" | 38 | "angular-mocks": "~1.5.0" |
src/app/components/language-selector/language-selector.component.spec.ts
| @@ -22,13 +22,16 @@ describe("Components", () => { | @@ -22,13 +22,16 @@ describe("Components", () => { | ||
| 22 | providers: [ | 22 | providers: [ |
| 23 | provide('$translate', { | 23 | provide('$translate', { |
| 24 | useValue: helpers.mocks.$translate | 24 | useValue: helpers.mocks.$translate |
| 25 | + }), | ||
| 26 | + provide('tmhDynamicLocale', { | ||
| 27 | + useValue: helpers.mocks.tmhDynamicLocale | ||
| 25 | }) | 28 | }) |
| 26 | ].concat(helpers.provideFilters("translateFilter")) | 29 | ].concat(helpers.provideFilters("translateFilter")) |
| 27 | }) | 30 | }) |
| 28 | class BlockContainerComponent { } | 31 | class BlockContainerComponent { } |
| 29 | 32 | ||
| 30 | it("set available languages when change language", () => { | 33 | it("set available languages when change language", () => { |
| 31 | - let component: LanguageSelector = new LanguageSelector(<any>helpers.mocks.$translate); | 34 | + let component: LanguageSelector = new LanguageSelector(<any>helpers.mocks.$translate, <any>helpers.mocks.tmhDynamicLocale); |
| 32 | component.availableLanguages = null; | 35 | component.availableLanguages = null; |
| 33 | expect(component.availableLanguages).toBeNull(); | 36 | expect(component.availableLanguages).toBeNull(); |
| 34 | component.changeLanguage('en'); | 37 | component.changeLanguage('en'); |
src/app/components/language-selector/language-selector.component.ts
| @@ -4,13 +4,13 @@ import {Component, Inject} from "ng-forward"; | @@ -4,13 +4,13 @@ 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") | 7 | +@Inject("$translate", "tmhDynamicLocale") |
| 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) { | ||
| 13 | - this.changeLanguage($translate.use()); | 12 | + constructor(private $translate: angular.translate.ITranslateService, private tmhDynamicLocale: any) { |
| 13 | + this.changeLanguage(tmhDynamicLocale.get() || $translate.use()); | ||
| 14 | } | 14 | } |
| 15 | 15 | ||
| 16 | currentLanguage() { | 16 | currentLanguage() { |
| @@ -18,6 +18,7 @@ export class LanguageSelector { | @@ -18,6 +18,7 @@ export class LanguageSelector { | ||
| 18 | } | 18 | } |
| 19 | 19 | ||
| 20 | changeLanguage(language: string) { | 20 | changeLanguage(language: string) { |
| 21 | + this.tmhDynamicLocale.set(language); | ||
| 21 | this.$translate.use(language).then((lang) => { | 22 | this.$translate.use(language).then((lang) => { |
| 22 | this.availableLanguages = { | 23 | this.availableLanguages = { |
| 23 | "en": this.$translate.instant("language.en"), | 24 | "en": this.$translate.instant("language.en"), |
src/app/components/navbar/navbar.html
| @@ -40,7 +40,7 @@ | @@ -40,7 +40,7 @@ | ||
| 40 | </ul> | 40 | </ul> |
| 41 | </li> | 41 | </li> |
| 42 | </ul> | 42 | </ul> |
| 43 | - <ul> | 43 | + <ul class="nav navbar-nav navbar-right"> |
| 44 | <language-selector class="nav navbar-nav navbar-right"></language-selector> | 44 | <language-selector class="nav navbar-nav navbar-right"></language-selector> |
| 45 | </ul> | 45 | </ul> |
| 46 | <div ui-view="actions"></div> | 46 | <div ui-view="actions"></div> |
src/app/components/navbar/navbar.spec.ts
| @@ -74,6 +74,9 @@ describe("Components", () => { | @@ -74,6 +74,9 @@ describe("Components", () => { | ||
| 74 | }), | 74 | }), |
| 75 | provide('$translate', { | 75 | provide('$translate', { |
| 76 | useValue: helpers.mocks.$translate | 76 | useValue: helpers.mocks.$translate |
| 77 | + }), | ||
| 78 | + provide('tmhDynamicLocale', { | ||
| 79 | + useValue: helpers.mocks.tmhDynamicLocale | ||
| 77 | }) | 80 | }) |
| 78 | ].concat(helpers.provideFilters("translateFilter")), | 81 | ].concat(helpers.provideFilters("translateFilter")), |
| 79 | directives: [Navbar], | 82 | directives: [Navbar], |
src/app/index.config.ts
| @@ -5,7 +5,8 @@ export function noosferoModuleConfig($logProvider: ng.ILogProvider, | @@ -5,7 +5,8 @@ export function noosferoModuleConfig($logProvider: ng.ILogProvider, | ||
| 5 | RestangularProvider: restangular.IProvider, | 5 | RestangularProvider: restangular.IProvider, |
| 6 | $httpProvider: ng.IHttpProvider, | 6 | $httpProvider: ng.IHttpProvider, |
| 7 | $provide: ng.auto.IProvideService, | 7 | $provide: ng.auto.IProvideService, |
| 8 | - $translateProvider: angular.translate.ITranslateProvider) { | 8 | + $translateProvider: angular.translate.ITranslateProvider, |
| 9 | + tmhDynamicLocaleProvider: any) { | ||
| 9 | 10 | ||
| 10 | $logProvider.debugEnabled(true); | 11 | $logProvider.debugEnabled(true); |
| 11 | $locationProvider.html5Mode({ enabled: true }); | 12 | $locationProvider.html5Mode({ enabled: true }); |
| @@ -20,10 +21,10 @@ export function noosferoModuleConfig($logProvider: ng.ILogProvider, | @@ -20,10 +21,10 @@ export function noosferoModuleConfig($logProvider: ng.ILogProvider, | ||
| 20 | $document.scrollToElementAnimated(uiViewElement); | 21 | $document.scrollToElementAnimated(uiViewElement); |
| 21 | }; | 22 | }; |
| 22 | }); | 23 | }); |
| 23 | - configTranslation($translateProvider); | 24 | + configTranslation($translateProvider, tmhDynamicLocaleProvider); |
| 24 | } | 25 | } |
| 25 | 26 | ||
| 26 | -function configTranslation($translateProvider: angular.translate.ITranslateProvider) { | 27 | +function configTranslation($translateProvider: angular.translate.ITranslateProvider, tmhDynamicLocaleProvider: any) { |
| 27 | $translateProvider.useStaticFilesLoader({ | 28 | $translateProvider.useStaticFilesLoader({ |
| 28 | prefix: '/languages/', | 29 | prefix: '/languages/', |
| 29 | suffix: '.json' | 30 | suffix: '.json' |
| @@ -31,4 +32,7 @@ function configTranslation($translateProvider: angular.translate.ITranslateProvi | @@ -31,4 +32,7 @@ function configTranslation($translateProvider: angular.translate.ITranslateProvi | ||
| 31 | $translateProvider.useMissingTranslationHandlerLog(); | 32 | $translateProvider.useMissingTranslationHandlerLog(); |
| 32 | $translateProvider.preferredLanguage('en'); | 33 | $translateProvider.preferredLanguage('en'); |
| 33 | $translateProvider.useSanitizeValueStrategy('escape'); | 34 | $translateProvider.useSanitizeValueStrategy('escape'); |
| 35 | + //FIXME fix location pattern | ||
| 36 | + tmhDynamicLocaleProvider.localeLocationPattern('bower_components/angular-i18n/angular-locale_{{locale}}.js'); | ||
| 37 | + tmhDynamicLocaleProvider.useCookieStorage(); | ||
| 34 | } | 38 | } |
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"]).publish(); | 21 | + "pascalprecht.translate", "tmh.dynamicLocale"]).publish(); |
| 22 | 22 | ||
| 23 | NoosferoApp.angularModule = noosferoApp; | 23 | NoosferoApp.angularModule = noosferoApp; |
| 24 | 24 |
src/spec/mocks.ts