Author:
    Creation:2025-03-13Last update:2026-09-27

    рдХрдВрдЯреЗрдВрдЯ рдбрд┐рдХреНрд▓реЗрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдЕрдиреБрд╡рд╛рдж рднрд░реЗрдВ

    рдЕрдкрдиреЗ CI рдореЗрдВ рдХрдВрдЯреЗрдВрдЯ рдбрд┐рдХреНрд▓реЗрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдСрдЯреЛрдлрд┐рд▓ рдХрд░рдирд╛ рдЖрдкрдХреЗ рд╡рд┐рдХрд╛рд╕ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЛ рддреЗрдЬрд╝ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИред

    рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕рдордЭрдирд╛

    fill рдХрдорд╛рдВрдб рдореЗрдВ рджреЛ рдореЛрдб рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

    • Complete: рдкреНрд░рддреНрдпреЗрдХ locale рдХреЗ рд▓рд┐рдП рд╕рднреА missing content рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рднрд░реЗрдВ рдФрд░ рд╡рд░реНрддрдорд╛рди рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ, рдпрд╛ рдпрджрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реЛ рддреЛ рджреВрд╕рд░реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВред рдпрд╛рдиреА, complete рдореЛрдб рдкрд╣рд▓реЗ рд╕реЗ рд╕реЗ рдЕрдиреБрд╡рд╛рджрд┐рдд рдореМрдЬреВрджрд╛ content рдХреЛ рдЫреЛрдбрд╝ рджреЗрдЧрд╛ред
    • Review: рдкреНрд░рддреНрдпреЗрдХ locale рдХреЗ рд▓рд┐рдП рд╕рднреА content рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рднрд░реЗрдВ рдФрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП generate рдХрд░реЗрдВ, рдпрд╛ рдпрджрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реЛ рддреЛ рджреВрд╕рд░реА рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП generate рдХрд░реЗрдВред

    fill рдХрдорд╛рдВрдб рдЖрдкрдХреА рд╕рднреА locale content declaration files рдХреЛ process рдХрд░реЗрдЧрд╛ред рдпрд╛рдиреА, рдпрд╣ CMS рд╕реЗ рдЖрдкрдХреА remote content рдХреЛ process рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред CMS рдХреЗ рдкрд╛рд╕ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ translations management рд╣реИред рдпрджрд┐ рдЖрдк @intlayer/sync-json-plugin рдЬреИрд╕реЗ plugins рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ Intlayer JSON files рдХреЛ locale content declaration files рдореЗрдВ transform рдХрд░реЗрдЧрд╛ред рдпрд╛рдиреА, рд╡реЗ fill рдХрдорд╛рдВрдб рджреНрд╡рд╛рд░рд╛ process рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред

    рдирдИ generated files рдореЗрдВ рдПрдХ filled instruction рдХреЛ dictionary metadata рдХреЗ рд░реВрдк рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИред рдпрд╣ instruction Intlayer рдХреЛ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдлрд╝рд╛рдЗрд▓ рдХреЛ autofilled рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдФрд░ рдпрджрд┐ рдореМрдЬреВрдж рд╣реИ рддреЛ рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ translate рдХрд┐рдП рдЬрд╛рдиреЗ рд╕реЗ рдЫреЛрдбрд╝ рджреЗрдВред

    Intlayer autofill рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд instruction рдкрд░ рднреА рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдЧрд╛:

    • рдЖрдкрдХреА .content.{ts|js|json} тЖТ fill instruction рд╕реЗ
    • рдЖрдкрдХреА configuration file .intlayer.config.ts тЖТ dictionary.fill instruction рд╕реЗ
    • рдЕрдиреНрдпрдерд╛ true рдкрд░ set рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛

    Per-locale content declaration files рдХреЗ рд▓рд┐рдП, true instruction рдХреЛ ./{{fileName}}.fill.content.json рд╕реЗ replace рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдПрдХ per-locale content declaration file рдЕрддрд┐рд░рд┐рдХреНрдд localized content рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдпрд╣ рдореМрдЬреВрджрд╛ рдлрд╝рд╛рдЗрд▓ рдХреЛ overwrite рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ рдлрд╝рд╛рдЗрд▓ generate рдХрд░реЗрдЧрд╛ред

    рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░

    рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, fill рдХреЛ globally true рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ Intlayer automatically рд╕рднреА content files рдХреЛ fill рдХрд░реЗрдЧрд╛ рдФрд░ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕реНрд╡рдпрдВ edit рдХрд░реЗрдЧрд╛ред рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдХрдИ рддрд░реАрдХреЛрдВ рд╕реЗ customize рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

    рд╡реИрд╢реНрд╡рд┐рдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рдХрд▓реНрдк

    1. fill: true (рдбрд┐рдлрд╝реЙрд▓реНрдЯ) - рд╕рднреА locales рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рднрд░реЗрдВ рдФрд░ рд╡рд░реНрддрдорд╛рди рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ
    2. fill: false - рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рднрд░рдг рдЕрдХреНрд╖рдо рдХрд░реЗрдВ
    3. fill: "./relative/path/to/file" - рд╡рд░реНрддрдорд╛рди рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрдирд╛рдПрдВ/рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ, рд╡рд░реНрддрдорд╛рди рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕реНрдерд╛рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╣рд▓ рдХрд┐рдП рдЧрдП рд╕рд╛рдкреЗрдХреНрд╖ рдкрде рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рдХреЗ
    4. fill: "/absolute/path/to/file" - рд╡рд░реНрддрдорд╛рди рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрдирд╛рдПрдВ/рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ .intlayer.config.ts рдореЗрдВ рдмреЗрд╕ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА (рдлрд╝реАрд▓реНрдб baseDir) рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╣рд▓ рдХрд┐рдП рдЧрдП рд╕рд╛рдкреЗрдХреНрд╖ рдкрде рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рдХреЗ
    5. fill: "C:\absolute\path\to\file" - рд╡рд░реНрддрдорд╛рди рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрдирд╛рдПрдВ/рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ, рдЖрдкрдХреЗ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╣рд▓ рдХрд┐рдП рдЧрдП рдирд┐рд░рдкреЗрдХреНрд╖ рдкрде рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рдХреЗ
    6. fill: { [key in Locales]?: string } - рдкреНрд░рддреНрдпреЗрдХ locale рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрдирд╛рдПрдВ/рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ

    v7 рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░рд┐рд╡рд░реНрддрди

    v7 рдореЗрдВ, fill рдХрдорд╛рдВрдб рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

    • fill: true - рд╡рд░реНрддрдорд╛рди рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рднреА locales рдХреЗ рд▓рд┐рдП рднрд░реА рдЧрдИ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддрд╛ рд╣реИ
    • fill: "path/to/file" - рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЛ рднрд░рддрд╛ рд╣реИ рдмрд┐рдирд╛ рд╡рд░реНрддрдорд╛рди рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдП
    • fill: false - auto-fill рдХреЛ рдкреВрд░реА рддрд░рд╣ рдЕрдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИ

    рдЬрдм рдХрд┐рд╕реА рджреВрд╕рд░реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП path рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ fill рддрдВрддреНрд░ рд╕рд╛рдордЧреНрд░реА рдШреЛрд╖рдгрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдмреАрдЪ рдПрдХ master-slave рд╕рдВрдмрдВрдз рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореБрдЦреНрдп (master) рдлрд╝рд╛рдЗрд▓ рд╕рддреНрдп рдХрд╛ рд╕реНрд░реЛрдд рд╣реИ, рдФрд░ рдЬрдм рдЗрд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ Intlayer рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ path рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╡реНрдпреБрддреНрдкрдиреНрди (рднрд░реА рдЧрдИ) рдШреЛрд╖рдгрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдкрд░ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред

    рдкреНрд░рддрд┐-рд▓реЛрдХреЗрд▓ рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝реЗрд╢рди

    рдЖрдк рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд▓реЛрдХреЗрд▓ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

    intlayer.config.ts
    const config: IntlayerConfig = {
      content: {
        internationalization: {
          locales: [Locales.ENGLISH, Locales.FRENCH, Locales.POLISH],
          defaultLocale: Locales.ENGLISH,
          requiredLocales: [Locales.ENGLISH], // рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╣реИ Property 'pl' is missing in type '{ en: string; xxx } on your t function if рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП
        },
      },
      dictionary: {
        fill: {
          en: true, // рдЕрдВрдЧреНрд░реЗрдЬреА рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рдлрд╝рд╛рдЗрд▓ рдХреЛ рднрд░реЗрдВ рдФрд░ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ
          fr: "./translations/fr.json", // рдлреНрд░реЗрдВрдЪ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВ
          es: false, // рд╕реНрдкреИрдирд┐рд╢ рдХреЗ рд▓рд┐рдП fill рдХреЛ рдЕрдХреНрд╖рдо рдХрд░реЗрдВ
        },
      },
    };
    

    рдпрд╣ рдЖрдкрдХреЛ рдПрдХ рд╣реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рднреАрддрд░ рд╡рд┐рднрд┐рдиреНрди рд▓реЛрдХреЗрд▓ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди fill рд╡реНрдпрд╡рд╣рд╛рд░ рд░рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

    src/components/example/example.content.ts
    import { Locales, type Dictionary } from "intlayer";
    
    const exampleContent = {
      key: "example",
      locale: Locales.ENGLISH,
      fill: "./example.content.json",
      content: {
        contentExample: "рдпрд╣ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ",
      },
    } satisfies Dictionary;
    
    export default exampleContent;
    

    рдпрд╣рд╛рдБ fill instruction рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдПрдХ per-locale content declaration file рд╣реИред

    рдлрд┐рд░, рдЬрдм рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрджреЗрд╢ рдЪрд▓рд╛рддреЗ рд╣реИрдВ:

    bash
    npx intlayer fill --file 'src/components/example/example.content.ts'
    

    Intlayer рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ src/components/example/example.content.json рдкрд░ derived declaration file рдЬреЗрдирд░реЗрдЯ рдХрд░реЗрдЧрд╛, рдореБрдЦреНрдп рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд╕рднреА рд▓реЛрдХреЗрд▓ рдХреЛ рднрд░рддреЗ рд╣реБрдПред

    src/components/example/example.content.json
    {
      "key": "example",
      "content": {
        "contentExample": {
          "nodeType": "translation",
          "translation": {
            "fr": "Ceci est un exemple de contenu",
            "es": "Este es un ejemplo de contenido",
          },
        },
      },
    }
    

    рдЗрд╕рдХреЗ рдмрд╛рдж, рджреЛрдиреЛрдВ declaration files рдХреЛ рдПрдХ рдПрдХрд▓ dictionary рдореЗрдВ рдорд░реНрдЬ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕реЗ рдорд╛рдирдХ useIntlayer("example") hook (react) / composable (vue) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

    Global Configuration

    рдЖрдк intlayer.config.ts рдлрд╝рд╛рдЗрд▓ рдореЗрдВ global auto fill configuration рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

    intlayer.config.ts
    import { type IntlayerConfig, Locales } from "intlayer";
    
    const config: IntlayerConfig = {
      internationalization: {
        locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
        defaultLocale: Locales.ENGLISH,
        requiredLocales: [Locales.ENGLISH, Locales.FRENCH],
      },
      dictionary: {
        // рд╕рднреА dictionaries рдХреЗ рд▓рд┐рдП рд▓рд╛рдкрддрд╛ translations рдХреЛ auto-generate рдХрд░реЗрдВ
        fill: "./{{fileName}}Filled.content.ts",
        //
        // fill: "/messages/{{locale}}/{{key}}/{{fileName}}.content.json",
        //
        // fill: true, // рд╕рднреА dictionaries рдХреЗ рд▓рд┐рдП рд▓рд╛рдкрддрд╛ translations рдХреЛ auto-generate рдХрд░реЗрдВ рдЬреИрд╕реЗ "./{{fileName}}.content.json" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
        //
        // fill: {
        //   en: "./{{fileName}}.en.content.json",
        //   fr: "./{{fileName}}.fr.content.json",
        //   es: "./{{fileName}}.es.content.json",
        // },
      },
    };
    
    export default config;
    

    рдЖрдк content files рдореЗрдВ fill field рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рддрд┐ dictionary рдХреЛ fine-tune рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред Intlayer рдкрд╣рд▓реЗ per dictionary configuration рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдЧрд╛ рдФрд░ рдлрд┐рд░ global configuration рдкрд░ fallback рдХрд░реЗрдЧрд╛ред

    рдСрдЯреЛрдлрд┐рд▓ рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рд░реВрдк

    рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЧрдИ рд╕реНрд╡рд░реВрдк рдСрдЯреЛрдлрд┐рд▓ рдХреА рдЧрдИ рдШреЛрд╖рдгрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП JSON рд╣реИ, рдЬреЛ рд╕реНрд╡рд░реВрдкрдг рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, Intlayer .ts, .js, .mjs, .cjs, рдФрд░ рдЕрдиреНрдп рд╕реНрд╡рд░реВрдкреЛрдВ рдХрд╛ рднреА рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

    src/components/example/example.content.ts
    const exampleContent = {
      key: "example",
      autoFill: "./example.filled.content.ts",
      content: {
        // рдЖрдкрдХреА рд╕рд╛рдордЧреНрд░реА
      },
    };
    

    рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдЗрд╕ рд╕реНрдерд╛рди рдкрд░ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛:

    plaintext
    src/components/example/example.filled.content.ts
    

    .js, .ts, рдФрд░ рд╕рдорд╛рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

    • рдпрджрд┐ рдлрд╝рд╛рдЗрд▓ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИ, рддреЛ Intlayer рдЗрд╕реЗ AST (Abstract Syntax Tree) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рд░реНрд╕ рдХрд░реЗрдЧрд╛ рддрд╛рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝реАрд▓реНрдб рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдФрд░ рдХреЛрдИ рднреА рдЧрд╛рдпрдм рдЕрдиреБрд╡рд╛рдж рдбрд╛рд▓рд╛ рдЬрд╛ рд╕рдХреЗред
    • рдпрджрд┐ рдлрд╝рд╛рдЗрд▓ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рддреЛ Intlayer рдЗрд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕рд╛рдордЧреНрд░реА рдШреЛрд╖рдгрд╛ рдлрд╝рд╛рдЗрд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ред

    рдкреВрд░реНрдг рдкрде (Absolute Paths)

    autoFill рдлрд╝реАрд▓реНрдб рдкреВрд░реНрдг рдкрдереЛрдВ рдХрд╛ рднреА рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

    src/components/example/example.content.ts
    const exampleContent = {
      key: "example",
      autoFill: "/messages/example.content.json",
      content: {
        // рдЖрдкрдХреА рд╕рд╛рдордЧреНрд░реА
      },
    };
    

    рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдЗрд╕ рд╕реНрдерд╛рди рдкрд░ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛:

    plaintext
    /messages/example.content.json
    

    рдкреНрд░рддрд┐-рд╕реНрдерд╛рдиреАрдп рд╕рд╛рдордЧреНрд░реА рдШреЛрд╖рдгрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдирд┐рд░реНрдорд╛рдг (Autogenerate Per-Locale Content Declaration Files)

    autoFill рдлрд╝реАрд▓реНрдб рдкреНрд░рддрд┐-рд╕реНрдерд╛рдиреАрдп рд╕рд╛рдордЧреНрд░реА рдШреЛрд╖рдгрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рднреА рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

    src/components/example/example.content.ts
    const exampleContent = {
      key: "example",
      autoFill: {
        fr: "./example.fr.content.json",
        es: "./example.es.content.json",
      },
      content: {
        // рдЖрдкрдХреА рд╕рд╛рдордЧреНрд░реА
      },
    };
    

    рдпрд╣ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓реЗрдВ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛:

    • src/components/example/example.fr.content.json
    • src/components/example/example.es.content.json
    рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрджрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕рднреА рд╕реНрдерд╛рдиреАрдп рднрд╛рд╖рд╛рдПрдБ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ Intlayer рдмрд╛рдХреА рд╕реНрдерд╛рдиреАрдп рднрд╛рд╖рд╛рдУрдВ рдХреА рдлрд╝рд╛рдЗрд▓реЗрдВ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рд╕реЗ рдмрдЪрддрд╛ рд╣реИред

    рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдерд╛рдиреАрдп рдСрдЯреЛрдлрд┐рд▓ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░реЗрдВ (Filter Specific Locale Autofill)

    autoFill рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЖрдк рдлрд╝рд┐рд▓реНрдЯрд░ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдерд╛рдиреАрдп рдлрд╝рд╛рдЗрд▓реЗрдВ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

    src/components/example/example.content.ts
    const exampleContent = {
      key: "example",
      autoFill: {
        fr: "./example.fr.content.json",
      },
      content: {
        // рдЖрдкрдХреА рд╕рд╛рдордЧреНрд░реА
      },
    };
    

    рдпрд╣ рдХреЗрд╡рд▓ рдлреНрд░реЗрдВрдЪ рдЕрдиреБрд╡рд╛рдж рдлрд╝рд╛рдЗрд▓ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ред

    рдкрде рдЪрд░ (Path Variables)

    рдЖрдк рдЙрддреНрдкрдиреНрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд▓рдХреНрд╖рд┐рдд рдкрдереЛрдВ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП autoFill рдкрде рдХреЗ рдЕрдВрджрд░ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

    рдЙрдкрд▓рдмреНрдз рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕:

    • {{locale}} тАУ рд╕реНрдерд╛рдиреАрдп рдХреЛрдб (рдЬреИрд╕реЗ fr, es)
    • {{fileName}} тАУ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо (рдЬреИрд╕реЗ index)
    • {{key}} тАУ рд╢рдмреНрджрдХреЛрд╢ рдХреБрдВрдЬреА (рдЬреИрд╕реЗ example)
    src/components/example/index.content.ts
    const exampleContent = {
      key: "example",
      autoFill: "/messages/{{locale}}/{{key}}.content.json",
      content: {
        // рдЖрдкрдХреА рд╕рд╛рдордЧреНрд░реА
      },
    };
    

    рдпрд╣ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛:

    • /messages/fr/example.content.json
    • /messages/es/example.content.json
    src/components/example/index.content.ts
    const exampleContent = {
      key: "example",
      autoFill: "./{{fileName}}.content.json",
      content: {
        // рдЖрдкрдХреА рд╕рд╛рдордЧреНрд░реА
      },
    };
    

    рдпрд╣ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛:

    • ./index.content.json
    • ./index.content.json