Автор:
    БозданиС:2024-03-07ПослСднСС обновлСниС:2026-09-06

    Как постфактум ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Vite ΠΈ React многоязычным (i18n руководство 2026)

    Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ (i18n) Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Vite ΠΈ React с самого Π½Π°Ρ‡Π°Π»Π° ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ просто. Но Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ссли Ρƒ вас ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ΅ production-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ языкС, ΠΈ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΡΠ·Ρ‹Ρ‡Π½Ρ‹ΠΌ постфактум?

    Π‘ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ Π²Ρ€ΠΎΠ΄Π΅ react-i18next ΠΈΠ»ΠΈ react-intl это прСвращаСтся Π² ΠΊΠΎΡˆΠΌΠ°Ρ€:

    • Поиск Π·Π°Ρ…Π°Ρ€Π΄ΠΊΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… строк Π² сотнях Ρ„Π°ΠΉΠ»ΠΎΠ² JSX ΠΈ TSX.
    • Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… JSON-словарСй ΠΈ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΡ‹Π²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° (components.header.title ΠΈ Ρ‚. Π΄.).
    • Π—Π°ΠΌΠ΅Π½Π° тСкста интСрфСйса Π½Π° Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ…ΡƒΠΊΠΎΠ² (t('...')).
    • ΠŸΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° клиСнтской ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ, управлСния состояниСм ΠΈ Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ языков.

    Π’ 2026 Π³ΠΎΠ΄Ρƒ Π²Π°ΠΌ большС Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ свой ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. Π‘ Intlayer Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Vite ΠΈ React Π·Π° считанныС ΠΌΠΈΠ½ΡƒΡ‚Ρ‹ благодаря автоматичСскому ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΡŽ, ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ИИ ΠΈ бСсшовной ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ.

    Π˜Ρ‰Π΅Ρ‚Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ пошаговоС тСхничСскоС руководство для Vite ΠΈ React? ΠžΠ·Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ с Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ: Локализация Vite ΠΈ React с Intlayer.

    Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

    Π”ΠΈΠ»Π΅ΠΌΠΌΠ° Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠΈ: ΠΏΠΎΡ‡Π΅ΠΌΡƒ локализация Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ³ΠΎ прилоТСния Ρ‚Ρ€ΡƒΠ΄Π½Π°

    Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ с трСмя слоТностями ΠΏΡ€ΠΈ Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ прилоТСния Vite ΠΈ React:

    1. Π Π°Π·Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ структуры ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Ρ‹: Π ΡƒΡ‡Π½ΠΎΠ΅ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ строк Π² Ρ„Π°ΠΉΠ»Ρ‹ JSON Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ измСнСния ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΌ diff Π² git, ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π°ΠΌ слияния ΠΈ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ рСгрСссиям.
    2. Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ управлСния ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ: Π’Ρ‹Π΄ΡƒΠΌΡ‹Π²Π°Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π²Ρ€ΠΎΠ΄Π΅ dashboard.hero.ctaButton для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ„Ρ€Π°Π·Ρ‹ замСдляСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΈ создаСт ΠΊΠΎΠ³Π½ΠΈΡ‚ΠΈΠ²Π½ΡƒΡŽ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ тСкстов.
    3. Π ΡƒΡ‚ΠΈΠ½Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄: ПослС извлСчСния строк ΠΈΡ… ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ Π½Π° 5, 10 ΠΈΠ»ΠΈ 20 языков Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ бСсконСчного копирования ΠΈΠ»ΠΈ дорогостоящих Π²Π½Π΅ΡˆΠ½ΠΈΡ… сСрвисов Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

    Intlayer Ρ€Π΅ΡˆΠ°Π΅Ρ‚ эти ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ извлСчСния Π½Π° Π±Π°Π·Π΅ компилятора, Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… словарСй Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΈ Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с Vite.

    АвтоматизированноС ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° (Π±Π΅Π· Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ поиска строк)

    ВмСсто Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ строку ΠΈΠ· вашСго JSX, Intlayer ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π΄Π²Π° ΡƒΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΠΏΡƒΡ‚ΠΈ:

    Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ A: CLI-инструмСнт извлСчСния (npx intlayer extract)

    Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ извлСчСния Intlayer прямо Π² вашСй ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Π΅:

    bash
    npx intlayer extract
    

    Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° сканируСт ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ React, Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹ΠΉ тСкст ΠΈ автоматичСски создаСт Ρ„Π°ΠΉΠ»Ρ‹ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° (.content.ts) рядом с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ. Π’Π°Ρˆ ΠΊΠΎΠ΄ остаСтся Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ, понятным ΠΈ строго Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ Π±Π΅Π· Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π° ΠΊΠ»ΡŽΡ‡Π΅ΠΉ.

    Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ B: ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Intlayer (Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π²ΠΎ врСмя сборки)

    ΠŸΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΌ компиляторС Intlayer Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ тСкстом Π½Π° вашСм языкС ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π’ΠΎ врСмя сборки компилятор ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ строки ΠΈ внСдряСт Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ автоматичСски:

    src/App.tsx
    // ΠŸΠΈΡˆΠΈΡ‚Π΅ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ React-ΠΊΠΎΠ΄. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Ρ‚ тСкст автоматичСски
    export default function App() {
      return (
        <section>
          <h1>Π”ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Π½Π°ΡˆΡƒ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ</h1>
          <p>НачнитС ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ соврСмСнныС возмоТности ΡƒΠΆΠ΅ сСгодня.</p>
        </section>
      );
    }
    

    Под ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌ Intlayer Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ ΠΈ связываСт ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ с Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ избавляя ΠΎΡ‚ нСобходимости Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π°.

    Π’ этом случаС гСнСрируСтся Ρ„Π°ΠΉΠ» src/App.content.ts со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ структурой:

    src/App.content.ts
    import { Dictionary } from "intlayer";
    
    const content = {
      key: "app",
      content: {
        dobroPozhalovatNaNashuPlatformu: t({
          ru: "Π”ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Π½Π°ΡˆΡƒ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ",
        }),
        nachniteIssledovatSovremennye: t({
          ru: "НачнитС ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ соврСмСнныС возмоТности ΡƒΠΆΠ΅ сСгодня.",
        }),
      },
    };
    
    export default content;
    

    ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ИИ ΠΈ вашСй любимой LLM

    ПослС извлСчСния ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ Π½Π° дСсятки языков Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ Π΄Π½ΠΈ. Intlayer прСдоставляСт встроСнный CLI для ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° Ρ‡Π΅Ρ€Π΅Π· OpenAI, Anthropic, DeepSeek ΠΈΠ»ΠΈ Mistral с использованиСм Π²Π°ΡˆΠΈΡ… собствСнных API-ΠΊΠ»ΡŽΡ‡Π΅ΠΉ:

    bash
    npx intlayer fill
    

    НастройтС список языков ΠΈ ИИ-ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π° Π² intlayer.config.ts:

    intlayer.config.ts
    import { Locales, type IntlayerConfig } from "intlayer";
    
    const config: IntlayerConfig = {
      internationalization: {
        locales: [
          Locales.ENGLISH,
          Locales.FRENCH,
          Locales.SPANISH,
          Locales.RUSSIAN,
        ],
        defaultLocale: Locales.RUSSIAN,
      },
      ai: {
        provider: "openai",
        model: "gpt-4o-mini",
        apiKey: process.env.OPENAI_API_KEY,
        applicationContext:
          "Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ SaaS-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ панСль управлСния Π½Π° Π±Π°Π·Π΅ Vite ΠΈ React",
      },
    };
    
    export default config;
    

    Π’Ρ‹Π·ΠΎΠ² npx intlayer fill заполняСт Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΈ Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°ΠΌΠΈ для всСх настроСнных языков:

    src/App.content.ts
    import { Dictionary } from "intlayer";
    
    const content = {
      key: "app",
      content: {
        dobroPozhalovatNaNashuPlatformu: t({
          ru: "Π”ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Π½Π°ΡˆΡƒ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ",
          en: "Welcome to our platform",
          fr: "Bienvenue sur notre plateforme",
          es: "Bienvenido a nuestra plataforma",
        }),
        nachniteIssledovatSovremennye: t({
          ru: "НачнитС ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ соврСмСнныС возмоТности ΡƒΠΆΠ΅ сСгодня.",
          en: "Start exploring our modern features today.",
          fr: "Découvrez nos fonctionnalités modernes dès aujourd'hui.",
          es: "Comience a explorar nuestras funciones modernas hoy.",
        }),
      },
    };
    
    export default content;
    

    Благодаря Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Intlayer ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ контСкст прилоТСния applicationContext Π² модСль, ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ Ρ‚Π΅Ρ…Π½ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΡŽ, ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ ΠΈ грамматичСскиС Π½ΡŽΠ°Π½ΡΡ‹ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… срСдств ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π°.

    Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ отсутствия Π½Π΅ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… строк ΠΏΠ΅Ρ€Π΅Π΄ Π΄Π΅ΠΏΠ»ΠΎΠ΅ΠΌ:

    bash
    npx intlayer test
    

    Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ с Vite ΠΈ настройка Provider

    Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ Intlayer Π² Vite Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ лишь ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΠ»Π°Π³ΠΈΠ½Π° Π² vite.config.ts ΠΈ оборачивания ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π² IntlayerProvider:

    vite.config.ts
    import { defineConfig } from "vite";
    import react from "@vitejs/plugin-react-swc";
    import { intlayer } from "vite-intlayer";
    
    export default defineConfig({
      plugins: [react(), intlayer()],
    });
    
    Начиная с Intlayer v9, компилятор Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ нСпосрСдствСнно Π² ΠΏΠ»Π°Π³ΠΈΠ½ intlayer() ΠΈ активируСтся автоматичСски ΠΏΡ€ΠΈ настройкС compiler.enabled Π² intlayer.config.ts.

    ΠžΠ±Π΅Ρ€Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠΌ IntlayerProvider:

    src/App.tsx
    import { FC } from "react";
    import { IntlayerProvider } from "react-intlayer";
    import { MainContent } from "./MainContent";
    
    const App: FC = () => {
      return (
        <IntlayerProvider>
          <MainContent />
        </IntlayerProvider>
      );
    };
    
    export default App;
    

    ДинамичСскоС ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ языка

    ΠœΠ΅Π½ΡΠΉΡ‚Π΅ язык Π² любой части прилоТСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ…ΡƒΠΊΠ° useLocale:

    src/components/LocaleSwitcher.tsx
    import { FC } from "react";
    import { Locales } from "intlayer";
    import { useLocale } from "react-intlayer";
    
    export const LocaleSwitcher: FC = () => {
      const { locale, setLocale, availableLocales } = useLocale();
    
      return (
        <select
          value={locale}
          onChange={(e) => setLocale(e.target.value as Locales)}
        >
          {availableLocales.map((loc) => (
            <option key={loc} value={loc}>
              {loc}
            </option>
          ))}
        </select>
      );
    };
    

    ΠœΠ½ΠΎΠ³ΠΎΡΠ·Ρ‹Ρ‡Π½ΠΎΠ΅ SEO (Sitemap ΠΈ Robots.txt)

    Intlayer Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ Π²Ρ€ΠΎΠ΄Π΅ generateSitemap ΠΈ getMultilingualUrls, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‚ Ρ„Π°ΠΉΠ»Ρ‹ sitemap.xml ΠΈ robots.txt для статичСских сборок Vite:

    generate-seo.mjs
    import fs from "fs";
    import path from "path";
    import { fileURLToPath } from "url";
    import { generateSitemap, getMultilingualUrls } from "intlayer";
    
    const __dirname = path.dirname(fileURLToPath(import.meta.url));
    const SITE_URL = (process.env.SITE_URL || "https://example.com").replace(
      /\/$/,
      ""
    );
    
    const pathList = [
      { path: "/", changefreq: "daily", priority: 1.0 },
      { path: "/about", changefreq: "monthly", priority: 0.7 },
    ];
    
    const sitemapXml = generateSitemap(pathList, {
      siteUrl: "https://example.com",
    });
    fs.writeFileSync(path.join(__dirname, "public", "sitemap.xml"), sitemapXml);
    
    const getAllMultilingualUrls = (urls) =>
      urls.flatMap((url) => Object.values(getMultilingualUrls(url)));
    
    const disallowedPaths = getAllMultilingualUrls(["/admin", "/private"]);
    
    const robotsTxt = [
      "User-agent: *",
      "Allow: /",
      ...disallowedPaths.map((path) => `Disallow: ${path}`),
      "",
      `Sitemap: https://example.com/sitemap.xml`,
    ].join("\n");
    
    fs.writeFileSync(path.join(__dirname, "public", "robots.txt"), robotsTxt);
    console.log("SEO-Ρ„Π°ΠΉΠ»Ρ‹ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ созданы.");
    

    Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ prebuild Π² ваш package.json, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ скрипт ΠΏΠ΅Ρ€Π΅Π΄ vite build:

    package.json
    {
      "scripts": {
        "dev": "vite",
        "prebuild": "node generate-seo.mjs",
        "build": "vite build",
        "preview": "vite preview"
      }
    }
    

    ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ руководство: Π“ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΊ пошаговой настройкС?

    Π­Ρ‚ΠΎΡ‚ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» Π΄Π°Π» ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ прСдставлСниС ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Vite ΠΈ React Π² 2026 Π³ΠΎΠ΄Ρƒ Π±Π΅Π· Π»ΠΈΡˆΠ½ΠΈΡ… слоТностСй.

    Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт прилоТСния, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΡΡ‚Ρ€ΠΎΠ³ΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ TypeScript, динамичСскиС словари ΠΈ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ ΠΊ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΌΡƒ руководству:

    πŸ‘‰ ПолноС руководство ΠΏΠΎ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρƒ Vite ΠΈ React с Intlayer

    Часто Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ вопросы (FAQ)

    Π”Π°. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ npx intlayer extract для автоматичСского нахоТдСния ΠΈ извлСчСния строк Π² Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ объявлСний, Π»ΠΈΠ±ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ компилятор Intlayer, Ρ‚Ρ€Π°Π½ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π²ΠΎ врСмя сборки, ΠΏΠΎΠΊΠ° Π²Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ стандартный JSX.

    Intlayer распрСдСляСт словари ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΌΠ°ΠΊΡ€ΠΎ-ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ Π²ΠΎ врСмя сборки. Π’ Π±Π°Π½Π΄Π» ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ строки, Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ, вмСсто Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ гигантских JSON-Ρ„Π°ΠΉΠ»ΠΎΠ². ДинамичСскиС словари Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΠΎΠ΄Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ языки ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости.

    Π”Π°. Π’ CLI Intlayer Π΅ΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Π° npx intlayer fill, которая ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΊ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ LLM (OpenAI, Anthropic, Mistral, DeepSeek) для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ контСкстных ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠ² ΠΏΠΎ всСм настроСнным языкам.

    Π”Π°. Intlayer прСдоставляСт Π°Π΄Π°ΠΏΡ‚Π΅Ρ€Ρ‹ совмСстимости для react-i18next ΠΈ react-intl, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹ для автоматичСской синхронизации ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… JSON-словарСй (sync-json).

    ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

    Пока Π½Π΅Ρ‚ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π². Π‘ΡƒΠ΄ΡŒΡ‚Π΅ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ, ΠΊΡ‚ΠΎ подСлится своими мыслями.

    ΠŸΠΎΡ…ΠΎΠΆΠΈΠ΅ сообщСния

    ПослСдниС сообщСния