diff --git a/bower.json b/bower.json index c1d9699..1eaa4dc 100644 --- a/bower.json +++ b/bower.json @@ -30,7 +30,9 @@ "angular-mocks": "^1.5.0", "angular-translate": "^2.10.0", "angular-translate-loader-static-files": "^2.10.0", - "angular-translate-handler-log": "^2.10.0" + "angular-translate-handler-log": "^2.10.0", + "angular-dynamic-locale": "^0.1.30", + "angular-i18n": "^1.5.0" }, "devDependencies": { "angular-mocks": "~1.5.0" 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 7ee7a0e..233f00b 100644 --- a/src/app/components/language-selector/language-selector.component.spec.ts +++ b/src/app/components/language-selector/language-selector.component.spec.ts @@ -22,13 +22,16 @@ describe("Components", () => { providers: [ provide('$translate', { useValue: helpers.mocks.$translate + }), + provide('tmhDynamicLocale', { + useValue: helpers.mocks.tmhDynamicLocale }) ].concat(helpers.provideFilters("translateFilter")) }) class BlockContainerComponent { } it("set available languages when change language", () => { - let component: LanguageSelector = new LanguageSelector(helpers.mocks.$translate); + let component: LanguageSelector = new LanguageSelector(helpers.mocks.$translate, helpers.mocks.tmhDynamicLocale); component.availableLanguages = null; expect(component.availableLanguages).toBeNull(); component.changeLanguage('en'); diff --git a/src/app/components/language-selector/language-selector.component.ts b/src/app/components/language-selector/language-selector.component.ts index e0ed2fa..87d68f6 100644 --- a/src/app/components/language-selector/language-selector.component.ts +++ b/src/app/components/language-selector/language-selector.component.ts @@ -4,13 +4,13 @@ import {Component, Inject} from "ng-forward"; selector: "language-selector", templateUrl: "app/components/language-selector/language-selector.html" }) -@Inject("$translate") +@Inject("$translate", "tmhDynamicLocale") export class LanguageSelector { availableLanguages: any; - constructor(private $translate: angular.translate.ITranslateService) { - this.changeLanguage($translate.use()); + constructor(private $translate: angular.translate.ITranslateService, private tmhDynamicLocale: any) { + this.changeLanguage(tmhDynamicLocale.get() || $translate.use()); } currentLanguage() { @@ -18,6 +18,7 @@ export class LanguageSelector { } changeLanguage(language: string) { + this.tmhDynamicLocale.set(language); this.$translate.use(language).then((lang) => { this.availableLanguages = { "en": this.$translate.instant("language.en"), diff --git a/src/app/components/navbar/navbar.html b/src/app/components/navbar/navbar.html index 7a53cbb..dc6691c 100644 --- a/src/app/components/navbar/navbar.html +++ b/src/app/components/navbar/navbar.html @@ -40,7 +40,7 @@ -
    +
    diff --git a/src/app/components/navbar/navbar.spec.ts b/src/app/components/navbar/navbar.spec.ts index 87cf94e..e6b1dd5 100644 --- a/src/app/components/navbar/navbar.spec.ts +++ b/src/app/components/navbar/navbar.spec.ts @@ -74,6 +74,9 @@ describe("Components", () => { }), provide('$translate', { useValue: helpers.mocks.$translate + }), + provide('tmhDynamicLocale', { + useValue: helpers.mocks.tmhDynamicLocale }) ].concat(helpers.provideFilters("translateFilter")), directives: [Navbar], diff --git a/src/app/index.config.ts b/src/app/index.config.ts index a187a3c..a7934ec 100644 --- a/src/app/index.config.ts +++ b/src/app/index.config.ts @@ -5,7 +5,8 @@ export function noosferoModuleConfig($logProvider: ng.ILogProvider, RestangularProvider: restangular.IProvider, $httpProvider: ng.IHttpProvider, $provide: ng.auto.IProvideService, - $translateProvider: angular.translate.ITranslateProvider) { + $translateProvider: angular.translate.ITranslateProvider, + tmhDynamicLocaleProvider: any) { $logProvider.debugEnabled(true); $locationProvider.html5Mode({ enabled: true }); @@ -20,10 +21,10 @@ export function noosferoModuleConfig($logProvider: ng.ILogProvider, $document.scrollToElementAnimated(uiViewElement); }; }); - configTranslation($translateProvider); + configTranslation($translateProvider, tmhDynamicLocaleProvider); } -function configTranslation($translateProvider: angular.translate.ITranslateProvider) { +function configTranslation($translateProvider: angular.translate.ITranslateProvider, tmhDynamicLocaleProvider: any) { $translateProvider.useStaticFilesLoader({ prefix: '/languages/', suffix: '.json' @@ -31,4 +32,7 @@ function configTranslation($translateProvider: angular.translate.ITranslateProvi $translateProvider.useMissingTranslationHandlerLog(); $translateProvider.preferredLanguage('en'); $translateProvider.useSanitizeValueStrategy('escape'); + //FIXME fix location pattern + tmhDynamicLocaleProvider.localeLocationPattern('bower_components/angular-i18n/angular-locale_{{locale}}.js'); + tmhDynamicLocaleProvider.useCookieStorage(); } diff --git a/src/app/index.ts b/src/app/index.ts index eb46a8a..2df2a85 100644 --- a/src/app/index.ts +++ b/src/app/index.ts @@ -18,7 +18,7 @@ let noosferoApp: any = bundle("noosferoApp", Main, ["ngAnimate", "ngCookies", "n "ui.router", "ui.bootstrap", "toastr", "angularMoment", "angular.filter", "akoenig.deckgrid", "angular-timeline", "duScroll", "oitozero.ngSweetAlert", - "pascalprecht.translate"]).publish(); + "pascalprecht.translate", "tmh.dynamicLocale"]).publish(); NoosferoApp.angularModule = noosferoApp; diff --git a/src/spec/mocks.ts b/src/spec/mocks.ts index bf50a71..600e0ff 100644 --- a/src/spec/mocks.ts +++ b/src/spec/mocks.ts @@ -50,5 +50,9 @@ export var mocks = { } }, instant: () => { } + }, + tmhDynamicLocale: { + get: () => { }, + set: (lang: string) => { } } }; -- libgit2 0.21.2