Pose una domanda e ottieni un riassunto del documento facendo riferimento a questa pagina e al provider AI di tua scelta
Cronologia delle versioni
- "Aggiornare l'uso dell'API useIntlayer di Solid all'accesso diretto alle proprietà"v8.9.004/05/2026
- "Aggiornamento LocaleSwitcher, SEO, metadata"v7.3.1107/12/2025
- "Inizializzazione cronologia"v5.5.1029/06/2025
Il contenuto di questa pagina è stato tradotto con un'IA.
Vedi l'ultima versione del contenuto originale in ingleseIf you have an idea for improving this documentation, please feel free to contribute by submitting a pull request on GitHub.
GitHub link to the documentationCopy doc Markdown to clipboard
Traduci il tuo sito Nuxt e Vue usando Intlayer | Internazionalizzazione (i18n)
Indice
Perché Intlayer rispetto alle alternative?
Rispetto alle soluzioni principali come @nuxtjs/i18n o i18next, Intlayer è una soluzione dotata di ottimizzazioni integrate come:
Intlayer è ottimizzato per funzionare perfettamente con Nuxt offrendo routing multilingue, middleware per il rilevamento locale, mappa del sito e tutte le funzionalità necessarie per scalare l'internazionalizzazione (i18n).
Invece di caricare enormi file JSON nelle tue pagine, carica solo il contenuto necessario. Intlayer aiuta a ridurre le dimensioni del bundle e della pagina fino al 50%.
L'ambito del contenuto dell'applicazione facilita la manutenzione per applicazioni su larga scala. Puoi duplicare o eliminare una singola cartella di funzionalità senza l'onere mentale di rivedere l'intera codebase dei contenuti. Inoltre, Intlayer è completamente tipizzato (fully typed) per garantire l'accuratezza dei tuoi contenuti.
La co-localizzazione dei contenuti riduce il contesto necessario dai Large Language Models (LLM). Intlayer viene fornito anche con una suite di strumenti, come una CLI per verificare le traduzioni mancanti,LSP, MCP e capacità dell'agente, per rendere l'esperienza dello sviluppatore (DX) ancora più fluida per gli agenti IA.
Utilizza l'automazione per tradurre nella tua pipeline CI/CD utilizzando il LLM di tua scelta al costo del tuo provider di intelligenza artificiale. Intlayer offre anche un compilatore per automatizzare l'estrazione dei contenuti, nonché una piattaforma web per aiutare a tradurre in background.
La connessione di enormi file JSON ai componenti può portare a problemi di prestazioni e reattività. Intlayer ottimizza il caricamento dei contenuti in fase di compilazione.
Più di una semplice soluzione i18n, Intlayer fornisce un editor visivo self-hosted e un CMS completo per aiutarti gestisci i tuoi contenuti multilingue in tempo reale, semplificando la collaborazione con traduttori, copywriter e altri membri del team. I contenuti possono essere archiviati localmente e/o in remoto.
Guida passo-passo per configurare Intlayer in un'applicazione Nuxt
Vedi il Template dell'Applicazione su GitHub.
Installa le dipendenze
Installa i pacchetti necessari usando npm:
bashCopiare il codiceCopiare il codice nella clipboard
npm install intlayer vue-intlayernpm install --save-dev nuxt-intlayernpx intlayer initintlayer
Il pacchetto core che fornisce strumenti di internazionalizzazione per la gestione della configurazione, la traduzione, la dichiarazione dei contenuti, la traspilazione e i comandi CLI.
vue-intlayer Il pacchetto che integra Intlayer con l'applicazione Vue. Fornisce i composables per i componenti Vue.
nuxt-intlayer Il modulo Nuxt che integra Intlayer con le applicazioni Nuxt. Fornisce una configurazione automatica, middleware per il rilevamento della locale, gestione dei cookie e reindirizzamento degli URL.
Configurazione del tuo progetto
Crea un file di configurazione per configurare le lingue della tua applicazione:
intlayer.config.tsCopiare il codiceCopiare il codice nella clipboard
import { Locales, type IntlayerConfig } from "intlayer"; const config: IntlayerConfig = { internationalization: { locales: [ Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH, // Le tue altre localizzazioni ], defaultLocale: Locales.ENGLISH, }, }; export default config;Attraverso questo file di configurazione, puoi impostare URL localizzati, reindirizzamenti middleware, nomi dei cookie, la posizione e l'estensione delle tue dichiarazioni di contenuto, disabilitare i log di Intlayer nella console e altro ancora. Per un elenco completo dei parametri disponibili, consulta la documentazione di configurazione.
Integra Intlayer nella tua configurazione Nuxt
Aggiungi il modulo intlayer alla tua configurazione Nuxt:
nuxt.config.tsCopiare il codiceCopiare il codice nella clipboard
import { defineNuxtConfig } from "nuxt/config";export default defineNuxtConfig({ // ... La tua configurazione Nuxt esistente modules: ["nuxt-intlayer"],});Il modulo
nuxt-intlayergestisce automaticamente l'integrazione di Intlayer con Nuxt. Configura la costruzione delle dichiarazioni di contenuto, monitora i file in modalità sviluppo, fornisce middleware per il rilevamento della locale e gestisce il routing localizzato.Dichiara il tuo contenuto
Crea e gestisci le tue dichiarazioni di contenuto per memorizzare le traduzioni:
Le tue dichiarazioni di contenuto possono essere definite ovunque nella tua applicazione purché siano incluse nella directory
contentDir(di default,./src). E corrispondano all'estensione del file di dichiarazione del contenuto (di default,.content.{json,ts,tsx,js,jsx,mjs,cjs,md,mdx,yaml,yml}).Per maggiori dettagli, consulta la documentazione sulla dichiarazione dei contenuti.
Utilizza Intlayer nel Tuo Codice
Accedi ai tuoi dizionari di contenuti in tutta l'applicazione Nuxt utilizzando il composable
useIntlayer:components/HelloWorld.vueCopiare il codiceCopiare il codice nella clipboard
<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>Accesso ai Contenuti in Intlayer
Intlayer offre diverse API per accedere ai tuoi contenuti:
Sintassi basata su componenti (consigliata): Usa la sintassi
<myContent />, o<Component :is="myContent" />per rendere il contenuto come un Nodo Intlayer. Questo si integra perfettamente con il Visual Editor e il CMS.Sintassi basata su stringhe: Usa
{{ myContent }}per rendere il contenuto come testo semplice, senza supporto per il Visual Editor.Sintassi HTML grezzo: Usa
<div v-html="myContent" />per rendere il contenuto come HTML grezzo, senza supporto per il Visual Editor.Sintassi di destrutturazione: Il composable
useIntlayerrestituisce un Proxy con il contenuto. Questo proxy può essere destrutturato per accedere al contenuto mantenendo la reattività.- Usa
const content = useIntlayer("myContent");e{{ content.myContent }}/<content.myContent />. - Oppure usa
const { myContent } = useIntlayer("myContent");e{{ myContent}}/<myContent/>per destrutturare il contenuto.
- Usa
Cambiare la lingua del tuo contenuto
OpzionalePer cambiare la lingua del tuo contenuto, puoi usare la funzione
setLocalefornita dal composableuseLocale. Questa funzione ti permette di impostare la locale dell'applicazione e aggiornare di conseguenza il contenuto.Crea un componente per cambiare lingua usando
NuxtLink. Usare link invece di pulsanti per il cambio di locale è una best practice per la SEO e la scoperta delle pagine, poiché permette ai motori di ricerca di scansionare e indicizzare tutte le versioni localizzate delle tue pagine:components/LocaleSwitcher.vueCopiare il codiceCopiare il codice nella clipboard
<script setup lang="ts">import { getLocaleName, getLocalizedUrl } from "intlayer";import { useLocale } from "vue-intlayer";// Nuxt importa automaticamente 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>L'uso di
NuxtLinkcon attributihrefcorretti (tramitegetLocalizedUrl) garantisce che i motori di ricerca possano scoprire tutte le varianti linguistiche delle tue pagine. Questo è preferibile rispetto al cambio di lingua basato solo su JavaScript, che i crawler dei motori di ricerca potrebbero non seguire.Quindi, configura il tuo
app.vueper utilizzare i layout:app.vueCopiare il codiceCopiare il codice nella clipboard
<template> <NuxtLayout> <NuxtPage /> </NuxtLayout></template>Aggiungi il Routing localizzato alla tua applicazione
OpzionaleNuxt gestisce automaticamente il routing localizzato quando si utilizza il modulo
nuxt-intlayer. Questo crea rotte per ogni lingua automaticamente in base alla struttura della directory delle tue pagine.Esempio:
plaintextCopiare il codiceCopiare il codice nella clipboard
pages/├── index.vue → /, /fr, /es├── about.vue → /about, /fr/about, /es/about└── contact/ └── index.vue → /contact, /fr/contact, /es/contactPer creare pagine localizzate, crea semplicemente i tuoi file Vue nella directory
pages/. Ecco due esempi di pagine:Pagina Home (
pages/index.vue):pages/index.vueCopiare il codiceCopiare il codice nella clipboard
<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>Pagina About (
pages/about.vue):pages/about.vueCopiare il codiceCopiare il codice nella clipboard
<script setup lang="ts">import { useIntlayer } from "vue-intlayer";const content = useIntlayer("about-page");useHead({ title: content.metaTitle.raw, // Usa .raw per accedere alla stringa primitiva meta: [ { name: "description", content: content.metaDescription.raw, // Usa .raw per accedere alla stringa primitiva }, ],});</script><template> <h1><content.title /></h1></template>Nota:
useHeadè importato automaticamente in Nuxt. Puoi accedere ai valori del contenuto usando.value(reattivo) o.raw(stringa primitiva) a seconda delle tue esigenze.Il modulo
nuxt-intlayerfarà automaticamente:- Rilevare la locale preferita dall'utente
- Gestire il cambio di locale tramite URL
- Impostare l'attributo
<html lang="">appropriato - Gestire i cookie della locale
- Reindirizzare gli utenti all'URL localizzato corretto
Creare un componente Link localizzato
OpzionalePer garantire che la navigazione della tua applicazione rispetti la lingua corrente, puoi creare un componente
Linkspersonalizzato. Questo componente aggiunge automaticamente il prefisso della lingua corrente agli URL interni, cosa essenziale per la SEO e la scoperta delle pagine.components/Links.vueCopiare il codiceCopiare il codice nella clipboard
<script setup lang="ts">import { getLocalizedUrl } from "intlayer";// Importa il composable per la gestione della lingua correnteimport { useLocale } from "vue-intlayer";interface Props { href: string; locale?: string;}const props = defineProps<Props>();const { locale: currentLocale } = useLocale();// Calcola il percorso finaleconst finalPath = computed(() => { // 1. Verifica se il link è esterno const isExternal = /^https?:\/\//.test(props.href || ""); // 2. Se esterno, restituisci così com'è (NuxtLink gestisce la generazione del tag <a>) if (isExternal) return props.href; // 3. Se è interno, localizza l'URL const targetLocale = props.locale || currentLocale.value; return getLocalizedUrl(props.href, targetLocale);});</script><template> <NuxtLink :to="finalPath" v-bind="$attrs"> <slot /> </NuxtLink></template>Quindi usa questo componente in tutta la tua applicazione:
layouts/default.vueCopiare il codiceCopiare il codice nella clipboard
<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="/">Home</Links> <Links href="/about">About</Links> </div></template>Utilizzando
NuxtLinkcon percorsi localizzati, si garantisce che:- I motori di ricerca possano eseguire la scansione e indicizzare tutte le versioni linguistiche delle tue pagine
- Gli utenti possano condividere direttamente URL localizzati
- La cronologia del browser funzioni correttamente con URL prefissati dalla locale
Gestire Metadata e SEO
OpzionaleNuxt offre eccellenti funzionalità SEO tramite il composable
useHead(auto-importato). Puoi utilizzare Intlayer per gestire i metadata localizzati usando l'accessore.rawo.valueper ottenere il valore stringa primitivo:pages/about.vueCopiare il codiceCopiare il codice nella clipboard
<script setup lang="ts">import { useIntlayer } from "vue-intlayer";// useHead è auto-importato in Nuxtconst content = useIntlayer("about-page");useHead({ title: content.metaTitle.raw, // Usa .raw per accedere al valore stringa primitivo meta: [ { name: "description", content: content.metaDescription.raw, // Usa .raw per accedere alla stringa primitiva }, ],});</script><template> <h1><content.title /></h1></template>In alternativa, puoi usare la funzione
import { getIntlayer } from "intlayer"per ottenere il contenuto senza la reattività di Vue.Accesso ai valori del contenuto:
- Usa
.rawper ottenere il valore stringa primitivo (non reattivo) - Usa
.valueper ottenere il valore reattivo - Usa la sintassi componente
<content.key />per il supporto all'Editor Visuale
Crea la dichiarazione di contenuto corrispondente:
pages/about-page.content.tsCopiare il codiceCopiare il codice nella clipboard
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({ it: "Scopri di più sulla nostra azienda e sulla nostra missione", 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({ it: "Chi Siamo", en: "About Us", fr: "À Propos", es: "Acerca de Nosotros", }), }, } satisfies Dictionary; export default aboutPageContent;- Usa
(Opzionale) Passo 6b: Crea un Layout con Navigazione
I layout di Nuxt ti permettono di definire una struttura comune per le tue pagine. Crea un layout di default che includa il selettore di lingua e la navigazione:
Copiare il codice nella clipboard
<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="/">Home</Links> <Links href="/about">About</Links> </div></template>Il componente Links (mostrato di seguito) garantisce che i link di navigazione interna siano automaticamente localizzati.
Configurazione Git
Si consiglia di ignorare i file generati da Intlayer. Questo ti permette di evitare di committarli nel tuo repository Git.
Per farlo, puoi aggiungere le seguenti istruzioni al tuo file .gitignore:
Copiare il codice nella clipboard
# Ignora i file generati da Intlayer.intlayerEstensione VS Code
Per migliorare la tua esperienza di sviluppo con Intlayer, puoi installare la Intlayer VS Code Extension ufficiale.
Installa dal VS Code Marketplace
Questa estensione offre:
- Autocompletamento per le chiavi di traduzione.
- Rilevamento errori in tempo reale per traduzioni mancanti.
- Anteprime inline del contenuto tradotto.
- Azioni rapide per creare e aggiornare facilmente le traduzioni.
Per maggiori dettagli su come utilizzare l'estensione, consulta la documentazione della Intlayer VS Code Extension.
Vai oltre
Per andare oltre, puoi implementare l'editor visuale o esternalizzare i tuoi contenuti utilizzando il CMS.