Add the language selector to the navigation.
Signed-off-by: Sebastian Krah <skrah@suse.com>
Signed-off-by: Tiago Melo <tmelo@suse.com>
#loginForm="ngForm"
novalidate>
+ <!-- I18N -->
+ <div class="form-group has-feedback">
+ <cd-language-selector [isDropdown]="false"></cd-language-selector>
+ </div>
+
<!-- Username -->
<div class="form-group has-feedback"
[ngClass]="{'has-error': (loginForm.submitted || username.dirty) && username.invalid}">
@import '../../../../defaults';
-.login {
+::ng-deep .login {
height: 100%;
.row {
<!-- /.navbar-primary -->
<ul class="nav navbar-nav navbar-utility">
+ <li>
+ <cd-language-selector class="oa-navbar"></cd-language-selector>
+ </li>
<li>
<cd-task-manager class="oa-navbar"></cd-task-manager>
</li>
import { GrafanaComponent } from './grafana/grafana.component';
import { HelperComponent } from './helper/helper.component';
import { InfoPanelComponent } from './info-panel/info-panel.component';
+import { LanguageSelectorComponent } from './language-selector/language-selector.component';
import { LoadingPanelComponent } from './loading-panel/loading-panel.component';
import { ModalComponent } from './modal/modal.component';
import { SelectBadgesComponent } from './select-badges/select-badges.component';
CriticalConfirmationModalComponent,
ConfirmationModalComponent,
WarningPanelComponent,
+ LanguageSelectorComponent,
GrafanaComponent
],
providers: [],
UsageBarComponent,
ModalComponent,
WarningPanelComponent,
+ LanguageSelectorComponent,
GrafanaComponent
],
entryComponents: [ModalComponent, CriticalConfirmationModalComponent, ConfirmationModalComponent]
--- /dev/null
+<div dropdown\r
+ *ngIf="isDropdown">\r
+ <a dropdownToggle\r
+ class="dropdown-toggle"\r
+ data-toggle="dropdown"\r
+ i18n-title\r
+ title="Select a Language">\r
+ {{ supportedLanguages[selectedLanguage] }}\r
+ <span class="caret"></span>\r
+ </a>\r
+ <ul *dropdownMenu\r
+ class="dropdown-menu dropdown-menu-right">\r
+ <li *ngFor="let lang of supportedLanguages | keyvalue">\r
+ <a class="dropdown-item"\r
+ (click)="changeLanguage(lang.key)">{{ lang.value }}</a>\r
+ </li>\r
+ </ul>\r
+</div>\r
+\r
+<select *ngIf="!isDropdown"\r
+ (change)="changeLanguage($event.target.value)"\r
+ [(ngModel)]="selectedLanguage"\r
+ class="form-control">\r
+ <option *ngFor="let lang of supportedLanguages | keyvalue"\r
+ [value]="lang.key">{{ lang.value }}</option>\r
+</select>\r
--- /dev/null
+import { ComponentFixture, TestBed } from '@angular/core/testing';\r
+import { FormsModule } from '@angular/forms';\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
+ let component: LanguageSelectorComponent;\r
+ let fixture: ComponentFixture<LanguageSelectorComponent>;\r
+\r
+ configureTestBed({\r
+ declarations: [LanguageSelectorComponent],\r
+ imports: [FormsModule]\r
+ });\r
+\r
+ beforeEach(() => {\r
+ fixture = TestBed.createComponent(LanguageSelectorComponent);\r
+ component = fixture.componentInstance;\r
+ fixture.detectChanges();\r
+ });\r
+\r
+ it('should create', () => {\r
+ expect(component).toBeTruthy();\r
+ });\r
+\r
+ it('should read current language', () => {\r
+ expect(component.selectedLanguage).toBe('en-US');\r
+ });\r
+\r
+ it('should change language', () => {\r
+ // Removes error in jsdom\r
+ window.location.reload = jest.fn();\r
+\r
+ expect(LocaleHelper.getLocale()).toBe('en-US');\r
+ component.changeLanguage('pt-PT');\r
+ expect(LocaleHelper.getLocale()).toBe('pt-PT');\r
+ });\r
+});\r
--- /dev/null
+import { Component, Input, OnInit } from '@angular/core';\r
+\r
+import { LocaleHelper } from '../../../locale.helper';\r
+import { SupportedLanguages } from './supported-languages.enum';\r
+\r
+@Component({\r
+ selector: 'cd-language-selector',\r
+ templateUrl: './language-selector.component.html',\r
+ styleUrls: ['./language-selector.component.scss']\r
+})\r
+export class LanguageSelectorComponent implements OnInit {\r
+ @Input()\r
+ isDropdown = true;\r
+\r
+ supportedLanguages = SupportedLanguages;\r
+ selectedLanguage: string;\r
+\r
+ ngOnInit() {\r
+ this.selectedLanguage = LocaleHelper.getLocale();\r
+ }\r
+\r
+ changeLanguage(lang: string) {\r
+ LocaleHelper.setLocale(lang);\r
+\r
+ // Reload frontend\r
+ window.location.reload();\r
+ }\r
+}\r
--- /dev/null
+export enum SupportedLanguages {
+ 'en-US' = 'English',
+ 'de-DE' = 'Deutsch',
+ 'pt-PT' = 'Português'
+}