Author:
    Creation:2025-08-23Last update:2026-05-31

    Intlayer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреА AdonisJS рдмреИрдХрдПрдВрдб рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░реЗрдВ | рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХрд░рдг (i18n)

    adonis-intlayer AdonisJS рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХрд░рдг (i18n) рдкреИрдХреЗрдЬ рд╣реИ, рдЬрд┐рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реНрдерд╛рдиреАрдпрдХреГрдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ рдкреНрд░рджрд╛рди рдХрд░рдХреЗ рдЖрдкрдХреА рдмреИрдХрдПрдВрдб рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рд╕реБрд▓рдн рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

    рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ

    • рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рднрд╛рд╖рд╛ рдореЗрдВ рдмреИрдХрдПрдВрдб рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛: рдЬрдм рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ, рддреЛ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдореВрд▓ рднрд╛рд╖рд╛ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рд╕реЗ рд╕рдордЭ рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╣рддрд╛рд╢рд╛ рдХрдо рд╣реЛрддреА рд╣реИред рдпрд╣ рдЧрддрд┐рд╢реАрд▓ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реИ рдЬреЛ рдЯреЛрд╕реНрдЯ рдпрд╛ рдореЛрдбрд▓ рдЬреИрд╕реЗ рдлреНрд░рдВрдЯ-рдПрдВрдб рдШрдЯрдХреЛрдВ рдореЗрдВ рджрд┐рдЦрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

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

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

    • рдмрд╣реБрднрд╛рд╖реА рдкреБрд╢ рд╕реВрдЪрдирд╛рдПрдВ: рдореЛрдмрд╛рдЗрд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдкрд╕рдВрджреАрджрд╛ рднрд╛рд╖рд╛ рдореЗрдВ рдкреБрд╢ рд╕реВрдЪрдирд╛рдПрдВ рднреЗрдЬрдиреЗ рд╕реЗ рдмрд╛рддрдЪреАрдд рдФрд░ рдкреНрд░рддрд┐рдзрд╛рд░рдг рдмрдврд╝ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕реНрдкрд░реНрд╢ рд╕реВрдЪрдирд╛рдУрдВ рдХреЛ рдЕрдзрд┐рдХ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдФрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдпреЛрдЧреНрдп рдорд╣рд╕реВрд╕ рдХрд░рд╛ рд╕рдХрддрд╛ рд╣реИред

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

    рдмреИрдХрдПрдВрдб рдХрд╛ рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХрд░рдг рдХрд░рдХреЗ, рдЖрдкрдХрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рди рдХреЗрд╡рд▓ рд╕рд╛рдВрд╕реНрдХреГрддрд┐рдХ рдЕрдВрддрд░реЛрдВ рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░рддрд╛ рд╣реИ рдмрд▓реНрдХрд┐ рд╡реИрд╢реНрд╡рд┐рдХ рдмрд╛рдЬрд╛рд░ рдХреА рдЬрд░реВрд░рддреЛрдВ рдХреЗ рд╕рд╛рде рдмреЗрд╣рддрд░ рддрд╛рд▓рдореЗрд▓ рдмрд┐рдард╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдпрд╣ рдЖрдкрдХреА рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рджреБрдирд┐рдпрд╛ рднрд░ рдореЗрдВ рд╕реНрдХреЗрд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрджрдо рдмрди рдЬрд╛рддрд╛ рд╣реИред

    рд╢реБрд░реВ рдХрд░рдирд╛

    ide.intlayer.org

    See Application Template on GitHub.

    рд╕реНрдерд╛рдкрдирд╛

    adonis-intlayer рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, npm рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:

    bash
    npx intlayer init --interactive
    
    --interactive рдзреНрд╡рдЬ (flag) рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИред рдпрджрд┐ рдЖрдк рдПрдХ AI рдПрдЬреЗрдВрдЯ рд╣реИрдВ рддреЛ intlayer-cli init рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
    рдпрд╣ рдХрдорд╛рдВрдб рдЖрдкрдХреЗ рдПрдирд╡рд╛рдпрд░рдирдореЗрдВрдЯ рдХреЛ рдбрд┐рдЯреЗрдХреНрдЯ рдХрд░реЗрдЧреА рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдкреИрдХреЗрдЬ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдЧреАред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
    bash
    npm install intlayer adonis-intlayer
    

    рд╕реЗрдЯрдЕрдк

    рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░реВрдЯ рдореЗрдВ intlayer.config.ts рдмрдирд╛рдХрд░ рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХрд░рдг рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ:

    intlayer.config.ts
    import { Locales, type IntlayerConfig } from "intlayer";
    
    const config: IntlayerConfig = {
      internationalization: {
        locales: [
          Locales.ENGLISH,
          Locales.RUSSIAN,
          Locales.JAPANESE,
          Locales.FRENCH,
          Locales.KOREAN,
          Locales.CHINESE,
          Locales.SPANISH,
          Locales.GERMAN,
          Locales.ARABIC,
          Locales.ITALIAN,
          Locales.ENGLISH_UNITED_KINGDOM,
          Locales.PORTUGUESE,
          Locales.HINDI,
          Locales.TURKISH,
          Locales.POLISH,
          Locales.INDONESIAN,
          Locales.VIETNAMESE,
          Locales.UKRAINIAN,
        ],
        defaultLocale: Locales.ENGLISH,
      },
    };
    
    export default config;
    

    рдЕрдкрдиреА рд╕рд╛рдордЧреНрд░реА рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ

    рдЕрдиреБрд╡рд╛рджреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рд╕рд╛рдордЧреНрд░реА рдШреЛрд╖рдгрд╛рдПрдВ рдмрдирд╛рдПрдВ рдФрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░реЗрдВ:

    app/index.content.ts
    import { t, type Dictionary } from "intlayer";
    
    const indexContent = {
      key: "index",
      content: {
        exampleOfContent: t({
          en: "Example of returned content in English",
          fr: "Exemple de contenu renvoy├й en fran├зais",
          hi: "рд╣рд┐рдВрджреА рдореЗрдВ рд▓реМрдЯрд╛рдИ рдЧрдИ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЙрджрд╛рд╣рд░рдг",
          "es-ES": "Ejemplo de contenido devuelto en espa├▒ol (Espa├▒a)",
          "es-MX": "Ejemplo de contenido devuelto en espa├▒ol (M├йxico)",
        }),
      },
    } satisfies Dictionary;
    
    export default indexContent;
    
    рдЖрдкрдХреА рд╕рд╛рдордЧреНрд░реА рдШреЛрд╖рдгрд╛рдПрдВ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдХрд╣реАрдВ рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ, рдмрд╢рд░реНрддреЗ рд╡реЗ contentDir рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, ./src рдпрд╛ ./app) рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВред рдФрд░ рд╕рд╛рдордЧреНрд░реА рдШреЛрд╖рдгрд╛ рдлрд╝рд╛рдЗрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, .content.{json,ts,tsx,js,jsx,mjs,cjs,md,mdx,yaml,yml}) рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реЛрдВред
    рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд╛рдордЧреНрд░реА рдШреЛрд╖рдгрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рджреЗрдЦреЗрдВред

    AdonisJS рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реЗрдЯрдЕрдк

    adonis-intlayer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ AdonisJS рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗрдЯрдЕрдк рдХрд░реЗрдВред

    рдорд┐рдбрд▓рд╡реЗрдпрд░ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ

    рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ intlayer рдорд┐рдбрд▓рд╡реЗрдпрд░ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

    start/kernel.ts
    router.use([() => import("adonis-intlayer/middleware")]);
    

    рдЕрдкрдиреЗ рдорд╛рд░реНрдЧ (routes) рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ

    start/routes.ts
    import router from "@adonisjs/core/services/router";
    import { t, getIntlayer, getDictionary } from "adonis-intlayer";
    import indexContent from "../app/index.content";
    
    router.get("/t_example", async () => {
      return t({
        en: "Example of returned content in English",
        fr: "Exemple de contenu renvoy├й en fran├зais",
        hi: "рд╣рд┐рдВрджреА рдореЗрдВ рд▓реМрдЯрд╛рдИ рдЧрдИ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЙрджрд╛рд╣рд░рдг",
        "es-ES": "Ejemplo de contenido devuelto en espa├▒ol (Espa├▒a)",
        "es-MX": "Ejemplo de contenido devuelto en espa├▒ol (M├йxico)",
      });
    });
    
    router.get("/getIntlayer_example", async () => {
      return getIntlayer("index").exampleOfContent;
    });
    
    router.get("/getDictionary_example", async () => {
      return getDictionary(indexContent).exampleOfContent;
    });
    

    рдХрд╛рд░реНрдп (Functions)

    adonis-intlayer рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХрд░рдг рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ:

    • t(content, locale?): рдореВрд▓ рдЕрдиреБрд╡рд╛рдж рдХрд╛рд░реНрдпред
    • getIntlayer(key, locale?): рдЕрдкрдиреЗ рд╢рдмреНрджрдХреЛрд╢реЛрдВ рд╕реЗ рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
    • getDictionary(dictionary, locale?): рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╢рдмреНрджрдХреЛрд╢ рд╡рд╕реНрддреБ рд╕реЗ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
    • getLocale(): рдЕрдиреБрд░реЛрдз рд╕рдВрджрд░реНрдн рд╕реЗ рд╡рд░реНрддрдорд╛рди рд▓реЛрдХреЗрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред

    рдирд┐рдпрдВрддреНрд░рдХреЛрдВ (Controllers) рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

    app/controllers/example_controller.ts
    import type { HttpContext } from "@adonisjs/core/http";
    import { t } from "adonis-intlayer";
    
    export default class ExampleController {
      async index({ response }: HttpContext) {
        return response.send(
          t({
            en: "Hello from controller",
            fr: "Bonjour depuis le contr├┤leur",
            hi: "рдХрдВрдЯреНрд░реЛрд▓рд░ рд╕реЗ рдирдорд╕реНрддреЗ",
          })
        );
      }
    }
    

    рд╕рдВрдЧрддрддрд╛

    adonis-intlayer рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЗрдирдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реИ:

    • React рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП react-intlayer
    • Next.js рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП next-intlayer
    • Vite рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП vite-intlayer

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

    intlayer.config.ts
    import { Locales, type IntlayerConfig } from "intlayer";
    
    const config: IntlayerConfig = {
      // ... рдЕрдиреНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рдХрд▓реНрдк
      routing: {
        storage: [
          { type: "header", name: "my-locale-header" },
          { type: "cookie", name: "my-locale-cookie" },
        ],
      },
    };
    
    export default config;
    

    рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, adonis-intlayer рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рдкрд╕рдВрджреАрджрд╛ рднрд╛рд╖рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Accept-Language рд╣реЗрдбрд░ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░реЗрдЧрд╛ред

    рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдФрд░ рдЙрдиреНрдирдд рд╡рд┐рд╖рдпреЛрдВ рдкрд░ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкрд░ рдЬрд╛рдПрдБред

    TypeScript рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ

    adonis-intlayer рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП TypeScript рдХреА рдордЬрдмреВрдд рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рддрд╛ рд╣реИред TypeScript рдХреА рд╕реНрдерд┐рд░ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд╡рд╛рдж рдХреБрдВрдЬреА рдХрд╛ рд╣рд┐рд╕рд╛рдм рд░рдЦрд╛ рдЬрд╛рдП, рдЬрд┐рд╕рд╕реЗ рдЕрдиреБрд╡рд╛рдж рдЧрд╛рдпрдм рд╣реЛрдиреЗ рдХрд╛ рдЬреЛрдЦрд┐рдо рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд░рдЦрд░рдЦрд╛рд╡ рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реЛрддрд╛ рд╣реИред

    рдСрдЯреЛ-рдкреВрд░реНрдгрддрд╛

    рдЕрдиреБрд╡рд╛рдж рддреНрд░реБрдЯрд┐

    рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╕реНрд╡рддрдГ рдЙрддреНрдкрдиреНрди рдкреНрд░рдХрд╛рд░ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ ./types/intlayer.d.ts рдкрд░) рдЖрдкрдХреА tsconfig.json рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

    tsconfig.json
    {
      // ... рдЖрдкрдХреЗ рдореМрдЬреВрджрд╛ TypeScript рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди
      "include": [
        // ... рдЖрдкрдХреЗ рдореМрдЬреВрджрд╛ TypeScript рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди
        ".intlayer/**/*.ts", // рд╕реНрд╡рддрдГ рдЙрддреНрдкрдиреНрди рдкреНрд░рдХрд╛рд░ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ
      ],
    }
    

    VS Code рдПрдХреНрд╕рдЯреЗрдВрд╢рди

    Intlayer рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рд╡рд┐рдХрд╛рд╕ рдЕрдиреБрднрд╡ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЖрдзрд┐рдХрд╛рд░рд┐рдХ Intlayer VS Code рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

    VS Code рдорд╛рд░реНрдХреЗрдЯрдкреНрд▓реЗрд╕ рд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ

    рдпрд╣ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:

    • рдЕрдиреБрд╡рд╛рдж рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдСрдЯреЛ-рдкреВрд░реНрдгрддрд╛ред
    • рдЧрд╛рдпрдм рдЕрдиреБрд╡рд╛рджреЛрдВ рдХреЗ рд▓рд┐рдП рд░реАрдпрд▓-рдЯрд╛рдЗрдо рддреНрд░реБрдЯрд┐ рдкрд╣рдЪрд╛рдиред
    • рдЕрдиреБрд╡рд╛рджрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЗрдирд▓рд╛рдЗрди рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрдиред
    • рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдиреБрд╡рд╛рдж рдмрдирд╛рдиреЗ рдФрд░ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреНрд╡рд░рд┐рдд рдХрд╛рд░реНрд░рд╡рд╛рдИред

    рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП, Intlayer VS Code рдПрдХреНрд╕рдЯреЗрдВрд╢рди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рджреЗрдЦреЗрдВред

    Git рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди

    Intlayer рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ Git рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдХрдорд┐рдЯ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

    рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЕрдкрдиреА .gitignore рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрджреЗрд╢ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:

    .gitignore
    # Intlayer рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░реЗрдВ
    .intlayer
    

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

    • @adonisjs/i18n: AdonisJS рдХрд╛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдкреИрдХреЗрдЬред
    • Intlayer: рдмреИрдХрдПрдВрдб рдФрд░ рдЖрдзреБрдирд┐рдХ рдлрд╝реНрд░рдВрдЯрдПрдВрдб рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХреАрдХрд░рдг, рдкреВрд░реНрдг TypeScript рдкреНрд░рдХрд╛рд░, AI рдЕрдиреБрд╡рд╛рдж рдФрд░ CMSред

    рдмреИрдХрдПрдВрдб рдХрд╛ рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХрд░рдг рдХрд░рдиреЗ рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкрдврд╝реЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЯреЗрдХреНрд╕реНрдЯ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рд╣рд┐рд╕реНрд╕рд╛ рдХрднреА рднреА рдлреНрд░рдВрдЯрдПрдВрдб рд╕реЗ рд╣реЛрдХрд░ рдирд╣реАрдВ рдЧреБрдЬрд░рддрд╛: API рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢, рд▓реЗрди-рджреЗрди рд╕рдВрдмрдВрдзреА рдИрдореЗрд▓, рдкреБрд╢ рд╕реВрдЪрдирд╛рдПрдВ, SMS рдФрд░ PDF рдирд┐рд░реНрдпрд╛рддред рдЗрдиреНрд╣реЗрдВ рдкреНрд░рддрд┐ рд╕рддреНрд░ рдХреЗ рдмрдЬрд╛рдп рдкреНрд░рддрд┐ рдЕрдиреБрд░реЛрдз рд╣рд▓ рдХреА рдЧрдИ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдХреА рднрд╛рд╖рд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

    Intlayer рдХреНрдпреЛрдВ рдЪреБрдиреЗрдВ рджреЗрдЦреЗрдВред

    рдкрд╛рд░рдВрдкрд░рд┐рдХ JSON рдХреИрдЯрд▓реЙрдЧ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдХрдоред Intlayer рдХрдВрдкрд╛рдЗрд▓рд░ рдмрд┐рд▓реНрдб рд╕рдордп рдкрд░ рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдкрд░ рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рдкрд╛рд░реНрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдореЗрдореЛрд░реА рдЙрдкрдпреЛрдЧ рдФрд░ рдХреЛрд▓реНрдб рд╕реНрдЯрд╛рд░реНрдЯ рд╕рдордп рдиреНрдпреВрдирддрдо рд░рд╣рддрд╛ рд╣реИред рдмрдВрдбрд▓ рдЕрдиреБрдХреВрд▓рди рджреЗрдЦреЗрдВред

    рдХрд╛рдлреА рд╣рдж рддрдХ рд╣рд╛рдБред sync JSON plugin рдореМрдЬреВрджрд╛ рдЕрдиреБрд╡рд╛рдж рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдмрдирд╛рдП рд░рдЦрддрд╛ рд╣реИред

    рд╣рд╛рдБред sync JSON plugin рдЖрдкрдХреА /messages/{locale}/{namespace}.json рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рддреНрдп рдХрд╛ рд╕реНрд░реЛрдд рдмрдирд╛рдП рд░рдЦрддрд╛ рд╣реИ рдФрд░ рджреЛрдиреЛрдВ рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ рдЙрдирд╕реЗ Intlayer dictionaries рдмрдирд╛рддрд╛ рд╣реИред sync PO plugin gettext catalogs рдХреЗ рд▓рд┐рдП рднреА рдРрд╕рд╛ рд╣реА рдХрд░рддрд╛ рд╣реИ, рдФрд░ per locale files рдЖрдкрдХреЛ locales рдХреЛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдореВрд╣реАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рднрд╛рд╖рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ content рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рджреЗрддреЗ рд╣реИрдВред

    рдирд╣реАрдВред npx intlayer extract рдЪрд▓рд╛рдПрдВ рдФрд░ Intlayer рдЖрдкрдХреА source files рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ, user facing strings рдХреЛ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рдмрдЧрд▓ рдореЗрдВ рдПрдХ .content file рд▓рд┐рдЦрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк strings рдХреЛ рдПрдХ catalog рдореЗрдВ рдПрдХ-рдПрдХ рдХрд░рдХреЗ рдХреЙрдкреА рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдПрдХ diff рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВред extract command рджреЗрдЦреЗрдВред

    рдкреВрд░реНрдг рд╕реНрд╡рдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП, Intlayer Compiler рдмрд┐рд▓реНрдб рд╕рдордп рдкрд░ рдпрд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рд╡рд░реНрддрди рдкрд░ рд╢рдмреНрджрдХреЛрд╢ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред

    рдкрд╛рдБрдЪ рдЙрдкрдХрд░рдг, рд╕рднреА рд╡реИрдХрд▓реНрдкрд┐рдХ:

    • VS Code extension: рдПрдХ рдХреБрдВрдЬреА рд╕реЗ рд╕рд╛рдордЧреНрд░реА рдлрд╝рд╛рдЗрд▓ рддрдХ рдЬрд╛рдПрдВ, рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдирд┐рдХрд╛рд▓реЗрдВ, рдФрд░ рдХрдорд╛рдВрдб рдкреИрд▓реЗрдЯ рд╕реЗ build, fill, test, push рдФрд░ pull рдЪрд▓рд╛рдПрдВред
    • LSP server: LSP рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд╛ рдкрд░ рдЬрд╛рдПрдВ, рдЕрдиреБрд╡рд╛рджрд┐рдд рдорд╛рди рдХрд╛ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рджреЗрдЦреЗрдВ, рдФрд░ рдХреБрдВрдЬреА рдкреВрд░реНрдгрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред i18next рдХреЙрд▓ рдХреЛ рднреА рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред
    • MCP server: Cursor, VS Code, Claude Desktop, Claude Code рдФрд░ ChatGPT рдХреЗ рд▓рд┐рдП Intlayer рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдФрд░ CLI рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
    • Agent skills: рдХреЗрдВрджреНрд░рд┐рдд рдХреМрд╢рд▓ рдЬреИрд╕реЗ intlayer-config, intlayer-cli рдФрд░ intlayer-contentред
    • ESLint plugin: no-raw-text рдирд┐рдпрдо рд╣рд╛рд░реНрдбрдХреЛрдбреЗрдб рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддрд╛ рд╣реИред