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 @@
-
+