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. Compiler
    Ngày tạo:2025-09-09Cập nhật lần cuối:2026-03-12
    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. "Cập nhật các tùy chọn trình biên dịch, thêm hỗ trợ FilePathPattern"
      v8.2.09/3/2026
    2. "Cập nhật các tùy chọn trình biên dịch"
      v8.1.725/2/2026
    3. "Phát hành Trình Biên Dịch"
      v7.3.127/11/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

    Trình Biên Dịch Intlayer | Trích Xuất Nội Dung Tự Động cho i18n

    Trình Biên Dịch Intlayer là gì?

    Trình Biên Dịch Intlayer là một công cụ mạnh mẽ được thiết kế để tự động hóa quy trình quốc tế hóa (i18n) trong các ứng dụng của bạn. Nó quét mã nguồn của bạn (JSX, TSX, Vue, Svelte) để tìm các khai báo nội dung, trích xuất chúng và tự động tạo ra các tệp từ điển cần thiết. Điều này cho phép bạn giữ nội dung cùng vị trí với các component của mình trong khi Intlayer xử lý việc quản lý và đồng bộ hóa các từ điển đó.

    Tại sao nên sử dụng Trình Biên Dịch Intlayer?

    • Tự động hóa: Loại bỏ việc sao chép thủ công nội dung vào từ điển.
    • Tốc độ: Tối ưu hóa việc trích xuất nội dung đảm bảo quá trình build của bạn vẫn nhanh.
    • Trải nghiệm nhà phát triển: Giữ các khai báo nội dung ngay tại nơi chúng được sử dụng, cải thiện khả năng bảo trì.
    • Cập nhật trực tiếp: Hỗ trợ Hot Module Replacement (HMR) để phản hồi ngay lập tức trong quá trình phát triển.

    Xem bài viết blog Compiler vs. Declarative i18n để có sự so sánh sâu hơn.

    Tại sao không sử dụng Trình Biên Dịch Intlayer?

    Mặc dù trình biên dịch mang lại trải nghiệm "hoạt động ngay" tuyệt vời, nó cũng giới thiệu một số đánh đổi mà bạn nên biết:

    • Sự mơ hồ của heuristic: Trình biên dịch phải đoán xem đâu là nội dung hướng đến người dùng so với logic ứng dụng (ví dụ: className="active", mã trạng thái, ID sản phẩm). Trong các codebase phức tạp, điều này có thể dẫn đến dương tính giả hoặc các chuỗi bị bỏ sót cần chú thích thủ công và ngoại lệ.
    • Chỉ trích xuất tĩnh: Trích xuất dựa trên trình biên dịch dựa vào phân tích tĩnh. Các chuỗi chỉ tồn tại ở thời gian chạy (mã lỗi API, trường CMS, v.v.) không thể được phát hiện hoặc dịch bởi trình biên dịch một mình, vì vậy bạn vẫn cần một chiến lược i18n thời gian chạy bổ sung.

    Để có so sánh kiến trúc sâu hơn, xem bài viết blog Compiler vs. Declarative i18n.

    Như một giải pháp thay thế, để tự động hóa quy trình i18n của bạn trong khi vẫn giữ quyền kiểm soát hoàn toàn đối với nội dung của bạn, Intlayer cũng cung cấp lệnh tự động trích xuất intlayer extract (xem tài liệu CLI), hoặc lệnh Intlayer: extract content to Dictionary từ tiện ích mở rộng Intlayer VS Code (xem tài liệu tiện ích mở rộng VS Code).

    Cách sử dụng

    Vite

    Đối với các ứng dụng dựa trên Vite (React, Vue, Svelte, v.v.), cách dễ nhất để sử dụng trình biên dịch là thông qua plugin vite-intlayer.

    Cài đặt

    bash
    Sao chép mã

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

    npm install vite-intlayer

    Cấu hình

    Cập nhật file vite.config.ts của bạn để bao gồm plugin intlayerCompiler:

    vite.config.ts
    Sao chép mã

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

    import { defineConfig } from "vite";import { intlayer, intlayerCompiler } from "vite-intlayer";export default defineConfig({ plugins: [   intlayer(),   intlayerCompiler(), // Thêm plugin trình biên dịch ],});

    See complete tutorial: Intlayer Compiler with Vite+React

    Hỗ trợ Framework

    Plugin Vite tự động phát hiện và xử lý các loại file khác nhau:

    • React / JSX / TSX: Xử lý một cách tự nhiên.
    • Vue: Yêu cầu @intlayer/vue-compiler.
    • Svelte: Yêu cầu @intlayer/svelte-compiler.

    Hãy chắc chắn cài đặt gói trình biên dịch phù hợp với framework của bạn:

    bash
    Sao chép mã

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

    # Dành cho Vuenpm install @intlayer/vue-compiler# Dành cho Sveltenpm install @intlayer/svelte-compiler

    Next.js (Babel)

    Đối với Next.js hoặc các ứng dụng dựa trên Webpack sử dụng Babel, bạn có thể cấu hình trình biên dịch bằng cách sử dụng plugin @intlayer/babel.

    Cài đặt

    bash
    Sao chép mã

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

    npm install @intlayer/babel

    Cấu hình

    Cập nhật babel.config.js (hoặc babel.config.json) của bạn để bao gồm plugin trích xuất. Chúng tôi cung cấp một helper getExtractPluginOptions để tự động tải cấu hình Intlayer của bạn.

    babel.config.js
    Sao chép mã

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

    const { intlayerExtractBabelPlugin, intlayerOptimizeBabelPlugin, getExtractPluginOptions, getOptimizePluginOptions,} = require("@intlayer/babel");module.exports = { presets: ["next/babel"], plugins: [   // Trích xuất nội dung từ các component vào từ điển   [intlayerExtractBabelPlugin, getExtractPluginOptions()],   // Tối ưu hóa việc import bằng cách thay thế useIntlayer bằng việc import trực tiếp từ điển   [intlayerOptimizeBabelPlugin, getOptimizePluginOptions()], ],};

    Cấu hình này đảm bảo rằng nội dung được khai báo trong các component của bạn será được tự động trích xuất và sử dụng để tạo từ điển trong quá trình build.

    See complete tutorial: Intlayer Compiler with Next.js

    Cấu hình tùy chỉnh

    Để tùy chỉnh hành vi của trình biên dịch, bạn có thể cập nhật tệp intlayer.config.ts trong thư mục gốc của dự án.

    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 = {  compiler: {    /**     * Cho biết trình biên dịch có nên được bật hay không.     * Đặt thành 'build-only' để bỏ qua trình biên dịch trong quá trình phát triển và tăng tốc thời gian khởi động.     */    enabled: true,    /**     * Xác định đường dẫn tệp đầu ra. Thay thế `outputDir`.     *     * - Các đường dẫn bắt đầu bằng `./` được giải quyết tương đối so với thư mục component.     * - Các đường dẫn bắt đầu bằng `/` được giải quyết tương đối so với thư mục gốc của dự án (`baseDir`).     *     * - Việc bao gồm biến `{{locale}}` trong đường dẫn sẽ cho phép tạo các từ điển được tách biệt theo ngôn ngữ.     *     * Ví dụ:     * ```ts     * {     *   // Tạo tệp .content.ts đa ngôn ngữ bên cạnh component     *   output: ({ fileName, extension }) => `./${fileName}${extension}`,     *     *   // output: './{{fileName}}{{extension}}', // Cách viết tương đương bằng template string     * }     * ```     *     * ```ts     * {     *   // Tạo tệp JSON tập trung theo ngôn ngữ trong thư mục gốc của dự án     *   output: ({ key, locale }) => `/locales/${locale}/${key}.content.json`,     *     *   // output: '/locales/{{locale}}/{{key}}.content.json', // Cách viết tương đương bằng template string     * }     * ```     *     * Danh sách biến:     *   - `fileName`: Tên tệp.     *   - `key`: Khóa nội dung.     *   - `locale`: Ngôn ngữ nội dung.     *   - `extension`: Phần mở rộng tệp.     *   - `componentFileName`: Tên tệp component.     *   - `componentExtension`: Phần mở rộng tệp component.     *   - `format`: Định dạng từ điển.     *   - `componentFormat`: Định dạng từ điển component.     *   - `componentDirPath`: Đường dẫn thư mục component.     */    output: ({ fileName, extension }) => `./${fileName}${extension}`,    /**     * Cho biết liệu các component có nên được lưu sau khi được chuyển đổi hay không.     * Bằng cách đó, trình biên dịch có thể được chạy một lần duy nhất để chuyển đổi ứng dụng, và sau đó nó có thể được gỡ bỏ.     */    saveComponents: false,    /**     * Chỉ chèn nội dung vào tệp đã tạo. Hữu ích cho đầu ra JSON i18next hoặc ICU MessageFormat cho mỗi ngôn ngữ.     *     * - `output: ({ locale, key }) => `./locale/${locale}/${key}.json`,`     */    noMetadata: false,    /**     * Tiền tố khóa từ điển     */    dictionaryKeyPrefix: "", // Thêm một tiền tố tùy chọn cho các khóa từ điển được trích xuất  },};export default config;

    Tham khảo cấu hình trình biên dịch

    Các thuộc tính sau có thể được cấu hình trong khối compiler của tệp intlayer.config.ts của bạn:

    • enabled:

      • Loại: boolean | 'build-only'
      • Mặc định: true
      • Mô tả: Cho biết trình biên dịch có nên được bật hay không.
    • dictionaryKeyPrefix:

      • Loại: string
      • Mặc định: ''
      • Mô tả: Tiền tố cho các khóa từ điển được trích xuất.
    • transformPattern:

      • Loại: string | string[]
      • Mặc định: ['**/*.{js,ts,mjs,cjs,jsx,tsx,vue,svelte}', '!**/node_modules/**']
      • Mô tả: (Đã lỗi thời: hãy sử dụng build.traversePattern thay thế) Các mẫu để duyệt mã để tối ưu hóa.
    • excludePattern:

      • Loại: string | string[]
      • Mặc định: ['**/node_modules/**']
      • Mô tả: (Đã lỗi thời: hãy sử dụng build.traversePattern thay thế) Các mẫu để loại trừ khỏi quá trình tối ưu hóa.
    • output:

      • Loại: FilePathPattern
      • Mặc định: ({ key }) => 'compiler/${key}.content.json'
      • Mô tả: Xác định đường dẫn tệp đầu ra. Thay thế outputDir. Xử lý các biến động như {{locale}}, {{key}}, {{fileName}}, {{extension}}, {{format}}, {{dirPath}}, {{componentFileName}}, {{componentExtension}} và {{componentFormat}}. Có thể được đặt dưới dạng chuỗi bằng định dạng 'my/{{var}}/path' hoặc dưới dạng hàm.
      • Ghi chú: Các đường dẫn ./**/* được giải quyết tương đối so với component. Các đường dẫn /**/* được giải quyết tương đối so với baseDir của Intlayer.
      • Ghi chú: Nếu ngôn ngữ được xác định trong đường dẫn, các từ điển sẽ được tạo cho mỗi ngôn ngữ.
      • Ví dụ: output: ({ locale, key }) => 'compiler/${locale}/${key}.json'
    • noMetadata:

      • Loại: boolean
      • Mặc định: false
      • Mô tả: Cho biết liệu siêu dữ liệu có nên được lưu trong tệp hay không. Nếu true, trình biên dịch sẽ không lưu siêu dữ liệu của từ điển (khóa, trình bao bọc nội dung). Hữu ích cho đầu ra JSON i18next hoặc ICU MessageFormat cho mỗi ngôn ngữ.
      • Ghi chú: Hữu ích nếu được sử dụng với plugin loadJSON.
      • Ví dụ: Nếu true: json { "key": "value" } Nếu false: json { "key": "value", "content": { "key": "value" } }
    • saveComponents:

      • Loại: boolean
      • Mặc định: false
      • Mô tả: Cho biết liệu các component có nên được lưu sau khi được chuyển đổi hay không.

    Điền các bản dịch còn thiếu

    Intlayer cung cấp một công cụ CLI để giúp bạn điền các bản dịch còn thiếu. Bạn có thể sử dụng lệnh intlayer để kiểm tra và điền các bản dịch còn thiếu từ mã của mình.

    bash
    Sao chép mã

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

    npx intlayer test         # Kiểm tra xem có thiếu bản dịch không
    bash
    Sao chép mã

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

    npx intlayer fill         # Điền các bản dịch còn thiếu

    Trích xuất

    Intlayer cung cấp một công cụ CLI để giúp bạn trích xuất nội dung từ mã của mình. Bạn có thể sử dụng lệnh intlayer extract để trích xuất nội dung từ mã của mình.

    bash
    Sao chép mã

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

    npx intlayer extract
    Để biết thêm chi tiết, hãy tham khảo tài liệu CLI
    File cho mỗi ngôn ngữ
    Tự động điền
    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.

      npm install vite-intlayer
      import { defineConfig } from "vite";import { intlayer, intlayerCompiler } from "vite-intlayer";export default defineConfig({ plugins: [   intlayer(),   intlayerCompiler(), // Thêm plugin trình biên dịch ],});
      # Dành cho Vuenpm install @intlayer/vue-compiler# Dành cho Sveltenpm install @intlayer/svelte-compiler
      npm install @intlayer/babel
      const { intlayerExtractBabelPlugin, intlayerOptimizeBabelPlugin, getExtractPluginOptions, getOptimizePluginOptions,} = require("@intlayer/babel");module.exports = { presets: ["next/babel"], plugins: [   // Trích xuất nội dung từ các component vào từ điển   [intlayerExtractBabelPlugin, getExtractPluginOptions()],   // Tối ưu hóa việc import bằng cách thay thế useIntlayer bằng việc import trực tiếp từ điển   [intlayerOptimizeBabelPlugin, getOptimizePluginOptions()], ],};
      import { type IntlayerConfig, Locales } from "intlayer";const config: IntlayerConfig = {  compiler: {    /**     * Cho biết trình biên dịch có nên được bật hay không.     * Đặt thành 'build-only' để bỏ qua trình biên dịch trong quá trình phát triển và tăng tốc thời gian khởi động.     */    enabled: true,    /**     * Xác định đường dẫn tệp đầu ra. Thay thế `outputDir`.     *     * - Các đường dẫn bắt đầu bằng `./` được giải quyết tương đối so với thư mục component.     * - Các đường dẫn bắt đầu bằng `/` được giải quyết tương đối so với thư mục gốc của dự án (`baseDir`).     *     * - Việc bao gồm biến `{{locale}}` trong đường dẫn sẽ cho phép tạo các từ điển được tách biệt theo ngôn ngữ.     *     * Ví dụ:     * ```ts     * {     *   // Tạo tệp .content.ts đa ngôn ngữ bên cạnh component     *   output: ({ fileName, extension }) => `./${fileName}${extension}`,     *     *   // output: './{{fileName}}{{extension}}', // Cách viết tương đương bằng template string     * }     * ```     *     * ```ts     * {     *   // Tạo tệp JSON tập trung theo ngôn ngữ trong thư mục gốc của dự án     *   output: ({ key, locale }) => `/locales/${locale}/${key}.content.json`,     *     *   // output: '/locales/{{locale}}/{{key}}.content.json', // Cách viết tương đương bằng template string     * }     * ```     *     * Danh sách biến:     *   - `fileName`: Tên tệp.     *   - `key`: Khóa nội dung.     *   - `locale`: Ngôn ngữ nội dung.     *   - `extension`: Phần mở rộng tệp.     *   - `componentFileName`: Tên tệp component.     *   - `componentExtension`: Phần mở rộng tệp component.     *   - `format`: Định dạng từ điển.     *   - `componentFormat`: Định dạng từ điển component.     *   - `componentDirPath`: Đường dẫn thư mục component.     */    output: ({ fileName, extension }) => `./${fileName}${extension}`,    /**     * Cho biết liệu các component có nên được lưu sau khi được chuyển đổi hay không.     * Bằng cách đó, trình biên dịch có thể được chạy một lần duy nhất để chuyển đổi ứng dụng, và sau đó nó có thể được gỡ bỏ.     */    saveComponents: false,    /**     * Chỉ chèn nội dung vào tệp đã tạo. Hữu ích cho đầu ra JSON i18next hoặc ICU MessageFormat cho mỗi ngôn ngữ.     *     * - `output: ({ locale, key }) => `./locale/${locale}/${key}.json`,`     */    noMetadata: false,    /**     * Tiền tố khóa từ điển     */    dictionaryKeyPrefix: "", // Thêm một tiền tố tùy chọn cho các khóa từ điển được trích xuất  },};export default config;
      npx intlayer test         # Kiểm tra xem có thiếu bản dịch không
      npx intlayer fill         # Điền các bản dịch còn thiếu
      npx intlayer extract