diff --git a/frontend/index.html b/frontend/index.html index 9e5fc8f..9d30802 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -1,9 +1,9 @@ - + - - - + + + Vite App diff --git a/frontend/package-lock.json b/frontend/package-lock.json index c440d98..89c3d1d 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -11,6 +11,8 @@ "@primevue/forms": "^4.2.5", "@primevue/themes": "^4.2.5", "pinia": "^2.3.0", + "primeicons": "^7.0.0", + "primelocale": "^1.5.0", "primevue": "^4.2.5", "vue": "^3.5.13", "vue-i18n": "^10.0.5", @@ -5396,6 +5398,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/primeicons": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/primeicons/-/primeicons-7.0.0.tgz", + "integrity": "sha512-jK3Et9UzwzTsd6tzl2RmwrVY/b8raJ3QZLzoDACj+oTJ0oX7L9Hy+XnVwgo4QVKlKpnP/Ur13SXV/pVh4LzaDw==", + "license": "MIT" + }, + "node_modules/primelocale": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/primelocale/-/primelocale-1.5.0.tgz", + "integrity": "sha512-d5rk7R0D4WfoPu/5+uADxxwv12oCjakiwLDMQIYnHx7GxUe39EO1HYCsDjxY8ANxIkvlKIvE2Vk2hYshQxfWWg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0", + "npm": ">=6.0.0" + } + }, "node_modules/primevue": { "version": "4.2.5", "resolved": "https://registry.npmjs.org/primevue/-/primevue-4.2.5.tgz", diff --git a/frontend/package.json b/frontend/package.json index 86d36a1..3d8849e 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -18,6 +18,8 @@ "@primevue/forms": "^4.2.5", "@primevue/themes": "^4.2.5", "pinia": "^2.3.0", + "primeicons": "^7.0.0", + "primelocale": "^1.5.0", "primevue": "^4.2.5", "vue": "^3.5.13", "vue-i18n": "^10.0.5", diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 31c7685..613fac0 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -1,17 +1,5 @@ - + diff --git a/frontend/src/layouts/BaseLayout.vue b/frontend/src/layouts/BaseLayout.vue new file mode 100644 index 0000000..cc04ab9 --- /dev/null +++ b/frontend/src/layouts/BaseLayout.vue @@ -0,0 +1,25 @@ + + + diff --git a/frontend/src/locales/fr.json b/frontend/src/locales/fr.json index b3647e7..79c425a 100644 --- a/frontend/src/locales/fr.json +++ b/frontend/src/locales/fr.json @@ -1,7 +1,12 @@ { - "Source dataset": "Jeux de données source", + "Source dataset": "Jeu de données source", "Source layer": "Couche source", "Target platform": "Plateforme destination", "Synchronize": "Synchroniser", - "Synchronization of datasets between platforms": "Synchronisation de jeux de données entre plateformes" + "Synchronization of datasets between platforms": "Synchronisation de jeux de données entre plateformes", + "Operations log": "Journal des opérations", + "User guide": "Guide d'utilisation", + "Metadata": "Métadonnées", + "Layers": "Couches", + "Styles": "Styles" } diff --git a/frontend/src/main.ts b/frontend/src/main.ts index b309a43..8a79249 100644 --- a/frontend/src/main.ts +++ b/frontend/src/main.ts @@ -1,12 +1,15 @@ import Aura from '@primevue/themes/aura' import { createPinia } from 'pinia' -import PrimeVue from 'primevue/config' -import { createApp } from 'vue' +import PrimeVue, { usePrimeVue, type PrimeVueLocaleOptions } from 'primevue/config' +import { createApp, watch } from 'vue' import App from './App.vue' import './assets/main.css' import router from './router' import { createI18n } from 'vue-i18n' import frMessages from './locales/fr.json' +import primeEnMessages from 'primelocale/en.json' +import primeFrMessages from 'primelocale/fr.json' +import 'primeicons/primeicons.css' function detectBrowserLanguage() { const availableLocales = ['en', 'fr'] @@ -29,6 +32,12 @@ const app = createApp(App) app.use(createPinia()) app.use(router) app.use(i18n) + +const primeLocales = { + en: primeEnMessages.en as unknown as PrimeVueLocaleOptions, + fr: primeFrMessages.fr as unknown as PrimeVueLocaleOptions, +} + app.use(PrimeVue, { theme: { preset: Aura, @@ -39,6 +48,15 @@ app.use(PrimeVue, { }, }, }, + locale: primeLocales[i18n.global.locale], }) +watch( + () => i18n.global.locale, // Observe la langue actuelle de Vue I18n + (newLocale) => { + const primevue = usePrimeVue() + primevue.config.locale = primeLocales[newLocale] || primeLocales.en + }, +) + app.mount('#app') diff --git a/frontend/src/router/index.ts b/frontend/src/router/index.ts index 48f8631..f12b8ee 100644 --- a/frontend/src/router/index.ts +++ b/frontend/src/router/index.ts @@ -1,21 +1,36 @@ import { createRouter, createWebHistory } from 'vue-router' import FormView from '../views/FormView.vue' +import BaseLayout from '@/layouts/BaseLayout.vue' const router = createRouter({ history: createWebHistory(import.meta.env.BASE_URL), routes: [ { path: '/', - name: 'home', - component: FormView, - }, - { - path: '/about', - name: 'about', - // route level code-splitting - // this generates a separate chunk (About.[hash].js) for this route - // which is lazy-loaded when the route is visited. - component: () => import('../views/AboutView.vue'), + component: BaseLayout, + children: [ + { + path: '', + redirect() { + return { + name: 'synchronize', + } + }, + }, + { + path: 'synchronize', + name: 'synchronize', + component: FormView, + }, + { + path: 'about', + name: 'about', + // route level code-splitting + // this generates a separate chunk (About.[hash].js) for this route + // which is lazy-loaded when the route is visited. + component: () => import('../views/AboutView.vue'), + }, + ], }, ], }) diff --git a/frontend/src/tests/setup.ts b/frontend/src/tests/setup.ts new file mode 100644 index 0000000..dbbdc16 --- /dev/null +++ b/frontend/src/tests/setup.ts @@ -0,0 +1,8 @@ +import { config } from '@vue/test-utils' +import PrimeVue from 'primevue/config' + +config.global.mocks = { + $t: (key: string) => key, +} + +config.global.plugins = [PrimeVue] diff --git a/frontend/src/views/FormView.vue b/frontend/src/views/FormView.vue index aad5ba7..94112a9 100644 --- a/frontend/src/views/FormView.vue +++ b/frontend/src/views/FormView.vue @@ -1,7 +1,16 @@