From 832a5b1b458d9c3b12a5acc66ab439a8b6c122ac Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Wed, 5 Nov 2025 11:17:54 +0100 Subject: [PATCH 1/2] Include language in account form. --- .../src/components/account/ProfileForm.vue | 2 +- .../admin/identities/AccountEditForm.vue | 43 ++++++++++++++++-- .../admin/identities/AccountSummary.vue | 14 +++++- .../form_steps/AccountProfileForm.vue | 44 +++++++++++++++++++ frontend/src/plugins/gettext.js | 40 +++++++++-------- frontend/src/stores/index.js | 1 + frontend/src/stores/language.store.js | 34 ++++++++++++++ 7 files changed, 154 insertions(+), 24 deletions(-) create mode 100644 frontend/src/components/admin/identities/form_steps/AccountProfileForm.vue create mode 100644 frontend/src/stores/language.store.js diff --git a/frontend/src/components/account/ProfileForm.vue b/frontend/src/components/account/ProfileForm.vue index 9c5833568..eac9cad56 100644 --- a/frontend/src/components/account/ProfileForm.vue +++ b/frontend/src/components/account/ProfileForm.vue @@ -84,7 +84,7 @@ - diff --git a/frontend/src/components/admin/identities/AccountSummary.vue b/frontend/src/components/admin/identities/AccountSummary.vue index b3dc9390f..d6ba8416d 100644 --- a/frontend/src/components/admin/identities/AccountSummary.vue +++ b/frontend/src/components/admin/identities/AccountSummary.vue @@ -23,6 +23,12 @@ {{ $gettext('Role') }} {{ account.role }} + + {{ $gettext('Language') }} + {{ + languageStore.getLanguageLabel(account.language) + }} + {{ $gettext('Secondary email') }} {{ account.secondary_email }} @@ -95,6 +101,12 @@ - diff --git a/frontend/src/components/admin/identities/form_steps/AccountProfileForm.vue b/frontend/src/components/admin/identities/form_steps/AccountProfileForm.vue new file mode 100644 index 000000000..341d89760 --- /dev/null +++ b/frontend/src/components/admin/identities/form_steps/AccountProfileForm.vue @@ -0,0 +1,44 @@ + + + diff --git a/frontend/src/plugins/gettext.js b/frontend/src/plugins/gettext.js index 77347584d..1de2b70a7 100644 --- a/frontend/src/plugins/gettext.js +++ b/frontend/src/plugins/gettext.js @@ -1,26 +1,28 @@ import { createGettext } from 'vue3-gettext' import translations from '@/locale/translations.json' +const availableLanguages = { + br: 'Breton', + cs: 'Czech', + de: 'German', + el: 'Greek', + en: 'English', + es: 'Spain', + fi: 'Finnish', + fr: 'French', + it: 'Italian', + ja: 'Japanese', + nl: 'Dutch', + pl: 'Polish', + pt_BR: 'Portuguese (BR)', + ru: 'Russian', + sv: 'Swedish', + tr: 'tr', + zh: 'Chinese', +} + export default createGettext({ - availableLanguages: { - en: 'English', - cs: 'Czech', - de: 'German', - br: 'Breton', - el: 'Greek', - es: 'Spain', - fi: 'Finnish', - fr: 'French', - it: 'Italian', - ja: 'Japanese', - nl: 'Dutch', - pl: 'Polish', - pt_BR: 'Portuguese (BR)', - ru: 'Russian', - sv: 'Swedish', - tr: 'tr', - zh: 'Chinese', - }, + availableLanguages, defaultLanguage: 'en', translations: translations, silent: true, // stop warnings diff --git a/frontend/src/stores/index.js b/frontend/src/stores/index.js index c4a9f79fc..6bd7239ec 100644 --- a/frontend/src/stores/index.js +++ b/frontend/src/stores/index.js @@ -4,6 +4,7 @@ export * from './global.store' export * from './auth.store' export * from './bus.store' export * from './layout.store' +export * from './language.store' export * from './domains.store' export * from './parameters.store' export * from './providers.store' diff --git a/frontend/src/stores/language.store.js b/frontend/src/stores/language.store.js new file mode 100644 index 000000000..dc6721c84 --- /dev/null +++ b/frontend/src/stores/language.store.js @@ -0,0 +1,34 @@ +import { defineStore } from 'pinia' +import { ref } from 'vue' +import languagesApi from '@/api/languages' + +export const useLanguageStore = defineStore('language', () => { + const availableLanguages = ref([]) + const loaded = ref(false) + + const $reset = async () => { + availableLanguages.value = [] + loaded.value = false + } + + const getLanguages = async () => { + const resp = await languagesApi.getAll() + availableLanguages.value = resp.data + loaded.value = true + } + + const getLanguageLabel = (languageCode) => { + const language = availableLanguages.value.find( + (item) => item.code === languageCode + ) + return language ? language.label : languageCode + } + + return { + availableLanguages, + getLanguages, + getLanguageLabel, + loaded, + $reset, + } +}) From 410ccb45097c8d06228b4697ca8faf701bc3323b Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Wed, 5 Nov 2025 12:05:12 +0100 Subject: [PATCH 2/2] Ensure profile form gets validated too --- frontend/src/components/admin/identities/AccountEditForm.vue | 2 ++ 1 file changed, 2 insertions(+) diff --git a/frontend/src/components/admin/identities/AccountEditForm.vue b/frontend/src/components/admin/identities/AccountEditForm.vue index 8086ccc71..6ea171106 100644 --- a/frontend/src/components/admin/identities/AccountEditForm.vue +++ b/frontend/src/components/admin/identities/AccountEditForm.vue @@ -281,12 +281,14 @@ const generalForm = ref() const mailboxForm = ref() const aliasForm = ref() const resourcesForm = ref() +const profileForm = ref() //formMap const formMap = computed(() => { const map = { roleForm: roleForm, generalForm: generalForm, + profileForm: profileForm, } if (usernameIsEmail.value) { map.aliasForm = aliasForm