diff --git a/packages/core-app-api/alpha-api-report.md b/packages/core-app-api/alpha-api-report.md index 57a15f3894..f35adfdbaa 100644 --- a/packages/core-app-api/alpha-api-report.md +++ b/packages/core-app-api/alpha-api-report.md @@ -22,7 +22,10 @@ export class AppTranslationApiImpl implements AppTranslationApi { // (undocumented) addResources>( translationRef: TranslationRef, - initResources?: TranslationMessages>, + initResources?: Record< + string, + TranslationMessages> + >, ): void; // (undocumented) addResourcesByRef>( @@ -39,7 +42,7 @@ export class AppTranslationApiImpl implements AppTranslationApi { // @alpha (undocumented) export function createTranslationResource(options: { ref: T; - messages?: TranslationMessages; + messages?: Record>; lazyMessages: Record< string, () => Promise<{ @@ -48,7 +51,7 @@ export function createTranslationResource(options: { >; }): { ref: T; - messages?: TranslationMessages | undefined; + messages?: Record> | undefined; lazyMessages: Record< string, () => Promise<{ @@ -63,7 +66,7 @@ export type ExperimentalI18n = { fallbackLanguage?: string | string[]; messages?: Array<{ ref: TranslationRef; - messages?: TranslationMessages; + messages?: Record>; lazyMessages: Record< string, () => Promise<{ @@ -75,7 +78,7 @@ export type ExperimentalI18n = { // @alpha (undocumented) export type TranslationMessages = T extends TranslationRef - ? Record> + ? Partial : never; // (No @packageDocumentation comment for this package) diff --git a/packages/core-app-api/api-report.md b/packages/core-app-api/api-report.md index 2f6f02f37a..e53d2eed83 100644 --- a/packages/core-app-api/api-report.md +++ b/packages/core-app-api/api-report.md @@ -226,7 +226,7 @@ export type AppOptions = { fallbackLanguage?: string | string[]; messages?: Array<{ ref: TranslationRef; - messages?: TranslationMessages; + messages?: Record>; lazyMessages: Record< string, () => Promise<{ diff --git a/packages/core-app-api/src/apis/implementations/AppTranslationApi/AppTranslation.test.ts b/packages/core-app-api/src/apis/implementations/AppTranslationApi/AppTranslation.test.ts index 85f8c5e3eb..b6eba8a1c7 100644 --- a/packages/core-app-api/src/apis/implementations/AppTranslationApi/AppTranslation.test.ts +++ b/packages/core-app-api/src/apis/implementations/AppTranslationApi/AppTranslation.test.ts @@ -33,6 +33,7 @@ jest.mock('i18next', () => ({ }, options: { fallbackLng: 'en', + supportedLngs: ['zh', 'en'], }, })), })), diff --git a/packages/core-app-api/src/apis/implementations/AppTranslationApi/AppTranslationImpl.ts b/packages/core-app-api/src/apis/implementations/AppTranslationApi/AppTranslationImpl.ts index c65611fd9f..69820e7b67 100644 --- a/packages/core-app-api/src/apis/implementations/AppTranslationApi/AppTranslationImpl.ts +++ b/packages/core-app-api/src/apis/implementations/AppTranslationApi/AppTranslationImpl.ts @@ -30,7 +30,7 @@ export type ExperimentalI18n = { fallbackLanguage?: string | string[]; messages?: Array<{ ref: TranslationRef; - messages?: TranslationMessages; + messages?: Record>; lazyMessages: Record< string, () => Promise<{ messages: TranslationMessages }> @@ -89,7 +89,10 @@ export class AppTranslationApiImpl implements AppTranslationApi { addResources>( translationRef: TranslationRef, - initResources?: TranslationMessages>, + initResources?: Record< + string, + TranslationMessages> + >, ) { const resources = initResources || translationRef.getResources(); if (!resources || this.cache.has(translationRef)) { @@ -136,18 +139,13 @@ export class AppTranslationApiImpl implements AppTranslationApi { const namespace = translationRef.getId(); const lazyResources = initResources || translationRef.getLazyResources(); - const fallbackLanguages = services.languageUtils.getFallbackCodes( - options.fallbackLng, - currentLanguage, - ) as string[]; - - Promise.allSettled( - [...fallbackLanguages, currentLanguage].map(addLanguage), - ).then(results => { - if (results.some(result => result.status === 'fulfilled')) { - this.i18n.emit('loaded'); - } - }); + Promise.allSettled((options.supportedLngs || []).map(addLanguage)).then( + results => { + if (results.some(result => result.status === 'fulfilled')) { + this.i18n.emit('loaded'); + } + }, + ); async function addLanguage(language: string) { if (cache!.has(language)) { diff --git a/packages/core-app-api/src/app/TranslationResource.ts b/packages/core-app-api/src/app/TranslationResource.ts index e5d34de587..65f1c4622c 100644 --- a/packages/core-app-api/src/app/TranslationResource.ts +++ b/packages/core-app-api/src/app/TranslationResource.ts @@ -18,13 +18,13 @@ import { TranslationRef } from '@backstage/core-plugin-api/alpha'; /** @alpha */ export type TranslationMessages = T extends TranslationRef - ? Record> + ? Partial : never; /** @alpha */ export function createTranslationResource(options: { ref: T; - messages?: TranslationMessages; + messages?: Record>; lazyMessages: Record< string, () => Promise<{ messages: TranslationMessages }> diff --git a/packages/core-app-api/src/app/types.ts b/packages/core-app-api/src/app/types.ts index 89104ebf12..3d4b9cf8c5 100644 --- a/packages/core-app-api/src/app/types.ts +++ b/packages/core-app-api/src/app/types.ts @@ -185,7 +185,7 @@ export type AppRouteBinder = < * @ignore * */ type TranslationMessages = T extends TranslationRef - ? Record> + ? Partial : never; /** @@ -299,7 +299,7 @@ export type AppOptions = { fallbackLanguage?: string | string[]; messages?: Array<{ ref: TranslationRef; - messages?: TranslationMessages; + messages?: Record>; lazyMessages: Record< string, () => Promise<{ messages: TranslationMessages }>