[ACS-11213] Reverted ngx translate upgrade (#11702)

This commit is contained in:
AleksanderSklorz
2026-02-27 23:42:44 +01:00
committed by GitHub
parent a15b1f4c85
commit 0b7b89e5d8
15 changed files with 66 additions and 45 deletions

View File

@@ -22,7 +22,7 @@
"@angular/platform-browser-dynamic": ">=14.1.3", "@angular/platform-browser-dynamic": ">=14.1.3",
"@angular/router": ">=14.1.3", "@angular/router": ">=14.1.3",
"@alfresco/js-api": ">=9.2.1", "@alfresco/js-api": ">=9.2.1",
"@ngx-translate/core": ">=17.0.0", "@ngx-translate/core": ">=16.0.0",
"@alfresco/adf-core": ">=8.2.1" "@alfresco/adf-core": ">=8.2.1"
}, },
"keywords": [ "keywords": [

View File

@@ -37,7 +37,7 @@
"@angular/platform-browser": ">=16.0.0", "@angular/platform-browser": ">=16.0.0",
"@angular/router": ">=16.0.0", "@angular/router": ">=16.0.0",
"@mat-datetimepicker/core": ">=12.0.1", "@mat-datetimepicker/core": ">=12.0.1",
"@ngx-translate/core": ">=17.0.0", "@ngx-translate/core": ">=16.0.0",
"@alfresco/js-api": ">=9.2.1", "@alfresco/js-api": ">=9.2.1",
"@alfresco/adf-extensions": ">=8.2.1", "@alfresco/adf-extensions": ">=8.2.1",
"minimatch": ">=10.0.0", "minimatch": ">=10.0.0",

View File

@@ -16,7 +16,7 @@
*/ */
import { NgModule, ModuleWithProviders } from '@angular/core'; import { NgModule, ModuleWithProviders } from '@angular/core';
import { provideTranslateService, provideTranslateLoader } from '@ngx-translate/core'; import { TranslateLoader, provideTranslateService } from '@ngx-translate/core';
import { ABOUT_DIRECTIVES } from './about/about.module'; import { ABOUT_DIRECTIVES } from './about/about.module';
import { CARD_VIEW_DIRECTIVES } from './card-view/card-view.module'; import { CARD_VIEW_DIRECTIVES } from './card-view/card-view.module';
import { CONTEXT_MENU_DIRECTIVES } from './context-menu/context-menu.module'; import { CONTEXT_MENU_DIRECTIVES } from './context-menu/context-menu.module';
@@ -38,6 +38,7 @@ import { CORE_DIRECTIVES } from './directives/directive.module';
import { CORE_PIPES } from './pipes/pipe.module'; import { CORE_PIPES } from './pipes/pipe.module';
import { TranslateLoaderService } from './translation/translate-loader.service'; import { TranslateLoaderService } from './translation/translate-loader.service';
import { SEARCH_TEXT_INPUT_DIRECTIVES } from './search-text/search-text-input.module'; import { SEARCH_TEXT_INPUT_DIRECTIVES } from './search-text/search-text-input.module';
import { HttpClient } from '@angular/common/http';
import { AppConfigPipe } from './app-config'; import { AppConfigPipe } from './app-config';
import { IconComponent } from './icon'; import { IconComponent } from './icon';
import { DynamicChipListComponent } from './dynamic-chip-list'; import { DynamicChipListComponent } from './dynamic-chip-list';
@@ -122,8 +123,12 @@ export class CoreModule {
ngModule: CoreModule, ngModule: CoreModule,
providers: [ providers: [
provideTranslateService({ provideTranslateService({
loader: provideTranslateLoader(TranslateLoaderService), loader: {
fallbackLang: 'en' provide: TranslateLoader,
useClass: TranslateLoaderService,
deps: [HttpClient]
},
defaultLanguage: 'en'
}), }),
provideAppConfig() provideAppConfig()
] ]

View File

@@ -18,13 +18,13 @@
import { EventEmitter, Injectable, NgModule } from '@angular/core'; import { EventEmitter, Injectable, NgModule } from '@angular/core';
import { provideHttpClient } from '@angular/common/http'; import { provideHttpClient } from '@angular/common/http';
import { provideHttpClientTesting } from '@angular/common/http/testing'; import { provideHttpClientTesting } from '@angular/common/http/testing';
import { provideTranslateLoader, provideTranslateService, TranslateLoader, TranslationObject } from '@ngx-translate/core'; import { provideTranslateService, TranslateLoader } from '@ngx-translate/core';
import { TranslationService } from '../translation/translation.service'; import { TranslationService } from '../translation/translation.service';
import { LangChangeEvent } from '../mock'; import { LangChangeEvent } from '../mock';
import { Observable, of } from 'rxjs'; import { Observable, of } from 'rxjs';
@Injectable({ providedIn: 'root' }) @Injectable({ providedIn: 'root' })
export class NoopTranslationService implements TranslateLoader { export class NoopTranslationService {
defaultLang: string = 'en'; defaultLang: string = 'en';
userLang: string; userLang: string;
customLoader: any; customLoader: any;
@@ -47,10 +47,6 @@ export class NoopTranslationService implements TranslateLoader {
instant(key: string | Array<string>): string | any { instant(key: string | Array<string>): string | any {
return key; return key;
} }
getTranslation(): Observable<TranslationObject> {
return of({});
}
} }
@NgModule({ @NgModule({
@@ -59,7 +55,10 @@ export class NoopTranslationService implements TranslateLoader {
provideHttpClientTesting(), provideHttpClientTesting(),
{ provide: TranslationService, useClass: NoopTranslationService }, { provide: TranslationService, useClass: NoopTranslationService },
provideTranslateService({ provideTranslateService({
loader: provideTranslateLoader(NoopTranslationService) loader: {
provide: TranslateLoader,
useClass: NoopTranslationService
}
}) })
] ]
}) })

View File

@@ -40,7 +40,7 @@ describe('provideI18N', () => {
it('should set default language to "en" when not specified', () => { it('should set default language to "en" when not specified', () => {
const translateService = TestBed.inject(TranslateService); const translateService = TestBed.inject(TranslateService);
expect(translateService.getFallbackLang()).toBe('en'); expect(translateService.defaultLang).toBe('en');
}); });
}); });
@@ -53,7 +53,7 @@ describe('provideI18N', () => {
it('should set custom default language', () => { it('should set custom default language', () => {
const translateService = TestBed.inject(TranslateService); const translateService = TestBed.inject(TranslateService);
expect(translateService.getFallbackLang()).toBe('fr'); expect(translateService.defaultLang).toBe('fr');
}); });
}); });
@@ -81,7 +81,7 @@ describe('provideI18N', () => {
// Services should be properly configured // Services should be properly configured
expect(translateService).toBeDefined(); expect(translateService).toBeDefined();
expect(translationService).toBeDefined(); expect(translationService).toBeDefined();
expect(translateService.getFallbackLang()).toBe('en'); expect(translateService.defaultLang).toBe('en');
}); });
}); });
@@ -153,7 +153,7 @@ describe('provideI18N', () => {
it('should set translations for custom default language', () => { it('should set translations for custom default language', () => {
const translateService = TestBed.inject(TranslateService); const translateService = TestBed.inject(TranslateService);
expect(translateService.getFallbackLang()).toBe('fr'); expect(translateService.defaultLang).toBe('fr');
expect(translateService.instant('HELLO')).toBe('Bonjour!'); expect(translateService.instant('HELLO')).toBe('Bonjour!');
}); });
}); });
@@ -184,7 +184,7 @@ describe('provideI18N', () => {
const translateService = TestBed.inject(TranslateService); const translateService = TestBed.inject(TranslateService);
const loader = translateService.currentLoader as TranslateLoaderService; const loader = translateService.currentLoader as TranslateLoaderService;
expect(translateService.getFallbackLang()).toBe('en'); expect(translateService.defaultLang).toBe('en');
expect(loader).toBeDefined(); expect(loader).toBeDefined();
expect(loader.providerRegistered).toBeDefined(); expect(loader.providerRegistered).toBeDefined();
expect(loader.providerRegistered('adf-core')).toBeTruthy(); expect(loader.providerRegistered('adf-core')).toBeTruthy();
@@ -211,7 +211,7 @@ describe('provideI18N', () => {
it('should handle empty translations object', () => { it('should handle empty translations object', () => {
const translateService = TestBed.inject(TranslateService); const translateService = TestBed.inject(TranslateService);
expect(translateService).toBeDefined(); expect(translateService).toBeDefined();
expect(translateService.getFallbackLang()).toBe('en'); expect(translateService.defaultLang).toBe('en');
}); });
}); });
}); });

