@intlayer/docs 7.3.10 → 7.3.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/generated/docs.entry.cjs +19 -0
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +19 -0
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/types/generated/docs.entry.d.ts +1 -0
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/docs/ar/intlayer_with_nuxt.md +305 -421
- package/docs/ar/intlayer_with_react_router_v7.md +33 -4
- package/docs/ar/intlayer_with_react_router_v7_fs_routes.md +516 -0
- package/docs/ar/intlayer_with_tanstack.md +2 -12
- package/docs/ar/intlayer_with_vite+vue.md +1 -0
- package/docs/de/intlayer_with_nuxt.md +296 -394
- package/docs/de/intlayer_with_react_router_v7.md +33 -4
- package/docs/de/intlayer_with_react_router_v7_fs_routes.md +573 -0
- package/docs/de/intlayer_with_tanstack.md +1 -0
- package/docs/de/intlayer_with_vite+vue.md +1 -0
- package/docs/en/intlayer_with_nuxt.md +242 -321
- package/docs/en/intlayer_with_react_router_v7.md +24 -0
- package/docs/en/intlayer_with_react_router_v7_fs_routes.md +570 -0
- package/docs/en/intlayer_with_tanstack.md +2 -12
- package/docs/en/intlayer_with_vite+vue.md +49 -48
- package/docs/en-GB/intlayer_with_nuxt.md +262 -358
- package/docs/en-GB/intlayer_with_react_router_v7.md +33 -4
- package/docs/en-GB/intlayer_with_react_router_v7_fs_routes.md +513 -0
- package/docs/en-GB/intlayer_with_tanstack.md +2 -12
- package/docs/en-GB/intlayer_with_vite+vue.md +1 -0
- package/docs/es/intlayer_with_nuxt.md +284 -375
- package/docs/es/intlayer_with_react_router_v7.md +33 -4
- package/docs/es/intlayer_with_react_router_v7_fs_routes.md +575 -0
- package/docs/es/intlayer_with_tanstack.md +1 -0
- package/docs/es/intlayer_with_vite+vue.md +1 -2
- package/docs/fr/intlayer_with_nuxt.md +288 -387
- package/docs/fr/intlayer_with_react_router_v7.md +34 -5
- package/docs/fr/intlayer_with_react_router_v7_fs_routes.md +574 -0
- package/docs/fr/intlayer_with_tanstack.md +1 -0
- package/docs/fr/intlayer_with_vite+vue.md +1 -0
- package/docs/hi/intlayer_with_nuxt.md +318 -434
- package/docs/hi/intlayer_with_react_router_v7.md +33 -4
- package/docs/hi/intlayer_with_react_router_v7_fs_routes.md +518 -0
- package/docs/hi/intlayer_with_tanstack.md +2 -12
- package/docs/hi/intlayer_with_vite+vue.md +1 -0
- package/docs/id/intlayer_with_nuxt.md +275 -376
- package/docs/id/intlayer_with_react_router_v7.md +29 -4
- package/docs/id/intlayer_with_react_router_v7_fs_routes.md +521 -0
- package/docs/id/intlayer_with_tanstack.md +2 -12
- package/docs/id/intlayer_with_vite+vue.md +1 -0
- package/docs/it/intlayer_with_nuxt.md +312 -408
- package/docs/it/intlayer_with_react_router_v7.md +33 -4
- package/docs/it/intlayer_with_react_router_v7_fs_routes.md +574 -0
- package/docs/it/intlayer_with_tanstack.md +1 -0
- package/docs/ja/intlayer_with_nuxt.md +319 -414
- package/docs/ja/intlayer_with_react_router_v7.md +33 -4
- package/docs/ja/intlayer_with_react_router_v7_fs_routes.md +574 -0
- package/docs/ja/intlayer_with_tanstack.md +2 -12
- package/docs/ja/intlayer_with_vite+vue.md +1 -0
- package/docs/ko/intlayer_with_nuxt.md +307 -406
- package/docs/ko/intlayer_with_react_router_v7.md +33 -4
- package/docs/ko/intlayer_with_react_router_v7_fs_routes.md +515 -0
- package/docs/ko/intlayer_with_tanstack.md +2 -12
- package/docs/ko/intlayer_with_vite+vue.md +1 -0
- package/docs/pl/intlayer_with_nuxt.md +282 -457
- package/docs/pl/intlayer_with_react_router_v7.md +32 -5
- package/docs/pl/intlayer_with_react_router_v7_fs_routes.md +615 -0
- package/docs/pl/intlayer_with_tanstack.md +2 -12
- package/docs/pl/intlayer_with_vite+vue.md +1 -0
- package/docs/pt/intlayer_with_nuxt.md +288 -403
- package/docs/pt/intlayer_with_react_router_v7.md +28 -0
- package/docs/pt/intlayer_with_tanstack.md +1 -0
- package/docs/ru/intlayer_with_nuxt.md +300 -410
- package/docs/ru/intlayer_with_react_router_v7.md +33 -4
- package/docs/ru/intlayer_with_react_router_v7_fs_routes.md +574 -0
- package/docs/ru/intlayer_with_tanstack.md +1 -0
- package/docs/ru/intlayer_with_vite+vue.md +1 -0
- package/docs/tr/intlayer_with_nuxt.md +327 -392
- package/docs/tr/intlayer_with_react_router_v7.md +33 -4
- package/docs/tr/intlayer_with_react_router_v7_fs_routes.md +572 -0
- package/docs/tr/intlayer_with_tanstack.md +2 -12
- package/docs/tr/intlayer_with_vite+vue.md +1 -0
- package/docs/vi/intlayer_with_nuxt.md +282 -399
- package/docs/vi/intlayer_with_react_router_v7.md +29 -4
- package/docs/vi/intlayer_with_react_router_v7_fs_routes.md +523 -0
- package/docs/vi/intlayer_with_tanstack.md +2 -12
- package/docs/vi/intlayer_with_vite+vue.md +1 -0
- package/docs/zh/intlayer_with_nuxt.md +311 -444
- package/docs/zh/intlayer_with_react_router_v7.md +33 -4
- package/docs/zh/intlayer_with_react_router_v7_fs_routes.md +516 -0
- package/docs/zh/intlayer_with_tanstack.md +2 -12
- package/docs/zh/intlayer_with_vite+vue.md +1 -0
- package/package.json +6 -6
- package/src/generated/docs.entry.ts +19 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-06-18
|
|
3
|
-
updatedAt: 2025-
|
|
4
|
-
title: Comment traduire votre Nuxt
|
|
3
|
+
updatedAt: 2025-12-07
|
|
4
|
+
title: Comment traduire votre application Nuxt et Vue – guide i18n 2025
|
|
5
5
|
description: Découvrez comment rendre votre site Nuxt et Vue multilingue. Suivez la documentation pour internationaliser (i18n) et traduire votre site.
|
|
6
6
|
keywords:
|
|
7
7
|
- Internationalisation
|
|
@@ -14,16 +14,22 @@ slugs:
|
|
|
14
14
|
- doc
|
|
15
15
|
- environment
|
|
16
16
|
- nuxt-and-vue
|
|
17
|
-
applicationTemplate: https://github.com/aymericzip/intlayer-nuxt-template
|
|
17
|
+
applicationTemplate: https://github.com/aymericzip/intlayer-nuxt-4-template
|
|
18
|
+
youtubeVideo: https://www.youtube.com/watch?v=IE3XWkZ6a5U
|
|
18
19
|
history:
|
|
20
|
+
- version: 7.3.11
|
|
21
|
+
date: 2025-12-07
|
|
22
|
+
changes: Mise à jour de LocaleSwitcher, SEO, métadonnées
|
|
19
23
|
- version: 5.5.10
|
|
20
24
|
date: 2025-06-29
|
|
21
25
|
changes: Historique initial
|
|
22
26
|
---
|
|
23
27
|
|
|
24
|
-
#
|
|
28
|
+
# Traduisez votre site Nuxt et Vue avec Intlayer | Internationalisation (i18n)
|
|
25
29
|
|
|
26
|
-
|
|
30
|
+
## Table des matières
|
|
31
|
+
|
|
32
|
+
<TOC/>
|
|
27
33
|
|
|
28
34
|
## Qu'est-ce qu'Intlayer ?
|
|
29
35
|
|
|
@@ -34,14 +40,43 @@ Avec Intlayer, vous pouvez :
|
|
|
34
40
|
- **Gérer facilement les traductions** en utilisant des dictionnaires déclaratifs au niveau des composants.
|
|
35
41
|
- **Localiser dynamiquement les métadonnées**, les routes et le contenu.
|
|
36
42
|
- **Assurer la prise en charge de TypeScript** avec des types générés automatiquement, améliorant l'autocomplétion et la détection d'erreurs.
|
|
37
|
-
- **Bénéficier de fonctionnalités avancées**, comme la détection et le changement dynamique de la
|
|
43
|
+
- **Bénéficier de fonctionnalités avancées**, comme la détection et le changement dynamique de la locale.
|
|
38
44
|
|
|
39
45
|
---
|
|
40
46
|
|
|
41
47
|
## Guide étape par étape pour configurer Intlayer dans une application Nuxt
|
|
42
48
|
|
|
49
|
+
<iframe
|
|
50
|
+
src="https://stackblitz.com/github/aymericzip/intlayer-nuxt-4-template?embed=1&ctl=1&file=intlayer.config.ts"
|
|
51
|
+
className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
|
|
52
|
+
title="Démo CodeSandbox - Comment internationaliser votre application avec Intlayer"
|
|
53
|
+
sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
|
|
54
|
+
loading="lazy"
|
|
55
|
+
/>
|
|
56
|
+
|
|
43
57
|
### Étape 1 : Installer les dépendances
|
|
44
58
|
|
|
59
|
+
<Tab defaultTab="video">
|
|
60
|
+
<TabItem label="Vidéo" value="video">
|
|
61
|
+
|
|
62
|
+
<iframe title="Comment traduire votre application Nuxt et Vue avec Intlayer ? Découvrez Intlayer" class="m-auto aspect-[16/9] w-full overflow-hidden rounded-lg border-0" allow="autoplay; gyroscope;" loading="lazy" width="1080" height="auto" src="https://www.youtube.com/embed/IE3XWkZ6a5U?autoplay=0&origin=http://intlayer.org&controls=0&rel=1"/>
|
|
63
|
+
|
|
64
|
+
</TabItem>
|
|
65
|
+
<TabItem label="Code" value="code">
|
|
66
|
+
|
|
67
|
+
<iframe
|
|
68
|
+
src="https://stackblitz.com/github/aymericzip/intlayer-nuxt-4-template?embed=1&ctl=1&file=intlayer.config.ts"
|
|
69
|
+
className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
|
|
70
|
+
title="Démo CodeSandbox - Comment internationaliser votre application avec Intlayer"
|
|
71
|
+
sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
|
|
72
|
+
loading="lazy"
|
|
73
|
+
/>
|
|
74
|
+
|
|
75
|
+
</TabItem>
|
|
76
|
+
</Tab>
|
|
77
|
+
|
|
78
|
+
Voir le [Modèle d'application](https://github.com/aymericzip/intlayer-nuxt-4-template) sur GitHub.
|
|
79
|
+
|
|
45
80
|
Installez les paquets nécessaires avec npm :
|
|
46
81
|
|
|
47
82
|
```bash packageManager="npm"
|
|
@@ -61,13 +96,13 @@ yarn add --save-dev nuxt-intlayer
|
|
|
61
96
|
|
|
62
97
|
- **intlayer**
|
|
63
98
|
|
|
64
|
-
Le
|
|
99
|
+
Le package principal qui fournit des outils d'internationalisation pour la gestion de la configuration, la traduction, la [déclaration de contenu](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/dictionary/content_file.md), la transpilation, et les [commandes CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/cli/index.md).
|
|
65
100
|
|
|
66
101
|
- **vue-intlayer**
|
|
67
|
-
Le
|
|
102
|
+
Le package qui intègre Intlayer avec l'application Vue. Il fournit les composables pour les composants Vue.
|
|
68
103
|
|
|
69
104
|
- **nuxt-intlayer**
|
|
70
|
-
Le module Nuxt qui intègre Intlayer avec les applications Nuxt. Il fournit une configuration automatique, un middleware pour la détection de la
|
|
105
|
+
Le module Nuxt qui intègre Intlayer avec les applications Nuxt. Il fournit une configuration automatique, un middleware pour la détection de la locale, la gestion des cookies, et la redirection des URL.
|
|
71
106
|
|
|
72
107
|
### Étape 2 : Configuration de votre projet
|
|
73
108
|
|
|
@@ -82,13 +117,10 @@ const config: IntlayerConfig = {
|
|
|
82
117
|
Locales.ENGLISH,
|
|
83
118
|
Locales.FRENCH,
|
|
84
119
|
Locales.SPANISH,
|
|
85
|
-
// Vos autres
|
|
120
|
+
// Vos autres locales
|
|
86
121
|
],
|
|
87
122
|
defaultLocale: Locales.ENGLISH,
|
|
88
123
|
},
|
|
89
|
-
content: {
|
|
90
|
-
contentDir: ["."], // Parce que par défaut Intlayer surveillera les fichiers de déclaration de contenu depuis le répertoire `./src`
|
|
91
|
-
},
|
|
92
124
|
};
|
|
93
125
|
|
|
94
126
|
export default config;
|
|
@@ -98,20 +130,16 @@ export default config;
|
|
|
98
130
|
import { Locales } from "intlayer";
|
|
99
131
|
|
|
100
132
|
/** @type {import('intlayer').IntlayerConfig} */
|
|
101
|
-
// Configuration de l'internationalisation et du contenu
|
|
102
133
|
const config = {
|
|
103
134
|
internationalization: {
|
|
104
135
|
locales: [
|
|
105
136
|
Locales.ENGLISH,
|
|
106
137
|
Locales.FRENCH,
|
|
107
138
|
Locales.SPANISH,
|
|
108
|
-
// Vos autres
|
|
139
|
+
// Vos autres locales
|
|
109
140
|
],
|
|
110
141
|
defaultLocale: Locales.ENGLISH,
|
|
111
142
|
},
|
|
112
|
-
content: {
|
|
113
|
-
contentDir: ["."], // Répertoire de contenu à surveiller
|
|
114
|
-
},
|
|
115
143
|
};
|
|
116
144
|
|
|
117
145
|
export default config;
|
|
@@ -121,26 +149,22 @@ export default config;
|
|
|
121
149
|
const { Locales } = require("intlayer");
|
|
122
150
|
|
|
123
151
|
/** @type {import('intlayer').IntlayerConfig} */
|
|
124
|
-
// Configuration de l'internationalisation et du contenu
|
|
125
152
|
const config = {
|
|
126
153
|
internationalization: {
|
|
127
154
|
locales: [
|
|
128
155
|
Locales.ENGLISH,
|
|
129
156
|
Locales.FRENCH,
|
|
130
157
|
Locales.SPANISH,
|
|
131
|
-
// Vos autres
|
|
158
|
+
// Vos autres locales
|
|
132
159
|
],
|
|
133
160
|
defaultLocale: Locales.ENGLISH,
|
|
134
161
|
},
|
|
135
|
-
content: {
|
|
136
|
-
contentDir: ["."],
|
|
137
|
-
},
|
|
138
162
|
};
|
|
139
163
|
|
|
140
164
|
module.exports = config;
|
|
141
165
|
```
|
|
142
166
|
|
|
143
|
-
> Grâce à ce fichier de configuration, vous pouvez configurer des URLs localisées, la redirection via middleware, les noms des cookies, l'emplacement et l'extension de vos déclarations de contenu, désactiver les logs
|
|
167
|
+
> Grâce à ce fichier de configuration, vous pouvez configurer des URLs localisées, la redirection via middleware, les noms des cookies, l'emplacement et l'extension de vos déclarations de contenu, désactiver les logs Intlayer dans la console, et bien plus encore. Pour une liste complète des paramètres disponibles, consultez la [documentation de configuration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/configuration.md).
|
|
144
168
|
|
|
145
169
|
### Étape 3 : Intégrer Intlayer dans votre configuration Nuxt
|
|
146
170
|
|
|
@@ -161,221 +185,36 @@ export default defineNuxtConfig({
|
|
|
161
185
|
|
|
162
186
|
Créez et gérez vos déclarations de contenu pour stocker les traductions :
|
|
163
187
|
|
|
164
|
-
```tsx fileName="
|
|
165
|
-
import {
|
|
188
|
+
```tsx fileName="content/home-page.content.ts" contentDeclarationFormat="typescript"
|
|
189
|
+
import { type Dictionary, t } from "intlayer";
|
|
166
190
|
|
|
167
|
-
const
|
|
168
|
-
key: "
|
|
191
|
+
const content = {
|
|
192
|
+
key: "home-page",
|
|
169
193
|
content: {
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
es: "Edita <code>components/HelloWorld.vue</code> y guarda para probar HMR",
|
|
175
|
-
}),
|
|
176
|
-
checkOut: t({ en: "Check out ", fr: "Vérifiez ", es: "Compruebe " }),
|
|
177
|
-
nuxtIntlayer: t({
|
|
178
|
-
en: "Nuxt Intlayer documentation",
|
|
179
|
-
fr: "Documentation de Nuxt Intlayer",
|
|
180
|
-
es: "Documentación de Nuxt Intlayer",
|
|
181
|
-
}),
|
|
182
|
-
learnMore: t({
|
|
183
|
-
en: "Learn more about Nuxt in the ",
|
|
184
|
-
fr: "En savoir plus sur Nuxt dans la ",
|
|
185
|
-
es: "Aprenda más sobre Nuxt en la ",
|
|
194
|
+
title: t({
|
|
195
|
+
en: "Hello world",
|
|
196
|
+
fr: "Bonjour le monde",
|
|
197
|
+
es: "Hola mundo",
|
|
186
198
|
}),
|
|
187
|
-
|
|
188
|
-
en: "
|
|
189
|
-
fr: "
|
|
190
|
-
es: "
|
|
199
|
+
metaTitle: t({
|
|
200
|
+
en: "Welcome | My Application",
|
|
201
|
+
fr: "Bienvenue | Mon Application",
|
|
202
|
+
es: "Bienvenido | Mi Aplicación",
|
|
191
203
|
}),
|
|
192
|
-
|
|
193
|
-
en: "
|
|
194
|
-
fr: "
|
|
195
|
-
es: "
|
|
204
|
+
metaDescription: t({
|
|
205
|
+
en: "Discover your multilingual Nuxt app homepage powered by Intlayer.",
|
|
206
|
+
fr: "Découvrez la page d'accueil multilingue de votre application Nuxt propulsée par Intlayer.",
|
|
207
|
+
es: "Descubre la página de inicio multilingüe de tu aplicación Nuxt impulsada por Intlayer.",
|
|
196
208
|
}),
|
|
197
209
|
},
|
|
198
210
|
} satisfies Dictionary;
|
|
199
211
|
|
|
200
|
-
export default
|
|
201
|
-
fr: "Cliquez sur le logo Nuxt pour en savoir plus",
|
|
202
|
-
es: "Haga clic en el logotipo de Nuxt para obtener más información",
|
|
203
|
-
}),
|
|
204
|
-
},
|
|
205
|
-
} satisfies Dictionary;
|
|
206
|
-
|
|
207
|
-
export default helloWorldContent;
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
```javascript fileName="components/helloWorld.content.mjs" contentDeclarationFormat="esm"
|
|
211
|
-
import { t } from "intlayer";
|
|
212
|
-
|
|
213
|
-
/** @type {import('intlayer').Dictionary} */
|
|
214
|
-
const helloWorldContent = {
|
|
215
|
-
key: "helloworld",
|
|
216
|
-
content: {
|
|
217
|
-
count: t({ en: "count is ", fr: "le compte est ", es: "el recuento es " }),
|
|
218
|
-
edit: t({
|
|
219
|
-
en: "Edit <code>components/HelloWorld.vue</code> and save to test HMR",
|
|
220
|
-
fr: "Éditez <code>components/HelloWorld.vue</code> et enregistrez pour tester HMR",
|
|
221
|
-
es: "Edita <code>components/HelloWorld.vue</code> y guarda para probar HMR",
|
|
222
|
-
}),
|
|
223
|
-
checkOut: t({ en: "Check out ", fr: "Vérifiez ", es: "Compruebe " }),
|
|
224
|
-
nuxtIntlayer: t({
|
|
225
|
-
en: "Nuxt Intlayer documentation",
|
|
226
|
-
fr: "Documentation de Nuxt Intlayer",
|
|
227
|
-
es: "Documentación de Nuxt Intlayer",
|
|
228
|
-
}),
|
|
229
|
-
learnMore: t({
|
|
230
|
-
en: "Learn more about Nuxt in the ",
|
|
231
|
-
fr: "En savoir plus sur Nuxt dans la ",
|
|
232
|
-
es: "Aprenda más sobre Nuxt en la ",
|
|
233
|
-
}),
|
|
234
|
-
nuxtDocs: t({
|
|
235
|
-
en: "Nuxt Documentation",
|
|
236
|
-
fr: "Documentation Nuxt",
|
|
237
|
-
es: "Documentación de Nuxt",
|
|
238
|
-
}),
|
|
239
|
-
readTheDocs: t({
|
|
240
|
-
en: "Click on the Nuxt logo to learn more",
|
|
241
|
-
fr: "Cliquez sur le logo Nuxt pour en savoir plus",
|
|
242
|
-
es: "Haga clic en el logotipo de Nuxt para obtener más información",
|
|
243
|
-
}),
|
|
244
|
-
},
|
|
245
|
-
};
|
|
246
|
-
|
|
247
|
-
export default helloWorldContent;
|
|
248
|
-
```
|
|
249
|
-
|
|
250
|
-
```javascript fileName="components/helloWorld.content.cjs" contentDeclarationFormat="commonjs"
|
|
251
|
-
const { t } = require("intlayer");
|
|
252
|
-
|
|
253
|
-
/** @type {import('intlayer').Dictionary} */
|
|
254
|
-
const helloWorldContent = {
|
|
255
|
-
key: "helloworld",
|
|
256
|
-
content: {
|
|
257
|
-
count: t({ en: "count is ", fr: "le compte est ", es: "el recuento es " }),
|
|
258
|
-
edit: t({
|
|
259
|
-
en: "Edit <code>components/HelloWorld.vue</code> and save to test HMR",
|
|
260
|
-
fr: "Éditez <code>components/HelloWorld.vue</code> et enregistrez pour tester HMR",
|
|
261
|
-
es: "Edita <code>components/HelloWorld.vue</code> y guarda para probar HMR",
|
|
262
|
-
}),
|
|
263
|
-
checkOut: t({ en: "Check out ", fr: "Vérifiez ", es: "Compruebe " }),
|
|
264
|
-
nuxtIntlayer: t({
|
|
265
|
-
en: "Nuxt Intlayer documentation",
|
|
266
|
-
fr: "Documentation de Nuxt Intlayer",
|
|
267
|
-
es: "Documentación de Nuxt Intlayer",
|
|
268
|
-
}),
|
|
269
|
-
learnMore: t({
|
|
270
|
-
en: "Learn more about Nuxt in the ",
|
|
271
|
-
fr: "En savoir plus sur Nuxt dans la ",
|
|
272
|
-
es: "Aprenda más sobre Nuxt en la ",
|
|
273
|
-
}),
|
|
274
|
-
nuxtDocs: t({
|
|
275
|
-
en: "Nuxt Documentation",
|
|
276
|
-
fr: "Documentation Nuxt",
|
|
277
|
-
es: "Documentación de Nuxt",
|
|
278
|
-
}),
|
|
279
|
-
readTheDocs: t({
|
|
280
|
-
en: "Click on the Nuxt logo to learn more",
|
|
281
|
-
fr: "Cliquez sur le logo Nuxt pour en savoir plus",
|
|
282
|
-
es: "Haga clic en el logotipo de Nuxt para obtener más información",
|
|
283
|
-
}),
|
|
284
|
-
},
|
|
285
|
-
};
|
|
286
|
-
|
|
287
|
-
module.exports = helloWorldContent;
|
|
288
|
-
es: "Documentación de Nuxt Intlayer",
|
|
289
|
-
}),
|
|
290
|
-
learnMore: t({
|
|
291
|
-
en: "Learn more about Nuxt in the ",
|
|
292
|
-
fr: "En savoir plus sur Nuxt dans la ",
|
|
293
|
-
es: "Aprenda más sobre Nuxt en la ",
|
|
294
|
-
}),
|
|
295
|
-
nuxtDocs: t({
|
|
296
|
-
en: "Nuxt Documentation",
|
|
297
|
-
fr: "Documentation Nuxt",
|
|
298
|
-
es: "Documentación de Nuxt",
|
|
299
|
-
}),
|
|
300
|
-
readTheDocs: t({
|
|
301
|
-
en: "Click on the Nuxt logo to learn more",
|
|
302
|
-
fr: "Cliquez sur le logo Nuxt pour en savoir plus",
|
|
303
|
-
es: "Haga clic en el logotipo de Nuxt para obtener más información",
|
|
304
|
-
}),
|
|
305
|
-
},
|
|
306
|
-
};
|
|
307
|
-
|
|
308
|
-
module.exports = helloWorldContent;
|
|
212
|
+
export default content;
|
|
309
213
|
```
|
|
310
214
|
|
|
311
|
-
|
|
312
|
-
{
|
|
313
|
-
"$schema": "https://intlayer.org/schema.json",
|
|
314
|
-
"key": "helloworld",
|
|
315
|
-
"content": {
|
|
316
|
-
"count": {
|
|
317
|
-
"nodeType": "translation",
|
|
318
|
-
"translation": {
|
|
319
|
-
"en": "count is ",
|
|
320
|
-
"fr": "le compte est ",
|
|
321
|
-
"es": "el recuento es "
|
|
322
|
-
}
|
|
323
|
-
},
|
|
324
|
-
"edit": {
|
|
325
|
-
"nodeType": "translation",
|
|
326
|
-
"translation": {
|
|
327
|
-
"en": "Edit <code>components/HelloWorld.vue</code> and save to test HMR",
|
|
328
|
-
"fr": "Éditez <code>components/HelloWorld.vue</code> et enregistrez pour tester HMR",
|
|
329
|
-
"es": "Edita <code>components/HelloWorld.vue</code> y guarda para probar HMR"
|
|
330
|
-
}
|
|
331
|
-
},
|
|
332
|
-
"checkOut": {
|
|
333
|
-
"nodeType": "translation",
|
|
334
|
-
"translation": {
|
|
335
|
-
"en": "Check out ",
|
|
336
|
-
"fr": "Vérifiez ",
|
|
337
|
-
"es": "Compruebe "
|
|
338
|
-
}
|
|
339
|
-
},
|
|
340
|
-
"nuxtIntlayer": {
|
|
341
|
-
"nodeType": "translation",
|
|
342
|
-
"translation": {
|
|
343
|
-
"en": "Documentation de Nuxt Intlayer",
|
|
344
|
-
"fr": "Documentation de Nuxt Intlayer",
|
|
345
|
-
"es": "Documentación de Nuxt Intlayer"
|
|
346
|
-
}
|
|
347
|
-
},
|
|
348
|
-
"learnMore": {
|
|
349
|
-
"nodeType": "translation",
|
|
350
|
-
"translation": {
|
|
351
|
-
"en": "En savoir plus sur Nuxt dans la ",
|
|
352
|
-
"fr": "En savoir plus sur Nuxt dans la ",
|
|
353
|
-
"es": "Aprenda más sobre Nuxt en la "
|
|
354
|
-
}
|
|
355
|
-
},
|
|
356
|
-
"nuxtDocs": {
|
|
357
|
-
"nodeType": "translation",
|
|
358
|
-
"translation": {
|
|
359
|
-
"en": "Documentation Nuxt",
|
|
360
|
-
"fr": "Documentation Nuxt",
|
|
361
|
-
"es": "Documentación de Nuxt"
|
|
362
|
-
}
|
|
363
|
-
},
|
|
364
|
-
"readTheDocs": {
|
|
365
|
-
"nodeType": "translation",
|
|
366
|
-
"translation": {
|
|
367
|
-
"en": "Cliquez sur le logo Nuxt pour en savoir plus",
|
|
368
|
-
"fr": "Cliquez sur le logo Nuxt pour en savoir plus",
|
|
369
|
-
"es": "Haga clic en el logotipo de Nuxt para obtener más información"
|
|
370
|
-
}
|
|
371
|
-
}
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
```
|
|
215
|
+
> Vos déclarations de contenu peuvent être définies n'importe où dans votre application tant qu'elles sont incluses dans le répertoire `contentDir` (par défaut, `./src`). Et correspondent à l'extension des fichiers de déclaration de contenu (par défaut, `.content.{json,ts,tsx,js,jsx,mjs,mjx,cjs,cjx}`).
|
|
375
216
|
|
|
376
|
-
>
|
|
377
|
-
|
|
378
|
-
> Pour plus de détails, référez-vous à la [documentation sur la déclaration de contenu](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/dictionary/get_started.md).
|
|
217
|
+
> Pour plus de détails, consultez la [documentation sur la déclaration de contenu](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/dictionary/content_file.md).
|
|
379
218
|
|
|
380
219
|
### Étape 5 : Utilisez Intlayer dans votre code
|
|
381
220
|
|
|
@@ -428,86 +267,76 @@ const countRef = ref(0);
|
|
|
428
267
|
</template>
|
|
429
268
|
```
|
|
430
269
|
|
|
431
|
-
####
|
|
270
|
+
#### Accès au contenu dans Intlayer
|
|
432
271
|
|
|
433
272
|
Intlayer propose différentes API pour accéder à votre contenu :
|
|
434
273
|
|
|
435
|
-
- **Syntaxe basée sur les composants** (recommandée) :
|
|
436
|
-
Utilisez la syntaxe `<myContent
|
|
274
|
+
- **Syntaxe basée sur les composants** (recommandée) :
|
|
275
|
+
Utilisez la syntaxe `<myContent />`, ou `<Component :is="myContent" />` pour rendre le contenu en tant que nœud Intlayer. Cela s'intègre parfaitement avec l'[Éditeur Visuel](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/intlayer_visual_editor.md) et le [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/intlayer_CMS.md).
|
|
437
276
|
|
|
438
|
-
- **Syntaxe basée sur les chaînes** :
|
|
277
|
+
- **Syntaxe basée sur les chaînes** :
|
|
439
278
|
Utilisez `{{ myContent }}` pour afficher le contenu en texte brut, sans support de l'Éditeur Visuel.
|
|
440
279
|
|
|
441
|
-
- **Syntaxe HTML brute** :
|
|
280
|
+
- **Syntaxe HTML brute** :
|
|
442
281
|
Utilisez `<div v-html="myContent" />` pour afficher le contenu en HTML brut, sans support de l'Éditeur Visuel.
|
|
443
282
|
|
|
444
|
-
- **Syntaxe de déstructuration** :
|
|
445
|
-
Le composable `useIntlayer` retourne un Proxy
|
|
446
|
-
- Utilisez `const content = useIntlayer("myContent");` et `{{ content.myContent }}` / `<content.myContent />`.
|
|
447
|
-
- Ou utilisez `const { myContent } = useIntlayer("myContent");` et `{{ myContent}}` / `<myContent/>` pour déstructurer le contenu.
|
|
283
|
+
- **Syntaxe de déstructuration** :
|
|
284
|
+
Le composable `useIntlayer` retourne un Proxy contenant le contenu. Ce proxy peut être déstructuré pour accéder au contenu tout en conservant la réactivité.
|
|
285
|
+
- Utilisez `const content = useIntlayer("myContent");` et `{{ content.myContent }}` / `<content.myContent />`.
|
|
286
|
+
- Ou utilisez `const { myContent } = useIntlayer("myContent");` et `{{ myContent}}` / `<myContent/>` pour déstructurer le contenu.
|
|
448
287
|
|
|
449
288
|
### (Optionnel) Étape 6 : Changer la langue de votre contenu
|
|
450
289
|
|
|
451
290
|
Pour changer la langue de votre contenu, vous pouvez utiliser la fonction `setLocale` fournie par le composable `useLocale`. Cette fonction vous permet de définir la locale de l'application et de mettre à jour le contenu en conséquence.
|
|
452
291
|
|
|
453
|
-
Créez un composant pour basculer entre les langues :
|
|
292
|
+
Créez un composant pour basculer entre les langues en utilisant `NuxtLink`. **Utiliser des liens plutôt que des boutons pour le changement de locale est une bonne pratique pour le SEO et la découvrabilité des pages**, car cela permet aux moteurs de recherche d'explorer et d'indexer toutes les versions localisées de vos pages :
|
|
454
293
|
|
|
455
294
|
```vue fileName="components/LocaleSwitcher.vue"
|
|
456
|
-
<template>
|
|
457
|
-
<div class="locale-switcher">
|
|
458
|
-
<select v-model="selectedLocale" @change="changeLocale">
|
|
459
|
-
<option v-for="loc in availableLocales" :key="loc" :value="loc">
|
|
460
|
-
{{ getLocaleName(loc) }}
|
|
461
|
-
</option>
|
|
462
|
-
</select>
|
|
463
|
-
</div>
|
|
464
|
-
</template>
|
|
465
|
-
|
|
466
295
|
<script setup lang="ts">
|
|
467
|
-
import {
|
|
468
|
-
import { getLocaleName } from "intlayer";
|
|
296
|
+
import { getLocaleName, getLocalizedUrl } from "intlayer";
|
|
469
297
|
import { useLocale } from "vue-intlayer";
|
|
470
298
|
|
|
471
|
-
//
|
|
299
|
+
// Nuxt importe automatiquement useRoute
|
|
300
|
+
const route = useRoute();
|
|
472
301
|
const { locale, availableLocales, setLocale } = useLocale();
|
|
473
|
-
|
|
474
|
-
// Suivre la locale sélectionnée avec un ref
|
|
475
|
-
const selectedLocale = ref(locale.value);
|
|
476
|
-
|
|
477
|
-
// Mettre à jour la locale lorsque la sélection change
|
|
478
|
-
const changeLocale = () => setLocale(selectedLocale.value);
|
|
479
|
-
|
|
480
|
-
// Garder selectedLocale synchronisé avec la locale globale
|
|
481
|
-
watch(
|
|
482
|
-
() => locale.value,
|
|
483
|
-
(newLocale) => {
|
|
484
|
-
selectedLocale.value = newLocale;
|
|
485
|
-
}
|
|
486
|
-
);
|
|
487
302
|
</script>
|
|
303
|
+
|
|
304
|
+
<template>
|
|
305
|
+
<nav class="locale-switcher">
|
|
306
|
+
<NuxtLink
|
|
307
|
+
v-for="localeEl in availableLocales"
|
|
308
|
+
:key="localeEl"
|
|
309
|
+
:to="getLocalizedUrl(route.fullPath, localeEl)"
|
|
310
|
+
class="locale-link"
|
|
311
|
+
:class="{ 'active-locale': localeEl === locale }"
|
|
312
|
+
@click="setLocale(localeEl)"
|
|
313
|
+
>
|
|
314
|
+
{{ getLocaleName(localeEl) }}
|
|
315
|
+
</NuxtLink>
|
|
316
|
+
</nav>
|
|
488
317
|
</template>
|
|
318
|
+
```
|
|
489
319
|
|
|
490
|
-
|
|
491
|
-
.locale-switcher {
|
|
492
|
-
margin: 1rem 0;
|
|
493
|
-
}
|
|
320
|
+
> Utiliser `NuxtLink` avec des attributs `href` appropriés (via `getLocalizedUrl`) garantit que les moteurs de recherche peuvent découvrir toutes les variantes linguistiques de vos pages. Cela est préférable au changement de langue uniquement via JavaScript, que les robots des moteurs de recherche peuvent ne pas suivre.
|
|
494
321
|
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
322
|
+
Ensuite, configurez votre `app.vue` pour utiliser des layouts :
|
|
323
|
+
|
|
324
|
+
```vue fileName="app.vue"
|
|
325
|
+
<template>
|
|
326
|
+
<NuxtLayout>
|
|
327
|
+
<NuxtPage />
|
|
328
|
+
</NuxtLayout>
|
|
329
|
+
</template>
|
|
501
330
|
```
|
|
502
331
|
|
|
503
|
-
|
|
332
|
+
### (Optionnel) Étape 6b : Créer un layout avec navigation
|
|
504
333
|
|
|
505
|
-
|
|
334
|
+
Les layouts Nuxt vous permettent de définir une structure commune pour vos pages. Créez un layout par défaut qui inclut le sélecteur de langue et la navigation :
|
|
335
|
+
|
|
336
|
+
```vue fileName="layouts/default.vue"
|
|
506
337
|
<script setup lang="ts">
|
|
507
|
-
import
|
|
338
|
+
import Links from "~/components/Links.vue";
|
|
508
339
|
import LocaleSwitcher from "~/components/LocaleSwitcher.vue";
|
|
509
|
-
|
|
510
|
-
const content = useIntlayer("app"); // Créez le fichier de déclaration intlayer associé
|
|
511
340
|
</script>
|
|
512
341
|
|
|
513
342
|
<template>
|
|
@@ -516,15 +345,20 @@ const content = useIntlayer("app"); // Créez le fichier de déclaration intlaye
|
|
|
516
345
|
<LocaleSwitcher />
|
|
517
346
|
</header>
|
|
518
347
|
<main>
|
|
519
|
-
<
|
|
348
|
+
<slot />
|
|
520
349
|
</main>
|
|
350
|
+
|
|
351
|
+
<Links href="/">Accueil</Links>
|
|
352
|
+
<Links href="/about">À propos</Links>
|
|
521
353
|
</div>
|
|
522
354
|
</template>
|
|
523
355
|
```
|
|
524
356
|
|
|
525
|
-
|
|
357
|
+
Le composant `Links` (montré ci-dessous) garantit que les liens de navigation internes sont automatiquement localisés.
|
|
358
|
+
|
|
359
|
+
### (Optionnel) Étape 7 : Ajouter le routage localisé à votre application
|
|
526
360
|
|
|
527
|
-
Nuxt gère automatiquement le routage localisé lorsqu'on utilise le module `nuxt-intlayer`. Cela crée des routes pour chaque langue automatiquement en fonction de la structure de votre répertoire
|
|
361
|
+
Nuxt gère automatiquement le routage localisé lorsqu'on utilise le module `nuxt-intlayer`. Cela crée des routes pour chaque langue automatiquement en fonction de la structure de votre répertoire pages.
|
|
528
362
|
|
|
529
363
|
Exemple :
|
|
530
364
|
|
|
@@ -536,214 +370,283 @@ pages/
|
|
|
536
370
|
└── index.vue → /contact, /fr/contact, /es/contact
|
|
537
371
|
```
|
|
538
372
|
|
|
539
|
-
Pour créer
|
|
373
|
+
Pour créer des pages localisées, il suffit de créer vos fichiers Vue dans le répertoire `pages/`. Voici deux exemples de pages :
|
|
374
|
+
|
|
375
|
+
**Page d'accueil (`pages/index.vue`) :**
|
|
376
|
+
|
|
377
|
+
```vue fileName="pages/index.vue"
|
|
378
|
+
<script setup lang="ts">
|
|
379
|
+
import { useIntlayer } from "vue-intlayer";
|
|
380
|
+
|
|
381
|
+
const content = useIntlayer("home-page");
|
|
382
|
+
|
|
383
|
+
useHead({
|
|
384
|
+
title: content.metaTitle.value,
|
|
385
|
+
meta: [
|
|
386
|
+
{
|
|
387
|
+
name: "description",
|
|
388
|
+
content: content.metaDescription.value,
|
|
389
|
+
},
|
|
390
|
+
],
|
|
391
|
+
});
|
|
392
|
+
</script>
|
|
393
|
+
|
|
394
|
+
<template>
|
|
395
|
+
<h1><content.title /></h1>
|
|
396
|
+
</template>
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
**Page À propos (`pages/about.vue`) :**
|
|
540
400
|
|
|
541
401
|
```vue fileName="pages/about.vue"
|
|
542
402
|
<script setup lang="ts">
|
|
543
403
|
import { useIntlayer } from "vue-intlayer";
|
|
544
404
|
|
|
545
|
-
const content = useIntlayer("about");
|
|
405
|
+
const content = useIntlayer("about-page");
|
|
406
|
+
|
|
407
|
+
useHead({
|
|
408
|
+
title: content.metaTitle.raw, // Utiliser .raw pour accéder à la chaîne primitive
|
|
409
|
+
meta: [
|
|
410
|
+
{
|
|
411
|
+
name: "description",
|
|
412
|
+
content: content.metaDescription.raw, // Utilisez .raw pour accéder à la chaîne primitive
|
|
413
|
+
},
|
|
414
|
+
],
|
|
415
|
+
});
|
|
546
416
|
</script>
|
|
547
417
|
|
|
548
418
|
<template>
|
|
549
|
-
<
|
|
550
|
-
<h1>{{ content.title }}</h1>
|
|
551
|
-
<p>{{ content.description }}</p>
|
|
552
|
-
</div>
|
|
419
|
+
<h1><content.title /></h1>
|
|
553
420
|
</template>
|
|
554
421
|
```
|
|
555
422
|
|
|
556
|
-
|
|
423
|
+
> Remarque : `useHead` est importé automatiquement dans Nuxt. Vous pouvez accéder aux valeurs du contenu en utilisant soit `.value` (réactif) soit `.raw` (chaîne primitive) selon vos besoins.
|
|
424
|
+
|
|
425
|
+
Le module `nuxt-intlayer` fera automatiquement :
|
|
557
426
|
|
|
558
|
-
- Détecter la
|
|
559
|
-
- Gérer le changement de
|
|
427
|
+
- Détecter la locale préférée de l'utilisateur
|
|
428
|
+
- Gérer le changement de locale via l'URL
|
|
560
429
|
- Définir l'attribut `<html lang="">` approprié
|
|
561
|
-
- Gérer les cookies de
|
|
430
|
+
- Gérer les cookies de locale
|
|
562
431
|
- Rediriger les utilisateurs vers l'URL localisée appropriée
|
|
563
432
|
|
|
564
433
|
### (Optionnel) Étape 8 : Création d'un composant de lien localisé
|
|
565
434
|
|
|
566
|
-
Pour garantir que la navigation de votre application respecte la
|
|
567
|
-
|
|
568
|
-
```vue fileName="components/LocalizedLink.vue"
|
|
569
|
-
<template>
|
|
570
|
-
<NuxtLink :to="localizedHref" v-bind="$attrs">
|
|
571
|
-
<slot />
|
|
572
|
-
</NuxtLink>
|
|
573
|
-
</template>
|
|
435
|
+
Pour garantir que la navigation de votre application respecte la locale actuelle, vous pouvez créer un composant personnalisé `Links`. Ce composant préfixe automatiquement les URLs internes avec la langue courante, ce qui est essentiel pour le **SEO et la découvrabilité des pages**.
|
|
574
436
|
|
|
437
|
+
```vue fileName="components/Links.vue"
|
|
575
438
|
<script setup lang="ts">
|
|
576
|
-
import { computed } from "vue";
|
|
577
439
|
import { getLocalizedUrl } from "intlayer";
|
|
578
440
|
import { useLocale } from "vue-intlayer";
|
|
579
441
|
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
442
|
+
interface Props {
|
|
443
|
+
href: string;
|
|
444
|
+
locale?: string;
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
const props = defineProps<Props>();
|
|
448
|
+
|
|
449
|
+
const { locale: currentLocale } = useLocale();
|
|
586
450
|
|
|
587
|
-
|
|
451
|
+
// Calculer le chemin final
|
|
452
|
+
const finalPath = computed(() => {
|
|
453
|
+
// 1. Vérifier si le lien est externe
|
|
454
|
+
const isExternal = /^https?:\/\//.test(props.href || "");
|
|
588
455
|
|
|
589
|
-
//
|
|
590
|
-
|
|
456
|
+
// 2. Si externe, retourner tel quel (NuxtLink gère la génération de la balise <a>)
|
|
457
|
+
if (isExternal) return props.href;
|
|
591
458
|
|
|
592
|
-
//
|
|
593
|
-
const
|
|
594
|
-
|
|
595
|
-
);
|
|
459
|
+
// 3. Si le lien est interne, localiser l'URL
|
|
460
|
+
const targetLocale = props.locale || currentLocale.value;
|
|
461
|
+
return getLocalizedUrl(props.href, targetLocale);
|
|
462
|
+
});
|
|
596
463
|
</script>
|
|
464
|
+
|
|
465
|
+
<template>
|
|
466
|
+
<NuxtLink :to="finalPath" v-bind="$attrs">
|
|
467
|
+
<slot />
|
|
468
|
+
</NuxtLink>
|
|
469
|
+
</template>
|
|
597
470
|
```
|
|
598
471
|
|
|
599
472
|
Ensuite, utilisez ce composant dans toute votre application :
|
|
600
473
|
|
|
601
|
-
```vue fileName="
|
|
474
|
+
```vue fileName="layouts/default.vue"
|
|
475
|
+
<script setup lang="ts">
|
|
476
|
+
import Links from "~/components/Links.vue";
|
|
477
|
+
import LocaleSwitcher from "~/components/LocaleSwitcher.vue";
|
|
478
|
+
</script>
|
|
479
|
+
|
|
602
480
|
<template>
|
|
603
481
|
<div>
|
|
604
|
-
<
|
|
605
|
-
|
|
606
|
-
</
|
|
607
|
-
<
|
|
608
|
-
|
|
609
|
-
</
|
|
482
|
+
<header>
|
|
483
|
+
<LocaleSwitcher />
|
|
484
|
+
</header>
|
|
485
|
+
<main>
|
|
486
|
+
<slot />
|
|
487
|
+
</main>
|
|
488
|
+
|
|
489
|
+
<Links href="/">Accueil</Links>
|
|
490
|
+
<Links href="/about">À propos</Links>
|
|
610
491
|
</div>
|
|
611
492
|
</template>
|
|
612
|
-
|
|
613
|
-
<script setup lang="ts">
|
|
614
|
-
import { useIntlayer } from "vue-intlayer";
|
|
615
|
-
import LocalizedLink from "~/components/LocalizedLink.vue";
|
|
616
|
-
|
|
617
|
-
const content = useIntlayer("home");
|
|
618
|
-
</script>
|
|
619
493
|
```
|
|
620
494
|
|
|
495
|
+
> En utilisant `NuxtLink` avec des chemins localisés, vous vous assurez que :
|
|
496
|
+
>
|
|
497
|
+
> - Les moteurs de recherche peuvent explorer et indexer toutes les versions linguistiques de vos pages
|
|
498
|
+
> - Les utilisateurs peuvent partager directement des URLs localisées
|
|
499
|
+
> - L'historique du navigateur fonctionne correctement avec des URLs préfixées par la locale
|
|
500
|
+
|
|
621
501
|
### (Optionnel) Étape 9 : Gérer les métadonnées et le SEO
|
|
622
502
|
|
|
623
|
-
Nuxt offre d'excellentes capacités SEO. Vous pouvez utiliser Intlayer pour gérer les métadonnées localisées :
|
|
503
|
+
Nuxt offre d'excellentes capacités SEO via le composable `useHead` (auto-importé). Vous pouvez utiliser Intlayer pour gérer les métadonnées localisées en utilisant l'accesseur `.raw` ou `.value` pour obtenir la valeur primitive de chaîne :
|
|
624
504
|
|
|
625
505
|
```vue fileName="pages/about.vue"
|
|
626
506
|
<script setup lang="ts">
|
|
627
|
-
import {
|
|
628
|
-
import { getIntlayer } from "intlayer";
|
|
629
|
-
import { useLocale } from "vue-intlayer";
|
|
507
|
+
import { useIntlayer } from "vue-intlayer";
|
|
630
508
|
|
|
631
|
-
|
|
632
|
-
const content =
|
|
509
|
+
// useHead est auto-importé dans Nuxt
|
|
510
|
+
const content = useIntlayer("about-page");
|
|
633
511
|
|
|
634
|
-
|
|
635
|
-
title: content.
|
|
636
|
-
|
|
512
|
+
useHead({
|
|
513
|
+
title: content.metaTitle.raw, // Utilisez .raw pour accéder à la chaîne primitive
|
|
514
|
+
meta: [
|
|
515
|
+
{
|
|
516
|
+
name: "description",
|
|
517
|
+
content: content.metaDescription.raw, // Utilisez .raw pour accéder à la chaîne primitive
|
|
518
|
+
},
|
|
519
|
+
],
|
|
637
520
|
});
|
|
638
521
|
</script>
|
|
639
522
|
|
|
640
523
|
<template>
|
|
641
|
-
<
|
|
642
|
-
<h1>{{ content.pageTitle }}</h1>
|
|
643
|
-
<p>{{ content.pageContent }}</p>
|
|
644
|
-
</div>
|
|
524
|
+
<h1><content.title /></h1>
|
|
645
525
|
</template>
|
|
646
526
|
```
|
|
647
527
|
|
|
528
|
+
> Alternativement, vous pouvez utiliser la fonction `import { getIntlayer } from "intlayer"` pour obtenir le contenu sans la réactivité de Vue.
|
|
529
|
+
|
|
530
|
+
> **Accéder aux valeurs du contenu :**
|
|
531
|
+
>
|
|
532
|
+
> - Utilisez `.raw` pour obtenir la valeur primitive de la chaîne (non réactive)
|
|
533
|
+
> - Utilisez `.value` pour obtenir la valeur réactive
|
|
534
|
+
> - Utilisez la syntaxe composant `<content.key />` pour le support de l'éditeur visuel
|
|
535
|
+
|
|
648
536
|
Créez la déclaration de contenu correspondante :
|
|
649
537
|
|
|
650
|
-
```ts fileName="pages/about-
|
|
538
|
+
```ts fileName="pages/about-page.content.ts" contentDeclarationFormat="typescript"
|
|
651
539
|
import { t, type Dictionary } from "intlayer";
|
|
652
|
-
import type { useSeoMeta } from "nuxt/app";
|
|
653
540
|
|
|
654
|
-
const
|
|
655
|
-
key: "about-
|
|
541
|
+
const aboutPageContent = {
|
|
542
|
+
key: "about-page",
|
|
656
543
|
content: {
|
|
657
|
-
|
|
544
|
+
metaTitle: t({
|
|
658
545
|
en: "About Us - My Company",
|
|
659
546
|
fr: "À Propos - Ma Société",
|
|
660
547
|
es: "Acerca de Nosotros - Mi Empresa",
|
|
661
548
|
}),
|
|
662
|
-
|
|
549
|
+
metaDescription: t({
|
|
663
550
|
en: "Learn more about our company and our mission",
|
|
664
551
|
fr: "En savoir plus sur notre société et notre mission",
|
|
665
552
|
es: "Conozca más sobre nuestra empresa y nuestra misión",
|
|
666
553
|
}),
|
|
554
|
+
title: t({
|
|
555
|
+
en: "About Us",
|
|
556
|
+
fr: "À Propos",
|
|
557
|
+
es: "Acerca de Nosotros",
|
|
558
|
+
}),
|
|
667
559
|
},
|
|
668
|
-
} satisfies Dictionary
|
|
560
|
+
} satisfies Dictionary;
|
|
669
561
|
|
|
670
|
-
export default
|
|
562
|
+
export default aboutPageContent;
|
|
671
563
|
```
|
|
672
564
|
|
|
673
|
-
```
|
|
565
|
+
```javascript fileName="pages/about-page.content.mjs" contentDeclarationFormat="esm"
|
|
674
566
|
import { t } from "intlayer";
|
|
675
567
|
|
|
676
568
|
/** @type {import('intlayer').Dictionary} */
|
|
677
|
-
const
|
|
678
|
-
key: "about-
|
|
569
|
+
const aboutPageContent = {
|
|
570
|
+
key: "about-page",
|
|
679
571
|
content: {
|
|
680
|
-
|
|
681
|
-
zh: "关于我们 - 我的公司",
|
|
572
|
+
metaTitle: t({
|
|
682
573
|
en: "About Us - My Company",
|
|
683
574
|
fr: "À Propos - Ma Société",
|
|
575
|
+
fr: "À Propos - Ma Société",
|
|
684
576
|
es: "Acerca de Nosotros - Mi Empresa",
|
|
685
577
|
}),
|
|
686
|
-
|
|
687
|
-
zh: "了解更多关于我们公司和我们的使命",
|
|
578
|
+
metaDescription: t({
|
|
688
579
|
en: "Learn more about our company and our mission",
|
|
689
580
|
fr: "En savoir plus sur notre société et notre mission",
|
|
690
581
|
es: "Conozca más sobre nuestra empresa y nuestra misión",
|
|
691
582
|
}),
|
|
583
|
+
title: t({
|
|
584
|
+
en: "About Us",
|
|
585
|
+
fr: "À Propos",
|
|
586
|
+
es: "Acerca de Nosotros",
|
|
587
|
+
}),
|
|
692
588
|
},
|
|
693
589
|
};
|
|
694
590
|
|
|
695
|
-
export default
|
|
591
|
+
export default aboutPageContent;
|
|
696
592
|
```
|
|
697
593
|
|
|
698
|
-
```
|
|
594
|
+
```javascript fileName="pages/about-page.content.cjs" contentDeclarationFormat="commonjs"
|
|
699
595
|
const { t } = require("intlayer");
|
|
700
596
|
|
|
701
597
|
/** @type {import('intlayer').Dictionary} */
|
|
702
|
-
const
|
|
703
|
-
key: "about-
|
|
598
|
+
const aboutPageContent = {
|
|
599
|
+
key: "about-page",
|
|
704
600
|
content: {
|
|
705
|
-
|
|
706
|
-
zh: "关于我们 - 我的公司",
|
|
601
|
+
metaTitle: t({
|
|
707
602
|
en: "About Us - My Company",
|
|
708
603
|
fr: "À Propos - Ma Société",
|
|
709
604
|
es: "Acerca de Nosotros - Mi Empresa",
|
|
710
605
|
}),
|
|
711
|
-
|
|
712
|
-
es: "Acerca de Nosotros - Mi Empresa",
|
|
713
|
-
}),
|
|
714
|
-
description: t({
|
|
715
|
-
zh: "了解更多关于我们公司和我们的使命",
|
|
606
|
+
metaDescription: t({
|
|
716
607
|
en: "Learn more about our company and our mission",
|
|
717
608
|
fr: "En savoir plus sur notre société et notre mission",
|
|
718
609
|
es: "Conozca más sobre nuestra empresa y nuestra misión",
|
|
719
610
|
}),
|
|
611
|
+
title: t({
|
|
612
|
+
en: "About Us",
|
|
613
|
+
fr: "À Propos",
|
|
614
|
+
es: "Acerca de Nosotros",
|
|
615
|
+
}),
|
|
720
616
|
},
|
|
721
617
|
};
|
|
722
618
|
|
|
723
|
-
module.exports =
|
|
619
|
+
module.exports = aboutPageContent;
|
|
724
620
|
```
|
|
725
621
|
|
|
726
|
-
```json fileName="pages/about-
|
|
622
|
+
```json fileName="pages/about-page.content.json" contentDeclarationFormat="json"
|
|
727
623
|
{
|
|
728
|
-
"
|
|
624
|
+
"$schema": "https://intlayer.org/schema.json",
|
|
625
|
+
"key": "about-page",
|
|
729
626
|
"content": {
|
|
730
|
-
"
|
|
627
|
+
"metaTitle": {
|
|
731
628
|
"nodeType": "translation",
|
|
732
|
-
"
|
|
733
|
-
"zh": "关于我们 - 我的公司",
|
|
629
|
+
"translation": {
|
|
734
630
|
"en": "About Us - My Company",
|
|
735
631
|
"fr": "À Propos - Ma Société",
|
|
736
632
|
"es": "Acerca de Nosotros - Mi Empresa"
|
|
737
633
|
}
|
|
738
634
|
},
|
|
739
|
-
"
|
|
635
|
+
"metaDescription": {
|
|
740
636
|
"nodeType": "translation",
|
|
741
|
-
"
|
|
742
|
-
"zh": "了解更多关于我们公司和我们的使命",
|
|
637
|
+
"translation": {
|
|
743
638
|
"en": "Learn more about our company and our mission",
|
|
744
639
|
"fr": "En savoir plus sur notre société et notre mission",
|
|
745
640
|
"es": "Conozca más sobre nuestra empresa y nuestra misión"
|
|
746
641
|
}
|
|
642
|
+
},
|
|
643
|
+
"title": {
|
|
644
|
+
"nodeType": "translation",
|
|
645
|
+
"translation": {
|
|
646
|
+
"en": "About Us",
|
|
647
|
+
"fr": "À Propos",
|
|
648
|
+
"es": "Acerca de Nosotros"
|
|
649
|
+
}
|
|
747
650
|
}
|
|
748
651
|
}
|
|
749
652
|
}
|
|
@@ -753,9 +656,9 @@ module.exports = aboutMetaContent;
|
|
|
753
656
|
|
|
754
657
|
Intlayer utilise l'augmentation de module pour bénéficier de TypeScript et renforcer votre base de code.
|
|
755
658
|
|
|
756
|
-

|
|
757
660
|
|
|
758
|
-

|
|
759
662
|
|
|
760
663
|
Assurez-vous que votre configuration TypeScript inclut les types générés automatiquement.
|
|
761
664
|
|
|
@@ -771,7 +674,7 @@ Assurez-vous que votre configuration TypeScript inclut les types générés auto
|
|
|
771
674
|
|
|
772
675
|
### Configuration Git
|
|
773
676
|
|
|
774
|
-
Il est recommandé d'ignorer les fichiers générés par Intlayer. Cela vous permet d'éviter de les
|
|
677
|
+
Il est recommandé d'ignorer les fichiers générés par Intlayer. Cela vous permet d'éviter de les committer dans votre dépôt Git.
|
|
775
678
|
|
|
776
679
|
Pour ce faire, vous pouvez ajouter les instructions suivantes dans votre fichier `.gitignore` :
|
|
777
680
|
|
|
@@ -782,23 +685,21 @@ Pour ce faire, vous pouvez ajouter les instructions suivantes dans votre fichier
|
|
|
782
685
|
|
|
783
686
|
### Extension VS Code
|
|
784
687
|
|
|
785
|
-
Pour améliorer votre expérience de développement avec Intlayer, vous pouvez installer l
|
|
688
|
+
Pour améliorer votre expérience de développement avec Intlayer, vous pouvez installer l’**extension officielle Intlayer pour VS Code**.
|
|
786
689
|
|
|
787
690
|
[Installer depuis le Marketplace VS Code](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
788
691
|
|
|
789
|
-
Cette extension
|
|
692
|
+
Cette extension offre :
|
|
790
693
|
|
|
791
694
|
- **Autocomplétion** pour les clés de traduction.
|
|
792
|
-
- **Détection d
|
|
695
|
+
- **Détection d’erreurs en temps réel** pour les traductions manquantes.
|
|
793
696
|
- **Aperçus en ligne** du contenu traduit.
|
|
794
697
|
- **Actions rapides** pour créer et mettre à jour facilement les traductions.
|
|
795
698
|
|
|
796
|
-
Pour plus de détails sur l
|
|
699
|
+
Pour plus de détails sur l’utilisation de l’extension, consultez la [documentation de l’extension Intlayer pour VS Code](https://intlayer.org/doc/vs-code-extension).
|
|
797
700
|
|
|
798
701
|
---
|
|
799
702
|
|
|
800
703
|
### Aller plus loin
|
|
801
704
|
|
|
802
|
-
Pour aller plus loin, vous pouvez implémenter l
|
|
803
|
-
|
|
804
|
-
---
|
|
705
|
+
Pour aller plus loin, vous pouvez implémenter l’[éditeur visuel](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/intlayer_visual_editor.md) ou externaliser votre contenu en utilisant le [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/intlayer_CMS.md).
|