Trang chủSandboxTrưng bàyỨng dụngTài liệuBlog
    • EnglishTiếng Anh
      EN
    • русскийTiếng Nga
      RU
    • 日本語Tiếng Nhật
      JA
    • françaisTiếng Pháp
      FR
    • 한국어Tiếng Hàn
      KO
    • 中文Tiếng Trung
      ZH
    • españolTiếng Tây Ban Nha
      ES
    • DeutschTiếng Đức
      DE
    • العربيةTiếng Ả Rập
      AR
    • italianoTiếng Italy
      IT
    • British EnglishTiếng Anh (Anh)
      EN-GB
    • portuguêsTiếng Bồ Đào Nha
      PT
    • हिन्दीTiếng Hindi
      HI
    • TürkçeTiếng Thổ Nhĩ Kỳ
      TR
    • polskiTiếng Ba Lan
      PL
    • IndonesiaTiếng Indonesia
      ID
    • Tiếng ViệtTiếng Việt
      VI
    • українськаTiếng Ukraina
      UK
    /
    Lọc tài liệu theo framework
    Alt+←
    Tại sao Intlayer?
    Bắt đầu
    Khái niệm
    • Intlayer làm việc như thế nào
    • Cấu hình
    • TestFillBuildWatchExtractLoginPushPullConfigurationListVersionEditorLiveDebugDoc ReviewDoc TranslateSDK
    • Editor visual
    • CMS
    • Tích hợp CI/CD
    • DịchSố nhiềuLiệt kêĐiều kiệnGiới tínhChènTệpNestingMarkdownHTMLLấy hàm
    • File cho mỗi ngôn ngữ
    • Biên dịch
    • Tự động điền
    • Kiểm tra
    • Tối ưu hóa gói
    Môi trường
    • Next.js 14 và App Router
      Next.js 15
      Next.js không locale URL
      Next.js và Page Router
      Trình biên dịch
    • Tanstack Start Solid
    • Astro và React
      Astro và Svelte
      Astro và Vue
      Astro và Solid
      Astro và Preact
      Astro và Lit
      Astro và Vanilla JS
    • React Router v7
      React Router v7 (fs-routes)
      Compiler
    • Nuxt và Vue
    • Vite và Solid
    • SvelteKit
    • Vite và Preact
    • Vite và Vanilla JS
    • Vite và Lit
    • Angular 19 (Webpack)
      Analog
    • React CRA
    • React Native và Expo
    • Express.js
      NestJS
      Fastify
      Hono
      Adonis
    • Lynx và React
    Plugins
    • JSON
    • gettext (.po)
    Mở rộng VS Code
    Tác nhân
    • MCP Server
    • Kỹ năng tác nhân
    Phiên bản
    • v8
    • v7
    • v6
    Benchmark
    • Next.js
    • TanStack
    • Vue
    • Solid
    • Svelte
    Blog
    Đặt câu hỏi
    1. Documentation
    2. Khái niệm
    3. Tự động điền
    Ngày tạo:2025-03-13Cập nhật lần cuối:2025-09-20
    Tham chiếu tài liệu này tới trợ lý AI yêu thích của bạn
    ChatGPT
    Claude
    DeepSeek
    Google AI mode
    Gemini
    Perplexity
    Mistral
    Grok

    Đặt câu hỏi và nhận tóm tắt tài liệu bằng cách tham chiếu trang này và nhà cung cấp AI bạn chọn

    Lịch sử phiên bản

    1. "Đổi tên `autoFill` thành `fill` và cập nhật hành vi"
      v7.0.023/10/2025
    2. "Thêm cấu hình toàn cục"
      v6.0.020/9/2025
    3. "Thêm biến `{{fileName}}`"
      v6.0.017/9/2025
    4. "Khởi tạo lịch sử"
      v5.5.1029/6/2025

    Nội dung của trang này đã được dịch bằng AI.

    Xem phiên bản mới nhất của nội dung gốc bằng tiếng Anh
    Chỉnh sửa tài liệu này

    Nếu bạn có ý tưởng để cải thiện tài liệu này, vui lòng đóng góp bằng cách gửi pull request trên GitHub.

    Liên kết GitHub tới tài liệu
    Sao chép

    Sao chép Markdown của tài liệu vào bộ nhớ tạm

    Dịch Tệp Khai Báo Nội Dung Tự Động Điền

    Các tệp khai báo nội dung tự động điền trong CI của bạn là một cách để tăng tốc quy trình phát triển.

    Hành Vi Mặc Định

    Theo mặc định, fill được đặt là true toàn cục, có nghĩa là Intlayer sẽ tự động điền tất cả các tệp nội dung và chỉnh sửa chính tệp đó. Hành vi này có thể được tùy chỉnh theo nhiều cách:

    Tùy Chọn Cấu Hình Toàn Cục

    1. fill: true (mặc định) - Tự động điền tất cả các locale và chỉnh sửa tệp hiện tại
    2. fill: false - Vô hiệu hóa tự động điền cho tệp nội dung này
    3. fill: "path/to/file" - Tạo/cập nhật tệp được chỉ định mà không chỉnh sửa tệp hiện tại
    4. fill: { [key in Locales]?: string } - Tạo/cập nhật tệp được chỉ định cho từng locale

    Thay Đổi Hành Vi trong v7

    Trong v7, hành vi của lệnh fill đã được cập nhật:

    • fill: true - Viết lại tệp hiện tại với nội dung đã điền cho tất cả các locale
    • fill: "path/to/file" - Điền vào tệp được chỉ định mà không sửa đổi tệp hiện tại
    • fill: false - Vô hiệu hóa hoàn toàn tính năng tự động điền

    Khi sử dụng tùy chọn đường dẫn để ghi vào một tệp khác, cơ chế điền hoạt động thông qua mối quan hệ master-slave giữa các tệp khai báo nội dung. Tệp chính (master) đóng vai trò là nguồn dữ liệu chính xác, và khi nó được cập nhật, Intlayer sẽ tự động áp dụng những thay đổi đó cho các tệp khai báo dẫn xuất (đã điền) được chỉ định bởi đường dẫn.

    Tùy Chỉnh Theo Locale

    Bạn cũng có thể tùy chỉnh hành vi cho từng locale bằng cách sử dụng một đối tượng:

    intlayer.config.ts
    Sao chép mã

    Sao chép đoạn mã vào khay nhớ tạm (clipboard)

    const config: IntlayerConfig = {  content: {    internationalization: {      locales: [Locales.ENGLISH, Locales.FRENCH, Locales.POLISH],      defaultLocale: Locales.ENGLISH,      requiredLocales: [Locales.ENGLISH], // Khuyến nghị để tránh lỗi Property 'pl' is missing in type '{ en: string; xxx }' trong hàm t của bạn nếu    },  },  dictionary: {    fill: {      en: true, // Điền và chỉnh sửa tệp hiện tại cho tiếng Anh      fr: "./translations/fr.json", // Tạo tệp riêng cho tiếng Pháp      es: false, // Vô hiệu hóa điền cho tiếng Tây Ban Nha    },  },};

    Điều này cho phép bạn có các hành vi điền khác nhau cho các locale khác nhau trong cùng một dự án.

    src/components/example/example.content.ts
    Sao chép mã

    Sao chép đoạn mã vào khay nhớ tạm (clipboard)

    import { Locales, type Dictionary } from "intlayer";const exampleContent = {  key: "example",  locale: Locales.ENGLISH,  fill: "./example.content.json",  content: {    contentExample: "Đây là một ví dụ về nội dung",  },} satisfies Dictionary;export default exampleContent;

    Dưới đây là một tệp khai báo nội dung theo từng locale sử dụng chỉ dẫn fill.

    Sau đó, khi bạn chạy lệnh sau:

    bash
    Sao chép mã

    Sao chép đoạn mã vào khay nhớ tạm (clipboard)

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

    Intlayer sẽ tự động tạo tệp khai báo dẫn xuất tại src/components/example/example.content.json, điền vào tất cả các locale chưa được khai báo trong tệp chính.

    src/components/example/example.content.json
    Sao chép mã

    Sao chép đoạn mã vào khay nhớ tạm (clipboard)

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

    Sau đó, cả hai tệp khai báo sẽ được hợp nhất thành một từ điển duy nhất, có thể truy cập bằng cách sử dụng hook tiêu chuẩn useIntlayer("example") (react) / composable (vue).

    Cấu hình toàn cục

    Bạn có thể cấu hình tự động điền toàn cục trong tệp intlayer.config.ts.

    intlayer.config.ts
    Sao chép mã

    Sao chép đoạn mã vào khay nhớ tạm (clipboard)

    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: {    // Tự động tạo các bản dịch còn thiếu cho tất cả các từ điển    fill: "./{{fileName}}Filled.content.ts",    //    // fill: "/messages/{{locale}}/{{key}}/{{fileName}}.content.json",    //    // fill: true, // tự động tạo các bản dịch còn thiếu cho tất cả các từ điển giống như sử dụng "./{{fileName}}.content.json"    //    // fill: {    //   en: "./{{fileName}}.en.content.json",    //   fr: "./{{fileName}}.fr.content.json",    //   es: "./{{fileName}}.es.content.json",    // },  },};export default config;

    Bạn vẫn có thể tinh chỉnh từng từ điển bằng cách sử dụng trường fill trong các tệp nội dung. Intlayer sẽ ưu tiên cấu hình theo từng từ điển trước, sau đó mới dùng cấu hình toàn cục.

    Định dạng tệp tự động điền

    Định dạng được khuyến nghị cho các tệp khai báo tự động điền là JSON, giúp tránh các ràng buộc về định dạng. Tuy nhiên, Intlayer cũng hỗ trợ các định dạng .ts, .js, .mjs, .cjs và các định dạng khác.

    src/components/example/example.content.ts
    Sao chép mã

    Sao chép đoạn mã vào khay nhớ tạm (clipboard)

    const exampleContent = {  key: "example",  fill: "./example.filled.content.ts",  content: {    // Nội dung của bạn  },};

    Điều này sẽ tạo tệp tại:

    plaintext
    Sao chép mã

    Sao chép đoạn mã vào khay nhớ tạm (clipboard)

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

    Việc tạo các tệp .js, .ts và các tệp tương tự hoạt động như sau:

    • Nếu tệp đã tồn tại, Intlayer sẽ phân tích nó bằng cách sử dụng AST (Cây cú pháp trừu tượng) để xác định từng trường và chèn các bản dịch còn thiếu.
    • Nếu tệp không tồn tại, Intlayer sẽ tạo tệp đó bằng cách sử dụng mẫu tệp khai báo nội dung mặc định.

    Đường dẫn tuyệt đối

    Trường fill cũng hỗ trợ các đường dẫn tuyệt đối.

    src/components/example/example.content.ts
    Sao chép mã

    Sao chép đoạn mã vào khay nhớ tạm (clipboard)

    const exampleContent = {  key: "example",  fill: "/messages/example.content.json",  content: {    // Nội dung của bạn  },};

    Điều này sẽ tạo tệp tại:

    plaintext
    Sao chép mã

    Sao chép đoạn mã vào khay nhớ tạm (clipboard)

    /messages/example.content.json

    Tự động tạo tệp khai báo nội dung theo từng locale

    Trường fill cũng hỗ trợ tạo các tệp khai báo nội dung theo từng locale.

    src/components/example/example.content.ts
    Sao chép mã

    Sao chép đoạn mã vào khay nhớ tạm (clipboard)

    const exampleContent = {  key: "example",  fill: {    fr: "./example.fr.content.json",    es: "./example.es.content.json",  },  content: {    // Nội dung của bạn  },};

    Điều này sẽ tạo hai tệp riêng biệt:

    • src/components/example/example.fr.content.json
    • src/components/example/example.es.content.json
    Trong trường hợp này, nếu đối tượng không chứa tất cả các locale, Intlayer sẽ bỏ qua việc tạo các locale còn lại.

    Lọc tự động điền cho locale cụ thể

    Sử dụng một đối tượng cho trường fill cho phép bạn áp dụng bộ lọc và chỉ tạo các tệp locale cụ thể.

    src/components/example/example.content.ts
    Sao chép mã

    Sao chép đoạn mã vào khay nhớ tạm (clipboard)

    const exampleContent = {  key: "example",  fill: {    fr: "./example.fr.content.json",  },  content: {    // Nội dung của bạn  },};

    Điều này chỉ tạo tệp dịch tiếng Pháp.

    Biến đường dẫn

    Bạn có thể sử dụng các biến bên trong đường dẫn fill để giải quyết động các đường dẫn đích cho các tệp được tạo ra.

    Các biến có sẵn:

    • {{locale}} – Mã locale (ví dụ: fr, es)
    • {{fileName}} – Tên tệp (ví dụ: index)
    • {{key}} – Khóa từ điển (ví dụ: example)
    src/components/example/index.content.ts
    Sao chép mã

    Sao chép đoạn mã vào khay nhớ tạm (clipboard)

    const exampleContent = {  key: "example",  fill: "/messages/{{locale}}/{{key}}.content.json",  content: {    // Nội dung của bạn  },};

    Điều này sẽ tạo ra:

    • /messages/fr/example.content.json
    • /messages/es/example.content.json
    src/components/example/index.content.ts
    Sao chép mã

    Sao chép đoạn mã vào khay nhớ tạm (clipboard)

    const exampleContent = {  key: "example",  fill: "./{{fileName}}.content.json",  content: {    // Nội dung của bạn  },};

    Điều này sẽ tạo ra:

    • ./index.content.json
    • ./index.content.json
    Biên dịch
    Kiểm tra
    Alt+→

    Trong trang này

      Các cuộc thảo luận là ẩn danh và được xem xét thường xuyên để giải quyết các vấn đề phổ biến. Hãy thoải mái chia sẻ ý tưởng tính năng, phản hồi về tài liệu hoặc bất cứ điều gì liên quan đến Intlayer, chúng tôi sử dụng thông tin này để định hình lộ trình và cải thiện sản phẩm.

      const config: IntlayerConfig = {  content: {    internationalization: {      locales: [Locales.ENGLISH, Locales.FRENCH, Locales.POLISH],      defaultLocale: Locales.ENGLISH,      requiredLocales: [Locales.ENGLISH], // Khuyến nghị để tránh lỗi Property 'pl' is missing in type '{ en: string; xxx }' trong hàm t của bạn nếu    },  },  dictionary: {    fill: {      en: true, // Điền và chỉnh sửa tệp hiện tại cho tiếng Anh      fr: "./translations/fr.json", // Tạo tệp riêng cho tiếng Pháp      es: false, // Vô hiệu hóa điền cho tiếng Tây Ban Nha    },  },};
      import { Locales, type Dictionary } from "intlayer";const exampleContent = {  key: "example",  locale: Locales.ENGLISH,  fill: "./example.content.json",  content: {    contentExample: "Đây là một ví dụ về nội dung",  },} satisfies Dictionary;export default exampleContent;
      npx intlayer fill --file 'src/components/example/example.content.ts'
      {  "key": "example",  "content": {    "contentExample": {      "nodeType": "translation",      "translation": {        "fr": "Ceci est un exemple de contenu",        "es": "Este es un ejemplo de contenido",      },    },  },}
      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: {    // Tự động tạo các bản dịch còn thiếu cho tất cả các từ điển    fill: "./{{fileName}}Filled.content.ts",    //    // fill: "/messages/{{locale}}/{{key}}/{{fileName}}.content.json",    //    // fill: true, // tự động tạo các bản dịch còn thiếu cho tất cả các từ điển giống như sử dụng "./{{fileName}}.content.json"    //    // fill: {    //   en: "./{{fileName}}.en.content.json",    //   fr: "./{{fileName}}.fr.content.json",    //   es: "./{{fileName}}.es.content.json",    // },  },};export default config;
      const exampleContent = {  key: "example",  fill: "./example.filled.content.ts",  content: {    // Nội dung của bạn  },};
      src/components/example/example.filled.content.ts
      const exampleContent = {  key: "example",  fill: "/messages/example.content.json",  content: {    // Nội dung của bạn  },};
      /messages/example.content.json
      const exampleContent = {  key: "example",  fill: {    fr: "./example.fr.content.json",    es: "./example.es.content.json",  },  content: {    // Nội dung của bạn  },};
      const exampleContent = {  key: "example",  fill: {    fr: "./example.fr.content.json",  },  content: {    // Nội dung của bạn  },};
      const exampleContent = {  key: "example",  fill: "/messages/{{locale}}/{{key}}.content.json",  content: {    // Nội dung của bạn  },};
      const exampleContent = {  key: "example",  fill: "./{{fileName}}.content.json",  content: {    // Nội dung của bạn  },};