[ACS-9440] Language in lang attribute is not changed after changing language (#10776)

This commit is contained in:
dominikiwanekhyland 2025-04-08 13:25:12 +02:00 committed by GitHub
parent 82175bad80
commit 8eef4e6eec
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 90 additions and 0 deletions

View File

@ -0,0 +1,89 @@
/*!
* @license
* Copyright © 2005-2025 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 { TestBed } from '@angular/core/testing';
import { LanguageService } from './language.service';
import { AppConfigService } from '../../app-config/app-config.service';
import { UserPreferencesService } from '../../common/services/user-preferences.service';
import { DEFAULT_LANGUAGE_LIST } from '../../common/models/default-languages.model';
import { LanguageItem } from '../../common/services/language-item.interface';
describe('LanguageService', () => {
let service: LanguageService;
let appConfigService: jasmine.SpyObj<AppConfigService>;
let userPreferencesService: jasmine.SpyObj<UserPreferencesService>;
const customLanguages: LanguageItem[] = [
{ key: 'en', label: 'English' },
{ key: 'fr', label: 'French' },
{ key: 'ar', label: 'Arabic', direction: 'rtl' }
];
beforeEach(() => {
const appConfigSpy = jasmine.createSpyObj('AppConfigService', ['get']);
const userPrefsSpy = jasmine.createSpyObj('UserPreferencesService', ['set'], {
locale: 'en'
});
TestBed.configureTestingModule({
providers: [
LanguageService,
{ provide: AppConfigService, useValue: appConfigSpy },
{ provide: UserPreferencesService, useValue: userPrefsSpy }
]
});
service = TestBed.inject(LanguageService);
appConfigService = TestBed.inject(AppConfigService) as jasmine.SpyObj<AppConfigService>;
userPreferencesService = TestBed.inject(UserPreferencesService) as jasmine.SpyObj<UserPreferencesService>;
});
it('should initialize with default languages when no custom languages are provided', (done) => {
appConfigService.get.and.returnValue(null);
service = new LanguageService(appConfigService, userPreferencesService);
service.languages$.subscribe((languages) => {
expect(languages).toEqual(DEFAULT_LANGUAGE_LIST);
done();
});
});
it('should initialize with custom languages when provided', (done) => {
appConfigService.get.and.returnValue(customLanguages);
service = new LanguageService(appConfigService, userPreferencesService);
service.languages$.subscribe((languages) => {
expect(languages).toEqual(customLanguages);
done();
});
});
it('should update HTML lang attribute when language is changed', () => {
const originalSetAttribute = document.documentElement.setAttribute;
const setAttributeSpy = jasmine.createSpy('setAttribute');
document.documentElement.setAttribute = setAttributeSpy;
try {
service.changeLanguage(customLanguages[1]);
expect(setAttributeSpy).toHaveBeenCalledWith('lang', 'fr');
} finally {
document.documentElement.setAttribute = originalSetAttribute;
}
});
});

View File

@ -37,6 +37,7 @@ export class LanguageService implements LanguageServiceInterface {
changeLanguage(language: LanguageItem) {
this.userPreferencesService.locale = language.key;
this.userPreferencesService.set('textOrientation', language.direction || 'ltr');
document.documentElement.setAttribute('lang', language.key);
}
setLanguages(items: LanguageItem[]) {