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 @@
@@ -12,15 +21,23 @@ import InputText from 'primevue/inputtext'
diff --git a/frontend/src/views/__test__/FormView.spec.ts b/frontend/src/views/__test__/FormView.spec.ts
new file mode 100644
index 0000000..f57a700
--- /dev/null
+++ b/frontend/src/views/__test__/FormView.spec.ts
@@ -0,0 +1,11 @@
+import { describe, it, expect } from 'vitest'
+
+import { mount } from '@vue/test-utils'
+import FormView from '../FormView.vue'
+
+describe('FormView', () => {
+ it('renders properly', () => {
+ const wrapper = mount(FormView)
+ expect(wrapper.text()).toContain('Synchronization of datasets between platforms')
+ })
+})
diff --git a/frontend/vitest.config.ts b/frontend/vitest.config.ts
index c328717..39918a5 100644
--- a/frontend/vitest.config.ts
+++ b/frontend/vitest.config.ts
@@ -9,6 +9,7 @@ export default mergeConfig(
environment: 'jsdom',
exclude: [...configDefaults.exclude, 'e2e/**'],
root: fileURLToPath(new URL('./', import.meta.url)),
+ setupFiles: './src/tests/setup.ts',
},
}),
)