Questa pagina ha un modello di applicazione disponibile.
Pose una domanda e ottieni un riassunto del documento facendo riferimento a questa pagina e al provider AI di tua scelta
Cronologia delle versioni
- "Importa provider e hook direttamente da react-native-intlayer; react-intlayer non è più necessario come dipendenza diretta"v9.0.025/06/2026
- "Aggiornare l'uso dell'API useIntlayer di Solid all'accesso diretto alle proprietà"v8.9.004/05/2026
- "Aggiungi comando init"v7.5.930/12/2025
- "Storia iniziale"v5.5.1029/06/2025
Il contenuto di questa pagina è stato tradotto con un'IA.
Vedi l'ultima versione del contenuto originale in ingleseSe hai un’idea per migliorare questa documentazione, non esitare a contribuire inviando una pull request su GitHub.
Collegamento GitHub alla documentazioneCopia il Markdown del documento nella porta-documenti
Traduci la tua app Expo e React Native | Internazionalizzazione (i18n)
Indice
Perché Intlayer rispetto alle alternative?
Rispetto alle soluzioni principali come react-native-localize o i18next, Intlayer è una soluzione dotata di ottimizzazioni integrate come:
Intlayer è ottimizzato per funzionare perfettamente con React Native ed Expo offrendo ambito del contenuto a livello di componente, supporto TypeScript e tutte le funzionalità necessarie per ridimensionare l'internazionalizzazione (i18n) nelle app mobili.
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 agent skills, 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.
Invece di caricare enormi file JSON nelle tue pagine, carica solo il contenuto necessario. Intlayer aiuta a ridurre il pacchetto e visualizzare le dimensioni fino al 50%.
Installare le dipendenze
Vedere il Modello di applicazione su GitHub.
Dal tuo progetto React Native, installa i seguenti pacchetti:
bashCopiare il codiceCopiare il codice nella clipboard
Il flag
--interactiveè opzionale. Usaintlayer-cli initse sei un agente IA.Questo comando rileverà il tuo ambiente e installerà i pacchetti richiesti. Ad esempio:
bashCopiare il codiceCopiare il codice nella clipboard
Pacchetti
intlayer
Il toolkit i18n principale per la configurazione, il contenuto del dizionario, la generazione dei tipi e i comandi CLI.react-native-intlayer
Integrazione React Native che fornisce i provider di contesto e gli hook React che utilizzerai per ottenere e cambiare le localizzazioni, i polyfill React Native e il plugin Metro per integrare Intlayer con il bundler di React Native. Riesporta tutto dareact-intlayer, quindi hai bisogno solo di questo singolo pacchetto in un'app React Native.
Crea una Configurazione Intlayer
Nella root del tuo progetto (o in qualsiasi posizione conveniente), crea un file di configurazione Intlayer. Potrebbe apparire così:
intlayer.config.tsCopiare il codiceCopiare il codice nella clipboard
/** * Se i tipi Locales non sono disponibili, prova a impostare moduleResolution su "bundler" nel tuo tsconfig.json */ import { Locales, type IntlayerConfig } from "intlayer"; const config: IntlayerConfig = { internationalization: { locales: [ Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH, // ... Aggiungi qualsiasi altra localizzazione di cui hai bisogno ], defaultLocale: Locales.ENGLISH, }, }; export default config;All'interno di questa configurazione, puoi:
- Configurare la tua lista di localizzazioni supportate.
- Impostare una localizzazione predefinita.
- Successivamente, potrai aggiungere opzioni più avanzate (ad esempio, log, directory di contenuti personalizzate, ecc.).
- Consulta la documentazione di configurazione di Intlayer per maggiori informazioni.
Aggiungi il plugin Metro
Metro è un bundler per React Native. È il bundler predefinito per i progetti React Native creati con il comando
react-native init. Per usare Intlayer con Metro, devi aggiungere il plugin al filemetro.config.js:metro.config.jsCopiare il codiceCopiare il codice nella clipboard
Nota:
configMetroIntlayerè una funzione promise. UsaconfigMetroIntlayerSyncse vuoi usarla in modo sincrono, o evita l'IFFE (Immediately Invoked Function Expression). Nota:configMetroIntlayerSyncnon consente di costruire dizionari intlayer all'avvio del serverAggiungi il provider Intlayer
Per mantenere sincronizzata la lingua dell'utente in tutta l'applicazione, devi avvolgere il componente radice con il componente
IntlayerProviderdareact-native-intlayer.Importa sempre da
react-native-intlayer. Il suoIntlayerProviderinclude polyfill per le API web usate da Intlayer, e il pacchetto riesporta tutti gli hook e le utilità dareact-intlayer.Inoltre, devi aggiungere la funzione
intlayerPolyfillal tuo fileindex.jsper assicurarti che Intlayer possa funzionare correttamente.app/_layout.tsxCopiare il codiceCopiare il codice nella clipboard
import { Stack } from "expo-router"; import { getLocales } from "expo-localization"; import { IntlayerProvider } from "react-native-intlayer"; import { type FC } from "react"; const getDeviceLocale = () => getLocales()[0]?.languageTag; const RootLayout: FC = () => { return ( <IntlayerProvider defaultLocale={getDeviceLocale()}> <Stack> <Stack.Screen name="(tabs)" options={{ headerShown: false }} /> </Stack> </IntlayerProvider> ); }; export default RootLayout;Dichiarare il Tuo Contenuto
Crea file di dichiarazione del contenuto in qualsiasi punto del tuo progetto (comunemente all'interno di
src/), utilizzando uno qualsiasi dei formati di estensione supportati da Intlayer:.content.json.content.jsonc.content.json5.content.ts.content.tsx.content.js.content.jsx.content.mjs.content.mjx.content.cjs.content.md.content.mdx.content.yaml.content.yml- ecc.
Expo Router (web): tieni i file
.content.*fuori dalla directoryapp/. Expo Router tratta ogni file JavaScript/TypeScript all'interno diapp/come una rotta. Sul web, la sua scoperta delle rotte scansiona direttamente il file system e non rispetta ilresolver.blockListdi Metro, quindi un*.content.tsco-localizzato viene registrato come una rotta. Un file comeapp/(tabs)/_layout.content.tsviene persino analizzato come un layout (la parte.contentviene letta come suffisso della piattaforma), il che entra in conflitto con il vero_layout.tsxe genera l'errore:plaintextCopiare il codiceCopiare il codice nella clipboard
Posiziona le tue dichiarazioni in una directory al di fuori di
app/(ad esempiocontent/osrc/content/). Intlayer scopre i file.content.*ovunque nel progetto e i dizionari sono referenziati tramite la lorokey, quindi non sono necessarie modifiche agli import. Su nativo questo non è richiesto (lablockListdi Metro li nasconde già), ma utilizzare una directory diversa daapp/mantiene entrambe le piattaforme funzionanti.Esempio (TypeScript con nodi TSX per React Native):
src/app.content.tsxCopiare il codiceCopiare il codice nella clipboard
import { t, type Dictionary } from "intlayer"; import type { ReactNode } from "react"; /** * Dizionario dei contenuti per il nostro dominio "app" */ import { t, type Dictionary } from "intlayer"; const homeScreenContent = { key: "home-screen", content: { title: t({ en: "Welcome!", fr: "Bienvenue!", es: "¡Bienvenido!", }), }, } satisfies Dictionary; export default homeScreenContent;Per dettagli sulle dichiarazioni di contenuto, consulta la documentazione di Intlayer.
Usa Intlayer nei tuoi componenti
Usa l'hook
useIntlayernei componenti figli per ottenere contenuti localizzati.Esempio
app/(tabs)/index.tsxCopiare il codiceCopiare il codice nella clipboard
import { Image, StyleSheet, Platform } from "react-native"; import { useIntlayer } from "react-native-intlayer"; import { HelloWave } from "@/components/HelloWave"; import ParallaxScrollView from "@/components/ParallaxScrollView"; import { ThemedText } from "@/components/ThemedText"; import { ThemedView } from "@/components/ThemedView"; import { type FC } from "react"; const HomeScreen = (): FC => { const { title, steps } = useIntlayer("home-screen"); return ( <ParallaxScrollView headerBackgroundColor={{ light: "#A1CEDC", dark: "#1D3D47" }} headerImage={ <Image source={require("@/assets/images/partial-react-logo.png")} style={styles.reactLogo} /> } > <ThemedView style={styles.titleContainer}> <ThemedText type="title">{title}</ThemedText> <HelloWave /> </ThemedView> </ParallaxScrollView> ); }; const styles = StyleSheet.create({ titleContainer: { flexDirection: "row", alignItems: "center", gap: 8, }, }); export default HomeScreen;Quando si utilizza
content.someKeyin proprietà basate su stringhe (ad esempio, iltitledi un pulsante o ichildrendi un componenteText), chiamarecontent.someKey.valueper ottenere la stringa effettiva.Se la tua app esiste già, puoi utilizzare l' Intlayer Compiler in combinazione con il comando extract per convertire migliaia di componenti in un secondo.
Cambiare la Lingua dell'App
OpzionalePer cambiare la lingua dall'interno dei tuoi componenti, puoi usare il metodo
setLocaledell'hookuseLocale:src/components/LocaleSwitcher.tsxCopiare il codiceCopiare il codice nella clipboard
import { type FC } from "react"; import { View, Text, TouchableOpacity, StyleSheet } from "react-native"; import { getLocaleName } from "intlayer"; import { useLocale } from "react-native-intlayer"; export const LocaleSwitcher: FC = () => { const { setLocale, availableLocales } = useLocale(); return ( <View style={styles.container}> {availableLocales.map((locale) => ( <TouchableOpacity key={locale} style={styles.button} onPress={() => setLocale(locale)} > <Text style={styles.text}>{getLocaleName(locale)}</Text> </TouchableOpacity> ))} </View> ); }; const styles = StyleSheet.create({ container: { flexDirection: "row", justifyContent: "center", alignItems: "center", gap: 8, }, button: { paddingVertical: 6, paddingHorizontal: 12, borderRadius: 6, backgroundColor: "#ddd", }, text: { fontSize: 14, fontWeight: "500", color: "#333", }, });Questo provoca un nuovo rendering di tutti i componenti che utilizzano contenuti Intlayer, mostrando ora le traduzioni per la nuova localizzazione.
Vedi la documentazione di
useLocaleper maggiori dettagli.
Configurare TypeScript (se usi TypeScript)
Intlayer genera definizioni di tipo in una cartella nascosta (di default .intlayer) per migliorare l'autocompletamento e rilevare errori di traduzione:
Copiare il codice nella clipboard
Questo abilita funzionalità come:
- Completamento automatico per le chiavi del tuo dizionario.
- Controllo dei tipi che avvisa se accedi a una chiave inesistente o se c'è un disallineamento di tipo.
Configurazione Git
Per evitare di commettere file generati automaticamente da Intlayer, aggiungi quanto segue al tuo .gitignore:
Copiare il codice nella clipboard
Estensione VS Code
Per migliorare la tua esperienza di sviluppo con Intlayer, puoi installare la Estensione ufficiale Intlayer per VS Code.
Installa dal Marketplace di VS Code
Questa estensione offre:
- Completamento automatico 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 dell'estensione Intlayer per VS Code.
Vai oltre
- Editor Visivo: Usa il Visual Editor di Intlayer per gestire le traduzioni in modo visivo.
- Integrazione CMS: Puoi anche esternalizzare e recuperare il contenuto del tuo dizionario da un CMS.
- Comandi CLI: Esplora il CLI di Intlayer per attività come estrarre traduzioni o controllare le chiavi mancanti.
Divertiti a sviluppare le tue app React Native con un i18n completamente potenziato tramite Intlayer!
Debug
React Native può essere meno stabile di React Web, quindi presta particolare attenzione all'allineamento delle versioni.
Intlayer è principalmente orientato all'API Web Intl; su React Native è necessario includere i polyfill appropriati.
Checklist:
- Utilizza le versioni più recenti di
intlayerereact-native-intlayer. - Abilita il polyfill di Intlayer.
- Se utilizzi
getLocaleNameo altre utility basate su Intl-API, importa questi polyfill all'inizio (ad esempio inindex.jsoApp.tsx):
Copiare il codice nella clipboard
- Verifica la configurazione di Metro (resolver aliases, asset plugins, percorsi
tsconfig) se i moduli non vengono risolti.
Domande frequenti
i18n-jsabbinato aexpo-localization: l'abbinamento storico, un semplice oggetto di messaggi senza tipizzazione.react-i18next: lo standard dell'ecosistema React, con namespace JSON caricati a runtime.Intlayer: contenuto dichiarato accanto a ogni componente e compilato dal plugin Metro in fase di build, completamente tipizzato, con traduzione AI, un editor visivo e un CMS.
Su mobile l'argomento della dimensione è più forte che sul web, perché tutto è incluso nell'app invece di essere recuperato per pagina. Compilare il contenuto per componente tiene le lingue e le chiavi non utilizzate fuori dal bundle. Vedi perché Intlayer.
Molto meno di un catalogo a runtime, cosa che conta di più su mobile che sul web perché tutto è incluso nell'app invece di essere recuperato per pagina. Il plugin Metro risolve le chiamate useIntlayer alle esatte voci che un componente utilizza, così le chiavi e le lingue non utilizzate non raggiungono mai il binario. Misurato rispetto alle alternative abituali, Intlayer riduce la dimensione del bundle fino al 50%. Vedi ottimizzazione del bundle.
Sì, e ci sono due percorsi. Puoi migrare il contenuto progressivamente con la guida alla migrazione da i18n-js o la guida alla migrazione da react-i18next. Oppure puoi mantenere interamente la tua API attuale: gli adattatori di compatibilità espongono esattamente la stessa API di react-i18next e react-intl, ma servita dai dizionari Intlayer, quindi cambiano gli import e il codice dei componenti no.
Sì. Il plugin di sincronizzazione JSON mantiene i tuoi file /messages/{locale}/{namespace}.json come fonte di verità e genera dizionari Intlayer da essi, in entrambe le direzioni. Un plugin di sincronizzazione PO fa lo stesso per i cataloghi gettext, e i file per locale ti permettono di dividere il contenuto per lingua invece di raggruppare i locale in un unico file.
No. Esegui npx intlayer extract e Intlayer legge i tuoi file sorgente, estrae le stringhe visibili all'utente e scrive un file .content accanto a ciascuno, così puoi rivedere un diff invece di copiare le stringhe in un catalogo una alla volta. Vedi il comando extract.
Per una pipeline completamente automatizzata, il Compilatore Intlayer fa lo stesso in fase di build sul codice sorgente JSX, TSX, Vue e Svelte, generando i dizionari ad ogni modifica così non ci sono chiavi da mantenere a mano. Funziona per analisi statica, quindi le stringhe che esistono solo a runtime restano fuori portata, e ha bisogno di alcune annotazioni per distinguere il testo visibile all'utente dalla logica applicativa.
Cinque componenti, tutti opzionali:
- Estensione VS Code: salta da una chiave
useIntlayeral file di contenuto che la dichiara, estrai il contenuto da un componente ed esegui build, fill, test, push e pull dalla palette dei comandi o da una scheda Intlayer dedicata. - Server LSP: la stessa consapevolezza in qualsiasi editor che parla LSP, con vai alla definizione, trova tutti i riferimenti, anteprime al passaggio del mouse di un valore tradotto, autocompletamento di chiavi e campi, e un avviso quando una chiave non è dichiarata da nessuna parte. Risolve anche le chiamate
i18next,react-i18next,next-intleuse-intl, il che aiuta durante la migrazione. - Server MCP: espone la documentazione di Intlayer e la CLI a Cursor, VS Code, Claude Desktop, Claude Code e ChatGPT, così un assistente risponde in base alla documentazione aggiornata invece di tirare a indovinare, e può eseguire da solo comandi come
intlayer fill. - Agent skills: competenze mirate come
intlayer-config,intlayer-clieintlayer-content, più una per framework, che insegnano a un agente la tua configurazione di routing e i tipi di nodo dei contenuti. - Plugin ESLint:
no-raw-textsegnala le stringhe hardcoded, con ulteriori regole per le chiavi statiche dei dizionari e i contenuti non utilizzati.
