From 775e50ed9258bb70a6b95418ab3127b94ecf3031 Mon Sep 17 00:00:00 2001 From: latin-panda <66472237+latin-panda@users.noreply.github.com> Date: Fri, 13 Mar 2026 01:21:47 +0700 Subject: [PATCH 01/30] translate primevue components --- package.json | 1 + .../fixtures/date-and-time/date-and-time.xml | 2 +- .../web-forms/src/components/OdkWebForm.vue | 6 + .../form-elements/input/InputDate.vue | 18 ++- .../src/components/form-layout/FormHeader.vue | 5 +- .../src/lib/services/localeService.ts | 97 +++++++++++++++ .../components/form-layout/FormHeader.test.ts | 4 + .../tests/services/localeService.test.ts | 113 ++++++++++++++++++ .../xforms-engine/src/client/FormLanguage.ts | 2 +- .../lib/reactivity/createTranslationState.ts | 32 ++++- yarn.lock | 8 ++ 11 files changed, 279 insertions(+), 9 deletions(-) create mode 100644 packages/web-forms/src/lib/services/localeService.ts create mode 100644 packages/web-forms/tests/services/localeService.test.ts diff --git a/package.json b/package.json index e63dc6bb8..38da0cf49 100644 --- a/package.json +++ b/package.json @@ -64,6 +64,7 @@ "organize-imports-cli": "^0.10.0", "playwright": "^1.58.2", "prettier": "^3.6.2", + "primelocale": "^2.3.1", "rimraf": "^6.1.3", "turbo": "^2.6.1", "typescript": "~5.9.3", diff --git a/packages/common/src/fixtures/date-and-time/date-and-time.xml b/packages/common/src/fixtures/date-and-time/date-and-time.xml index aa9509975..345ff213e 100644 --- a/packages/common/src/fixtures/date-and-time/date-and-time.xml +++ b/packages/common/src/fixtures/date-and-time/date-and-time.xml @@ -24,7 +24,7 @@ What time is your first meal? - + Quand allez-vous remplir ce questionnaire? diff --git a/packages/web-forms/src/components/OdkWebForm.vue b/packages/web-forms/src/components/OdkWebForm.vue index 0a9db3ad4..ac14d0c76 100644 --- a/packages/web-forms/src/components/OdkWebForm.vue +++ b/packages/web-forms/src/components/OdkWebForm.vue @@ -16,6 +16,7 @@ import { loadFormState } from '@/lib/init/load-form-state'; import type { EditInstanceOptions, FormOptions } from '@/lib/init/load-form-state.ts'; import { updateSubmittedFormState } from '@/lib/init/update-submitted-form-state.ts'; import { geolocationService } from '@/lib/services/geolocationService.ts'; +import { localeService } from '@/lib/services/localeService.ts'; import type { HostSubmissionResultCallback, OptionalAwaitableHostSubmissionResult, @@ -30,6 +31,7 @@ import type { } from '@getodk/xforms-engine'; import Button from 'primevue/button'; import Card from 'primevue/card'; +import { usePrimeVue } from 'primevue/config'; import Message from 'primevue/message'; import { computed, @@ -66,6 +68,7 @@ export interface OdkWebFormsProps { } const props = defineProps(); +const primevue = usePrimeVue(); const hostSubmissionResultCallbackFactory = ( currentState: FormStateSuccessResult @@ -204,6 +207,9 @@ watch( () => state.value, (newState) => { isFormEditMode.value = newState.instance?.mode === 'edit'; + if (newState.root) { + localeService.init(newState.root, primevue.config); + } }, { immediate: true } ); diff --git a/packages/web-forms/src/components/form-elements/input/InputDate.vue b/packages/web-forms/src/components/form-elements/input/InputDate.vue index e2ab19162..c967a3807 100644 --- a/packages/web-forms/src/components/form-elements/input/InputDate.vue +++ b/packages/web-forms/src/components/form-elements/input/InputDate.vue @@ -1,14 +1,16 @@