Supported languages
~~~~~~~~~~~~~~~~~~~
-All our supported languages should be registeredd in
-``supported-languages.enum.ts``, this will then provide that list to both the
-language selectors in the frontend.
+All our supported languages should be registered in both exports in
+``supported-languages.enum.ts`` and have a corresponding test in
+``language-selector.component.spec.ts``.
+
+The ``SupportedLanguages`` enum will provide the list for the default language selection.
+
+The ``languageBootstrapMapping`` variable will provide the
+`language support <https://github.com/valor-software/ngx-bootstrap/tree/development/src/chronos/i18n>`_
+for ngx-bootstrap components like the
+`date picker <https://valor-software.com/ngx-bootstrap/#/datepicker#locales>`_.
Translating process
~~~~~~~~~~~~~~~~~~~
import { ComponentFixture, TestBed } from '@angular/core/testing';\r
import { FormsModule } from '@angular/forms';\r
\r
+import { listLocales } from 'ngx-bootstrap/chronos';\r
+import { BsLocaleService } from 'ngx-bootstrap/datepicker';\r
+\r
import { configureTestBed } from '../../../../testing/unit-test-helper';\r
-import { LocaleHelper } from '../../../locale.helper';\r
import { LanguageSelectorComponent } from './language-selector.component';\r
\r
describe('LanguageSelectorComponent', () => {\r
\r
configureTestBed({\r
declarations: [LanguageSelectorComponent],\r
+ providers: [BsLocaleService],\r
imports: [FormsModule]\r
});\r
\r
fixture = TestBed.createComponent(LanguageSelectorComponent);\r
component = fixture.componentInstance;\r
fixture.detectChanges();\r
+ spyOn(window.location, 'reload').and.callFake(() => component.ngOnInit());\r
});\r
\r
it('should create', () => {\r
\r
it('should read current language', () => {\r
expect(component.selectedLanguage).toBe('en-US');\r
+ expect(listLocales()).toEqual([]);\r
+ });\r
+\r
+ const expectLanguageChange = (lang) => {\r
+ component.changeLanguage(lang);\r
+ expect(component.selectedLanguage).toBe(lang);\r
+ expect(listLocales().includes(lang.slice(0, 2))).toBe(true);\r
+ };\r
+\r
+ it('should change to cs', () => {\r
+ expectLanguageChange('cs');\r
+ });\r
+\r
+ it('should change to de-DE', () => {\r
+ expectLanguageChange('de-DE');\r
+ });\r
+\r
+ it('should change to es-ES', () => {\r
+ expectLanguageChange('es-ES');\r
});\r
\r
- it('should change language', () => {\r
- // Removes error in jsdom\r
- window.location.reload = jest.fn();\r
+ it('should change to fr-FR', () => {\r
+ expectLanguageChange('fr-FR');\r
+ });\r
+\r
+ it('should change to id-ID', () => {\r
+ expectLanguageChange('id-ID');\r
+ });\r
+\r
+ it('should change to pl-PL', () => {\r
+ expectLanguageChange('pl-PL');\r
+ });\r
+\r
+ it('should change to pt-PT', () => {\r
+ expectLanguageChange('pt-PT');\r
+ });\r
\r
- expect(LocaleHelper.getLocale()).toBe('en-US');\r
- component.changeLanguage('pt-PT');\r
- expect(LocaleHelper.getLocale()).toBe('pt-PT');\r
+ it('should change to zh-CN', () => {\r
+ expectLanguageChange('zh-CN');\r
});\r
});\r
import { Component, Input, OnInit } from '@angular/core';\r
\r
+import { defineLocale } from 'ngx-bootstrap/chronos';\r
+import { BsLocaleService } from 'ngx-bootstrap/datepicker';\r
+\r
import { LocaleHelper } from '../../../locale.helper';\r
-import { SupportedLanguages } from './supported-languages.enum';\r
+import { languageBootstrapMapping, SupportedLanguages } from './supported-languages.enum';\r
\r
@Component({\r
selector: 'cd-language-selector',\r
supportedLanguages = SupportedLanguages;\r
selectedLanguage: string;\r
\r
+ constructor(private localeService: BsLocaleService) {}\r
+\r
ngOnInit() {\r
this.selectedLanguage = LocaleHelper.getLocale();\r
+ this.defineUsedLanguage();\r
+ }\r
+\r
+ /**\r
+ * Sets ngx-bootstrap local based on the current language selection\r
+ *\r
+ * ngx-bootstrap locals documentation:\r
+ * https://valor-software.com/ngx-bootstrap/#/datepicker#locales\r
+ */\r
+ private defineUsedLanguage() {\r
+ const lang = this.selectedLanguage.slice(0, 2);\r
+ if (lang in languageBootstrapMapping) {\r
+ defineLocale(lang, languageBootstrapMapping[lang]);\r
+ this.localeService.use(lang);\r
+ }\r
}\r
\r
changeLanguage(lang: string) {\r
LocaleHelper.setLocale(lang);\r
-\r
- // Reload frontend\r
window.location.reload();\r
}\r
}\r