diff --git a/lib/content-services/package.json b/lib/content-services/package.json index edf0c1d2af..b0dca626e6 100644 --- a/lib/content-services/package.json +++ b/lib/content-services/package.json @@ -22,7 +22,7 @@ "@angular/platform-browser-dynamic": ">=14.1.3", "@angular/router": ">=14.1.3", "@alfresco/js-api": ">=9.2.1", - "@ngx-translate/core": ">=17.0.0", + "@ngx-translate/core": ">=16.0.0", "@alfresco/adf-core": ">=8.2.1" }, "keywords": [ diff --git a/lib/core/package.json b/lib/core/package.json index 824a60d80f..0c4c5d2227 100644 --- a/lib/core/package.json +++ b/lib/core/package.json @@ -37,7 +37,7 @@ "@angular/platform-browser": ">=16.0.0", "@angular/router": ">=16.0.0", "@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/adf-extensions": ">=8.2.1", "minimatch": ">=10.0.0", diff --git a/lib/core/src/lib/core.module.ts b/lib/core/src/lib/core.module.ts index c5b808f153..2dae18a8fd 100644 --- a/lib/core/src/lib/core.module.ts +++ b/lib/core/src/lib/core.module.ts @@ -16,7 +16,7 @@ */ 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 { CARD_VIEW_DIRECTIVES } from './card-view/card-view.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 { TranslateLoaderService } from './translation/translate-loader.service'; import { SEARCH_TEXT_INPUT_DIRECTIVES } from './search-text/search-text-input.module'; +import { HttpClient } from '@angular/common/http'; import { AppConfigPipe } from './app-config'; import { IconComponent } from './icon'; import { DynamicChipListComponent } from './dynamic-chip-list'; @@ -122,8 +123,12 @@ export class CoreModule { ngModule: CoreModule, providers: [ provideTranslateService({ - loader: provideTranslateLoader(TranslateLoaderService), - fallbackLang: 'en' + loader: { + provide: TranslateLoader, + useClass: TranslateLoaderService, + deps: [HttpClient] + }, + defaultLanguage: 'en' }), provideAppConfig() ] diff --git a/lib/core/src/lib/testing/noop-translate.module.ts b/lib/core/src/lib/testing/noop-translate.module.ts index ee3a411d9c..846c389c67 100644 --- a/lib/core/src/lib/testing/noop-translate.module.ts +++ b/lib/core/src/lib/testing/noop-translate.module.ts @@ -18,13 +18,13 @@ import { EventEmitter, Injectable, NgModule } from '@angular/core'; import { provideHttpClient } from '@angular/common/http'; 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 { LangChangeEvent } from '../mock'; import { Observable, of } from 'rxjs'; @Injectable({ providedIn: 'root' }) -export class NoopTranslationService implements TranslateLoader { +export class NoopTranslationService { defaultLang: string = 'en'; userLang: string; customLoader: any; @@ -47,10 +47,6 @@ export class NoopTranslationService implements TranslateLoader { instant(key: string | Array): string | any { return key; } - - getTranslation(): Observable { - return of({}); - } } @NgModule({ @@ -59,7 +55,10 @@ export class NoopTranslationService implements TranslateLoader { provideHttpClientTesting(), { provide: TranslationService, useClass: NoopTranslationService }, provideTranslateService({ - loader: provideTranslateLoader(NoopTranslationService) + loader: { + provide: TranslateLoader, + useClass: NoopTranslationService + } }) ] }) diff --git a/lib/core/src/lib/translation/provide-i18n.spec.ts b/lib/core/src/lib/translation/provide-i18n.spec.ts index cb93f3a9fc..ce04356d56 100644 --- a/lib/core/src/lib/translation/provide-i18n.spec.ts +++ b/lib/core/src/lib/translation/provide-i18n.spec.ts @@ -40,7 +40,7 @@ describe('provideI18N', () => { it('should set default language to "en" when not specified', () => { 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', () => { 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 expect(translateService).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', () => { const translateService = TestBed.inject(TranslateService); - expect(translateService.getFallbackLang()).toBe('fr'); + expect(translateService.defaultLang).toBe('fr'); expect(translateService.instant('HELLO')).toBe('Bonjour!'); }); }); @@ -184,7 +184,7 @@ describe('provideI18N', () => { const translateService = TestBed.inject(TranslateService); const loader = translateService.currentLoader as TranslateLoaderService; - expect(translateService.getFallbackLang()).toBe('en'); + expect(translateService.defaultLang).toBe('en'); expect(loader).toBeDefined(); expect(loader.providerRegistered).toBeDefined(); expect(loader.providerRegistered('adf-core')).toBeTruthy(); @@ -211,7 +211,7 @@ describe('provideI18N', () => { it('should handle empty translations object', () => { const translateService = TestBed.inject(TranslateService); expect(translateService).toBeDefined(); - expect(translateService.getFallbackLang()).toBe('en'); + expect(translateService.defaultLang).toBe('en'); }); }); }); diff --git a/lib/core/src/lib/translation/provide-i18n.ts b/lib/core/src/lib/translation/provide-i18n.ts index 65a364d8e9..6ba9520ad3 100644 --- a/lib/core/src/lib/translation/provide-i18n.ts +++ b/lib/core/src/lib/translation/provide-i18n.ts @@ -16,8 +16,9 @@ */ 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 { HttpClient } from '@angular/common/http'; import { provideTranslations } from './translation.service'; export interface ProvideI18NConfig { @@ -53,8 +54,12 @@ export function provideI18N(config?: ProvideI18NConfig): (Provider | Environment const result: (Provider | EnvironmentProviders)[] = [ provideTranslateService({ - loader: provideTranslateLoader(TranslateLoaderService), - fallbackLang: defaultLanguage + loader: { + provide: TranslateLoader, + useExisting: TranslateLoaderService, + deps: [HttpClient] + }, + defaultLanguage }) ]; diff --git a/lib/core/src/lib/translation/translate-loader.spec.ts b/lib/core/src/lib/translation/translate-loader.spec.ts index 5a71edc784..a6bfaaac99 100644 --- a/lib/core/src/lib/translation/translate-loader.spec.ts +++ b/lib/core/src/lib/translation/translate-loader.spec.ts @@ -18,7 +18,8 @@ import { TestBed } from '@angular/core/testing'; import { TranslateLoaderService } from './translate-loader.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', () => { let translationService: TranslationService; @@ -28,8 +29,12 @@ describe('TranslateLoader', () => { TestBed.configureTestingModule({ providers: [ provideTranslateService({ - loader: provideTranslateLoader(TranslateLoaderService), - fallbackLang: 'en' + loader: { + provide: TranslateLoader, + useClass: TranslateLoaderService, + deps: [HttpClient] + }, + defaultLanguage: 'en' }), TranslationService ] diff --git a/lib/core/src/lib/translation/translation.service.spec.ts b/lib/core/src/lib/translation/translation.service.spec.ts index a580237ec7..dc06242cbf 100644 --- a/lib/core/src/lib/translation/translation.service.spec.ts +++ b/lib/core/src/lib/translation/translation.service.spec.ts @@ -16,7 +16,7 @@ */ 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 { of } from 'rxjs'; import { provideAppConfigTesting } from '../testing'; @@ -51,13 +51,15 @@ describe('TranslationService', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [ - TranslationService, - provideAppConfigTesting(), - provideTranslateService({ - loader: provideTranslateLoader(FakeLoader) + imports: [ + TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useClass: FakeLoader + } }) - ] + ], + providers: [TranslationService, provideAppConfigTesting()] }); translationService = TestBed.inject(TranslationService); diff --git a/lib/core/src/lib/translation/translation.service.ts b/lib/core/src/lib/translation/translation.service.ts index 94a57d46b0..f0f64ca270 100644 --- a/lib/core/src/lib/translation/translation.service.ts +++ b/lib/core/src/lib/translation/translation.service.ts @@ -62,7 +62,7 @@ export class TranslationService { this.customLoader = this.translate.currentLoader as TranslateLoaderService; this.defaultLang = 'en'; - this.translate.setFallbackLang(this.defaultLang); + this.translate.setDefaultLang(this.defaultLang); this.customLoader.setDefaultLang(this.defaultLang); 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 */ loadTranslation(lang: string, fallback?: string) { - this.translate.currentLoader.getTranslation(lang).subscribe( + this.translate.getTranslation(lang).subscribe( () => { this.translate.use(lang); this.onTranslationChanged(lang); @@ -134,8 +134,10 @@ export class TranslationService { * @param lang The new language code */ onTranslationChanged(lang: string): void { - const translations = this.customLoader.getFullTranslationJSON?.(lang) ?? {}; - this.translate.setTranslation(lang, translations, true); + this.translate.onTranslationChange.next({ + lang, + translations: this.customLoader.getFullTranslationJSON?.(lang) ?? {} + }); } /** diff --git a/lib/insights/package.json b/lib/insights/package.json index 77ac008112..57472d728a 100644 --- a/lib/insights/package.json +++ b/lib/insights/package.json @@ -13,7 +13,7 @@ "dependencies": { "@alfresco/adf-core": ">=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", "ng2-charts": "^4.1.1", "raphael": ">=2.3.0" diff --git a/lib/process-services-cloud/package.json b/lib/process-services-cloud/package.json index f501ffd506..b2a9280dba 100644 --- a/lib/process-services-cloud/package.json +++ b/lib/process-services-cloud/package.json @@ -25,7 +25,7 @@ "@alfresco/adf-core": ">=8.2.1", "@alfresco/adf-content-services": ">=8.2.1", "@apollo/client": ">=3.7.2", - "@ngx-translate/core": ">=17.0.0", + "@ngx-translate/core": ">=14.0.0", "apollo-angular": ">=4.0.1", "editorjs-html": "^4.0.5" }, diff --git a/lib/process-services-cloud/src/lib/form/components/form-cloud.component.spec.ts b/lib/process-services-cloud/src/lib/form/components/form-cloud.component.spec.ts index 1b7268e11c..496586b024 100644 --- a/lib/process-services-cloud/src/lib/form/components/form-cloud.component.spec.ts +++ b/lib/process-services-cloud/src/lib/form/components/form-cloud.component.spec.ts @@ -45,7 +45,7 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { MatDialog } from '@angular/material/dialog'; import { MatDialogHarness } from '@angular/material/dialog/testing'; 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 { cloudFormMock, @@ -1746,7 +1746,10 @@ describe('Multilingual Form', () => { imports: [NoopAuthModule], providers: [ provideTranslateService({ - loader: provideTranslateLoader(FakeLoader) + loader: { + provide: TranslateLoader, + useClass: FakeLoader + } }) ] }); diff --git a/lib/process-services/package.json b/lib/process-services/package.json index 1d42eeb64e..4ab2c3f9af 100644 --- a/lib/process-services/package.json +++ b/lib/process-services/package.json @@ -24,7 +24,7 @@ "@alfresco/js-api": ">=9.2.1", "@alfresco/adf-core": ">=8.2.1", "@alfresco/adf-content-services": ">=8.2.1", - "@ngx-translate/core": ">=17.0.0" + "@ngx-translate/core": ">=14.0.0" }, "keywords": [ "process-services", diff --git a/package-lock.json b/package-lock.json index 65f6f167e8..17931d771c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "@apollo/client": "3.13.1", "@cspell/eslint-plugin": "9.4.0", "@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-jwks": "^17.0.2", "apollo-angular": "10.0.3", @@ -8953,9 +8953,9 @@ "license": "MIT" }, "node_modules/@ngx-translate/core": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@ngx-translate/core/-/core-17.0.0.tgz", - "integrity": "sha512-Rft2D5ns2pq4orLZjEtx1uhNuEBerUdpFUG1IcqtGuipj6SavgB8SkxtNQALNDA+EVlvsNCCjC2ewZVtUeN6rg==", + "version": "16.0.4", + "resolved": "https://registry.npmjs.org/@ngx-translate/core/-/core-16.0.4.tgz", + "integrity": "sha512-s8llTL2SJvROhqttxvEs7Cg+6qSf4kvZPFYO+cTOY1d8DWTjlutRkWAleZcPPoeX927Dm7ALfL07G7oYDJ7z6w==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" diff --git a/package.json b/package.json index 79ed820ef5..57e8a7a74b 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ "@apollo/client": "3.13.1", "@cspell/eslint-plugin": "9.4.0", "@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-jwks": "^17.0.2", "apollo-angular": "10.0.3",