Commit 08a6c237f92427c76c42e6b836431116baadc97b

Authored by Victor Costa
1 parent 1722dc1a

Keep the last language selected

bower.json
... ... @@ -30,7 +30,9 @@
30 30 "angular-mocks": "^1.5.0",
31 31 "angular-translate": "^2.10.0",
32 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 37 "devDependencies": {
36 38 "angular-mocks": "~1.5.0"
... ...
src/app/components/language-selector/language-selector.component.spec.ts
... ... @@ -22,13 +22,16 @@ describe("Components", () => {
22 22 providers: [
23 23 provide('$translate', {
24 24 useValue: helpers.mocks.$translate
  25 + }),
  26 + provide('tmhDynamicLocale', {
  27 + useValue: helpers.mocks.tmhDynamicLocale
25 28 })
26 29 ].concat(helpers.provideFilters("translateFilter"))
27 30 })
28 31 class BlockContainerComponent { }
29 32  
30 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 35 component.availableLanguages = null;
33 36 expect(component.availableLanguages).toBeNull();
34 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 4 selector: "language-selector",
5 5 templateUrl: "app/components/language-selector/language-selector.html"
6 6 })
7   -@Inject("$translate")
  7 +@Inject("$translate", "tmhDynamicLocale")
8 8 export class LanguageSelector {
9 9  
10 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 16 currentLanguage() {
... ... @@ -18,6 +18,7 @@ export class LanguageSelector {
18 18 }
19 19  
20 20 changeLanguage(language: string) {
  21 + this.tmhDynamicLocale.set(language);
21 22 this.$translate.use(language).then((lang) => {
22 23 this.availableLanguages = {
23 24 "en": this.$translate.instant("language.en"),
... ...
src/app/components/navbar/navbar.html
... ... @@ -40,7 +40,7 @@
40 40 </ul>
41 41 </li>
42 42 </ul>
43   - <ul>
  43 + <ul class="nav navbar-nav navbar-right">
44 44 <language-selector class="nav navbar-nav navbar-right"></language-selector>
45 45 </ul>
46 46 <div ui-view="actions"></div>
... ...
src/app/components/navbar/navbar.spec.ts
... ... @@ -74,6 +74,9 @@ describe(&quot;Components&quot;, () =&gt; {
74 74 }),
75 75 provide('$translate', {
76 76 useValue: helpers.mocks.$translate
  77 + }),
  78 + provide('tmhDynamicLocale', {
  79 + useValue: helpers.mocks.tmhDynamicLocale
77 80 })
78 81 ].concat(helpers.provideFilters("translateFilter")),
79 82 directives: [Navbar],
... ...
src/app/index.config.ts
... ... @@ -5,7 +5,8 @@ export function noosferoModuleConfig($logProvider: ng.ILogProvider,
5 5 RestangularProvider: restangular.IProvider,
6 6 $httpProvider: ng.IHttpProvider,
7 7 $provide: ng.auto.IProvideService,
8   - $translateProvider: angular.translate.ITranslateProvider) {
  8 + $translateProvider: angular.translate.ITranslateProvider,
  9 + tmhDynamicLocaleProvider: any) {
9 10  
10 11 $logProvider.debugEnabled(true);
11 12 $locationProvider.html5Mode({ enabled: true });
... ... @@ -20,10 +21,10 @@ export function noosferoModuleConfig($logProvider: ng.ILogProvider,
20 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 28 $translateProvider.useStaticFilesLoader({
28 29 prefix: '/languages/',
29 30 suffix: '.json'
... ... @@ -31,4 +32,7 @@ function configTranslation($translateProvider: angular.translate.ITranslateProvi
31 32 $translateProvider.useMissingTranslationHandlerLog();
32 33 $translateProvider.preferredLanguage('en');
33 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 18 "ui.router", "ui.bootstrap", "toastr",
19 19 "angularMoment", "angular.filter", "akoenig.deckgrid",
20 20 "angular-timeline", "duScroll", "oitozero.ngSweetAlert",
21   - "pascalprecht.translate"]).publish();
  21 + "pascalprecht.translate", "tmh.dynamicLocale"]).publish();
22 22  
23 23 NoosferoApp.angularModule = noosferoApp;
24 24  
... ...
src/spec/mocks.ts
... ... @@ -50,5 +50,9 @@ export var mocks = {
50 50 }
51 51 },
52 52 instant: () => { }
  53 + },
  54 + tmhDynamicLocale: {
  55 + get: () => { },
  56 + set: (lang: string) => { }
53 57 }
54 58 };
... ...