Skip to content

Commit

Permalink
(fix) O3-4339: Frontend should properly support locales with region s…
Browse files Browse the repository at this point in the history
…pecifiers (#1264)
  • Loading branch information
ibacher authored Jan 14, 2025
1 parent a61deb8 commit aef6778
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 17 deletions.
16 changes: 12 additions & 4 deletions packages/framework/esm-api/src/shared-api-objects/current-user.ts
Original file line number Diff line number Diff line change
Expand Up @@ -114,14 +114,22 @@ function isValidLocale(locale: unknown): locale is string {
}

export function setUserLanguage(data: Session) {
const locale = data?.user?.userProperties?.defaultLocale ?? data.locale;
const htmlLang = document.documentElement.getAttribute('lang');
let locale = data.user?.userProperties?.defaultLocale ?? data.locale;

if (isValidLocale(locale) && locale !== htmlLang) {
if (locale && locale.includes('_')) {
locale = locale.replaceAll('_', '-');
}

if (isValidLocale(locale) && locale !== document.documentElement.getAttribute('lang')) {
document.documentElement.setAttribute('lang', locale);
}
}
sessionStore.subscribe((state) => state.session && setUserLanguage(state.session));

sessionStore.subscribe((state: SessionStore) => {
if (state.loaded && state.session) {
setUserLanguage(state.session);
}
});

function userHasPrivilege(requiredPrivilege: string | string[] | undefined, user: { privileges: Array<Privilege> }) {
if (typeof requiredPrivilege === 'string') {
Expand Down
14 changes: 7 additions & 7 deletions packages/framework/esm-framework/docs/API.md
Original file line number Diff line number Diff line change
Expand Up @@ -2407,7 +2407,7 @@ ___

#### Defined in

[packages/framework/esm-api/src/shared-api-objects/current-user.ts:169](https://github.com/openmrs/openmrs-esm-core/blob/main/packages/framework/esm-api/src/shared-api-objects/current-user.ts#L169)
[packages/framework/esm-api/src/shared-api-objects/current-user.ts:177](https://github.com/openmrs/openmrs-esm-core/blob/main/packages/framework/esm-api/src/shared-api-objects/current-user.ts#L177)

___

Expand Down Expand Up @@ -2628,7 +2628,7 @@ ___

#### Defined in

[packages/framework/esm-api/src/shared-api-objects/current-user.ts:193](https://github.com/openmrs/openmrs-esm-core/blob/main/packages/framework/esm-api/src/shared-api-objects/current-user.ts#L193)
[packages/framework/esm-api/src/shared-api-objects/current-user.ts:201](https://github.com/openmrs/openmrs-esm-core/blob/main/packages/framework/esm-api/src/shared-api-objects/current-user.ts#L201)

___

Expand All @@ -2642,7 +2642,7 @@ ___

#### Defined in

[packages/framework/esm-api/src/shared-api-objects/current-user.ts:211](https://github.com/openmrs/openmrs-esm-core/blob/main/packages/framework/esm-api/src/shared-api-objects/current-user.ts#L211)
[packages/framework/esm-api/src/shared-api-objects/current-user.ts:219](https://github.com/openmrs/openmrs-esm-core/blob/main/packages/framework/esm-api/src/shared-api-objects/current-user.ts#L219)

___

Expand Down Expand Up @@ -2888,7 +2888,7 @@ refetchCurrentUser()

#### Defined in

[packages/framework/esm-api/src/shared-api-objects/current-user.ts:155](https://github.com/openmrs/openmrs-esm-core/blob/main/packages/framework/esm-api/src/shared-api-objects/current-user.ts#L155)
[packages/framework/esm-api/src/shared-api-objects/current-user.ts:163](https://github.com/openmrs/openmrs-esm-core/blob/main/packages/framework/esm-api/src/shared-api-objects/current-user.ts#L163)

___

Expand Down Expand Up @@ -2951,7 +2951,7 @@ ___

#### Defined in

[packages/framework/esm-api/src/shared-api-objects/current-user.ts:220](https://github.com/openmrs/openmrs-esm-core/blob/main/packages/framework/esm-api/src/shared-api-objects/current-user.ts#L220)
[packages/framework/esm-api/src/shared-api-objects/current-user.ts:228](https://github.com/openmrs/openmrs-esm-core/blob/main/packages/framework/esm-api/src/shared-api-objects/current-user.ts#L228)

___

Expand Down Expand Up @@ -2993,7 +2993,7 @@ ___

#### Defined in

[packages/framework/esm-api/src/shared-api-objects/current-user.ts:233](https://github.com/openmrs/openmrs-esm-core/blob/main/packages/framework/esm-api/src/shared-api-objects/current-user.ts#L233)
[packages/framework/esm-api/src/shared-api-objects/current-user.ts:241](https://github.com/openmrs/openmrs-esm-core/blob/main/packages/framework/esm-api/src/shared-api-objects/current-user.ts#L241)

___

Expand Down Expand Up @@ -3253,7 +3253,7 @@ ___

#### Defined in

[packages/framework/esm-api/src/shared-api-objects/current-user.ts:176](https://github.com/openmrs/openmrs-esm-core/blob/main/packages/framework/esm-api/src/shared-api-objects/current-user.ts#L176)
[packages/framework/esm-api/src/shared-api-objects/current-user.ts:184](https://github.com/openmrs/openmrs-esm-core/blob/main/packages/framework/esm-api/src/shared-api-objects/current-user.ts#L184)

___

Expand Down
17 changes: 11 additions & 6 deletions packages/shell/esm-app-shell/src/locale.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,23 +11,22 @@ import {
registerTranslationNamespace('core');

export function setupI18n() {
window.i18next = i18next.default || i18next;
const i18n = (window.i18next = i18next.default || i18next);

const languageChangeObserver = new MutationObserver(() => {
const reDetect: any = undefined;
window.i18next.changeLanguage(reDetect).catch((e) => console.error('i18next failed to re-detect language', e));
i18n.changeLanguage().catch((e) => console.error('i18next failed to re-detect language', e));
});

languageChangeObserver.observe(document.documentElement, {
attributeFilter: ['lang'],
attributes: true,
});

window.i18next.on('languageChanged', () => {
document.documentElement.setAttribute('dir', window.i18next.dir());
i18n.on('languageChanged', () => {
document.documentElement.setAttribute('dir', i18n.dir());
});

return window.i18next
return i18n
.use(LanguageDetector)
.use<i18next.BackendModule>({
type: 'backend',
Expand Down Expand Up @@ -112,6 +111,12 @@ function getImportPromise(
throw Error(`Module ${namespace} does not export an importTranslation function`);
}

if (!language) {
return Promise.resolve({});
} else if (language.includes('-')) {
language = language.replace('-', '_');
}

const importPromise = module.importTranslation(`./${language}.json`);

if (!(importPromise instanceof Promise)) {
Expand Down

0 comments on commit aef6778

Please sign in to comment.