HomeAmbiente di testVetrinaAppDocBlog
    • Englishinglese
      EN
    • русскийrusso
      RU
    • 日本語giapponese
      JA
    • françaisfrancese
      FR
    • 한국어coreano
      KO
    • 中文cinese
      ZH
    • españolspagnolo
      ES
    • Deutschtedesco
      DE
    • العربيةarabo
      AR
    • italianoitaliano
      IT
    • British Englishinglese britannico
      EN-GB
    • portuguêsportoghese
      PT
    • हिन्दीhindi
      HI
    • Türkçeturco
      TR
    • polskipolacco
      PL
    • Indonesiaindonesiano
      ID
    • Tiếng Việtvietnamita
      VI
    • українськаucraino
      UK
    /
    Filtra la documentazione per framework
    Alt+←
    Perché Intlayer?
    Iniziare
    Concetto
    • Come funziona Intlayer
    • Configurazione
    • TestFillBuildWatchExtractLoginPushPullConfigurationListVersionEditorLiveDebugDoc ReviewDoc TranslateSDK
    • Editor visuale
    • CMS
    • Integrazione CI/CD
    • TraduzionePluraleEnumerazioneCondizioneGenereInserimentoFileAnnidamentoMarkdownHTMLRecupero funzione
    • File per locale
    • Compilatore
    • Compilazione automatica
    • Test
    • Ottimizzazione del bundle
    Ambiente
    • Next.js 14 e App Router
      Next.js 15
      Next.js senza locale URL
      Next.js e Page Router
      Compiler
    • Tanstack Start Solid
    • Astro e React
      Astro e Svelte
      Astro e Vue
      Astro e Solid
      Astro e Preact
      Astro e Lit
      Astro e Vanilla JS
    • React Router v7
      React Router v7 (fs-routes)
      Compiler
    • Nuxt e Vue
    • Vite e Solid
    • SvelteKit
    • Vite e Preact
    • Vite e Vanilla JS
    • Vite e Lit
    • Angular 19 (Webpack)
      Analog
    • React CRA
    • React Native e Expo
    • Express.js
      NestJS
      Fastify
      Hono
      Adonis
    • Lynx e React
    Plugins
    • JSON
    • gettext (.po)
    Estensione VS Code
    Agente
    • Server MCP
    • Abilità dell’agente
    Versioni
    • v8
    • v7
    • v6
    Benchmark
    • Next.js
    • TanStack
    • Vue
    • Solid
    • Svelte
    Blog
    Fai una domanda
    1. Documentation
    2. Ambiente
    3. Lynx and react
    Creazione:2025-03-09Ultimo aggiornamento:2026-05-06
    Visualizza il modello di applicazione su GitHub

    Questa pagina ha un modello di applicazione disponibile.

    Riferimento a questa documentazione al tuo assistente AI preferito
    ChatGPT
    Claude
    DeepSeek
    Google AI mode
    Gemini
    Perplexity
    Mistral
    Grok

    Pose una domanda e ottieni un riassunto del documento facendo riferimento a questa pagina e al provider AI di tua scelta

    Cronologia delle versioni

    1. "Aggiornare l'uso dell'API useIntlayer di Solid all'accesso diretto alle proprietà"
      v8.9.004/05/2026
    2. "Aggiungi comando init"
      v7.5.930/12/2025
    3. "Inizio cronologia"
      v5.5.1029/06/2025

    Il contenuto di questa pagina è stato tradotto con un'IA.

    Vedi l'ultima versione del contenuto originale in inglese
    Modifica questa documentazione

    Se hai un’idea per migliorare questa documentazione, non esitare a contribuire inviando una pull request su GitHub.

    Collegamento GitHub alla documentazione
    Copia

    Copia il Markdown del documento nella porta-documenti

    Traduci la tua Lynx and React mobile app con Intlayer | Internazionalizzazione (i18n)

    Consulta Application Template su GitHub.

    Cos'è Intlayer?

    Intlayer è una libreria innovativa e open-source per l'internazionalizzazione (i18n) che semplifica il supporto multilingue nelle applicazioni moderne. Funziona in molti ambienti JavaScript/TypeScript, incluso Lynx (tramite il pacchetto react-intlayer).

    Con Intlayer, puoi:

    • Gestire facilmente le traduzioni utilizzando dizionari dichiarativi a livello di componente.
    • Garantire il supporto TypeScript con tipi autogenerati.
    • Localizzare dinamicamente i contenuti, incluse le stringhe dell'interfaccia utente (e in React per il web, può anche localizzare i metadati HTML, ecc.).
    • Beneficiare di funzionalità avanzate, come il rilevamento dinamico della lingua e il cambio di lingua.

    Passo 1: Installa le dipendenze

    Dal tuo progetto Lynx, installa i seguenti pacchetti:

    bash
    Copiare il codice

    Copiare il codice nella clipboard

    npm install intlayer react-intlayer lynx-intlayernpx intlayer init

    Pacchetti

    • intlayer
      Il toolkit i18n principale per la configurazione, il contenuto del dizionario, la generazione di tipi e i comandi CLI.

    • react-intlayer
      Integrazione React che fornisce i provider di contesto e gli hook React che utilizzerai in Lynx per ottenere e cambiare le lingue.

    • lynx-intlayer
      Integrazione Lynx che fornisce il plugin per integrare Intlayer con il bundler Lynx.


    Passo 2: Crea una Configurazione Intlayer

    Nella radice del tuo progetto (o in qualsiasi posizione comoda), crea un file di configurazione Intlayer. Potrebbe apparire così:

    intlayer.config.ts
    Copiare il codice

    Copiare il codice nella clipboard

    import { Locales, type IntlayerConfig } from "intlayer";
    
    const config: IntlayerConfig = {
      internationalization: {
        locales: [
          Locales.ENGLISH,
          Locales.FRENCH,
          Locales.SPANISH,
          // ... Aggiungi altre lingue necessarie
        ],
        defaultLocale: Locales.ENGLISH,
      },
    };
    
    export default config;

    All'interno di questa configurazione, puoi:

    • Configurare la tua lista di lingue supportate.
    • Impostare una lingua predefinita.
    • Successivamente, potrai aggiungere opzioni più avanzate (es. log, directory di contenuti personalizzate, ecc.).
    • Consulta la documentazione sulla configurazione di Intlayer per ulteriori informazioni.

    Passo 3: Aggiungi il plugin Intlayer al bundler Lynx

    Per utilizzare Intlayer con Lynx, devi aggiungere il plugin al file lynx.config.ts:

    lynx.config.ts
    Copiare il codice

    Copiare il codice nella clipboard

    import { defineConfig } from "@lynx-js/rspeedy";import { pluginIntlayerLynx } from "lynx-intlayer/plugin";export default defineConfig({  plugins: [    // ... altri plugin    pluginIntlayerLynx(),  ],});

    Passo 4: Aggiungi il provider Intlayer

    Per mantenere sincronizzata la lingua dell'utente in tutta l'applicazione, devi avvolgere il tuo componente radice con il componente IntlayerProvider di react-intlayer.

    Inoltre, devi aggiungere il file della funzione intlayerPolyfill per garantire che Intlayer funzioni correttamente.

    src/index.tsx
    Copiare il codice

    Copiare il codice nella clipboard

    import { root } from "@lynx-js/react";import { App } from "./App.js";import { IntlayerProvider } from "react-intlayer";import { intlayerPolyfill } from "lynx-intlayer";intlayerPolyfill();root.render(  <IntlayerProvider>    <App />  </IntlayerProvider>);if (import.meta.webpackHot) {  import.meta.webpackHot.accept();}

    Passo 5: Dichiarare i tuoi contenuti

    Crea file di dichiarazione dei contenuti ovunque nel tuo progetto (comunemente all'interno di src/), utilizzando uno qualsiasi dei formati di estensione supportati da Intlayer:

    • .content.json
    • .content.ts
    • .content.tsx
    • .content.js
    • .content.jsx
    • .content.mjs
    • .content.mjx
    • .content.cjs
    • .content.cjx
    • ecc.

    Esempio:

    src/app.content.ts
    Copiare il codice

    Copiare il codice nella clipboard

    import { t, type Dictionary } from "intlayer";
    
    const appContent = {
      key: "app",
      content: {
        title: "React",
        subtitle: t({
          it: "su Lynx",
          en: "on Lynx",
          fr: "sur Lynx",
          es: "en Lynx",
        }),
        description: t({
          it: "Tocca il logo e divertiti!",
          en: "Tap the logo and have fun!",
          fr: "Appuyez sur le logo et amusez-vous!",
          es: "¡Toca el logo y diviértete!",
        }),
        hint: [
          t({
            it: "Modifica",
            en: "Edit",
            fr: "Modifier",
            es: "Editar",
          }),
          " src/App.tsx ",
          t({
            it: "per vedere gli aggiornamenti!",
            en: "to see updates!",
            fr: "pour voir les mises à jour!",
            es: "para ver actualizaciones!",
          }),
        ],
      },
    } satisfies Dictionary;
    
    export default appContent;
    Per dettagli sulle dichiarazioni di contenuto, consulta la documentazione sui contenuti di Intlayer.

    Passo 4: Usa Intlayer nei tuoi Componenti

    Usa il hook useIntlayer nei componenti figli per ottenere contenuti localizzati.

    src/App.tsx
    Copiare il codice

    Copiare il codice nella clipboard

    import { useCallback, useState } from "@lynx-js/react";import { useIntlayer } from "react-intlayer";import "./App.css";import arrow from "./assets/arrow.png";import lynxLogo from "./assets/lynx-logo.png";import reactLynxLogo from "./assets/react-logo.png";import { LocaleSwitcher } from "./components/LocaleSwitcher.jsx";export const App = () => {  const [alterLogo, setAlterLogo] = useState(false);  const { title, subtitle, description, hint } = useIntlayer("app");  const onTap = useCallback(() => {    // solo sfondo    setAlterLogo(!alterLogo);  }, [alterLogo]);  return (    <view>      <view className="Background" />      <view className="App">        <view className="Banner">          <view className="Logo" bindtap={onTap}>            {alterLogo ? (              <image src={reactLynxLogo} className="Logo--react" />            ) : (              <image src={lynxLogo} className="Logo--lynx" />            )}          </view>          <text className="Title">{title}</text>          <text className="Subtitle">{subtitle}</text>        </view>        <view className="Content">          <image src={arrow} className="Arrow" />          <text className="Description">{description}</text>          <text className="Hint">            {hint[0]}            <text style={{ fontStyle: "italic" }}>{hint[1]}</text>            {hint[2]}          </text>        </view>        <LocaleSwitcher />        <view style={{ flex: 1 }}></view>      </view>    </view>  );};
    Quando utilizzi content.someKey in proprietà basate su stringhe (ad esempio, il title di un pulsante o il children di un componente Text), chiama content.someKey.value per ottenere la stringa effettiva.

    (Opzionale) Passo 5: Cambia la Lingua dell'App

    Per cambiare la lingua direttamente dai tuoi componenti, puoi usare il metodo setLocale del hook useLocale:

    src/components/LocaleSwitcher.tsx
    Copiare il codice

    Copiare il codice nella clipboard

    import { type FC } from "react";import { getLocaleName } from "intlayer";import { useLocale } from "react-intlayer";export const LocaleSwitcher: FC = () => {  const { setLocale, availableLocales, locale } = useLocale();  return (    <view      style={{        display: "flex",        flexDirection: "row",        justifyContent: "center",        alignItems: "center",        gap: 10,      }}    >      {availableLocales.map((localeEl) => (        <text          key={localeEl}          style={{            color: localeEl === locale ? "#fff" : "#888",            fontSize: "12px",          }}          bindtap={() => setLocale(localeEl)}        >          {getLocaleName(localeEl)}        </text>      ))}    </view>  );};

    Questo attiva un nuovo rendering di tutti i componenti che utilizzano i contenuti di Intlayer, mostrando ora le traduzioni per la nuova lingua.

    Consulta la documentazione di useLocale per maggiori dettagli.

    Configura TypeScript (se utilizzi TypeScript)

    Intlayer genera definizioni di tipo in una cartella nascosta (di default .intlayer) per migliorare l'autocompletamento e rilevare errori di traduzione:

    json5
    Copiare il codice

    Copiare il codice nella clipboard

    // tsconfig.json{  // ... la tua configurazione TS esistente  "include": [    "src", // il tuo codice sorgente    ".intlayer/types/**/*.ts", // <-- assicurati che i tipi generati automaticamente siano inclusi    // ... qualsiasi altra cosa già inclusa  ],}

    Questo abilita funzionalità come:

    • Autocompletamento per le chiavi del tuo dizionario.
    • Controllo dei tipi che avvisa se accedi a una chiave inesistente o se il tipo non corrisponde.

    Per evitare di commettere file generati automaticamente da Intlayer, aggiungi quanto segue al tuo .gitignore:

    bash
    Copiare il codice

    Copiare il codice nella clipboard

    #  Ignora i file generati da Intlayer.intlayer

    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:

    • Autocompletamento per le chiavi di traduzione.
    • Rilevamento errori in tempo reale per traduzioni mancanti.
    • Anteprime inline dei contenuti tradotti.
    • 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.

    Approfondisci

    • Editor Visivo: Usa l'Editor Visivo di Intlayer per gestire le traduzioni visivamente.
    • Integrazione CMS: Puoi anche esternalizzare e recuperare i contenuti del tuo dizionario da un CMS.
    • Comandi CLI: Esplora la CLI di Intlayer per attività come estrarre traduzioni o controllare chiavi mancanti.

    Adonis
    JSON
    Alt+→

    In questa pagina

      Le discussioni sono anonime e vengono regolarmente esaminate per affrontare problemi comuni. Sentiti libero di condividere idee per nuove funzionalità, feedback sulla documentazione o qualsiasi cosa relativa a Intlayer, utilizziamo questi input per definire la nostra roadmap e migliorare il prodotto.

      npm install intlayer react-intlayer lynx-intlayernpx intlayer init
      import { defineConfig } from "@lynx-js/rspeedy";import { pluginIntlayerLynx } from "lynx-intlayer/plugin";export default defineConfig({  plugins: [    // ... altri plugin    pluginIntlayerLynx(),  ],});
      import { root } from "@lynx-js/react";import { App } from "./App.js";import { IntlayerProvider } from "react-intlayer";import { intlayerPolyfill } from "lynx-intlayer";intlayerPolyfill();root.render(  <IntlayerProvider>    <App />  </IntlayerProvider>);if (import.meta.webpackHot) {  import.meta.webpackHot.accept();}
      import { useCallback, useState } from "@lynx-js/react";import { useIntlayer } from "react-intlayer";import "./App.css";import arrow from "./assets/arrow.png";import lynxLogo from "./assets/lynx-logo.png";import reactLynxLogo from "./assets/react-logo.png";import { LocaleSwitcher } from "./components/LocaleSwitcher.jsx";export const App = () => {  const [alterLogo, setAlterLogo] = useState(false);  const { title, subtitle, description, hint } = useIntlayer("app");  const onTap = useCallback(() => {    // solo sfondo    setAlterLogo(!alterLogo);  }, [alterLogo]);  return (    <view>      <view className="Background" />      <view className="App">        <view className="Banner">          <view className="Logo" bindtap={onTap}>            {alterLogo ? (              <image src={reactLynxLogo} className="Logo--react" />            ) : (              <image src={lynxLogo} className="Logo--lynx" />            )}          </view>          <text className="Title">{title}</text>          <text className="Subtitle">{subtitle}</text>        </view>        <view className="Content">          <image src={arrow} className="Arrow" />          <text className="Description">{description}</text>          <text className="Hint">            {hint[0]}            <text style={{ fontStyle: "italic" }}>{hint[1]}</text>            {hint[2]}          </text>        </view>        <LocaleSwitcher />        <view style={{ flex: 1 }}></view>      </view>    </view>  );};
      import { type FC } from "react";import { getLocaleName } from "intlayer";import { useLocale } from "react-intlayer";export const LocaleSwitcher: FC = () => {  const { setLocale, availableLocales, locale } = useLocale();  return (    <view      style={{        display: "flex",        flexDirection: "row",        justifyContent: "center",        alignItems: "center",        gap: 10,      }}    >      {availableLocales.map((localeEl) => (        <text          key={localeEl}          style={{            color: localeEl === locale ? "#fff" : "#888",            fontSize: "12px",          }}          bindtap={() => setLocale(localeEl)}        >          {getLocaleName(localeEl)}        </text>      ))}    </view>  );};
      // tsconfig.json{  // ... la tua configurazione TS esistente  "include": [    "src", // il tuo codice sorgente    ".intlayer/types/**/*.ts", // <-- assicurati che i tipi generati automaticamente siano inclusi    // ... qualsiasi altra cosa già inclusa  ],}
      #  Ignora i file generati da Intlayer.intlayer