diff --git a/lib/core/src/lib/common/index.ts b/lib/core/src/lib/common/index.ts index 841c9136a2..7970ce0551 100644 --- a/lib/core/src/lib/common/index.ts +++ b/lib/core/src/lib/common/index.ts @@ -30,6 +30,7 @@ export * from './services/url.service'; export * from './models/log-levels.model'; export * from './models/user-info-mode.enum'; +export * from './models/default-languages.model'; export * from './interface/search-component.interface'; diff --git a/lib/core/src/lib/common/models/default-languages.model.ts b/lib/core/src/lib/common/models/default-languages.model.ts new file mode 100644 index 0000000000..0797da18ad --- /dev/null +++ b/lib/core/src/lib/common/models/default-languages.model.ts @@ -0,0 +1,38 @@ +/*! + * @license + * Copyright © 2005-2024 Hyland Software, Inc. and its affiliates. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { LanguageItem } from '../services/language-item.interface'; + +export const DEFAULT_LANGUAGE_LIST: LanguageItem[] = [ + { key: 'de', label: 'Deutsch' }, + { key: 'en', label: 'English' }, + { key: 'es', label: 'Español' }, + { key: 'fr', label: 'Français' }, + { key: 'it', label: 'Italiano' }, + { key: 'ja', label: '日本語' }, + { key: 'nb', label: 'Bokmål' }, + { key: 'nl', label: 'Nederlands' }, + { key: 'pt-BR', label: 'Português (Brasil)' }, + { key: 'ru', label: 'Русский' }, + { key: 'zh-CN', label: '中文简体' }, + { key: 'cs', label: 'Čeština' }, + { key: 'da', label: 'Dansk' }, + { key: 'fi', label: 'Suomi' }, + { key: 'pl', label: 'Polski' }, + { key: 'sv', label: 'Svenska' }, + { key: 'ar', label: 'العربية', direction: 'rtl' } +]; diff --git a/lib/core/src/lib/common/services/user-preferences.service.spec.ts b/lib/core/src/lib/common/services/user-preferences.service.spec.ts index 4e16acac58..d939ff11ab 100644 --- a/lib/core/src/lib/common/services/user-preferences.service.spec.ts +++ b/lib/core/src/lib/common/services/user-preferences.service.spec.ts @@ -193,6 +193,19 @@ describe('UserPreferencesService', () => { expect(storage.getItem(textOrientation)).toBe('rtl'); }); + it('should set direction from default languages when language config is not present', () => { + appConfig.config.languages = [ + { + key: 'fake-locale-config', + direction: 'ltr' + } + ]; + appConfig.config.locale = 'ar'; + appConfig.load(); + const textOrientation = preferences.getPropertyKey('textOrientation'); + expect(storage.getItem(textOrientation)).toBe('rtl'); + }); + it('should not store textOrientation based on language ', () => { appConfig.config.languages = [ { diff --git a/lib/core/src/lib/common/services/user-preferences.service.ts b/lib/core/src/lib/common/services/user-preferences.service.ts index 95e63f1f9e..b9721dde21 100644 --- a/lib/core/src/lib/common/services/user-preferences.service.ts +++ b/lib/core/src/lib/common/services/user-preferences.service.ts @@ -24,6 +24,7 @@ import { distinctUntilChanged, map } from 'rxjs/operators'; import { LanguageItem } from './language-item.interface'; import { DOCUMENT } from '@angular/common'; import { Directionality, Direction } from '@angular/cdk/bidi'; +import { DEFAULT_LANGUAGE_LIST } from '../models/default-languages.model'; // eslint-disable-next-line no-shadow export enum UserPreferenceValues { @@ -246,11 +247,13 @@ export class UserPreferencesService { private getLanguageByKey(key: string): LanguageItem { const defaultLanguage = { key: 'en' } as LanguageItem; + let language: LanguageItem; - const registeredLanguages = this.appConfig.get>(AppConfigValues.APP_CONFIG_LANGUAGES_KEY); - if (registeredLanguages && Array.isArray(registeredLanguages)) { - return registeredLanguages.find((language) => key.includes(language.key)) || defaultLanguage; + const customLanguages = this.appConfig.get>(AppConfigValues.APP_CONFIG_LANGUAGES_KEY); + if (Array.isArray(customLanguages)) { + language = customLanguages.find((customLanguage) => key.includes(customLanguage.key)); } - return defaultLanguage; + language ??= DEFAULT_LANGUAGE_LIST.find((defaultLang) => defaultLang.key === key) ?? defaultLanguage; + return language; } } diff --git a/lib/core/src/lib/language-menu/service/language.service.ts b/lib/core/src/lib/language-menu/service/language.service.ts index 6474dc916a..7b721b4039 100644 --- a/lib/core/src/lib/language-menu/service/language.service.ts +++ b/lib/core/src/lib/language-menu/service/language.service.ts @@ -21,36 +21,15 @@ import { BehaviorSubject } from 'rxjs'; import { AppConfigService, AppConfigValues } from '../../app-config/app-config.service'; import { LanguageItem } from '../../common/services/language-item.interface'; import { UserPreferencesService } from '../../common/services/user-preferences.service'; +import { DEFAULT_LANGUAGE_LIST } from '../../common/models/default-languages.model'; -@Injectable({providedIn: 'root'}) +@Injectable({ providedIn: 'root' }) export class LanguageService implements LanguageServiceInterface { - - private languages = new BehaviorSubject([ - {key: 'de', label: 'Deutsch'}, - {key: 'en', label: 'English'}, - {key: 'es', label: 'Español'}, - {key: 'fr', label: 'Français'}, - {key: 'it', label: 'Italiano'}, - {key: 'ja', label: '日本語'}, - {key: 'nb', label: 'Bokmål'}, - {key: 'nl', label: 'Nederlands'}, - {key: 'pt-BR', label: 'Português (Brasil)'}, - {key: 'ru', label: 'Русский'}, - {key: 'zh-CN', label: '中文简体'}, - {key: 'cs', label: 'Čeština'}, - {key: 'da', label: 'Dansk'}, - {key: 'fi', label: 'Suomi'}, - {key: 'pl', label: 'Polski'}, - {key: 'sv', label: 'Svenska'}, - {key: 'ar', label: 'العربية', direction: 'rtl'} - ]); + private languages = new BehaviorSubject(DEFAULT_LANGUAGE_LIST); languages$ = this.languages.asObservable(); - constructor( - appConfigService: AppConfigService, - private userPreferencesService: UserPreferencesService) { - + constructor(appConfigService: AppConfigService, private readonly userPreferencesService: UserPreferencesService) { const customLanguages = appConfigService.get>(AppConfigValues.APP_CONFIG_LANGUAGES_KEY); this.setLanguages(customLanguages); } diff --git a/lib/core/src/lib/layout/components/layout-container/layout-container.component.html b/lib/core/src/lib/layout/components/layout-container/layout-container.component.html index 43826f9a91..c077f6a023 100644 --- a/lib/core/src/lib/layout/components/layout-container/layout-container.component.html +++ b/lib/core/src/lib/layout/components/layout-container/layout-container.component.html @@ -1,4 +1,4 @@ - +