Author:
    Creation:2024-03-07Last update:2026-09-06

    рдореМрдЬреВрджрд╛ Vite рдФрд░ React рдРрдк рдХреЛ рдмрд╛рдж рдореЗрдВ рдмрд╣реБрднрд╛рд╖реА (i18n) рдХреИрд╕реЗ рдмрдирд╛рдПрдВ (i18n рдЧрд╛рдЗрдб 2026)

    рд╢реБрд░реБрдЖрдд рд╕реЗ рд╣реА Vite рдФрд░ React рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХрд░рдг (i18n) рдЬреЛрдбрд╝рдирд╛ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЖрд╕рд╛рди рд╣реИред рд▓реЗрдХрд┐рди рддрдм рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреЗрд╡рд▓ рдПрдХ рднрд╛рд╖рд╛ рдореЗрдВ рдмрдирд╛ рдкрд░рд┐рдкрдХреНрд╡ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реЛ рдФрд░ рдЖрдкрдХреЛ рдЙрд╕реЗ рдмрд╛рдж рдореЗрдВ рдмрд╣реБрднрд╛рд╖реА рдмрдирд╛рдирд╛ рдкрдбрд╝реЗ?

    рдпрджрд┐ рдЖрдкрдиреЗ рдХрднреА react-i18next рдпрд╛ react-intl рдЬреИрд╕реА рдкрд╛рд░рдВрдкрд░рд┐рдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдЬрд╛рдирддреЗ рд╣реИрдВ:

    • рд╕реИрдХрдбрд╝реЛрдВ JSX рдФрд░ TSX рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╣рд╛рд░реНрдбрдХреЛрдбреЗрдб рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдвреВрдБрдврдирд╛ред
    • рдиреЗрд╕реНрдЯреЗрдб JSON рдлрд╝рд╛рдЗрд▓реЗрдВ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рдФрд░ рдордирдорд╛рдиреА рдЕрдиреБрд╡рд╛рдж рдХреАрдЬрд╝ (components.header.title рдЖрджрд┐) рдмрдирд╛рдирд╛ред
    • UI рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдЕрдиреБрд╡рд╛рдж рд╣реБрдХреНрд╕ (t('...')) рд╕реЗ рдмрджрд▓рдирд╛ред
    • рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рд░реВрдЯрд┐рдВрдЧ, рд╕реНрдЯреЗрдЯ рдореИрдиреЗрдЬрдореЗрдВрдЯ рдФрд░ рднрд╛рд╖рд╛ рдмрджрд▓рдиреЗ рдХреЗ рд▓реЙрдЬрд┐рдХ рдХреЛ рджреЛрдмрд╛рд░рд╛ рд▓рд┐рдЦрдирд╛ред

    2026 рдореЗрдВ рдЖрдкрдХреЛ рдЕрдкрдирд╛ рдХреЛрдбрдмреЗрд╕ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИред Intlayer рдХреЗ рд╕рд╛рде рдЖрдк рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдПрдХреНрд╕рдЯреНрд░реИрдХреНрд╢рди, AI рдЕрдиреБрд╡рд╛рдж рдФрд░ рд╕рд╣рдЬ Vite рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди рдХреА рдорджрдж рд╕реЗ рдорд┐рдирдЯреЛрдВ рдореЗрдВ рдХрд┐рд╕реА рднреА рдореМрдЬреВрджрд╛ Vite рдФрд░ React рдРрдк рдХреЛ рдмрд╣реБрднрд╛рд╖реА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред

    Vite рдФрд░ React рдХреЗ рд▓рд┐рдП рдЪрд░рдг-рджрд░-рдЪрд░рдг рддрдХрдиреАрдХреА рдЧрд╛рдЗрдб рдЦреЛрдЬ рд░рд╣реЗ рд╣реИрдВ? рд╣рдорд╛рд░рд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рджреЗрдЦреЗрдВ: Intlayer рдХреЗ рд╕рд╛рде Vite рдФрд░ React рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░реЗрдВред

    рд╡рд┐рд╖рдп рд╕реВрдЪреА

    рдореМрдЬреВрджрд╛ рдРрдк рдХреЛ рдмрд╣реБрднрд╛рд╖реА рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдореБрдЦ рдЪреБрдиреМрддрд┐рдпрд╛рдБ

    рдореМрдЬреВрджрд╛ Vite рдФрд░ React рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХрд░рдг рдЬреЛрдбрд╝рддреЗ рд╕рдордп рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рддреАрди рдкреНрд░рдореБрдЦ рдмрд╛рдзрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ:

    1. рдХреЛрдбрдмреЗрд╕ рдореЗрдВ рднрд╛рд░реА рдлреЗрд░рдмрджрд▓: JSON рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ рд╣рд░ рдХреЙрдореНрдкреЛрдиреЗрдВрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдмрдбрд╝реЗ Git diffs рдмрдирддреЗ рд╣реИрдВ, рдорд░реНрдЬ рд╕рдВрдШрд░реНрд╖ рдХрд╛ рдЬреЛрдЦрд┐рдо рдмрдврд╝рддрд╛ рд╣реИ рдФрд░ рд▓реЗрдЖрдЙрдЯ рдореЗрдВ рдЦрд░рд╛рдмреА рдЖрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд░рд╣рддреА рд╣реИред
    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: {
        hamarePlatformMeinAapkaSwagat: t({
          hi: "рд╣рдорд╛рд░реЗ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ",
        }),
        aajHiAadhunikSuvidhaonKa: t({
          hi: "рдЖрдЬ рд╣реА рдЖрдзреБрдирд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░реЗрдВред",
        }),
      },
    };
    
    export default content;
    

    рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ LLM рдХреЗ рд╕рд╛рде AI-рд╕рдВрдЪрд╛рд▓рд┐рдд рдЕрдиреБрд╡рд╛рдж

    рдХрдВрдЯреЗрдВрдЯ рдирд┐рд╖реНрдХрд░реНрд╖рдг рдХреЗ рдмрд╛рдж рджрд░реНрдЬрдиреЛрдВ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдореЗрдВ рдХрдИ рджрд┐рди рдирд╣реАрдВ рд▓рдЧрдиреЗ рдЪрд╛рд╣рд┐рдПред Intlayer рдореЗрдВ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд AI рдЕрдиреБрд╡рд╛рдж CLI рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рдЕрдкрдиреЗ API рдХреАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реАрдзреЗ OpenAI, Anthropic, DeepSeek рдпрд╛ Mistral рд╕реЗ рдЬреБрдбрд╝рддрд╛ рд╣реИ:

    bash
    npx intlayer fill
    

    intlayer.config.ts рдореЗрдВ рднрд╛рд╖рд╛рдПрдБ рдФрд░ AI рдкреНрд░рджрд╛рддрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ:

    intlayer.config.ts
    import { Locales, type IntlayerConfig } from "intlayer";
    
    const config: IntlayerConfig = {
      internationalization: {
        locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH, Locales.HINDI],
        defaultLocale: Locales.HINDI,
      },
      ai: {
        provider: "openai",
        model: "gpt-4o-mini",
        apiKey: process.env.OPENAI_API_KEY,
        applicationContext:
          "Vite рдФрд░ React рдХреЗ рд╕рд╛рде рдирд┐рд░реНрдорд┐рдд рдЖрдзреБрдирд┐рдХ SaaS рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рдбреИрд╢рдмреЛрд░реНрдб",
      },
    };
    
    export default config;
    

    npx intlayer fill рдЪрд▓рд╛рдиреЗ рд╕реЗ рдЖрдкрдХреА рд╕рд╛рдордЧреНрд░реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕рднреА рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдЯреАрдХ рдЕрдиреБрд╡рд╛рдж рднрд░ рдЬрд╛рддреЗ рд╣реИрдВ:

    src/App.content.ts
    import { Dictionary } from "intlayer";
    
    const content = {
      key: "app",
      content: {
        hamarePlatformMeinAapkaSwagat: t({
          hi: "рд╣рдорд╛рд░реЗ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ",
          en: "Welcome to our platform",
          fr: "Bienvenue sur notre plateforme",
          es: "Bienvenido a nuestra plataforma",
        }),
        aajHiAadhunikSuvidhaonKa: t({
          hi: "рдЖрдЬ рд╣реА рдЖрдзреБрдирд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░реЗрдВред",
          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 рд╕реЗрдЯрдЕрдк

    Vite рдореЗрдВ Intlayer рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдмреЗрд╣рдж рд╕рд░рд▓ рд╣реИ; рдмрд╕ 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() рдкреНрд▓рдЧрдЗрди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ рдФрд░ intlayer.config.ts рдореЗрдВ compiler.enabled рд╕реЗрдЯ рдХрд░рддреЗ рд╣реА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рдХреНрд░рд┐рдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

    рд░реВрдЯ рдХреЙрдореНрдкреЛрдиреЗрдВрдЯ рдореЗрдВ рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ 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 рдЬреИрд╕реЗ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдлрд╝рдВрдХреНрд╢рди рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЬреЛ рд╕реНрдерд┐рд░ Vite рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рдХреНрд░реЙрд▓рд░-рдЕрдиреБрдХреВрд▓ рдмрд╣реБрднрд╛рд╖реА sitemap.xml рдФрд░ robots.txt рдлрд╝рд╛рдЗрд▓реЗрдВ рдмрдирд╛рддреЗ рд╣реИрдВ:

    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: SITE_URL });
    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: ${SITE_URL}/sitemap.xml`,
    ].join("\n");
    
    fs.writeFileSync(path.join(__dirname, "public", "robots.txt"), robotsTxt);
    console.log("SEO рдлрд╝рд╛рдЗрд▓реЗрдВ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЙрддреНрдкрдиреНрди рд╣реБрдИрдВред");
    

    vite build рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ package.json рдореЗрдВ prebuild рд╣реБрдХ рдЬреЛрдбрд╝реЗрдВ:

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

    рдЧрд╣рд░рд╛рдИ рд╕реЗ рд╕рдордЭреЗрдВ: рдХреНрдпрд╛ рдЖрдк рдЪрд░рдг-рджрд░-рдЪрд░рдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВ?

    рдЗрд╕ рдЧрд╛рдЗрдб рдиреЗ 2026 рдореЗрдВ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рдореМрдЬреВрджрд╛ Vite рдФрд░ React рдРрдк рдХреЛ рдмрд╣реБрднрд╛рд╖реА рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рд╡реИрдЪрд╛рд░рд┐рдХ рдЕрд╡рд▓реЛрдХрди рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ред

    рдпрджрд┐ рдЖрдк рд╡рд┐рд╕реНрддреГрдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди, TypeScript рдкреНрд░рдХрд╛рд░ рд╕реБрд░рдХреНрд╖рд╛, рдЧрддрд┐рд╢реАрд▓ рд╢рдмреНрджрдХреЛрд╢ рдФрд░ рд╡рд┐рдЬрд╝реБрдЕрд▓ рдПрдбрд┐рдЯрд░ рд╕рд╣рд┐рдд рдкреНрд░рддреНрдпреЗрдХ рднрд╛рдЧ рдХреЛ рд╕реЗрдЯ рдЕрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░реЗ рд╡реНрдпрд╛рдкрдХ рдЧрд╛рдЗрдб рдкрд░ рдЬрд╛рдПрдБ:

    ЁЯСЙ Intlayer рдХреЗ рд╕рд╛рде Vite рдФрд░ React рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреА рд╕рдВрдкреВрд░реНрдг рдЧрд╛рдЗрдб

    рдЕрдХреНрд╕рд░ рдкреВрдЫреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд╢реНрди (FAQ)

    рд╣рд╛рдБред рдЖрдк рд╣рд╛рд░реНрдбрдХреЛрдбреЗрдб рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП npx intlayer extract рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ Intlayer рдХрдВрдкрд╛рдЗрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдмрд┐рд▓реНрдб рдХреЗ рд╕рдордп рдХреЙрдореНрдкреЛрдиреЗрдВрдЯреНрд╕ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ рдЬрдмрдХрд┐ рдЖрдк рдорд╛рдирдХ JSX рд▓рд┐рдЦрдирд╛ рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред

    Intlayer рдкреНрд░рддрд┐-рдХреЙрдореНрдкреЛрдиреЗрдВрдЯ рд╢рдмреНрджрдХреЛрд╢ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдФрд░ рдмрд┐рд▓реНрдб-рдЯрд╛рдЗрдо рдореИрдХреНрд░реЛ рдЕрдиреБрдХреВрд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдмрдВрдбрд▓ рдХреЗрд╡рд▓ рдЙрдиреНрд╣реАрдВ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реНрдХреНрд░реАрди рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреЙрдореНрдкреЛрдиреЗрдВрдЯреНрд╕ рдХреЛ рд╣реЛрддреА рд╣реИред рдбрд╛рдпрдирд╛рдорд┐рдХ рдбрд┐рдХреНрд╢рдирд░реА рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рднрд╛рд╖рд╛рдУрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рднреА рджреЗрддреА рд╣реИред

    рд╣рд╛рдБред Intlayer CLI рдореЗрдВ npx intlayer fill рдХрдорд╛рдВрдб рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬреЛ рдЖрдкрдХреЗ рдЪреБрдиреЗ рд╣реБрдП AI рдкреНрд░рджрд╛рддрд╛ (OpenAI, Anthropic, Mistral, DeepSeek) рд╕реЗ рдЬреБрдбрд╝рдХрд░ рдкреВрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЫреВрдЯреЗ рд╣реБрдП рдЕрдиреБрд╡рд╛рдж рддреИрдпрд╛рд░ рдХрд░рддрд╛ рд╣реИред

    рд╣рд╛рдБред Intlayer react-i18next рдФрд░ react-intl рдХреЗ рд▓рд┐рдП рд╕рдВрдЧрддрддрд╛ рдПрдбреЗрдкреНрдЯрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдореМрдЬреВрджрд╛ JSON рдЕрдиреБрд╡рд╛рдж рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрдиреНрд╕ (sync-json) рднреА рджреЗрддрд╛ рд╣реИред

    рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

    рдЕрднреА рддрдХ рдХреЛрдИ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВред рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкрд╣рд▓реЗ рд╡реНрдпрдХреНрддрд┐ рдмрдиреЗрдВред

    рд╕рдВрдмрдВрдзрд┐рдд рдкреЛрд╕реНрдЯ

    рдирд╡реАрдирддрдо рдкреЛрд╕реНрдЯ