diff --git a/src/Umbraco.Web.UI.Client/src/apps/app/app.element.ts b/src/Umbraco.Web.UI.Client/src/apps/app/app.element.ts index 6d09ccc23a..6d06aed831 100644 --- a/src/Umbraco.Web.UI.Client/src/apps/app/app.element.ts +++ b/src/Umbraco.Web.UI.Client/src/apps/app/app.element.ts @@ -10,6 +10,7 @@ import { pathWithoutBasePath } from '@umbraco-cms/backoffice/router'; import { tryExecute } from '@umbraco-cms/backoffice/resources'; import { OpenAPI, RuntimeLevelModel, ServerResource } from '@umbraco-cms/backoffice/backend-api'; import { contextData, umbDebugContextEventType } from '@umbraco-cms/backoffice/context-api'; +import { umbTranslationRegistry } from '@umbraco-cms/backoffice/localization-api'; @customElement('umb-app') export class UmbAppElement extends UmbLitElement { @@ -22,6 +23,17 @@ export class UmbAppElement extends UmbLitElement { @property({ type: String }) serverUrl = window.location.origin; + /** + * The default culture to use for localization. + * + * When the current user is resolved, the culture will be set to the user's culture. + * + * @attr + * @remarks This is the default culture to use for localization, not the current culture. + */ + @property({ type: String, attribute: 'default-culture' }) + culture: Intl.BCP47LanguageTag | Intl.Locale = 'en-us'; + /** * The base path of the backoffice. * @@ -33,7 +45,6 @@ export class UmbAppElement extends UmbLitElement { /** * Bypass authentication. - * @type {boolean} */ // TODO: this might not be the right solution @property({ type: Boolean }) @@ -70,9 +81,25 @@ export class UmbAppElement extends UmbLitElement { connectedCallback(): void { super.connectedCallback(); + + this.#setLanguage(); this.#setup(); } + #setLanguage() { + umbTranslationRegistry.loadLanguage(this.culture); + } + + #listenForLanguageChange(authContext: UmbAuthContext) { + this.observe( + authContext.languageIsoCode, + (currentLanguageIsoCode) => { + umbTranslationRegistry.loadLanguage(currentLanguageIsoCode); + }, + 'languageIsoCode' + ); + } + async #setup() { if (this.serverUrl === undefined) throw new Error('No serverUrl provided'); @@ -165,6 +192,8 @@ export class UmbAppElement extends UmbLitElement { OpenAPI.WITH_CREDENTIALS = true; } + this.#listenForLanguageChange(authContext); + authContext.isLoggedIn.next(true); } diff --git a/src/Umbraco.Web.UI.Client/src/apps/backoffice/backoffice.element.ts b/src/Umbraco.Web.UI.Client/src/apps/backoffice/backoffice.element.ts index cdb63cdbb7..0fe7e633a5 100644 --- a/src/Umbraco.Web.UI.Client/src/apps/backoffice/backoffice.element.ts +++ b/src/Umbraco.Web.UI.Client/src/apps/backoffice/backoffice.element.ts @@ -1,7 +1,5 @@ import { UmbBackofficeContext, UMB_BACKOFFICE_CONTEXT_TOKEN } from './backoffice.context.js'; import { UmbExtensionInitializer } from './extension.controller.js'; -import { UmbTranslationRegistry } from '@umbraco-cms/backoffice/localization-api'; -import { UMB_AUTH } from '@umbraco-cms/backoffice/auth'; import { css, html, customElement } from '@umbraco-cms/backoffice/external/lit'; import { UUITextStyles } from '@umbraco-cms/backoffice/external/uui'; import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry'; @@ -39,19 +37,6 @@ export class UmbBackofficeElement extends UmbLitElement { const extensionInitializer = new UmbExtensionInitializer(this, umbExtensionsRegistry); extensionInitializer.setLocalPackages(CORE_PACKAGES); - - const translationRegistry = new UmbTranslationRegistry(umbExtensionsRegistry); - // Load default language - translationRegistry.loadLanguage('en-us'); - this.consumeContext(UMB_AUTH, (auth) => { - this.observe( - auth.languageIsoCode, - (currentLanguageIsoCode) => { - translationRegistry.loadLanguage(currentLanguageIsoCode); - }, - 'languageIsoCode' - ); - }); } render() { diff --git a/src/Umbraco.Web.UI.Client/src/libs/localization-api/registry/translation.registry.ts b/src/Umbraco.Web.UI.Client/src/libs/localization-api/registry/translation.registry.ts index 3939d556c7..da1b1bd591 100644 --- a/src/Umbraco.Web.UI.Client/src/libs/localization-api/registry/translation.registry.ts +++ b/src/Umbraco.Web.UI.Client/src/libs/localization-api/registry/translation.registry.ts @@ -4,6 +4,7 @@ import { UmbBackofficeExtensionRegistry, UmbTranslationEntry, UmbTranslationsDictionary, + umbExtensionsRegistry, } from '@umbraco-cms/backoffice/extension-registry'; import { Subject, combineLatest } from '@umbraco-cms/backoffice/external/rxjs'; @@ -76,3 +77,5 @@ export class UmbTranslationRegistry { } } } + +export const umbTranslationRegistry = new UmbTranslationRegistry(umbExtensionsRegistry);