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. Nuxt and vue
    \n\n\n```\n\n#### Accès 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** :\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 contenant 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### (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 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 :\n\n```vue fileName=\"components/LocaleSwitcher.vue\"\n\n\n\n```\n\n> 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.\n\nEnsuite, configurez votre `app.vue` pour utiliser des layouts :\n\n```vue fileName=\"app.vue\"\n\n```\n\n### (Optionnel) Étape 6b : Créer un layout avec navigation\n\nLes 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 :\n\n```vue fileName=\"layouts/default.vue\"\n\n\n\n```\n\nLe composant `Links` (montré ci-dessous) garantit que les liens de navigation internes sont automatiquement localisés.\n\n### (Optionnel) Étape 7 : Ajouter le routage localisé à votre application\n\nNuxt 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.\n\nExemple :\n\n```plaintext\npages/\n├── index.vue → /, /fr, /es\n├── about.vue → /about, /fr/about, /es/about\n└── contact/\n └── index.vue → /contact, /fr/contact, /es/contact\n```\n\nPour créer des pages localisées, il suffit de créer vos fichiers Vue dans le répertoire `pages/`. Voici deux exemples de pages :\n\n**Page d'accueil (`pages/index.vue`) :**\n\n```vue fileName=\"pages/index.vue\"\n\n\n\n```\n\n**Page À propos (`pages/about.vue`) :**\n\n```vue fileName=\"pages/about.vue\"\n\n\n\n```\n\n> 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.\n\nLe module `nuxt-intlayer` fera automatiquement :\n\n- Détecter la locale préférée de l'utilisateur\n- Gérer le changement de locale via l'URL\n- Définir l'attribut `` approprié\n- Gérer les cookies de locale\n- Rediriger les utilisateurs vers l'URL localisée appropriée\n\n### (Optionnel) Étape 8 : 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é `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**.\n\n```vue fileName=\"components/Links.vue\"\n\n\n\n```\n\nEnsuite, utilisez ce composant dans toute votre application :\n\n```vue fileName=\"layouts/default.vue\"\n\n\n\n```\n\n> En utilisant `NuxtLink` avec des chemins localisés, vous vous assurez que :\n>\n> - Les moteurs de recherche peuvent explorer et indexer toutes les versions linguistiques de vos pages\n> - Les utilisateurs peuvent partager directement des URLs localisées\n> - L'historique du navigateur fonctionne correctement avec des URLs préfixées par la locale\n\n### (Optionnel) Étape 9 : Gérer les métadonnées et le SEO\n\nNuxt 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 :\n\n```vue fileName=\"pages/about.vue\"\n\n\n\n```\n\n> Alternativement, vous pouvez utiliser la fonction `import { getIntlayer } from \"intlayer\"` pour obtenir le contenu sans la réactivité de Vue.\n\n> **Accéder aux valeurs du contenu :**\n>\n> - Utilisez `.raw` pour obtenir la valeur primitive de la chaîne (non réactive)\n> - Utilisez `.value` pour obtenir la valeur réactive\n> - Utilisez la syntaxe composant `` pour le support de l'éditeur visuel\n\nCréez la déclaration de contenu correspondante :\n\n```ts fileName=\"pages/about-page.content.ts\" contentDeclarationFormat={[\"typescript\", \"esm\", \"commonjs\"]}\nimport { t, type Dictionary } from \"intlayer\";\n\nconst aboutPageContent = {\n key: \"about-page\",\n content: {\n metaTitle: t({\n en: \"About Us - My Company\",\n fr: \"À Propos - Ma Société\",\n es: \"Acerca de Nosotros - Mi Empresa\",\n }),\n metaDescription: t({\n en: \"Learn more about our company and our mission\",\n fr: \"En savoir plus sur notre société et notre mission\",\n es: \"Conozca más sobre nuestra empresa y nuestra misión\",\n }),\n title: t({\n en: \"About Us\",\n fr: \"À Propos\",\n es: \"Acerca de Nosotros\",\n }),\n },\n} satisfies Dictionary;\n\nexport default aboutPageContent;\n```\n\n```json fileName=\"pages/about-page.content.json\" contentDeclarationFormat=\"json\"\n{\n \"$schema\": \"https://intlayer.org/schema.json\",\n \"key\": \"about-page\",\n \"content\": {\n \"metaTitle\": {\n \"nodeType\": \"translation\",\n \"translation\": {\n \"en\": \"About Us - My Company\",\n \"fr\": \"À Propos - Ma Société\",\n \"es\": \"Acerca de Nosotros - Mi Empresa\"\n }\n },\n \"metaDescription\": {\n \"nodeType\": \"translation\",\n \"translation\": {\n \"en\": \"Learn more about our company and our mission\",\n \"fr\": \"En savoir plus sur notre société et notre mission\",\n \"es\": \"Conozca más sobre nuestra empresa y nuestra misión\"\n }\n },\n \"title\": {\n \"nodeType\": \"translation\",\n \"translation\": {\n \"en\": \"About Us\",\n \"fr\": \"À Propos\",\n \"es\": \"Acerca de Nosotros\"\n }\n }\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 committer dans votre dépôt Git.\n\nPour ce faire, vous pouvez ajouter les instructions suivantes dans votre fichier `.gitignore` :\n\n```plaintext fileName=\".gitignore\"\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\nPour 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).\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","about":"Découvrez comment rendre votre site Nuxt et Vue multilingue. Suivez la documentation pour internationaliser (i18n) et traduire votre site.","url":"https://intlayer.org/fr/doc/environment/nuxt-and-vue","datePublished":"18-06-2025","dateModified":"06-05-2026","keywords":"Internationalisation, Documentation, Intlayer, Nuxt, 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-06-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. "Mise à jour de LocaleSwitcher, SEO, métadonnées"
      v7.3.1107/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

    Traduisez votre site Nuxt et Vue avec Intlayer | Internationalisation (i18n)

    Table des matières

    Qu'est-ce qu'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 d'erreurs.
    • Bénéficier de fonctionnalités avancées, comme la détection et le changement dynamique de la locale.

    Guide étape par étape pour configurer Intlayer dans une application Nuxt

    www.youtube.com
    ide.intlayer.org
    intlayer-nuxt-4-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 --save-dev nuxt-intlayernpx 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 les composables pour les composants Vue.

    • nuxt-intlayer 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.

    É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 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.

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

    Ajoutez le module intlayer à votre configuration Nuxt :

    nuxt.config.ts
    Copier le code

    Copier le code dans le presse-papiers

    import { defineNuxtConfig } from "nuxt/config";export default defineNuxtConfig({  // ... Votre configuration Nuxt existante  modules: ["nuxt-intlayer"],});
    Le module nuxt-intlayer gère automatiquement l'intégration d'Intlayer avec Nuxt. Il configure la construction des déclarations de contenu, surveille les fichiers en mode développement, fournit un middleware pour la détection de la locale, et gère le routage localisé.

    Étape 4 : Déclarez Votre Contenu

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

    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,cjs}).
    Pour plus de détails, consultez la documentation sur la déclaration de contenu.

    Étape 5 : Utilisez Intlayer dans votre code

    Accédez à vos dictionnaires de contenu dans toute votre application Nuxt en utilisant le composable useIntlayer :

    components/HelloWorld.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,  nuxtIntlayer,  learnMore,  nuxtDocs,  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://nuxt.com/docs/getting-started/introduction" target="_blank"      >Nuxt</a    >, <nuxtIntlayer />  </p>  <p>    <learnMore />    <a href="https://nuxt.com" target="_blank"><nuxtDocs /></a>.  </p>  <p class="read-the-docs"><readTheDocs /></p>  <p class="read-the-docs">{{ readTheDocs }}</p></template>

    Accès 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 : 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 contenant 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.

    (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 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 :

    components/LocaleSwitcher.vue
    Copier le code

    Copier le code dans le presse-papiers

    <script setup lang="ts">import { getLocaleName, getLocalizedUrl } from "intlayer";import { useLocale } from "vue-intlayer";// Nuxt importe automatiquement useRouteconst route = useRoute();const { locale, availableLocales, setLocale } = useLocale();</script><template>  <nav class="locale-switcher">    <NuxtLink      v-for="localeEl in availableLocales"      :key="localeEl"      :to="getLocalizedUrl(route.fullPath, localeEl)"      class="locale-link"      :class="{ 'active-locale': localeEl === locale }"      @click="setLocale(localeEl)"    >      {{ getLocaleName(localeEl) }}    </NuxtLink>  </nav></template>
    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.

    Ensuite, configurez votre app.vue pour utiliser des layouts :

    app.vue
    Copier le code

    Copier le code dans le presse-papiers

    <template>  <NuxtLayout>    <NuxtPage />  </NuxtLayout></template>

    (Optionnel) Étape 6b : Créer un layout avec navigation

    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 :

    layouts/default.vue
    Copier le code

    Copier le code dans le presse-papiers

    <script setup lang="ts">import Links from "~/components/Links.vue";import LocaleSwitcher from "~/components/LocaleSwitcher.vue";</script><template>  <div>    <header>      <LocaleSwitcher />    </header>    <main>      <slot />    </main>    <Links href="/">Accueil</Links>    <Links href="/about">À propos</Links>  </div></template>

    Le composant Links (montré ci-dessous) garantit que les liens de navigation internes sont automatiquement localisés.

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

    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.

    Exemple :

    plaintext
    Copier le code

    Copier le code dans le presse-papiers

    pages/├── index.vue          → /, /fr, /es├── about.vue          → /about, /fr/about, /es/about└── contact/    └── index.vue      → /contact, /fr/contact, /es/contact

    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 :

    Page d'accueil (pages/index.vue) :

    pages/index.vue
    Copier le code

    Copier le code dans le presse-papiers

    <script setup lang="ts">import { useIntlayer } from "vue-intlayer";const content = useIntlayer("home-page");useHead({  title: content.metaTitle.raw,  meta: [    {      name: "description",      content: content.metaDescription.raw,    },  ],});</script><template>  <h1><content.title /></h1></template>

    Page À propos (pages/about.vue) :

    pages/about.vue
    Copier le code

    Copier le code dans le presse-papiers

    <script setup lang="ts">import { useIntlayer } from "vue-intlayer";const content = useIntlayer("about-page");useHead({  title: content.metaTitle.raw, // Utiliser .raw pour accéder à la chaîne primitive  meta: [    {      name: "description",      content: content.metaDescription.raw, // Utilisez .raw pour accéder à la chaîne primitive    },  ],});</script><template>  <h1><content.title /></h1></template>
    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.

    Le module nuxt-intlayer fera automatiquement :

    • Détecter la locale préférée de l'utilisateur
    • Gérer le changement de locale via l'URL
    • Définir l'attribut <html lang=""> approprié
    • Gérer les cookies de locale
    • Rediriger les utilisateurs vers l'URL localisée appropriée

    (Optionnel) Étape 8 : 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é 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.

    components/Links.vue
    Copier le code

    Copier le code dans le presse-papiers

    <script setup lang="ts">import { getLocalizedUrl } from "intlayer";import { useLocale } from "vue-intlayer";interface Props {  href: string;  locale?: string;}const props = defineProps<Props>();const { locale: currentLocale } = useLocale();// Calculer le chemin finalconst finalPath = computed(() => {  // 1. Vérifier si le lien est externe  const isExternal = /^https?:\/\//.test(props.href || "");  // 2. Si externe, retourner tel quel (NuxtLink gère la génération de la balise <a>)  if (isExternal) return props.href;  // 3. Si le lien est interne, localiser l'URL  const targetLocale = props.locale || currentLocale.value;  return getLocalizedUrl(props.href, targetLocale);});</script><template>  <NuxtLink :to="finalPath" v-bind="$attrs">    <slot />  </NuxtLink></template>

    Ensuite, utilisez ce composant dans toute votre application :

    layouts/default.vue
    Copier le code

    Copier le code dans le presse-papiers

    <script setup lang="ts">import Links from "~/components/Links.vue";import LocaleSwitcher from "~/components/LocaleSwitcher.vue";</script><template>  <div>    <header>      <LocaleSwitcher />    </header>    <main>      <slot />    </main>    <Links href="/">Accueil</Links>    <Links href="/about">À propos</Links>  </div></template>

    En utilisant NuxtLink avec des chemins localisés, vous vous assurez que :

    • Les moteurs de recherche peuvent explorer et indexer toutes les versions linguistiques de vos pages
    • Les utilisateurs peuvent partager directement des URLs localisées
    • L'historique du navigateur fonctionne correctement avec des URLs préfixées par la locale

    (Optionnel) Étape 9 : Gérer les métadonnées et le SEO

    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 :

    pages/about.vue
    Copier le code

    Copier le code dans le presse-papiers

    <script setup lang="ts">import { useIntlayer } from "vue-intlayer";// useHead est auto-importé dans Nuxtconst content = useIntlayer("about-page");useHead({  title: content.metaTitle.raw, // Utilisez .raw pour accéder à la chaîne primitive  meta: [    {      name: "description",      content: content.metaDescription.raw, // Utilisez .raw pour accéder à la chaîne primitive    },  ],});</script><template>  <h1><content.title /></h1></template>
    Alternativement, vous pouvez utiliser la fonction import { getIntlayer } from "intlayer" pour obtenir le contenu sans la réactivité de Vue.

    Accéder aux valeurs du contenu :

    • Utilisez .raw pour obtenir la valeur primitive de la chaîne (non réactive)
    • Utilisez .value pour obtenir la valeur réactive
    • Utilisez la syntaxe composant <content.key /> pour le support de l'éditeur visuel

    Créez la déclaration de contenu correspondante :

    pages/about-page.content.ts
    Copier le code

    Copier le code dans le presse-papiers

    import { t, type Dictionary } from "intlayer";
    
    const aboutPageContent = {
      key: "about-page",
      content: {
        metaTitle: t({
          en: "About Us - My Company",
          fr: "À Propos - Ma Société",
          es: "Acerca de Nosotros - Mi Empresa",
        }),
        metaDescription: t({
          en: "Learn more about our company and our mission",
          fr: "En savoir plus sur notre société et notre mission",
          es: "Conozca más sobre nuestra empresa y nuestra misión",
        }),
        title: t({
          en: "About Us",
          fr: "À Propos",
          es: "Acerca de Nosotros",
        }),
      },
    } satisfies Dictionary;
    
    export default aboutPageContent;

    Configuration Git

    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 dans votre fichier .gitignore :

    .gitignore
    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.

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


    Aller plus loin

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

    Vite et Vue
    Vite et Solid
    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 --save-dev nuxt-intlayernpx intlayer init
      import { defineNuxtConfig } from "nuxt/config";export default defineNuxtConfig({  // ... Votre configuration Nuxt existante  modules: ["nuxt-intlayer"],});
      <script setup lang="ts">import { ref } from "vue";import { useIntlayer } from "vue-intlayer";defineProps({  msg: String,});const {  count,  edit,  checkOut,  nuxtIntlayer,  learnMore,  nuxtDocs,  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://nuxt.com/docs/getting-started/introduction" target="_blank"      >Nuxt</a    >, <nuxtIntlayer />  </p>  <p>    <learnMore />    <a href="https://nuxt.com" target="_blank"><nuxtDocs /></a>.  </p>  <p class="read-the-docs"><readTheDocs /></p>  <p class="read-the-docs">{{ readTheDocs }}</p></template>
      <script setup lang="ts">import { getLocaleName, getLocalizedUrl } from "intlayer";import { useLocale } from "vue-intlayer";// Nuxt importe automatiquement useRouteconst route = useRoute();const { locale, availableLocales, setLocale } = useLocale();</script><template>  <nav class="locale-switcher">    <NuxtLink      v-for="localeEl in availableLocales"      :key="localeEl"      :to="getLocalizedUrl(route.fullPath, localeEl)"      class="locale-link"      :class="{ 'active-locale': localeEl === locale }"      @click="setLocale(localeEl)"    >      {{ getLocaleName(localeEl) }}    </NuxtLink>  </nav></template>
      <template>  <NuxtLayout>    <NuxtPage />  </NuxtLayout></template>
      <script setup lang="ts">import Links from "~/components/Links.vue";import LocaleSwitcher from "~/components/LocaleSwitcher.vue";</script><template>  <div>    <header>      <LocaleSwitcher />    </header>    <main>      <slot />    </main>    <Links href="/">Accueil</Links>    <Links href="/about">À propos</Links>  </div></template>
      pages/├── index.vue          → /, /fr, /es├── about.vue          → /about, /fr/about, /es/about└── contact/    └── index.vue      → /contact, /fr/contact, /es/contact
      <script setup lang="ts">import { useIntlayer } from "vue-intlayer";const content = useIntlayer("home-page");useHead({  title: content.metaTitle.raw,  meta: [    {      name: "description",      content: content.metaDescription.raw,    },  ],});</script><template>  <h1><content.title /></h1></template>
      <script setup lang="ts">import { useIntlayer } from "vue-intlayer";const content = useIntlayer("about-page");useHead({  title: content.metaTitle.raw, // Utiliser .raw pour accéder à la chaîne primitive  meta: [    {      name: "description",      content: content.metaDescription.raw, // Utilisez .raw pour accéder à la chaîne primitive    },  ],});</script><template>  <h1><content.title /></h1></template>
      <script setup lang="ts">import { getLocalizedUrl } from "intlayer";import { useLocale } from "vue-intlayer";interface Props {  href: string;  locale?: string;}const props = defineProps<Props>();const { locale: currentLocale } = useLocale();// Calculer le chemin finalconst finalPath = computed(() => {  // 1. Vérifier si le lien est externe  const isExternal = /^https?:\/\//.test(props.href || "");  // 2. Si externe, retourner tel quel (NuxtLink gère la génération de la balise <a>)  if (isExternal) return props.href;  // 3. Si le lien est interne, localiser l'URL  const targetLocale = props.locale || currentLocale.value;  return getLocalizedUrl(props.href, targetLocale);});</script><template>  <NuxtLink :to="finalPath" v-bind="$attrs">    <slot />  </NuxtLink></template>
      <script setup lang="ts">import Links from "~/components/Links.vue";import LocaleSwitcher from "~/components/LocaleSwitcher.vue";</script><template>  <div>    <header>      <LocaleSwitcher />    </header>    <main>      <slot />    </main>    <Links href="/">Accueil</Links>    <Links href="/about">À propos</Links>  </div></template>
      <script setup lang="ts">import { useIntlayer } from "vue-intlayer";// useHead est auto-importé dans Nuxtconst content = useIntlayer("about-page");useHead({  title: content.metaTitle.raw, // Utilisez .raw pour accéder à la chaîne primitive  meta: [    {      name: "description",      content: content.metaDescription.raw, // Utilisez .raw pour accéder à la chaîne primitive    },  ],});</script><template>  <h1><content.title /></h1></template>
      # Ignorer les fichiers générés par Intlayer.intlayer