Commit 08a6c237f92427c76c42e6b836431116baadc97b

Authored by Victor Costa
1 parent 1722dc1a

Keep the last language selected

@@ -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 &quot;ng-forward&quot;; @@ -4,13 +4,13 @@ import {Component, Inject} from &quot;ng-forward&quot;;
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(&quot;Components&quot;, () =&gt; { @@ -74,6 +74,9 @@ describe(&quot;Components&quot;, () =&gt; {
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(&quot;noosferoApp&quot;, Main, [&quot;ngAnimate&quot;, &quot;ngCookies&quot;, &quot;n @@ -18,7 +18,7 @@ let noosferoApp: any = bundle(&quot;noosferoApp&quot;, Main, [&quot;ngAnimate&quot;, &quot;ngCookies&quot;, &quot;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
@@ -50,5 +50,9 @@ export var mocks = { @@ -50,5 +50,9 @@ export var mocks = {
50 } 50 }
51 }, 51 },
52 instant: () => { } 52 instant: () => { }
  53 + },
  54 + tmhDynamicLocale: {
  55 + get: () => { },
  56 + set: (lang: string) => { }
53 } 57 }
54 }; 58 };