AccueilBac à sableShowcaseAppDocBlog
    • Englishanglais
      EN
    • русскийrusse
      RU
    • 日本語japonais
      JA
    • françaisfrançais
      FR
    • 한국어coréen
      KO
    • 中文chinois
      ZH
    • españolespagnol
      ES
    • Deutschallemand
      DE
    • العربيةarabe
      AR
    • italianoitalien
      IT
    • British Englishanglais britannique
      EN-GB
    • portuguêsportugais
      PT
    • हिन्दीhindi
      HI
    • Türkçeturc
      TR
    • polskipolonais
      PL
    • Indonesiaindonésien
      ID
    • Tiếng Việtvietnamien
      VI
    • українськаukrainien
      UK
    /
    Filtrer la documentation par framework
    Alt+←
    Pourquoi Intlayer ?
    Commencer
    Concept
    • Comment Intlayer fonctionne
    • Configuration
    • TestFillBuildWatchExtractLoginPushPullConfigurationListVersionEditorLiveDebugDoc ReviewDoc TranslateSDK
    • Éditeur visuel
    • CMS
    • Intégration CI/CD
    • TraductionPlurielÉnumérationConditionGenreInsertionFichierImbricationMarkdownHTMLRécupération de fonction
    • Fichier par locale
    • Compilateur
    • Remplissage automatique
    • Tests
    • Optimisation de bundle
    Environnement
    • Next.js 14 et App Router
      Next.js 15
      Next.js sans locale URL
      Next.js et Page Router
      Compiler
    • Tanstack Start Solid
    • Astro et React
      Astro et Svelte
      Astro et Vue
      Astro et Solid
      Astro et Preact
      Astro et Lit
      Astro et Vanilla JS
    • React Router v7
      React Router v7 (fs-routes)
      Compiler
    • Nuxt et Vue
    • Vite et Solid
    • SvelteKit
    • Vite et Preact
    • Vite et Vanilla JS
    • Vite et Lit
    • Angular 19 (Webpack)
      Analog
    • React CRA
    • React Native et Expo
    • Express.js
      NestJS
      Fastify
      Hono
      Adonis
    • Lynx et React
    Plugins
    • JSON
    • gettext (.po)
    Extension VS Code
    Agent
    • Serveur MCP
    • Compétences de l’agent
    Versions
    • v8
    • v7
    • v6
    Benchmark
    • Next.js
    • TanStack
    • Vue
    • Solid
    • Svelte
    Blog
    Poser une question
    1. Documentation
    2. Environnement
    3. Vite et Vue
    \n\n\n```\n\n#### Accéder au contenu dans Intlayer\n\nIntlayer propose différentes API pour accéder à votre contenu :\n\n- **Syntaxe basée sur les composants** (recommandée) :\n Utilisez la syntaxe `` ou `` pour rendre le contenu en tant que nœud Intlayer. Cela s'intègre parfaitement avec l'[Éditeur Visuel](/fr/doc/concept/editor) et le [CMS](/fr/doc/concept/cms).\n\n- **Syntaxe basée sur les chaînes de caractères** :\n Utilisez `{{ myContent }}` pour afficher le contenu en texte brut, sans support de l'Éditeur Visuel.\n\n- **Syntaxe HTML brute** :\n Utilisez `
    ` pour afficher le contenu en HTML brut, sans support de l'Éditeur Visuel.\n\n- **Syntaxe de déstructuration** :\n Le composable `useIntlayer` retourne un Proxy avec le contenu. Ce proxy peut être déstructuré pour accéder au contenu tout en conservant la réactivité.\n - Utilisez `const content = useIntlayer(\"myContent\");` et `{{ content.myContent }}` / ``.\n - Ou utilisez `const { myContent } = useIntlayer(\\\"myContent\\\");` et `{{ myContent }}` / `` pour déstructurer le contenu.\n\n> Si votre application existe déjà, vous pouvez utiliser le [Compilateur Intlayer](/fr/doc/compiler), ainsi que la [commande d'extraction](/fr/doc/concept/cli/extract), pour transformer des milliers de composants en une seconde.\n\n### (Optionnel) Étape 6 : Changer la langue de votre contenu\n\nPour 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.\n\nCréez un composant pour changer de langue :\n\n```vue fileName=\"src/components/LocaleSwitcher.vue\"\n\n\n\n```\n\nEnsuite, utilisez ce composant dans votre App.vue :\n\n```vue fileName=\"src/App.vue\"\n\n\n\n```\n\n### (Optionnel) Étape 7 : Ajouter un routage localisé à votre application\n\nAjouter un routage localisé dans une application Vue implique généralement d'utiliser Vue Router avec des préfixes de locale. Cela crée des routes uniques pour chaque langue, ce qui est utile pour le SEO et des URLs optimisées pour le référencement.\n\nExemple :\n\n```plaintext\n- https://example.com/about\n- https://example.com/es/about\n- https://example.com/fr/about\n```\n\nTout d'abord, installez Vue Router :\n\n```bash packageManager=\"npm\"\nnpm install vue-router\nnpx intlayer init\n```\n\n```bash packageManager=\"pnpm\"\npnpm add vue-router\npnpm intlayer init\n```\n\n```bash packageManager=\"yarn\"\nyarn add vue-router\n```\n\nEnsuite, créez une configuration de routeur qui gère le routage basé sur la locale :\n\n```js fileName=\"src/router/index.ts\"\nimport {\n localeFlatMap,\n type Locale,\n} from 'intlayer';\nimport { createIntlayerClient } from \"vue-intlayer\";\nimport { createRouter, createWebHistory } from 'vue-router';\nimport HomeView from './views/home/HomeView.vue';\nimport RootView from './views/root/Root.vue';\n\n/**\n * Déclarez les routes avec des chemins et des métadonnées spécifiques à la locale.\n */\nconst routes = localeFlatMap(({ urlPrefix, locale }) => [\n {\n path: `${urlPrefix}/`,\n name: `Root-${locale}`,\n component: RootView,\n meta: {\n locale,\n },\n },\n {\n path: `${urlPrefix}/home`,\n name: `Home-${locale}`,\n component: HomeView,\n meta: {\n locale,\n },\n },\n]);\n\n// Créez l'instance du routeur\nexport const router = createRouter({\n history: createWebHistory(),\n routes,\n});\n\n// Ajoutez un garde de navigation pour la gestion des locales\nrouter.beforeEach((to, _from, next) => {\n const client = createIntlayerClient();\n\n const metaLocale = to.meta.locale as Locale;\n\n // Réutiliser la locale définie dans les métadonnées de la route\n client.setLocale(metaLocale);\n next();\n});\n```\n\n> Le nom est utilisé pour identifier la route dans le routeur. Il doit être unique parmi toutes les routes pour éviter les conflits et assurer une navigation et un lien corrects.\n\nEnsuite, enregistrez le routeur dans votre fichier main.js :\n\n```js fileName=\"src/main.ts\"\nimport { createApp } from \"vue\";\nimport App from \"./App.vue\";\nimport { router } from \"./router\";\nimport \"./style.css\";\n\nconst app = createApp(App);\n\n// Ajouter le routeur à l'application\napp.use(router);\n\n// Monter l'application\napp.mount(\"#app\");\n```\n\nMettez ensuite à jour votre fichier `App.vue` pour rendre le composant RouterView. Ce composant affichera le composant correspondant à la route actuelle.\n\n```vue fileName=\"src/App.vue\"\n\n\n\n```\n\nParallèlement, vous pouvez également utiliser le `intlayerProxy` pour ajouter un routage côté serveur à votre application. Ce plugin détectera automatiquement la locale actuelle en fonction de l'URL et définira le cookie de locale approprié. Si aucune locale n'est spécifiée, le plugin déterminera la locale la plus appropriée en fonction des préférences linguistiques du navigateur de l'utilisateur. Si aucune locale n'est détectée, il redirigera vers la locale par défaut.\n\n```typescript {3,7} fileName=\"vite.config.ts\" codeFormat={[\"typescript\", \"esm\", \"commonjs\"]}\nimport { defineConfig } from \"vite\";\nimport vue from \"@vitejs/plugin-vue\";\nimport { intlayer, intlayerProxy } from \"vite-intlayer\";\n\n// https://vitejs.dev/config/\nexport default defineConfig({\n plugins: [\n intlayerProxy(), // should be placed first\n vue(),\n intlayer(),\n ],\n});\n```\n\n### (Optionnel) Étape 8 : Modifier l'URL lors du changement de langue\n\nPour mettre à jour automatiquement l'URL lorsque l'utilisateur change de langue, vous pouvez modifier le composant `LocaleSwitcher` pour utiliser Vue Router :\n\n```vue fileName=\"src/components/LocaleSwitcher.vue\"\n\n\n\n```\n\nAstuce : Pour un meilleur SEO et une meilleure accessibilité, utilisez des balises telles que `` pour lier les pages localisées, comme montré à l'étape 10. Cela permet aux moteurs de recherche de découvrir et d'indexer correctement les URL spécifiques à chaque langue. Pour préserver le comportement SPA, vous pouvez empêcher la navigation par défaut avec @click.prevent, changer la locale en utilisant useLocale, et naviguer de manière programmatique avec Vue Router.\n\n```html\n
      \n
    1. \n \n
      \n English\n Anglais\n EN\n
      \n
      \n
    2. \n
    3. \n \n
      \n Español\n Espagnol\n ES\n
      \n \n
    4. \n
    \n```\n\n### (Optionnel) Étape 9 : Modifier les attributs Lang et Dir du HTML\n\nLorsque votre application prend en charge plusieurs langues, il est crucial de mettre à jour les attributs `lang` et `dir` de la balise `` pour qu'ils correspondent à la locale actuelle. Cela garantit :\n\n- **Accessibilité** : Les lecteurs d'écran et les technologies d'assistance s'appuient sur l'attribut `lang` correct pour prononcer et interpréter le contenu avec précision.\n- **Rendu du texte** : L'attribut `dir` (direction) garantit que le texte est affiché dans le bon ordre (par exemple, de gauche à droite pour l'anglais, de droite à gauche pour l'arabe ou l'hébreu), ce qui est essentiel pour la lisibilité.\n- **SEO** : Les moteurs de recherche utilisent l'attribut `lang` pour déterminer la langue de votre page, aidant ainsi à proposer le contenu localisé approprié dans les résultats de recherche.\n\nEn mettant à jour ces attributs dynamiquement lorsque la locale change, vous garantissez une expérience cohérente et accessible pour les utilisateurs dans toutes les langues prises en charge.\n\n```js fileName=\"src/composables/useI18nHTMLAttributes.ts\"\nimport { watch } from \"vue\";\nimport { useLocale } from \"vue-intlayer\";\nimport { getHTMLTextDir } from \"intlayer\";\n\n/**\n * Composable qui met à jour les attributs `lang` et `dir` de l'élément HTML \n * en fonction de la locale courante.\n *\n * @example\n * // Dans votre App.vue ou un composant global\n * import { useI18nHTMLAttributes } from './composables/useI18nHTMLAttributes'\n *\n * useI18nHTMLAttributes()\n */\nexport const useI18nHTMLAttributes = () => {\n const { locale } = useLocale();\n\n // Met à jour les attributs HTML à chaque changement de locale\n watch(\n () => locale.value,\n (newLocale) => {\n if (!newLocale) return;\n\n // Met à jour l'attribut de langue\n document.documentElement.lang = newLocale;\n\n // Définit la direction du texte (ltr pour la plupart des langues, rtl pour l'arabe, l'hébreu, etc.)\n document.documentElement.dir = getHTMLTextDir(newLocale);\n },\n { immediate: true }\n );\n};\n```\n\nUtilisez ce composable dans votre `App.vue` ou un composant global :\n\n```vue fileName=\"src/App.vue\"\n\n\n\n```\n\n### (Optionnel) Étape 10 : Création d’un composant de lien localisé\n\nPour garantir que la navigation de votre application respecte la locale actuelle, vous pouvez créer un composant personnalisé `Link`. Ce composant préfixe automatiquement les URL internes avec la langue courante. Par exemple, lorsqu'un utilisateur francophone clique sur un lien vers la page \"À propos\", il est redirigé vers `/fr/about` au lieu de `/about`.\n\nCe comportement est utile pour plusieurs raisons :\n\n- **SEO et expérience utilisateur** : Les URL localisées aident les moteurs de recherche à indexer correctement les pages spécifiques à une langue et fournissent aux utilisateurs du contenu dans leur langue préférée.\n- **Cohérence** : En utilisant un lien localisé dans toute votre application, vous garantissez que la navigation reste dans la locale actuelle, évitant ainsi des changements de langue inattendus.\n- **Maintenabilité** : Centraliser la logique de localisation dans un seul composant simplifie la gestion des URLs, rendant votre base de code plus facile à maintenir et à étendre à mesure que votre application grandit.\n\n```vue fileName=\"src/components/Link.vue\"\n\n\n\n```\n\nPour une utilisation avec Vue Router, créez une version spécifique au routeur :\n\n```vue fileName=\"src/components/RouterLink.vue\"\n\n\n\n```\n\nUtilisez ces composants dans votre application :\n\n```vue fileName=\"src/App.vue\"\n\n\n\n```\n\n### (Optionnel) Étape 11 : Rendre du Markdown\n\nIntlayer prend en charge le rendu du contenu Markdown directement dans votre application Vue. Par défaut, le Markdown est traité comme du texte brut. Pour convertir le Markdown en HTML enrichi, vous pouvez intégrer [markdown-it](https://github.com/markdown-it/markdown-it), un parseur Markdown.\n\nCela est particulièrement utile lorsque vos traductions incluent du contenu formaté comme des listes, des liens ou des emphases.\n\nPar défaut, Intlayer rend le markdown sous forme de chaîne de caractères. Mais Intlayer fournit également un moyen de rendre le markdown en HTML en utilisant la fonction `installIntlayerMarkdown`.\n\n> Pour voir comment déclarer du contenu markdown en utilisant le package `intlayer`, consultez la [documentation markdown](https://github.com/aymericzip/intlayer/tree/main/docs/fr/dictionary/markdown.md).\n\n```ts fileName=\"main.ts\"\nimport MarkdownIt from \"markdown-it\";\nimport { createApp, h } from \"vue\";\nimport { installIntlayer, installIntlayerMarkdown } from \"vue-intlayer\";\n\nconst app = createApp(App);\n\napp.use(intlayer);\n\nconst md = new MarkdownIt({\n html: true, // autoriser les balises HTML\n linkify: true, // transformer automatiquement les URL en liens\n typographer: true, // activer les guillemets typographiques, tirets, etc.\n});\n\n// Indiquer à Intlayer d'utiliser md.render() chaque fois qu'il doit convertir du markdown en HTML\ninstallIntlayerMarkdown(app, (markdown) => {\n const html = md.render(markdown);\n return h(\"div\", { innerHTML: html });\n});\n```\n\nUne fois enregistré, vous pouvez utiliser la syntaxe basée sur les composants pour afficher directement le contenu Markdown :\n\n```vue\n\n\n\n```\n\n### (Optionnel) Étape 12 : Extraire le contenu de vos composants\n\nSi vous avez une base de code existante, transformer des milliers de fichiers peut prendre beaucoup de temps.\n\nPour faciliter ce processus, Intlayer propose un [compilateur](/fr/doc/compiler) / [extracteur](/fr/doc/concept/cli/extract) pour transformer vos composants et extraire le contenu.\n\nPour le configurer, vous pouvez ajouter une section `compiler` dans votre fichier `intlayer.config.ts` :\n\n```typescript fileName=\"intlayer.config.ts\" codeFormat={[\"typescript\", \"esm\", \"commonjs\"]}\nimport { type IntlayerConfig } from \"intlayer\";\n\nconst config: IntlayerConfig = {\n // ... Reste de votre configuration\n compiler: {\n /**\n * Indique si le compilateur doit être activé.\n */\n enabled: true,\n\n /**\n * Définit le chemin des fichiers de sortie\n */\n output: ({ fileName, extension }) => `./${fileName}${extension}`,\n\n /**\n * Indique si les composants doivent être sauvegardés après avoir été transformés. De cette façon, le compilateur peut être exécuté une seule fois pour transformer l'application, puis il peut être supprimé.\n */\n saveComponents: false,\n\n /**\n * Préfixe de clé de dictionnaire\n */\n dictionaryKeyPrefix: \"\",\n },\n};\n\nexport default config;\n```\n\n\n \n\nExécutez l'extracteur pour transformer vos composants et extraire le contenu\n\n```bash packageManager=\"npm\"\nnpx intlayer extract\n```\n\n```bash packageManager=\"pnpm\"\npnpm intlayer extract\n```\n\n```bash packageManager=\"yarn\"\nyarn intlayer extract\n```\n\n```bash packageManager=\"bun\"\nbun x intlayer extract\n```\n\n \n \n\nMettez à jour votre fichier `vite.config.ts` pour inclure le plugin `intlayerCompiler` :\n\n```ts fileName=\"vite.config.ts\"\nimport { defineConfig } from \"vite\";\nimport { intlayer, intlayerCompiler } from \"vite-intlayer\";\n\nexport default defineConfig({\n plugins: [\n intlayer(),\n intlayerCompiler(), // Ajoute le plugin du compilateur\n ],\n});\n```\n\n```bash packageManager=\"npm\"\nnpm run build # Ou npm run dev\n```\n\n```bash packageManager=\"pnpm\"\npnpm run build # Ou pnpm run dev\n```\n\n```bash packageManager=\"yarn\"\nyarn build # Ou yarn dev\n```\n\n```bash packageManager=\"bun\"\nbun run build # Or bun run dev\n```\n\n \n\n\n### (Facultatif) Sitemap et robots.txt (génération au build)\n\nIntlayer fournit des utilitaires - `generateSitemap` et `getMultilingualUrls` - pour produire un `sitemap.xml` multilingue et un `robots.txt` prêts pour les crawlers, que vous pouvez écrire automatiquement dans `public/`. En pratique, exécutez un petit script Node **avant** Vite (par exemple les hooks npm `predev` / `prebuild`) afin que ces fichiers soient présents au build ou au serveur de développement.\n\n#### Sitemap\n\nLe générateur de sitemap Intlayer tient compte de vos locales et ajoute les métadonnées attendues par les moteurs.\n\n> Le sitemap généré prend en charge l’espace de noms `xhtml:link` (extensions hreflang). Contrairement aux générateurs qui ne listent que des URL brutes, Intlayer relie de façon bidirectionnelle toutes les versions linguistiques d’une même page (par ex. `/about`, `/fr/about` ou `/about?lang=fr` selon votre mode de routage), ce qui aide les crawlers.\n\n#### Robots.txt\n\nUtilisez `getMultilingualUrls` pour que les règles `Disallow` couvrent toutes les variantes localisées des chemins sensibles.\n\n#### 1. Créer `generate-seo.mjs` à la racine du projet\n\n```javascript fileName=\"generate-seo.mjs\"\nimport fs from \"fs\";\nimport path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { generateSitemap, getMultilingualUrls } from \"intlayer\";\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n\nconst SITE_URL = (process.env.SITE_URL || \"http://localhost:5173\").replace(\n /\\/$/,\n \"\"\n);\n\nconst pathList = [\n { path: \"/\", changefreq: \"daily\", priority: 1.0 },\n { path: \"/about\", changefreq: \"monthly\", priority: 0.7 },\n];\n\nconst sitemapXml = generateSitemap(pathList, { siteUrl: SITE_URL });\nfs.writeFileSync(path.join(__dirname, \"public\", \"sitemap.xml\"), sitemapXml);\n\nconst getAllMultilingualUrls = (urls) =>\n urls.flatMap((url) => Object.values(getMultilingualUrls(url)));\n\nconst disallowedPaths = getAllMultilingualUrls([\"/admin\", \"/private\"]);\n\nconst robotsTxt = [\n \"User-agent: *\",\n \"Allow: /\",\n ...disallowedPaths.map((path) => `Disallow: ${path}`),\n \"\",\n `Sitemap: ${SITE_URL}/sitemap.xml`,\n].join(\"\\n\");\n\nfs.writeFileSync(path.join(__dirname, \"public\", \"robots.txt\"), robotsTxt);\n\nconsole.log(\"SEO files generated successfully.\");\n```\n\nLe paquet `intlayer` doit être installé pour que le script puisse l’importer. Définissez `SITE_URL` dans l’environnement pour la production (par ex. en CI).\n\n> Préférez `generate-seo.mjs` pour l’ESM Node. Avec `generate-seo.js`, assurez-vous que `\"type\": \"module\"` est présent dans `package.json`, ou activez l’ESM côté Node.\n\n#### 2. Lancer le script avant Vite\n\n```json fileName=\"package.json\"\n{\n \"scripts\": {\n \"dev\": \"vite\",\n \"prebuild\": \"node generate-seo.mjs\",\n \"build\": \"vite build\",\n \"preview\": \"vite preview\"\n }\n}\n```\n\nAdaptez les commandes si vous utilisez pnpm ou yarn. Vous pouvez aussi appeler ce script depuis la CI ou une autre étape de votre pipeline.\n\n### Configurer TypeScript\n\nIntlayer utilise l'augmentation de module pour tirer parti de TypeScript et renforcer votre base de code.\n\n![texte alternatif](https://github.com/aymericzip/intlayer/blob/main/docs/assets/autocompletion.png)\n\n![texte alternatif](https://github.com/aymericzip/intlayer/blob/main/docs/assets/translation_error.png)\n\nAssurez-vous que votre configuration TypeScript inclut les types générés automatiquement.\n\n```json5 fileName=\"tsconfig.json\"\n{\n // ... Vos configurations TypeScript existantes\n \"include\": [\n // ... Vos configurations TypeScript existantes\n \".intlayer/**/*.ts\", // Inclure les types générés automatiquement\n ],\n}\n```\n\n### Configuration Git\n\nIl est recommandé d'ignorer les fichiers générés par Intlayer. Cela vous permet d'éviter de les commettre dans votre dépôt Git.\n\nPour ce faire, vous pouvez ajouter les instructions suivantes à votre fichier `.gitignore` :\n\n```bash\n# Ignorer les fichiers générés par Intlayer\n.intlayer\n```\n\n### Extension VS Code\n\nPour améliorer votre expérience de développement avec Intlayer, vous pouvez installer l'**extension officielle Intlayer pour VS Code**.\n\n[Installer depuis le Marketplace VS Code](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)\n\nCette extension offre :\n\n- **Autocomplétion** pour les clés de traduction.\n- **Détection d'erreurs en temps réel** pour les traductions manquantes.\n- **Aperçus en ligne** du contenu traduit.\n- **Actions rapides** pour créer et mettre à jour facilement les traductions.\n\nIl 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.\n\nPour ce faire, vous pouvez ajouter les instructions suivantes à votre fichier `.gitignore` :\n\n```bash\n# Ignorer les fichiers générés par Intlayer\n.intlayer\n```\n\n### Extension VS Code\n\nPour améliorer votre expérience de développement avec Intlayer, vous pouvez installer l’extension officielle **Intlayer VS Code Extension**.\n\n[Installer depuis le Marketplace VS Code](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)\n\nCette extension offre :\n\n- **Autocomplétion** pour les clés de traduction.\n- **Détection d’erreurs en temps réel** pour les traductions manquantes.\n- **Aperçus en ligne** du contenu traduit.\n- **Actions rapides** pour créer et mettre à jour facilement les traductions.\n\nPour plus de détails sur l’utilisation de l’extension, consultez la [documentation de l’extension VS Code Intlayer](https://intlayer.org/doc/vs-code-extension).\n\n---\n\n### Aller plus loin\n\nPour aller plus loin, vous pouvez implémenter l’[éditeur visuel](/fr/doc/concept/editor) ou externaliser votre contenu en utilisant le [CMS](/fr/doc/concept/cms).\n\n---\n","about":"Découvrez comment rendre votre site Vite et Vue multilingue. Suivez la documentation pour internationaliser (i18n) et traduire votre site.","url":"https://intlayer.org/fr/doc/environment/vite-and-vue","datePublished":"18-04-2025","dateModified":"06-05-2026","keywords":"Internationalisation, Documentation, Intlayer, Vite, Vue, JavaScript","license":"https://raw.githubusercontent.com/aymericzip/intlayer/refs/heads/main/LICENSE","audience":{"@type":"Audience","audienceType":"Développeurs, Responsables de contenu"}}
    Création:2025-04-18Dernière mise à jour:2026-05-06
    Voir le modèle d'application sur GitHub

    Cette page dispose d'un modèle d'application disponible.

    Voir l'application vitrine

    Cette page renvoie vers une démo en direct du modèle.

    Regarder le tutoriel vidéo

    Cette page dispose d'un tutoriel vidéo.

    Référencez cette doc à votre assistant AI préféré
    ChatGPT
    Claude
    DeepSeek
    Google AI mode
    Gemini
    Perplexity
    Mistral
    Grok

    Posez votre question et obtenez un résumé du document en referencant cette page et le Provider AI de votre choix

    Historique des versions

    1. "Mettre à jour l'utilisation de l'API useIntlayer de Solid pour un accès direct aux propriétés"
      v8.9.004/05/2026
    2. "Ajouter la commande init"
      v7.5.930/12/2025
    3. "Historique initial"
      v5.5.1029/06/2025

    Le contenu de cette page a été traduit à l'aide d'une IA.

    Voir la dernière version du contenu original en anglais
    Modifier cette documentation

    Si vous avez une idée d’amélioration pour améliorer cette documentation, n’hésitez pas à contribuer en submitant une pull request sur GitHub.

    Lien GitHub de la documentation
    Copier

    Copier le Markdown du doc dans le presse-papiers

    Traduire votre Vite et Vue avec Intlayer | Internationalisation (i18n)

    Qu'est-ce que Intlayer ?

    Intlayer est une bibliothèque d'internationalisation (i18n) innovante et open-source conçue pour simplifier la prise en charge multilingue dans les applications web modernes.

    Avec Intlayer, vous pouvez :

    • Gérer facilement les traductions en utilisant des dictionnaires déclaratifs au niveau des composants.
    • Localiser dynamiquement les métadonnées, les routes et le contenu.
    • Assurer la prise en charge de TypeScript avec des types générés automatiquement, améliorant l'autocomplétion et la détection des erreurs.
    • Bénéficier de fonctionnalités avancées, comme la détection et le changement dynamiques de la langue.

    Guide étape par étape pour configurer Intlayer dans une application Vite et Vue

    www.youtube.com
    ide.intlayer.org
    intlayer-vite-vue-template.vercel.app

    Voir le Modèle d'application sur GitHub.

    Étape 1 : Installer les dépendances

    Installez les paquets nécessaires avec npm :

    bash
    Copier le code

    Copier le code dans le presse-papiers

    npm install intlayer vue-intlayernpm install vite-intlayer --save-devnpx intlayer init
    • intlayer

      Le package principal qui fournit des outils d'internationalisation pour la gestion de la configuration, la traduction, la déclaration de contenu, la transpilation, et les commandes CLI.

    • vue-intlayer Le package qui intègre Intlayer avec l'application Vue. Il fournit des fournisseurs de contexte et des composables pour l'internationalisation Vue.

    • vite-intlayer Inclut le plugin Vite pour intégrer Intlayer avec le bundler Vite, ainsi que le middleware pour détecter la locale préférée de l'utilisateur, gérer les cookies et gérer la redirection des URL.

    Étape 2 : Configuration de votre projet

    Créez un fichier de configuration pour configurer les langues de votre application :

    intlayer.config.ts
    Copier le code

    Copier le code dans le presse-papiers

    import { Locales, type IntlayerConfig } from "intlayer";
    
    const config: IntlayerConfig = {
      internationalization: {
        locales: [
          Locales.ENGLISH,
          Locales.FRENCH,
          Locales.SPANISH,
          // Vos autres locales
        ],
        defaultLocale: Locales.ENGLISH,
      },
    };
    
    export default config;
    Grâce à ce fichier de configuration, vous pouvez configurer des URL 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.

    Étape 3 : Intégrer Intlayer dans votre configuration Vite

    Ajoutez le plugin intlayer dans votre configuration.

    vite.config.ts
    Copier le code

    Copier le code dans le presse-papiers

    import { defineConfig } from "vite";
    import vue from "@vitejs/plugin-vue";
    import { intlayer } from "vite-intlayer";
    
    // https://vitejs.dev/config/
    export default defineConfig({
      plugins: [vue(), intlayer()],
    });
    Le plugin Vite intlayer() est utilisé pour intégrer Intlayer avec Vite. Il assure la génération des fichiers de déclaration de contenu et les surveille en mode développement. Il définit les variables d'environnement Intlayer dans l'application Vite. De plus, il fournit des alias pour optimiser les performances.

    Étape 4 : Déclarez Votre Contenu

    Créez et gérez vos déclarations de contenu pour stocker les traductions :

    src/helloWorld.content.ts
    Copier le code

    Copier le code dans le presse-papiers

    import { t, type Dictionary } from "intlayer";
    
    const helloWorldContent = {
      key: "helloworld",
      content: {
        count: t({ en: "count is ", fr: "le compte est ", es: "el recuento es " }),
        edit: t({
          en: "Edit <code>components/HelloWorld.vue</code> and save to test HMR",
          fr: "Éditez <code>components/HelloWorld.vue</code> et enregistrez pour tester HMR",
          es: "Edita <code>components/HelloWorld.vue</code> y guarda para probar HMR",
        }),
        checkOut: t({ en: "Check out ", fr: "Vérifiez ", es: "Compruebe " }),
        officialStarter: t({
          en: ", the official Vue + Vite starter",
          fr: ", le starter officiel Vue + Vite",
          es: ", el starter oficial Vue + Vite",
        }),
        learnMore: t({
          en: "Learn more about IDE Support for Vue in the ",
          fr: "En savoir plus sur le support IDE pour Vue dans le ",
          es: "Aprenda más sobre el soporte IDE para Vue en el ",
        }),
        vueDocs: t({
          en: "Vue Docs Scaling up Guide",
          fr: "Guide d'extension des docs Vue",
          es: "Vue Docs Scaling up Guide",
        }),
        readTheDocs: t({
          en: "Click on the Vite et Vue logos to learn more",
          fr: "Cliquez sur les logos Vite et Vue pour en savoir plus",
          es: "Haga clic en los logotipos de Vite y Vue para obtener más información",
        }),
      },
    } satisfies Dictionary;
    
    export default helloWorldContent;
    Vos déclarations de contenu peuvent être définies n'importe où dans votre application dès qu'elles sont incluses dans le répertoire contentDir (par défaut, ./src). Et correspondent à l'extension de fichier de déclaration de contenu (par défaut, .content.{json,ts,tsx,js,jsx,mjs,cjs}).
    Pour plus de détails, référez-vous à la documentation sur la déclaration de contenu.

    Étape 5 : Utiliser Intlayer dans votre code

    Pour utiliser les fonctionnalités d'internationalisation d'Intlayer dans toute votre application Vue, vous devez d'abord enregistrer l'instance singleton d'Intlayer dans votre fichier principal. Cette étape est cruciale car elle fournit le contexte d'internationalisation à tous les composants de votre application, rendant les traductions accessibles partout dans votre arbre de composants.

    Copier le code

    Copier le code dans le presse-papiers

    import { createApp } from "vue";import { intlayer } from "vue-intlayer";import App from "./App.vue";import "./style.css";const app = createApp(App);// Injecter le fournisseur au niveau supérieurapp.use(intlayer);// Monter l'applicationapp.mount("#app");

    Accédez à vos dictionnaires de contenu dans toute votre application en créant un composant Vue principal et en utilisant les composables useIntlayer :

    src/HelloWord.vue
    Copier le code

    Copier le code dans le presse-papiers

    <script setup lang="ts">import { ref } from "vue";import { useIntlayer } from "vue-intlayer";defineProps({  msg: String,});const {  count,  edit,  checkOut,  officialStarter,  learnMore,  vueDocs,  readTheDocs,} = useIntlayer("helloworld");const countRef = ref(0);</script><template>  <h1>{{ msg }}</h1>  <div class="card">    <button type="button" @click="countRef++">      <count />      {{ countRef }}    </button>    <p v-html="edit"></p>  </div>  <p>    <checkOut />    <a href="https://vuejs.org/guide/quick-start.html#local" target="_blank"      >create-vue</a    >, <officialStarter />  </p>  <p>    <learnMore />    <a      href="https://vuejs.org/guide/scaling-up/tooling.html#ide-support"      target="_blank"      ><vueDocs /></a    >.  </p>  <p class="read-the-docs"><readTheDocs /></p>  <p class="read-the-docs">{{ readTheDocs }}</p></template>

    Accéder au contenu dans Intlayer

    Intlayer propose différentes API pour accéder à votre contenu :

    • Syntaxe basée sur les composants (recommandée) : 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 et le CMS.

    • Syntaxe basée sur les chaînes de caractères : Utilisez {{ myContent }} pour afficher le contenu en texte brut, sans support de l'Éditeur Visuel.

    • Syntaxe HTML brute : Utilisez <div v-html="myContent" /> pour afficher le contenu en HTML brut, sans support de l'Éditeur Visuel.

    • Syntaxe de déstructuration : Le composable useIntlayer retourne un Proxy avec le contenu. Ce proxy peut être déstructuré pour accéder au contenu tout en conservant la réactivité.

      • Utilisez const content = useIntlayer("myContent"); et {{ content.myContent }} / <content.myContent />.
      • Ou utilisez const { myContent } = useIntlayer("myContent"); et {{ myContent }} / <myContent/> pour déstructurer le contenu.
    Si votre application existe déjà, vous pouvez utiliser le Compilateur Intlayer, ainsi que la commande d'extraction, pour transformer des milliers de composants en une seconde.

    (Optionnel) Étape 6 : Changer la langue de votre contenu

    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.

    Créez un composant pour changer de langue :

    src/components/LocaleSwitcher.vue
    Copier le code

    Copier le code dans le presse-papiers

    <template>  <div class="locale-switcher">    <select v-model="selectedLocale" @change="changeLocale">      <option v-for="loc in availableLocales" :key="loc" :value="loc">        {{ getLocaleName(loc) }}      </option>    </select>  </div></template><script setup lang="ts">import { ref, watch } from "vue";import { getLocaleName } from "intlayer";import { useLocale } from "vue-intlayer";// Obtenir les informations de locale et la fonction setLocaleconst { locale, availableLocales, setLocale } = useLocale();// Suivre la locale sélectionnée avec un refconst selectedLocale = ref(locale.value);// Mettre à jour la locale lorsque la sélection changeconst changeLocale = () => setLocale(selectedLocale.value);// Garder selectedLocale synchronisé avec la locale globalewatch(  () => locale.value,  (newLocale) => {    selectedLocale.value = newLocale;  });</script>

    Ensuite, utilisez ce composant dans votre App.vue :

    src/App.vue
    Copier le code

    Copier le code dans le presse-papiers

    <script setup lang="ts">import { useIntlayer } from "vue-intlayer";import HelloWorld from "@components/HelloWorld.vue";import LocaleSwitcher from "@components/LocaleSwitcher.vue";import { ref, watch } from "vue";const content = useIntlayer("app"); // Créez le fichier de déclaration intlayer associé</script><template>  <div>    <LocaleSwitcher />    <a href="https://vite.dev" target="_blank">      <img src="/vite.svg" class="logo" :alt="content.viteLogo" />    </a>    <a href="https://vuejs.org/" target="_blank">      <img src="./assets/vue.svg" class="logo vue" :alt="content.vueLogo" />    </a>  </div>  <HelloWorld :msg="content.title" /></template>

    (Optionnel) Étape 7 : Ajouter un routage localisé à votre application

    Ajouter un routage localisé dans une application Vue implique généralement d'utiliser Vue Router avec des préfixes de locale. Cela crée des routes uniques pour chaque langue, ce qui est utile pour le SEO et des URLs optimisées pour le référencement.

    Exemple :

    plaintext
    Copier le code

    Copier le code dans le presse-papiers

    - https://example.com/about- https://example.com/es/about- https://example.com/fr/about

    Tout d'abord, installez Vue Router :

    bash
    Copier le code

    Copier le code dans le presse-papiers

    npm install vue-routernpx intlayer init

    Ensuite, créez une configuration de routeur qui gère le routage basé sur la locale :

    src/router/index.ts
    Copier le code

    Copier le code dans le presse-papiers

    import {  localeFlatMap,  type Locale,} from 'intlayer';import { createIntlayerClient } from "vue-intlayer";import { createRouter, createWebHistory } from 'vue-router';import HomeView from './views/home/HomeView.vue';import RootView from './views/root/Root.vue';/** * Déclarez les routes avec des chemins et des métadonnées spécifiques à la locale. */const routes = localeFlatMap(({ urlPrefix, locale }) => [  {    path: `${urlPrefix}/`,    name: `Root-${locale}`,    component: RootView,    meta: {      locale,    },  },  {    path: `${urlPrefix}/home`,    name: `Home-${locale}`,    component: HomeView,    meta: {      locale,    },  },]);// Créez l'instance du routeurexport const router = createRouter({  history: createWebHistory(),  routes,});// Ajoutez un garde de navigation pour la gestion des localesrouter.beforeEach((to, _from, next) => {  const client = createIntlayerClient();  const metaLocale = to.meta.locale as Locale;  // Réutiliser la locale définie dans les métadonnées de la route  client.setLocale(metaLocale);  next();});
    Le nom est utilisé pour identifier la route dans le routeur. Il doit être unique parmi toutes les routes pour éviter les conflits et assurer une navigation et un lien corrects.

    Ensuite, enregistrez le routeur dans votre fichier main.js :

    src/main.ts
    Copier le code

    Copier le code dans le presse-papiers

    import { createApp } from "vue";import App from "./App.vue";import { router } from "./router";import "./style.css";const app = createApp(App);// Ajouter le routeur à l'applicationapp.use(router);// Monter l'applicationapp.mount("#app");

    Mettez ensuite à jour votre fichier App.vue pour rendre le composant RouterView. Ce composant affichera le composant correspondant à la route actuelle.

    src/App.vue
    Copier le code

    Copier le code dans le presse-papiers

    <script setup lang="ts">import LocaleSwitcher from "@components/LocaleSwitcher.vue";</script><template>  <nav>    <LocaleSwitcher />  </nav>  <RouterView /></template>

    Parallèlement, vous pouvez également utiliser le intlayerProxy pour ajouter un routage côté serveur à votre application. Ce plugin détectera automatiquement la locale actuelle en fonction de l'URL et définira le cookie de locale approprié. Si aucune locale n'est spécifiée, le plugin déterminera la locale la plus appropriée en fonction des préférences linguistiques du navigateur de l'utilisateur. Si aucune locale n'est détectée, il redirigera vers la locale par défaut.

    vite.config.ts
    Copier le code

    Copier le code dans le presse-papiers

    import { defineConfig } from "vite";
    import vue from "@vitejs/plugin-vue";
    import { intlayer, intlayerProxy } from "vite-intlayer";
    
    // https://vitejs.dev/config/
    export default defineConfig({
      plugins: [
        intlayerProxy(), // should be placed first
        vue(),
        intlayer(),
      ],
    });

    (Optionnel) Étape 8 : Modifier l'URL lors du changement de langue

    Pour mettre à jour automatiquement l'URL lorsque l'utilisateur change de langue, vous pouvez modifier le composant LocaleSwitcher pour utiliser Vue Router :

    src/components/LocaleSwitcher.vue
    Copier le code

    Copier le code dans le presse-papiers

    <template>  <div class="locale-switcher">    <select v-model="selectedLocale" @change="changeLocale">      <option v-for="loc in availableLocales" :key="loc" :value="loc">        {{ getLocaleName(loc) }}      </option>    </select>  </div></template><script setup lang="ts">import { ref, watch } from "vue";import { useRouter } from "vue-router";import { Locales, getLocaleName, getLocalizedUrl } from "intlayer";import { useLocale } from "vue-intlayer";// Obtenir Vue Routerconst router = useRouter();// Obtenir les informations de locale et la fonction setLocaleconst { locale, availableLocales, setLocale } = useLocale({  onLocaleChange: (newLocale) => {    // Obtenir la route actuelle et créer une URL localisée    const currentPath = router.currentRoute.value.fullPath;    const localizedPath = getLocalizedUrl(currentPath, newLocale);    // Naviguer vers la route localisée sans recharger la page    router.push(localizedPath);  },});// Suivre la locale sélectionnée avec un refconst selectedLocale = ref(locale.value);// Met à jour la locale lorsque la sélection changeconst changeLocale = () => {  setLocale(selectedLocale.value);};// Synchronise selectedLocale avec la locale globalewatch(  () => locale.value,  (newLocale) => {    selectedLocale.value = newLocale;  });</script>

    Astuce : Pour un meilleur SEO et une meilleure accessibilité, utilisez des balises telles que <a href="/fr/home" hreflang="fr"> pour lier les pages localisées, comme montré à l'étape 10. Cela permet aux moteurs de recherche de découvrir et d'indexer correctement les URL spécifiques à chaque langue. Pour préserver le comportement SPA, vous pouvez empêcher la navigation par défaut avec @click.prevent, changer la locale en utilisant useLocale, et naviguer de manière programmatique avec Vue Router.

    html
    Copier le code

    Copier le code dans le presse-papiers

    <ol>  <li>    <a      hreflang="x-default"      aria-label="Passer à l'anglais"      target="_self"      aria-current="page"      href="/doc/get-started"    >      <div>        <span dir="ltr" lang="en">English</span>        <span>Anglais</span>        <span>EN</span>      </div>    </a>  </li>  <li>    <a      hreflang="es"      aria-label="Passer à l'espagnol"      target="_self"      href="/es/doc/get-started"    >      <div>        <span dir="ltr" lang="es">Español</span>        <span>Espagnol</span>        <span>ES</span>      </div>    </a>  </li></ol>

    (Optionnel) Étape 9 : Modifier les attributs Lang et Dir du HTML

    Lorsque votre application prend en charge plusieurs langues, il est crucial de mettre à jour les attributs lang et dir de la balise <html> pour qu'ils correspondent à la locale actuelle. Cela garantit :

    • Accessibilité : Les lecteurs d'écran et les technologies d'assistance s'appuient sur l'attribut lang correct pour prononcer et interpréter le contenu avec précision.
    • Rendu du texte : L'attribut dir (direction) garantit que le texte est affiché dans le bon ordre (par exemple, de gauche à droite pour l'anglais, de droite à gauche pour l'arabe ou l'hébreu), ce qui est essentiel pour la lisibilité.
    • SEO : Les moteurs de recherche utilisent l'attribut lang pour déterminer la langue de votre page, aidant ainsi à proposer le contenu localisé approprié dans les résultats de recherche.

    En mettant à jour ces attributs dynamiquement lorsque la locale change, vous garantissez une expérience cohérente et accessible pour les utilisateurs dans toutes les langues prises en charge.

    src/composables/useI18nHTMLAttributes.ts
    Copier le code

    Copier le code dans le presse-papiers

    import { watch } from "vue";import { useLocale } from "vue-intlayer";import { getHTMLTextDir } from "intlayer";/** * Composable qui met à jour les attributs `lang` et `dir` de l'élément HTML <html> * en fonction de la locale courante. * * @example * // Dans votre App.vue ou un composant global * import { useI18nHTMLAttributes } from './composables/useI18nHTMLAttributes' * * useI18nHTMLAttributes() */export const useI18nHTMLAttributes = () => {  const { locale } = useLocale();  // Met à jour les attributs HTML à chaque changement de locale  watch(    () => locale.value,    (newLocale) => {      if (!newLocale) return;      // Met à jour l'attribut de langue      document.documentElement.lang = newLocale;      // Définit la direction du texte (ltr pour la plupart des langues, rtl pour l'arabe, l'hébreu, etc.)      document.documentElement.dir = getHTMLTextDir(newLocale);    },    { immediate: true }  );};

    Utilisez ce composable dans votre App.vue ou un composant global :

    src/App.vue
    Copier le code

    Copier le code dans le presse-papiers

    <script setup lang="ts">import { useI18nHTMLAttributes } from "@composables/useI18nHTMLAttributes";// Appliquez les attributs HTML en fonction de la locale actuelleuseI18nHTMLAttributes();</script><template>  <!-- Le template de votre application --></template>

    (Optionnel) Étape 10 : Création d’un composant de lien localisé

    Pour garantir que la navigation de votre application respecte la locale actuelle, vous pouvez créer un composant personnalisé Link. Ce composant préfixe automatiquement les URL internes avec la langue courante. Par exemple, lorsqu'un utilisateur francophone clique sur un lien vers la page "À propos", il est redirigé vers /fr/about au lieu de /about.

    Ce comportement est utile pour plusieurs raisons :

    • SEO et expérience utilisateur : Les URL localisées aident les moteurs de recherche à indexer correctement les pages spécifiques à une langue et fournissent aux utilisateurs du contenu dans leur langue préférée.
    • Cohérence : En utilisant un lien localisé dans toute votre application, vous garantissez que la navigation reste dans la locale actuelle, évitant ainsi des changements de langue inattendus.
    • Maintenabilité : Centraliser la logique de localisation dans un seul composant simplifie la gestion des URLs, rendant votre base de code plus facile à maintenir et à étendre à mesure que votre application grandit.
    src/components/Link.vue
    Copier le code

    Copier le code dans le presse-papiers

    <template>  <a :href="localizedHref" v-bind="$attrs">    <slot />  </a></template><script setup lang="ts">import { computed } from "vue";import { getLocalizedUrl } from "intlayer";import { useLocale } from "vue-intlayer";const props = defineProps({  href: {    type: String,    required: true,  },});const { locale } = useLocale();// Vérifie si le lien est externeconst isExternalLink = computed(() => /^https?:\/\//.test(props.href || ""));// Crée un href localisé pour les liens internesconst localizedHref = computed(() =>  isExternalLink.value ? props.href : getLocalizedUrl(props.href, locale.value));</script>

    Pour une utilisation avec Vue Router, créez une version spécifique au routeur :

    src/components/RouterLink.vue
    Copier le code

    Copier le code dans le presse-papiers

    <template>  <router-link :to="localizedTo" v-bind="$attrs">    <slot />  </router-link></template><script setup lang="ts">import { computed } from "vue";import { getLocalizedUrl } from "intlayer";import { useLocale } from "vue-intlayer";const props = defineProps({  to: {    type: [String, Object],    required: true,  },});const { locale } = useLocale();// Créez la propriété to localisée pour router-linkconst localizedTo = computed(() => {  if (typeof props.to === "string") {    return getLocalizedUrl(props.to, locale.value);  } else {    // Si 'to' est un objet, localisez la propriété path    return {      ...props.to,      path: getLocalizedUrl(props.to.path ?? "/", locale.value),    };  }});</script>

    Utilisez ces composants dans votre application :

    src/App.vue
    Copier le code

    Copier le code dans le presse-papiers

    <template>  <div>    <!-- Vue router  -->    <RouterLink to="/">Racine</RouterLink>    <RouterLink to="/home">Accueil</RouterLink>    <!-- Autres -->    <Link href="/">Racine</Link>    <Link href="/home">Accueil</Link>  </div></template><script setup lang="ts">import Link from "@components/Link.vue";import RouterLink from "@components/RouterLink.vue";</script>

    (Optionnel) Étape 11 : Rendre du Markdown

    Intlayer prend en charge le rendu du contenu Markdown directement dans votre application Vue. Par défaut, le Markdown est traité comme du texte brut. Pour convertir le Markdown en HTML enrichi, vous pouvez intégrer markdown-it, un parseur Markdown.

    Cela est particulièrement utile lorsque vos traductions incluent du contenu formaté comme des listes, des liens ou des emphases.

    Par défaut, Intlayer rend le markdown sous forme de chaîne de caractères. Mais Intlayer fournit également un moyen de rendre le markdown en HTML en utilisant la fonction installIntlayerMarkdown.

    Pour voir comment déclarer du contenu markdown en utilisant le package intlayer, consultez la documentation markdown.
    main.ts
    Copier le code

    Copier le code dans le presse-papiers

    import MarkdownIt from "markdown-it";import { createApp, h } from "vue";import { installIntlayer, installIntlayerMarkdown } from "vue-intlayer";const app = createApp(App);app.use(intlayer);const md = new MarkdownIt({  html: true, // autoriser les balises HTML  linkify: true, // transformer automatiquement les URL en liens  typographer: true, // activer les guillemets typographiques, tirets, etc.});// Indiquer à Intlayer d'utiliser md.render() chaque fois qu'il doit convertir du markdown en HTMLinstallIntlayerMarkdown(app, (markdown) => {  const html = md.render(markdown);  return h("div", { innerHTML: html });});

    Une fois enregistré, vous pouvez utiliser la syntaxe basée sur les composants pour afficher directement le contenu Markdown :

    vue
    Copier le code

    Copier le code dans le presse-papiers

    <template>  <div>    <myMarkdownContent />  </div></template><script setup lang="ts">import { useIntlayer } from "vue-intlayer";const { myMarkdownContent } = useIntlayer("my-component");</script>

    (Optionnel) Étape 12 : Extraire le contenu de vos composants

    Si vous avez une base de code existante, transformer des milliers de fichiers peut prendre beaucoup de temps.

    Pour faciliter ce processus, Intlayer propose un compilateur / extracteur pour transformer vos composants et extraire le contenu.

    Pour le configurer, vous pouvez ajouter une section compiler dans votre fichier intlayer.config.ts :

    intlayer.config.ts
    Copier le code

    Copier le code dans le presse-papiers

    import { type IntlayerConfig } from "intlayer";
    
    const config: IntlayerConfig = {
      // ... Reste de votre configuration
      compiler: {
        /**
         * Indique si le compilateur doit être activé.
         */
        enabled: true,
    
        /**
         * Définit le chemin des fichiers de sortie
         */
        output: ({ fileName, extension }) => `./${fileName}${extension}`,
    
        /**
         * Indique si les composants doivent être sauvegardés après avoir été transformés. De cette façon, le compilateur peut être exécuté une seule fois pour transformer l'application, puis il peut être supprimé.
         */
        saveComponents: false,
    
        /**
         * Préfixe de clé de dictionnaire
         */
        dictionaryKeyPrefix: "",
      },
    };
    
    export default config;

    Exécutez l'extracteur pour transformer vos composants et extraire le contenu

    bash
    Copier le code

    Copier le code dans le presse-papiers

    npx intlayer extract

    Mettez à jour votre fichier vite.config.ts pour inclure le plugin intlayerCompiler :

    vite.config.ts
    Copier le code

    Copier le code dans le presse-papiers

    import { defineConfig } from "vite";import { intlayer, intlayerCompiler } from "vite-intlayer";export default defineConfig({ plugins: [   intlayer(),   intlayerCompiler(), // Ajoute le plugin du compilateur ],});
    bash
    Copier le code

    Copier le code dans le presse-papiers

    npm run build # Ou npm run dev

    (Facultatif) Sitemap et robots.txt (génération au build)

    Intlayer fournit des utilitaires - generateSitemap et getMultilingualUrls - pour produire un sitemap.xml multilingue et un robots.txt prêts pour les crawlers, que vous pouvez écrire automatiquement dans public/. En pratique, exécutez un petit script Node avant Vite (par exemple les hooks npm predev / prebuild) afin que ces fichiers soient présents au build ou au serveur de développement.

    Sitemap

    Le générateur de sitemap Intlayer tient compte de vos locales et ajoute les métadonnées attendues par les moteurs.

    Le sitemap généré prend en charge l’espace de noms xhtml:link (extensions hreflang). Contrairement aux générateurs qui ne listent que des URL brutes, Intlayer relie de façon bidirectionnelle toutes les versions linguistiques d’une même page (par ex. /about, /fr/about ou /about?lang=fr selon votre mode de routage), ce qui aide les crawlers.

    Robots.txt

    Utilisez getMultilingualUrls pour que les règles Disallow couvrent toutes les variantes localisées des chemins sensibles.

    1. Créer generate-seo.mjs à la racine du projet

    generate-seo.mjs
    Copier le code

    Copier le code dans le presse-papiers

    import fs from "fs";import path from "path";import { fileURLToPath } from "url";import { generateSitemap, getMultilingualUrls } from "intlayer";const __dirname = path.dirname(fileURLToPath(import.meta.url));const SITE_URL = (process.env.SITE_URL || "http://localhost:5173").replace(  /\/$/,  "");const pathList = [  { path: "/", changefreq: "daily", priority: 1.0 },  { path: "/about", changefreq: "monthly", priority: 0.7 },];const sitemapXml = generateSitemap(pathList, { siteUrl: SITE_URL });fs.writeFileSync(path.join(__dirname, "public", "sitemap.xml"), sitemapXml);const getAllMultilingualUrls = (urls) =>  urls.flatMap((url) => Object.values(getMultilingualUrls(url)));const disallowedPaths = getAllMultilingualUrls(["/admin", "/private"]);const robotsTxt = [  "User-agent: *",  "Allow: /",  ...disallowedPaths.map((path) => `Disallow: ${path}`),  "",  `Sitemap: ${SITE_URL}/sitemap.xml`,].join("\n");fs.writeFileSync(path.join(__dirname, "public", "robots.txt"), robotsTxt);console.log("SEO files generated successfully.");

    Le paquet intlayer doit être installé pour que le script puisse l’importer. Définissez SITE_URL dans l’environnement pour la production (par ex. en CI).

    Préférez generate-seo.mjs pour l’ESM Node. Avec generate-seo.js, assurez-vous que "type": "module" est présent dans package.json, ou activez l’ESM côté Node.

    2. Lancer le script avant Vite

    package.json
    Copier le code

    Copier le code dans le presse-papiers

    {  "scripts": {    "dev": "vite",    "prebuild": "node generate-seo.mjs",    "build": "vite build",    "preview": "vite preview"  }}

    Adaptez les commandes si vous utilisez pnpm ou yarn. Vous pouvez aussi appeler ce script depuis la CI ou une autre étape de votre pipeline.

    Configurer TypeScript

    Intlayer utilise l'augmentation de module pour tirer parti de TypeScript et renforcer votre base de code.

    texte alternatif

    texte alternatif

    Assurez-vous que votre configuration TypeScript inclut les types générés automatiquement.

    tsconfig.json
    Copier le code

    Copier le code dans le presse-papiers

    {  // ... Vos configurations TypeScript existantes  "include": [    // ... Vos configurations TypeScript existantes    ".intlayer/**/*.ts", // Inclure les types générés automatiquement  ],}

    Configuration Git

    Il est recommandé d'ignorer les fichiers générés par Intlayer. Cela vous permet d'éviter de les commettre dans votre dépôt Git.

    Pour ce faire, vous pouvez ajouter les instructions suivantes à votre fichier .gitignore :

    bash
    Copier le code

    Copier le code dans le presse-papiers

    #  Ignorer les fichiers générés par Intlayer.intlayer

    Extension VS Code

    Pour améliorer votre expérience de développement avec Intlayer, vous pouvez installer l'extension officielle Intlayer pour VS Code.

    Installer depuis le Marketplace VS Code

    Cette extension offre :

    • Autocomplétion pour les clés de traduction.
    • Détection d'erreurs en temps réel pour les traductions manquantes.
    • Aperçus en ligne du contenu traduit.
    • Actions rapides pour créer et mettre à jour facilement les traductions.

    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.

    Pour ce faire, vous pouvez ajouter les instructions suivantes à votre fichier .gitignore :

    bash
    Copier le code

    Copier le code dans le presse-papiers

    #  Ignorer les fichiers générés par Intlayer.intlayer

    Extension VS Code

    Pour améliorer votre expérience de développement avec Intlayer, vous pouvez installer l’extension officielle Intlayer VS Code Extension.

    Installer depuis le Marketplace VS Code

    Cette extension offre :

    • Autocomplétion pour les clés de traduction.
    • Détection d’erreurs en temps réel pour les traductions manquantes.
    • Aperçus en ligne du contenu traduit.
    • Actions rapides pour créer et mettre à jour facilement les traductions.

    Pour plus de détails sur l’utilisation de l’extension, consultez la documentation de l’extension VS Code Intlayer.


    Aller plus loin

    Pour aller plus loin, vous pouvez implémenter l’éditeur visuel ou externaliser votre contenu en utilisant le CMS.


    Compiler
    Nuxt et Vue
    Alt+→

    Dans cette page

      Les discussions sont anonymes et régulièrement analysées pour traiter les problèmes fréquents. N'hésitez pas à partager vos idées de fonctionnalités, vos retours sur la documentation ou tout ce qui concerne Intlayer, nous utilisons ces retours pour construire notre roadmap et améliorer le produit.

      npm install intlayer vue-intlayernpm install vite-intlayer --save-devnpx intlayer init
      import { createApp } from "vue";import { intlayer } from "vue-intlayer";import App from "./App.vue";import "./style.css";const app = createApp(App);// Injecter le fournisseur au niveau supérieurapp.use(intlayer);// Monter l'applicationapp.mount("#app");
      <script setup lang="ts">import { ref } from "vue";import { useIntlayer } from "vue-intlayer";defineProps({  msg: String,});const {  count,  edit,  checkOut,  officialStarter,  learnMore,  vueDocs,  readTheDocs,} = useIntlayer("helloworld");const countRef = ref(0);</script><template>  <h1>{{ msg }}</h1>  <div class="card">    <button type="button" @click="countRef++">      <count />      {{ countRef }}    </button>    <p v-html="edit"></p>  </div>  <p>    <checkOut />    <a href="https://vuejs.org/guide/quick-start.html#local" target="_blank"      >create-vue</a    >, <officialStarter />  </p>  <p>    <learnMore />    <a      href="https://vuejs.org/guide/scaling-up/tooling.html#ide-support"      target="_blank"      ><vueDocs /></a    >.  </p>  <p class="read-the-docs"><readTheDocs /></p>  <p class="read-the-docs">{{ readTheDocs }}</p></template>
      <template>  <div class="locale-switcher">    <select v-model="selectedLocale" @change="changeLocale">      <option v-for="loc in availableLocales" :key="loc" :value="loc">        {{ getLocaleName(loc) }}      </option>    </select>  </div></template><script setup lang="ts">import { ref, watch } from "vue";import { getLocaleName } from "intlayer";import { useLocale } from "vue-intlayer";// Obtenir les informations de locale et la fonction setLocaleconst { locale, availableLocales, setLocale } = useLocale();// Suivre la locale sélectionnée avec un refconst selectedLocale = ref(locale.value);// Mettre à jour la locale lorsque la sélection changeconst changeLocale = () => setLocale(selectedLocale.value);// Garder selectedLocale synchronisé avec la locale globalewatch(  () => locale.value,  (newLocale) => {    selectedLocale.value = newLocale;  });</script>
      <script setup lang="ts">import { useIntlayer } from "vue-intlayer";import HelloWorld from "@components/HelloWorld.vue";import LocaleSwitcher from "@components/LocaleSwitcher.vue";import { ref, watch } from "vue";const content = useIntlayer("app"); // Créez le fichier de déclaration intlayer associé</script><template>  <div>    <LocaleSwitcher />    <a href="https://vite.dev" target="_blank">      <img src="/vite.svg" class="logo" :alt="content.viteLogo" />    </a>    <a href="https://vuejs.org/" target="_blank">      <img src="./assets/vue.svg" class="logo vue" :alt="content.vueLogo" />    </a>  </div>  <HelloWorld :msg="content.title" /></template>
      - https://example.com/about- https://example.com/es/about- https://example.com/fr/about
      npm install vue-routernpx intlayer init
      import {  localeFlatMap,  type Locale,} from 'intlayer';import { createIntlayerClient } from "vue-intlayer";import { createRouter, createWebHistory } from 'vue-router';import HomeView from './views/home/HomeView.vue';import RootView from './views/root/Root.vue';/** * Déclarez les routes avec des chemins et des métadonnées spécifiques à la locale. */const routes = localeFlatMap(({ urlPrefix, locale }) => [  {    path: `${urlPrefix}/`,    name: `Root-${locale}`,    component: RootView,    meta: {      locale,    },  },  {    path: `${urlPrefix}/home`,    name: `Home-${locale}`,    component: HomeView,    meta: {      locale,    },  },]);// Créez l'instance du routeurexport const router = createRouter({  history: createWebHistory(),  routes,});// Ajoutez un garde de navigation pour la gestion des localesrouter.beforeEach((to, _from, next) => {  const client = createIntlayerClient();  const metaLocale = to.meta.locale as Locale;  // Réutiliser la locale définie dans les métadonnées de la route  client.setLocale(metaLocale);  next();});
      import { createApp } from "vue";import App from "./App.vue";import { router } from "./router";import "./style.css";const app = createApp(App);// Ajouter le routeur à l'applicationapp.use(router);// Monter l'applicationapp.mount("#app");
      <script setup lang="ts">import LocaleSwitcher from "@components/LocaleSwitcher.vue";</script><template>  <nav>    <LocaleSwitcher />  </nav>  <RouterView /></template>
      <template>  <div class="locale-switcher">    <select v-model="selectedLocale" @change="changeLocale">      <option v-for="loc in availableLocales" :key="loc" :value="loc">        {{ getLocaleName(loc) }}      </option>    </select>  </div></template><script setup lang="ts">import { ref, watch } from "vue";import { useRouter } from "vue-router";import { Locales, getLocaleName, getLocalizedUrl } from "intlayer";import { useLocale } from "vue-intlayer";// Obtenir Vue Routerconst router = useRouter();// Obtenir les informations de locale et la fonction setLocaleconst { locale, availableLocales, setLocale } = useLocale({  onLocaleChange: (newLocale) => {    // Obtenir la route actuelle et créer une URL localisée    const currentPath = router.currentRoute.value.fullPath;    const localizedPath = getLocalizedUrl(currentPath, newLocale);    // Naviguer vers la route localisée sans recharger la page    router.push(localizedPath);  },});// Suivre la locale sélectionnée avec un refconst selectedLocale = ref(locale.value);// Met à jour la locale lorsque la sélection changeconst changeLocale = () => {  setLocale(selectedLocale.value);};// Synchronise selectedLocale avec la locale globalewatch(  () => locale.value,  (newLocale) => {    selectedLocale.value = newLocale;  });</script>
      <ol>  <li>    <a      hreflang="x-default"      aria-label="Passer à l'anglais"      target="_self"      aria-current="page"      href="/doc/get-started"    >      <div>        <span dir="ltr" lang="en">English</span>        <span>Anglais</span>        <span>EN</span>      </div>    </a>  </li>  <li>    <a      hreflang="es"      aria-label="Passer à l'espagnol"      target="_self"      href="/es/doc/get-started"    >      <div>        <span dir="ltr" lang="es">Español</span>        <span>Espagnol</span>        <span>ES</span>      </div>    </a>  </li></ol>
      import { watch } from "vue";import { useLocale } from "vue-intlayer";import { getHTMLTextDir } from "intlayer";/** * Composable qui met à jour les attributs `lang` et `dir` de l'élément HTML <html> * en fonction de la locale courante. * * @example * // Dans votre App.vue ou un composant global * import { useI18nHTMLAttributes } from './composables/useI18nHTMLAttributes' * * useI18nHTMLAttributes() */export const useI18nHTMLAttributes = () => {  const { locale } = useLocale();  // Met à jour les attributs HTML à chaque changement de locale  watch(    () => locale.value,    (newLocale) => {      if (!newLocale) return;      // Met à jour l'attribut de langue      document.documentElement.lang = newLocale;      // Définit la direction du texte (ltr pour la plupart des langues, rtl pour l'arabe, l'hébreu, etc.)      document.documentElement.dir = getHTMLTextDir(newLocale);    },    { immediate: true }  );};
      <script setup lang="ts">import { useI18nHTMLAttributes } from "@composables/useI18nHTMLAttributes";// Appliquez les attributs HTML en fonction de la locale actuelleuseI18nHTMLAttributes();</script><template>  <!-- Le template de votre application --></template>
      <template>  <a :href="localizedHref" v-bind="$attrs">    <slot />  </a></template><script setup lang="ts">import { computed } from "vue";import { getLocalizedUrl } from "intlayer";import { useLocale } from "vue-intlayer";const props = defineProps({  href: {    type: String,    required: true,  },});const { locale } = useLocale();// Vérifie si le lien est externeconst isExternalLink = computed(() => /^https?:\/\//.test(props.href || ""));// Crée un href localisé pour les liens internesconst localizedHref = computed(() =>  isExternalLink.value ? props.href : getLocalizedUrl(props.href, locale.value));</script>
      <template>  <router-link :to="localizedTo" v-bind="$attrs">    <slot />  </router-link></template><script setup lang="ts">import { computed } from "vue";import { getLocalizedUrl } from "intlayer";import { useLocale } from "vue-intlayer";const props = defineProps({  to: {    type: [String, Object],    required: true,  },});const { locale } = useLocale();// Créez la propriété to localisée pour router-linkconst localizedTo = computed(() => {  if (typeof props.to === "string") {    return getLocalizedUrl(props.to, locale.value);  } else {    // Si 'to' est un objet, localisez la propriété path    return {      ...props.to,      path: getLocalizedUrl(props.to.path ?? "/", locale.value),    };  }});</script>
      <template>  <div>    <!-- Vue router  -->    <RouterLink to="/">Racine</RouterLink>    <RouterLink to="/home">Accueil</RouterLink>    <!-- Autres -->    <Link href="/">Racine</Link>    <Link href="/home">Accueil</Link>  </div></template><script setup lang="ts">import Link from "@components/Link.vue";import RouterLink from "@components/RouterLink.vue";</script>
      import MarkdownIt from "markdown-it";import { createApp, h } from "vue";import { installIntlayer, installIntlayerMarkdown } from "vue-intlayer";const app = createApp(App);app.use(intlayer);const md = new MarkdownIt({  html: true, // autoriser les balises HTML  linkify: true, // transformer automatiquement les URL en liens  typographer: true, // activer les guillemets typographiques, tirets, etc.});// Indiquer à Intlayer d'utiliser md.render() chaque fois qu'il doit convertir du markdown en HTMLinstallIntlayerMarkdown(app, (markdown) => {  const html = md.render(markdown);  return h("div", { innerHTML: html });});
      <template>  <div>    <myMarkdownContent />  </div></template><script setup lang="ts">import { useIntlayer } from "vue-intlayer";const { myMarkdownContent } = useIntlayer("my-component");</script>
      npx intlayer extract
      import { defineConfig } from "vite";import { intlayer, intlayerCompiler } from "vite-intlayer";export default defineConfig({ plugins: [   intlayer(),   intlayerCompiler(), // Ajoute le plugin du compilateur ],});
      npm run build # Ou npm run dev
      import fs from "fs";import path from "path";import { fileURLToPath } from "url";import { generateSitemap, getMultilingualUrls } from "intlayer";const __dirname = path.dirname(fileURLToPath(import.meta.url));const SITE_URL = (process.env.SITE_URL || "http://localhost:5173").replace(  /\/$/,  "");const pathList = [  { path: "/", changefreq: "daily", priority: 1.0 },  { path: "/about", changefreq: "monthly", priority: 0.7 },];const sitemapXml = generateSitemap(pathList, { siteUrl: SITE_URL });fs.writeFileSync(path.join(__dirname, "public", "sitemap.xml"), sitemapXml);const getAllMultilingualUrls = (urls) =>  urls.flatMap((url) => Object.values(getMultilingualUrls(url)));const disallowedPaths = getAllMultilingualUrls(["/admin", "/private"]);const robotsTxt = [  "User-agent: *",  "Allow: /",  ...disallowedPaths.map((path) => `Disallow: ${path}`),  "",  `Sitemap: ${SITE_URL}/sitemap.xml`,].join("\n");fs.writeFileSync(path.join(__dirname, "public", "robots.txt"), robotsTxt);console.log("SEO files generated successfully.");
      {  "scripts": {    "dev": "vite",    "prebuild": "node generate-seo.mjs",    "build": "vite build",    "preview": "vite preview"  }}
      {  // ... Vos configurations TypeScript existantes  "include": [    // ... Vos configurations TypeScript existantes    ".intlayer/**/*.ts", // Inclure les types générés automatiquement  ],}
      #  Ignorer les fichiers générés par Intlayer.intlayer
      #  Ignorer les fichiers générés par Intlayer.intlayer