Auteur:
    Création:2025-04-18Dernière mise à jour:2026-08-29

    Traduisez votre application Analog (Angular) avec Intlayer | Internationalisation (i18n)

    ide.intlayer.org
    intlayer-analog-template.vercel.app

    Table des matières

    Pourquoi Intlayer plutôt que des alternatives ?

    Par rapport aux solutions principales telles que ngx-translate ou angular-l10n, Intlayer est une solution dotée d'optimisations intégrées telles que :

    Intlayer est optimisé pour fonctionner parfaitement avec Analog en offrant un routage multilingue, une prise en charge SSR et toutes les fonctionnalités nécessaires à l'internationalisation (i18n).

    Au lieu de charger de lourds fichiers JSON dans vos pages, ne chargez que le contenu strictement nécessaire. Intlayer vous aide à réduire la taille de votre bundle et de vos pages jusqu'à 50 %.

    Déclarer le contenu directement au plus près de vos composants facilite la maintenance des applications de grande envergure. Vous pouvez dupliquer ou supprimer le dossier d'une fonctionnalité sans le fardeau mental de devoir passer en revue toute votre base de code de contenu. De plus, Intlayer est entièrement typé pour garantir l'exactitude de vos traductions.

    La colocalisation du contenu réduit le contexte nécessaire aux grands modèles de langage (LLM). Intlayer est également livré avec une suite d'outils, tels qu'une CLI pour vérifier les traductions manquantes, un LSP, un MCP et des agent skills, afin de rendre l'expérience développeur (DX) encore plus fluide pour les agents IA.

    Automatisez les traductions dans votre pipeline CI/CD en utilisant le LLM de votre choix au coût de votre propre fournisseur d'IA. Intlayer propose également un compilateur pour automatiser l'extraction de contenu, ainsi qu'une plateforme web pour vous aider à traduire en arrière-plan.

    Associer de gros fichiers JSON à vos composants peut ralentir les performances et impacter la réactivité. Intlayer optimise le chargement du contenu directement au moment du build.

    Bien plus qu'une simple solution i18n, Intlayer propose un éditeur visuel auto-hébergé et un CMS complet pour gérer votre contenu multilingue en temps réel. Cela rend la collaboration avec les traducteurs, concepteurs-rédacteurs et autres membres de l'équipe extrêmement simple. Le contenu peut être stocké localement et/ou à distance.


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

    Voir le Modèle d'application sur GitHub.

    1. Installer les dépendances

      Installez les packages nécessaires à l'aide de npm :

      bash
      npx intlayer init --interactive
      
      l'indicateur --interactive est facultatif. Utilisez intlayer-cli init si vous êtes un agent IA.
      Cette commande détectera votre environnement et installera les packages requis. Par exemple :
      bash
      npm install intlayer angular-intlayer vite-intlayer
      
      • 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.

      • angular-intlayer Le package qui intègre Intlayer avec l'application Angular. Il fournit des fournisseurs de contexte et des hooks pour l'internationalisation d'Angular.

      • vite-intlayer Le package qui intègre Intlayer avec Vite. Il fournit un plugin pour gérer les fichiers de déclaration de contenu et configure des alias pour des performances optimales.

    2. Configuration de votre projet

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

      intlayer.config.ts
      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 de middleware, les noms de cookies, l'emplacement et l'extension de vos déclarations de contenu, désactiver les logs Intlayer dans la console, et plus encore. Pour une liste complète des paramètres disponibles, reportez-vous à la documentation de configuration.
    3. Intégrer Intlayer dans votre configuration Vite

      Pour intégrer Intlayer avec Analog, vous devez utiliser le plugin vite-intlayer.

      Modifiez votre fichier vite.config.ts :

      vite.config.ts
      import { defineConfig } from "vite";
      import { intlayer } from "vite-intlayer";
      import analog from "@analogjs/platform";
      
      // https://vitejs.dev/config/
      export default defineConfig(() => ({
        plugins: [
          analog(),
          intlayer({
            proxy: {
              ignore: (req) => req.url?.startsWith("/api"),
            },
          }),
        ],
      }));
      
      Le plugin intlayer() configure Vite avec Intlayer. Il gère les fichiers de déclaration de contenu et configure des alias pour des performances optimales.
    4. Déclarer 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 de fichier de déclaration de contenu (par défaut, .content.{json,ts,tsx,js,jsx,mjs,cjs,md,mdx,yaml,yml}).
      Pour plus de détails, reportez-vous à la documentation de déclaration de contenu.
    5. Utiliser Intlayer dans votre code

      Pour utiliser les fonctionnalités d'internationalisation d'Intlayer dans toute votre application Analog, vous devez fournir Intlayer dans la configuration de votre application.

      src/app/app.config.ts
      import { ApplicationConfig } from "@angular/core";
      import { provideIntlayer } from "angular-intlayer";
      
      export const appConfig: ApplicationConfig = {
        providers: [
          provideIntlayer(), // Ajouter le fournisseur Intlayer ici
        ],
      };
      

      Ensuite, vous pouvez utiliser la fonction useIntlayer dans n'importe quel composant.

      src/app/pages/index.page.ts
      import { Component } from "@angular/core";
      import { useIntlayer } from "angular-intlayer";
      
      @Component({
        selector: "app-home",
        standalone: true,
        template: `
          <div class="content">
            <h1>{{ content().title }}</h1>
            <p>{{ content().congratulations }}</p>
          </div>
        `,
      })
      export default class HomeComponent {
        content = useIntlayer("app");
      }
      

      Le contenu Intlayer est retourné sous forme de Signal, vous accédez donc aux valeurs en appelant le signal : content().title.

    6. Changer la langue de votre contenu

      Facultatif

      Pour changer la langue de votre contenu, vous pouvez utiliser la fonction setLocale fournie par la fonction useLocale. Cela 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 :

      src/app/locale-switcher.component.ts
      import { Component } from "@angular/core";
      import { CommonModule } from "@angular/common";
      import { useLocale } from "angular-intlayer";
      
      @Component({
        selector: "app-locale-switcher",
        standalone: true,
        imports: [CommonModule],
        template: `
          <div class="locale-switcher">
            <select
              [value]="locale()"
              (change)="setLocale($any($event.target).value)"
            >
              @for (loc of availableLocales; track loc) {
                <option [value]="loc">{{ loc }}</option>
              }
            </select>
          </div>
        `,
      })
      export class LocaleSwitcherComponent {
        localeCtx = useLocale();
      
        locale = this.localeCtx.locale;
        availableLocales = this.localeCtx.availableLocales;
        setLocale = this.localeCtx.setLocale;
      }
      

      Ensuite, utilisez ce composant dans vos pages :

      src/app/pages/index.page.ts
      import { Component } from "@angular/core";
      import { useIntlayer } from "angular-intlayer";
      import { LocaleSwitcherComponent } from "../locale-switcher.component";
      
      @Component({
        selector: "app-home",
        standalone: true,
        imports: [LocaleSwitcherComponent],
        template: `
          <app-locale-switcher></app-locale-switcher>
          <div class="content">
            <h1>{{ content().title }}</h1>
            <p>{{ content().congratulations }}</p>
          </div>
        `,
      })
      export default class HomeComponent {
        content = useIntlayer("app");
      }
      

    Configurer TypeScript

    Intlayer utilise l'augmentation de module pour bénéficier de TypeScript et rendre votre codebase plus solide.

    Autocomplétion

    Erreur de traduction

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

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

    Configuration Git

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

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

    bash
    #  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.

    Installer depuis le VS Code Marketplace

    Cette extension fournit :

    • 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, reportez-vous à la documentation de l'extension Intlayer VS Code.


    Aller plus loin

    Pour aller plus loin, vous pouvez implémenter l'éditeur visuel ou externaliser votre contenu à l'aide du CMS.

    Questions fréquentes

    Analog est un méta-framework Angular bâti sur Vite, il hérite donc des options Angular et y ajoute celles de Vite :

    • @angular/localize : extraction XLIFF avec un build compilé par locale, ce qui s'accorde mal avec un routeur basé sur les fichiers et le rendu serveur.
    • ngx-translate et Transloco : catalogues JSON d'exécution via un service, sans intégration avec le routage d'Analog ni le rendu côté serveur.
    • Intlayer : contenu déclaré à côté de chaque composant et compilé par le plugin Vite au moment du build, entièrement typé, avec changement de locale à l'exécution, traduction par IA, un éditeur visuel et un CMS.

    Voir pourquoi Intlayer et le guide Angular pour les API spécifiques à Angular.

    Bien moins qu'une configuration basée sur des espaces de noms, car une page ne télécharge jamais un catalogue qu'elle n'affiche pas. Le balisage rendu côté serveur résout son contenu sur le serveur, et le compilateur au moment du build remplace les appels useIntlayer par les entrées de dictionnaire exactes qu'un composant utilise, si bien que les clés inutilisées et les langues inutilisées sont éliminées, et les dictionnaires dynamiques répartissent le reste par locale. Mesuré face aux alternatives habituelles, Intlayer réduit la taille du bundle et des pages jusqu'à 50 %. Voir l'optimisation du bundle et le benchmark.

    En grande partie. Suivez le guide de migration ngx-translate ou le guide de migration Transloco pour transférer le contenu. Vous pouvez aussi migrer progressivement : le plugin de synchronisation JSON conserve vos catalogues JSON existants comme source de vérité et génère les dictionnaires Intlayer à partir d'eux, si bien que les deux couches restent synchronisées pendant que vous déplacez les templates un par un.

    Oui. Le plugin de synchronisation JSON conserve vos fichiers /messages/{locale}/{namespace}.json comme source de vérité et génère les dictionnaires Intlayer à partir d'eux, dans les deux sens. Un plugin de synchronisation PO fait de même pour les catalogues gettext, et les fichiers par locale permettent de séparer le contenu par langue au lieu de regrouper les locales dans un seul fichier.

    Non. Lancez npx intlayer extract et Intlayer lit vos fichiers source, en extrait les chaînes destinées aux utilisateurs et écrit un fichier .content à côté de chacun, de sorte que vous relisez un diff plutôt que de copier des chaînes dans un catalogue une par une. Voir la commande extract.

    Pour un pipeline entièrement automatisé, le compilateur Intlayer fait la même chose au moment du build sur du code source JSX, TSX, Vue et Svelte, en générant les dictionnaires à chaque changement, de sorte qu'il n'y a aucune clé à maintenir à la main. Il fonctionne par analyse statique : les chaînes qui n'existent qu'à l'exécution restent hors de portée, et il a besoin de quelques annotations pour distinguer le texte destiné aux utilisateurs de la logique applicative.

    Cinq éléments, tous optionnels :

    • Extension VS Code : passez d'une clé useIntlayer au fichier de contenu qui la déclare, extrayez du contenu depuis un composant, et lancez build, fill, test, push et pull depuis la palette de commandes ou un onglet Intlayer dédié.
    • Serveur LSP : la même connaissance dans tout éditeur qui parle LSP, avec aller à la définition, rechercher toutes les références, aperçus au survol d'une valeur traduite, autocomplétion des clés et des champs, et un avertissement lorsqu'une clé n'est déclarée nulle part. Il résout aussi les appels i18next, react-i18next, next-intl et use-intl, ce qui aide pendant la migration.
    • Serveur MCP : expose la documentation et la CLI d'Intlayer à Cursor, VS Code, Claude Desktop, Claude Code et ChatGPT, afin qu'un assistant réponde à partir de la documentation actuelle au lieu de deviner, et puisse exécuter lui-même des commandes telles que intlayer fill.
    • Compétences d'agent : des compétences ciblées telles que intlayer-config, intlayer-cli et intlayer-content, plus une par framework, qui apprennent à un agent votre configuration de routage et les types de nœuds de contenu.
    • Plugin ESLint : no-raw-text signale les chaînes codées en dur, avec d'autres règles pour les clés de dictionnaire statiques et le contenu inutilisé.