View File

@@ -16,8 +16,9 @@
*/ */
import { EnvironmentProviders, inject, provideAppInitializer, Provider } from '@angular/core'; import { EnvironmentProviders, inject, provideAppInitializer, Provider } from '@angular/core';
import { provideTranslateLoader, provideTranslateService, TranslateService } from '@ngx-translate/core'; import { provideTranslateService, TranslateLoader, TranslateService } from '@ngx-translate/core';
import { TranslateLoaderService } from './translate-loader.service'; import { TranslateLoaderService } from './translate-loader.service';
import { HttpClient } from '@angular/common/http';
import { provideTranslations } from './translation.service'; import { provideTranslations } from './translation.service';
export interface ProvideI18NConfig { export interface ProvideI18NConfig {
@@ -53,8 +54,12 @@ export function provideI18N(config?: ProvideI18NConfig): (Provider | Environment
const result: (Provider | EnvironmentProviders)[] = [ const result: (Provider | EnvironmentProviders)[] = [
provideTranslateService({ provideTranslateService({
loader: provideTranslateLoader(TranslateLoaderService), loader: {
fallbackLang: defaultLanguage provide: TranslateLoader,
useExisting: TranslateLoaderService,
deps: [HttpClient]
},
defaultLanguage
}) })
]; ];

View File

@@ -18,7 +18,8 @@
import { TestBed } from '@angular/core/testing'; import { TestBed } from '@angular/core/testing';
import { TranslateLoaderService } from './translate-loader.service'; import { TranslateLoaderService } from './translate-loader.service';
import { TranslationService } from './translation.service'; import { TranslationService } from './translation.service';
import { provideTranslateLoader, provideTranslateService } from '@ngx-translate/core'; import { provideTranslateService, TranslateLoader } from '@ngx-translate/core';
import { HttpClient } from '@angular/common/http';
describe('TranslateLoader', () => { describe('TranslateLoader', () => {
let translationService: TranslationService; let translationService: TranslationService;
@@ -28,8 +29,12 @@ describe('TranslateLoader', () => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
providers: [ providers: [
provideTranslateService({ provideTranslateService({
loader: provideTranslateLoader(TranslateLoaderService), loader: {
fallbackLang: 'en' provide: TranslateLoader,
useClass: TranslateLoaderService,
deps: [HttpClient]
},
defaultLanguage: 'en'
}), }),
TranslationService TranslationService
] ]

View File

@@ -16,7 +16,7 @@
*/ */
import { TestBed } from '@angular/core/testing'; import { TestBed } from '@angular/core/testing';
import { provideTranslateLoader, provideTranslateService, TranslateLoader } from '@ngx-translate/core'; import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
import { TranslationService } from './translation.service'; import { TranslationService } from './translation.service';
import { of } from 'rxjs'; import { of } from 'rxjs';
import { provideAppConfigTesting } from '../testing'; import { provideAppConfigTesting } from '../testing';
@@ -51,13 +51,15 @@ describe('TranslationService', () => {
beforeEach(() => { beforeEach(() => {
TestBed.configureTestingModule({ TestBed.configureTestingModule({
providers: [ imports: [
TranslationService, TranslateModule.forRoot({
provideAppConfigTesting(), loader: {
provideTranslateService({ provide: TranslateLoader,
loader: provideTranslateLoader(FakeLoader) useClass: FakeLoader
}
}) })
] ],
providers: [TranslationService, provideAppConfigTesting()]
}); });
translationService = TestBed.inject(TranslationService); translationService = TestBed.inject(TranslationService);

View File

@@ -62,7 +62,7 @@ export class TranslationService {
this.customLoader = this.translate.currentLoader as TranslateLoaderService; this.customLoader = this.translate.currentLoader as TranslateLoaderService;
this.defaultLang = 'en'; this.defaultLang = 'en';
this.translate.setFallbackLang(this.defaultLang); this.translate.setDefaultLang(this.defaultLang);
this.customLoader.setDefaultLang(this.defaultLang); this.customLoader.setDefaultLang(this.defaultLang);
if (this.providers && this.providers.length > 0) { if (this.providers && this.providers.length > 0) {
@@ -115,7 +115,7 @@ export class TranslationService {
* @param fallback Language code to fall back to if the first one was unavailable * @param fallback Language code to fall back to if the first one was unavailable
*/ */
loadTranslation(lang: string, fallback?: string) { loadTranslation(lang: string, fallback?: string) {
this.translate.currentLoader.getTranslation(lang).subscribe( this.translate.getTranslation(lang).subscribe(
() => { () => {
this.translate.use(lang); this.translate.use(lang);
this.onTranslationChanged(lang); this.onTranslationChanged(lang);
@@ -134,8 +134,10 @@ export class TranslationService {
* @param lang The new language code * @param lang The new language code
*/ */
onTranslationChanged(lang: string): void { onTranslationChanged(lang: string): void {
const translations = this.customLoader.getFullTranslationJSON?.(lang) ?? {}; this.translate.onTranslationChange.next({
this.translate.setTranslation(lang, translations, true); lang,
translations: this.customLoader.getFullTranslationJSON?.(lang) ?? {}
});
} }
/** /**

View File

@@ -13,7 +13,7 @@
"dependencies": { "dependencies": {
"@alfresco/adf-core": ">=8.2.1", "@alfresco/adf-core": ">=8.2.1",
"@alfresco/adf-content-services": ">=8.2.1", "@alfresco/adf-content-services": ">=8.2.1",
"@ngx-translate/core": ">=17.0.0", "@ngx-translate/core": ">=14.0.0",
"chart.js": "^4.3.0", "chart.js": "^4.3.0",
"ng2-charts": "^4.1.1", "ng2-charts": "^4.1.1",
"raphael": ">=2.3.0" "raphael": ">=2.3.0"

View File

@@ -25,7 +25,7 @@
"@alfresco/adf-core": ">=8.2.1", "@alfresco/adf-core": ">=8.2.1",
"@alfresco/adf-content-services": ">=8.2.1", "@alfresco/adf-content-services": ">=8.2.1",
"@apollo/client": ">=3.7.2", "@apollo/client": ">=3.7.2",
"@ngx-translate/core": ">=17.0.0", "@ngx-translate/core": ">=14.0.0",
"apollo-angular": ">=4.0.1", "apollo-angular": ">=4.0.1",
"editorjs-html": "^4.0.5" "editorjs-html": "^4.0.5"
}, },

View File

@@ -45,7 +45,7 @@ import { ComponentFixture, TestBed } from '@angular/core/testing';
import { MatDialog } from '@angular/material/dialog'; import { MatDialog } from '@angular/material/dialog';
import { MatDialogHarness } from '@angular/material/dialog/testing'; import { MatDialogHarness } from '@angular/material/dialog/testing';
import { By } from '@angular/platform-browser'; import { By } from '@angular/platform-browser';
import { TranslateLoader, TranslateService, provideTranslateService, provideTranslateLoader } from '@ngx-translate/core'; import { TranslateLoader, TranslateService, provideTranslateService } from '@ngx-translate/core';
import { firstValueFrom, Observable, of, throwError } from 'rxjs'; import { firstValueFrom, Observable, of, throwError } from 'rxjs';
import { import {
cloudFormMock, cloudFormMock,
@@ -1746,7 +1746,10 @@ describe('Multilingual Form', () => {
imports: [NoopAuthModule], imports: [NoopAuthModule],
providers: [ providers: [
provideTranslateService({ provideTranslateService({
loader: provideTranslateLoader(FakeLoader) loader: {
provide: TranslateLoader,
useClass: FakeLoader
}
}) })
] ]
}); });

View File

@@ -24,7 +24,7 @@
"@alfresco/js-api": ">=9.2.1", "@alfresco/js-api": ">=9.2.1",
"@alfresco/adf-core": ">=8.2.1", "@alfresco/adf-core": ">=8.2.1",
"@alfresco/adf-content-services": ">=8.2.1", "@alfresco/adf-content-services": ">=8.2.1",
"@ngx-translate/core": ">=17.0.0" "@ngx-translate/core": ">=14.0.0"
}, },
"keywords": [ "keywords": [
"process-services", "process-services",

8
package-lock.json generated
View File

@@ -23,7 +23,7 @@
"@apollo/client": "3.13.1", "@apollo/client": "3.13.1",
"@cspell/eslint-plugin": "9.4.0", "@cspell/eslint-plugin": "9.4.0",
"@mat-datetimepicker/core": "15.0.2", "@mat-datetimepicker/core": "15.0.2",
"@ngx-translate/core": "^17.0.0", "@ngx-translate/core": "^16.0.4",
"angular-oauth2-oidc": "17.0.2", "angular-oauth2-oidc": "17.0.2",
"angular-oauth2-oidc-jwks": "^17.0.2", "angular-oauth2-oidc-jwks": "^17.0.2",
"apollo-angular": "10.0.3", "apollo-angular": "10.0.3",
@@ -8953,9 +8953,9 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/@ngx-translate/core": { "node_modules/@ngx-translate/core": {
"version": "17.0.0", "version": "16.0.4",
"resolved": "https://registry.npmjs.org/@ngx-translate/core/-/core-17.0.0.tgz", "resolved": "https://registry.npmjs.org/@ngx-translate/core/-/core-16.0.4.tgz",
"integrity": "sha512-Rft2D5ns2pq4orLZjEtx1uhNuEBerUdpFUG1IcqtGuipj6SavgB8SkxtNQALNDA+EVlvsNCCjC2ewZVtUeN6rg==", "integrity": "sha512-s8llTL2SJvROhqttxvEs7Cg+6qSf4kvZPFYO+cTOY1d8DWTjlutRkWAleZcPPoeX927Dm7ALfL07G7oYDJ7z6w==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"tslib": "^2.3.0" "tslib": "^2.3.0"

View File

@@ -52,7 +52,7 @@
"@apollo/client": "3.13.1", "@apollo/client": "3.13.1",
"@cspell/eslint-plugin": "9.4.0", "@cspell/eslint-plugin": "9.4.0",
"@mat-datetimepicker/core": "15.0.2", "@mat-datetimepicker/core": "15.0.2",
"@ngx-translate/core": "^17.0.0", "@ngx-translate/core": "^16.0.4",
"angular-oauth2-oidc": "17.0.2", "angular-oauth2-oidc": "17.0.2",
"angular-oauth2-oidc-jwks": "^17.0.2", "angular-oauth2-oidc-jwks": "^17.0.2",
"apollo-angular": "10.0.3", "apollo-angular": "10.0.3",