Penulis:
    Dibuat:2024-08-13Terakhir diperbarui:2026-08-22

    Dokumentasi Konfigurasi Intlayer

    Gambaran Umum

    File konfigurasi Intlayer memungkinkan kustomisasi berbagai aspek plugin, seperti internasionalisasi (i18n), middleware, dan penanganan konten. Dokumen ini memberikan deskripsi mendetail tentang setiap properti dalam konfigurasi.

    Daftar Isi

    Dukungan File Konfigurasi

    Intlayer menerima format file konfigurasi JSON, JS, MJS, dan TS:

    • intlayer.config.ts
    • intlayer.config.js
    • intlayer.config.json
    • intlayer.config.json5
    • intlayer.config.jsonc
    • intlayer.config.cjs
    • intlayer.config.mjs
    • .intlayerrc

    Contoh file konfigurasi

    intlayer.config.ts
    import { Locales, type IntlayerConfig } from "intlayer";
    import { nextjsRewrite } from "intlayer/routing";
    import { syncJSON } from "@intlayer/sync-json-plugin";
    import { z } from "zod";
    
    /**
     * Contoh file konfigurasi Intlayer yang menunjukkan semua opsi yang tersedia.
     */
    const config: IntlayerConfig = {
      /**
       * Konfigurasi untuk pengaturan internasionalisasi.
       */
      internationalization: {
        /**
         * Daftar locale yang didukung dalam aplikasi.
         * Default: [Locales.ENGLISH]
         */
        locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
    
        /**
         * Daftar locale wajib yang harus ditentukan dalam setiap kamus (dictionary).
         * Jika kosong, semua locale wajib dalam mode `strict`.
         * Default: []
         */
        requiredLocales: [Locales.ENGLISH],
    
        /**
         * Tingkat ketatnya (strictness) konten yang diinternasionalisasi.
         * - "strict": Error jika ada locale yang dideklarasikan hilang atau tidak dideklarasikan.
         * - "inclusive": Peringatan jika locale yang dideklarasikan hilang.
         * - "loose": Menerima locale apa pun yang ada.
         * Default: "inclusive"
         */
        strictMode: "inclusive",
    
        /**
         * Locale default yang digunakan sebagai cadangan (fallback) jika locale yang diminta tidak ditemukan.
         * Default: Locales.ENGLISH
         */
        defaultLocale: Locales.ENGLISH,
      },
    
      /**
       * Pengaturan yang mengontrol operasi kamus dan perilaku fallback.
       */
      dictionary: {
        /**
         * Mengontrol bagaimana kamus diimpor.
         * - "static": Diimpor secara statis pada saat build.
         * - "dynamic": Diimpor secara dinamis menggunakan Suspense.
         * - "fetch": Diambil secara dinamis melalui API sinkronisasi langsung (live sync).
         * Default: "static"
         */
        importMode: "static",
    
        /**
         * Strategi untuk mengisi otomatis terjemahan yang hilang menggunakan AI.
         * Bisa berupa boolean atau pola path untuk menyimpan konten yang diisi.
         * Default: true
         */
        fill: true,
    
        /**
         * Lokasi fisik file kamus.
         * - "local": Disimpan di sistem file lokal.
         * - "remote": Disimpan di Intlayer CMS.
         * - "hybrid": Disimpan di sistem file lokal dan Intlayer CMS.
         * - "plugin" (atau string kustom lainnya): Disediakan oleh plugin atau sumber kustom.
         * Default: "local"
         */
        location: "local",
    
        /**
         * Apakah akan mengubah konten secara otomatis (misalnya, Markdown ke HTML).
         * Default: false
         */
        contentAutoTransformation: false,
      },
    
      /**
       * Konfigurasi routing dan middleware.
       */
      routing: {
        /**
         * Strategi routing locale.
         * - "prefix-no-default": Prefiks untuk semua kecuali locale default (misalnya, /dashboard, /fr/dashboard).
         * - "prefix-all": Prefiks untuk semua locale (misalnya, /en/dashboard, /fr/dashboard).
         * - "no-prefix": Tidak ada locale di URL.
         * - "search-params": Gunakan ?locale=...
         * Default: "prefix-no-default"
         */
        mode: "prefix-no-default",
    
        /**
         * Mengaktifkan proxy perutean locale Intlayer (middleware).
         * Menangani deteksi locale, pengalihan, dan penulisan ulang di dev, preview, dan SSR.
         * - tidak diatur (auto): server dev dan preview menjaga perutean tetap digerakkan URL
         *   dengan mengabaikan locale yang tersimpan di cookie dan header. Prefiks tetap
         *   diselesaikan, locale tetap disimpan, dan deteksi Accept-Language tetap berlaku.
         *   Di produksi berperilaku seperti `true`.
         * - true: perilaku penuh di setiap lingkungan.
         * - false: tanpa perutean locale.
         * Default: undefined (auto)
         */
        enableProxy: undefined,
    
        /**
         * Tempat menyimpan locale yang dipilih pengguna.
         * Opsi: 'cookie', 'localStorage', 'sessionStorage', 'header', atau array dari opsi ini.
         * Default: ['cookie', 'header']
         */
        storage: ["cookie", "header"],
    
        /**
         * Path dasar untuk URL aplikasi.
         * Default: ""
         */
        basePath: "",
    
        /**
         * Aturan penulisan ulang URL kustom untuk path spesifik locale.
         */
        rewrite: nextjsRewrite({
          "/[locale]/about": {
            en: "/[locale]/about",
            fr: "/[locale]/a-propos",
          },
        }),
    
        /**
         * Memetakan locale ke nama host domain for routing berbasis domain.
         * URL untuk locale ini akan bersifat absolut (misalnya, https://intlayer.cn/).
         * Domain tersebut menyiratkan locale, sehingga tidak ada prefiks locale yang ditambahkan ke path.
         * Default: undefined
         */
        domains: {
          en: "intlayer.org",
          zh: "intlayer.cn",
        },
      },
    
      /**
       * Pengaturan untuk menemukan dan memproses file konten.
       */
      content: {
        /**
         * Ekstensi file yang akan dipindai untuk kamus.
         * Default: ['.content.ts', '.content.js', '.content.json', dll.]
         */
        fileExtensions: [".content.ts", ".content.js", ".content.json"],
    
        /**
         * Direktori tempat file .content berada.
         * Default: ["."]
         */
        contentDir: ["src"],
    
        /**
         * Direktori tempat kode sumber berada.
         * Digunakan untuk optimasi build dan transformasi kode.
         * Default: ["."]
         */
        codeDir: ["src"],
    
        /**
         * Pola yang akan dikecualikan dari pemindaian.
         * Default: ['node_modules', '.intlayer', dll.]
         */
        excludedPath: ["node_modules"],
    
        /**
         * Apakah akan memantau perubahan dan membangun ulang kamus dalam pengembangan.
         * Default: true dalam pengembangan
         */
        watch: true,
    
        /**
         * Perintah untuk memformat file .content yang baru dibuat/diperbarui.
         */
        formatCommand: 'npx prettier --write "{{file}}"',
      },
    
      /**
       * Konfigurasi Visual Editor.
       */
      editor: {
        /**
         * Apakah editor visual diaktifkan.
         * Default: false
         */
        enabled: true,
    
        /**
         * URL aplikasi Anda untuk validasi asal (origin).
         * Default: ""
         */
        applicationURL: "http://localhost:3000",
    
        /**
         * Port untuk server editor lokal.
         * Default: 8000
         */
        port: 8000,
    
        /**
         * URL publik untuk editor.
         * Default: "http://localhost:8000"
         */
        editorURL: "http://localhost:8000",
    
        /**
         * URL Intlayer CMS.
         * Default: "https://app.intlayer.org"
         */
        cmsURL: "https://app.intlayer.org",
    
        /**
         * URL Back-end API.
         * Default: "https://back.intlayer.org"
         */
        backendURL: "https://back.intlayer.org",
    
        /**
         * Apakah akan mengaktifkan sinkronisasi konten real-time.
         * Default: false
         */
        liveSync: true,
      },
    
      /**
       * Konfigurasi analitik (analytics).
       */
      analytics: {
        /**
         * Apakah pengumpulan analitik diaktifkan (tampilan halaman, eksposur konten, peristiwa A/B).
         * Membutuhkan `@intlayer/analytics` terpasang dan `editor.clientId` diatur agar atribusi berfungsi.
         * Default: true
         */
        enabled: true,
    
        /**
         * Milidetik antara pengiriman batch otomatis ke backend.
         * Default: 20000
         */
        flushInterval: 20000,
    
        /**
         * Fraksi sesi yang direkam, dari 0 (tidak ada) hingga 1 (semua).
         * Default: 1
         */
        sampleRate: 1,
      },
    
      /**
       * Pengaturan terjemahan dan pembuatan berbasis AI.
       */
      ai: {
        /**
         * Penyedia AI yang akan digunakan.
         * Opsi: 'openai', 'anthropic', 'mistral', 'deepseek', 'gemini', 'ollama', 'openrouter', 'alibaba', 'fireworks', 'groq', 'huggingface', 'bedrock', 'googlevertex', 'togetherai', 'lmstudio', 'moonshotai'
         * Default: 'openai'
         */
        provider: "openai",
    
        /**
         * Model yang akan digunakan dari penyedia yang dipilih.
         */
        model: "gpt-4o",
    
        /**
         * Kunci API penyedia.
         */
        apiKey: process.env.OPENAI_API_KEY,
    
        /**
         * Konteks global untuk memandu AI dalam menghasilkan terjemahan.
         */
        applicationContext: "Ini adalah aplikasi pemesanan perjalanan.",
    
        /**
         * URL dasar untuk AI API.
         */
        baseURL: "http://localhost:3000",
    
        /**
         * Serialisasi data (Data serialization)
         *
         * Opsi:
         * - "json": Standar, andal; menggunakan lebih banyak token.
         * - "toon": Lebih sedikit token, kurang konsisten dibandingkan JSON.
         *
         * Default: "json"
         */
        dataSerialization: "json",
      },
    
      /**
       * Pengaturan build dan optimasi.
       */
      build: {
        /**
         * Mode eksekusi build.
         * - "auto": Build otomatis selama build aplikasi.
         * - "manual": Memerlukan perintah build eksplisit.
         * Default: "auto"
         */
        mode: "auto",
    
        /**
         * Apakah akan mengoptimalkan bundel akhir dengan memangkas kamus yang tidak digunakan.
         * Default: true dalam produksi
         */
        optimize: true,
    
        /**
         * Minifikasikan kamus untuk mengurangi ukuran bundle.
         * Default: true
         *
         * Catatan:
         * - Opsi ini akan diabaikan jika `optimize` dinonaktifkan.
         * - Opsi ini akan diabaikan jika `editor.enabled` adalah true.
         */
        minify: true,
    
        /**
         * Bersihkan kunci yang tidak digunakan dalam kamus.
         * Default: true
         *
         * Catatan:
         * - Opsi ini akan diabaikan jika `optimize` dinonaktifkan.
         */
        purge: true,
    
        /**
         * Kelompokkan potongan kamus per lokal berdasarkan batas pemisahan kode yang
         * menggunakannya, sehingga halaman yang dimuat secara lazy mengambil kontennya
         * dalam satu permintaan.
         * Default: true
         *
         * Catatan:
         * - Hanya berlaku untuk kamus yang menggunakan `importMode: 'dynamic'`.
         */
        chunkGrouping: true,
    
        /**
         * Muat kamus bersama potongan yang menggunakannya, alih-alih mengambilnya
         * setelah potongan tersebut dirender. Pembacaan dirender secara sinkron
         * alih-alih ditangguhkan, sehingga navigasi tidak lagi menampilkan kedipan
         * status pemuatan.
         * Default: true
         *
         * Catatan:
         * - Hanya lokal yang telah ditentukan yang ditunggu, sehingga halaman hanya
         *   mengunduh bahasa yang ditampilkannya.
         */
        dictionariesPreload: true,
    
        /**
         * Format output untuk file kamus yang dihasilkan.
         * Default: ['cjs', 'esm']
         */
        outputFormat: ["cjs", "esm"],
    
        /**
         * Menunjukkan apakah build harus memeriksa tipe TypeScript.
         * Default: false
         */
        checkTypes: false,
      },
    
      /**
       * Konfigurasi Logger.
       */
      log: {
        /**
         * Tingkat logging.
         * - "default": Logging standar.
         * - "verbose": Logging debug mendetail.
         * - "disabled": Tanpa logging.
         * Default: "default"
         */
        mode: "default",
    
        /**
         * Prefiks untuk semua pesan log.
         * Default: "[intlayer]"
         */
        prefix: "[intlayer]",
      },
    
      /**
       * Konfigurasi sistem (Kasus penggunaan tingkat lanjut)
       */
      system: {
        /**
         * Direktori untuk menyimpan kamus lokalisasi.
         */
        dictionariesDir: ".intlayer/dictionary",
    
        /**
         * Direktori untuk augmentasi modul.
         */
        moduleAugmentationDir: ".intlayer/types",
    
        /**
         * Direktori untuk menyimpan kamus yang tidak digabungkan.
         */
        unmergedDictionariesDir: ".intlayer/unmerged_dictionary",
    
        /**
         * Direktori untuk menyimpan tipe kamus.
         */
        typesDir: ".intlayer/types",
    
        /**
         * Direktori tempat file aplikasi utama disimpan.
         */
        mainDir: ".intlayer/main",
    
        /**
         * Direktori tempat file konfigurasi disimpan.
         */
        configDir: ".intlayer/config",
    
        /**
         * Direktori tempat file cache disimpan.
         */
        cacheDir: ".intlayer/cache",
      },
    
      /**
       * Konfigurasi kompiler (Kasus penggunaan tingkat lanjut)
       */
      compiler: {
        /**
         * Menunjukkan apakah kompiler harus diaktifkan.
         *
         * - false: Nonaktifkan kompiler.
         * - true: Aktifkan kompiler.
         * - "build-only": Lewati kompiler selama pengembangan dan mempercepat waktu mulai.
         *
         * Default: false
         */
        enabled: true,
    
        /**
         * Mendefinisikan path file output. Menggantikan `outputDir`.
         *
         * - Path `./` diselesaikan relatif terhadap direktori komponen.
         * - Path `/` diselesaikan relatif terhadap root proyek (`baseDir`).
         *
         * - Menyertakan variabel `{{locale}}` dalam path akan memicu pembuatan kamus terpisah per locale.
         *
         * Contoh:
         * ```ts
         * {
         *   // Buat file .content.ts Multibahasa di dekat komponen
         *   output: ({ fileName, extension }) => `./${fileName}${extension}`,
         *
         *   // output: './{{fileName}}{{extension}}', // Setara menggunakan template string
         * }
         * ```
         *
         * ```ts
         * {
         *   // Buat JSON per-locale terpusat di root proyek
         *   output: ({ key, locale }) => `/locales/${locale}/${key}.content.json`,
         *
         *   // output: '/locales/{{locale}}/{{key}}.content.json', // Setara menggunakan template string
         * }
         * ```
         *
         * Daftar variabel:
         *   - `fileName`: Nama file.
         *   - `key`: Kunci konten.
         *   - `locale`: Locale konten.
         *   - `extension`: Ekstensi file.
         *   - `componentFileName`: Nama file komponen.
         *   - `componentExtension`: Ekstensi file komponen.
         *   - `format`: Format kamus.
         *   - `componentFormat`: Format kamus komponen.
         *   - `componentDirPath`: Path direktori komponen.
         */
        output: ({ locale, key }) => `compiler/${locale}/${key}.json`,
    
        /**
         * Menunjukkan apakah komponen harus disimpan setelah diubah.
         * Dengan begitu, kompiler dapat dijalankan hanya sekali untuk mengubah aplikasi, dan kemudian dapat dihapus.
         */
        saveComponents: false,
    
        /**
         * Masukkan hanya konten ke dalam file yang dihasilkan. Berguna untuk output i18next per-locale atau ICU MessageFormat JSON.
         */
        noMetadata: false,
    
        /**
         * Prefix kunci kamus
         */
        dictionaryKeyPrefix: "", // Menambahkan prefix opsional untuk kunci kamus yang diekstrak
      },
    
      /**
       * Skema kustom untuk memvalidasi isi kamus.
       */
      schemas: {
        "my-schema": z.object({
          title: z.string(),
        }),
      },
    
      /**
       * Konfigurasi kamus.
       */
      dictionary: {
        /**
         * Mengontrol cara kamus diimpor.
         * - "static": Diimpor secara statis pada waktu build.
         * - "dynamic": Diimpor secara dinamis menggunakan Suspense.
         * - "fetch": Diambil secara dinamis melalui live sync API.
         */
        importMode: "static",
    
        /**
         * Format pesan default untuk semua kamus dalam proyek.
         * - 'intlayer': Format intlayer asli (default).
         * - 'icu': Format pesan ICU.
         * - 'i18next': Format i18next.
         * - 'vue-i18n': Format Vue I18n.
         * - 'po': Format GNU Gettext PO.
         */
        format: "icu",
      },
    
      /**
       * Konfigurasi plugin.
       */
      plugins: [
        syncJSON({
          format: "icu",
          source: ({ locale }) => `./messages/${locale}.json`,
        }),
      ],
    };
    
    export default config;
    

    Referensi Konfigurasi

    Bagian berikut mendeskripsikan berbagai pengaturan konfigurasi yang tersedia untuk Intlayer.

    Konfigurasi Internasionalisasi (Internationalization)

    Mendefinisikan pengaturan yang terkait dengan internasionalisasi, termasuk locale yang tersedia dan locale default untuk aplikasi.

    BidangDeskripsiTipeDefaultContohCatatan
    localesDaftar locale yang didukung dalam aplikasi.string[][Locales.ENGLISH]['en', 'fr', 'es']
    requiredLocalesDaftar locale wajib dalam aplikasi.string[][][]• Jika kosong, semua locale wajib dalam mode strict.
    • Pastikan locale wajib juga didefinisikan dalam bidang locales.
    strictModeMemastikan implementasi konten yang diinternasionalisasi yang kuat menggunakan TypeScript.string'inclusive'• Jika "strict": fungsi t mengharuskan setiap locale yang dideklarasikan ditentukan - memunculkan error jika ada yang hilang atau tidak dideklarasikan.
    • Jika "inclusive": memperingatkan tentang locale yang hilang tetapi menerima yang tidak dideklarasikan.
    • Jika "loose": menerima locale apa pun yang ada.
    defaultLocaleLocale default yang digunakan sebagai cadangan (fallback) jika locale yang diminta tidak ditemukan.stringLocales.ENGLISH'en'Digunakan untuk menentukan locale saat tidak ada yang ditentukan di URL, cookie, atau header.

    Konfigurasi Editor (Editor)

    Mendefinisikan pengaturan yang terkait dengan editor terintegrasi, termasuk port server dan status aktif.

    BidangDeskripsiTipeDefaultContohCatatan
    applicationURLURL aplikasi.stringundefined'http://localhost:3000'
    'https://example.com'
    process.env.INTLAYER_EDITOR_URL
    • Digunakan untuk membatasi asal (origin) editor karena alasan keamanan.
    • Jika diatur ke '*', editor dapat diakses dari asal mana pun.
    portPort yang digunakan oleh server visual editor.number8000
    editorURLURL server editor.string'http://localhost:8000''http://localhost:3000'
    'https://example.com'
    process.env.INTLAYER_EDITOR_URL
    • Digunakan untuk membatasi asal yang dapat berinteraksi dengan aplikasi.
    • Jika diatur ke '*', dapat diakses dari asal mana pun.
    • Harus diatur jika port diubah atau editor dihosting di domain yang berbeda.
    cmsURLURL Intlayer CMS.string'https://app.intlayer.org''https://app.intlayer.org'
    backendURLURL server backend.stringhttps://back.intlayer.orghttp://localhost:4000
    enabledMenunjukkan apakah aplikasi berinteraksi dengan visual editor.booleanfalseprocess.env.NODE_ENV !== 'production'• Jika false, editor tidak dapat berinteraksi dengan aplikasi.
    • Menonaktifkan untuk lingkungan tertentu akan menegakkan keamanan.
    clientIdMemungkinkan paket intlayer untuk melakukan autentikasi dengan backend menggunakan oAuth2. Untuk mendapatkan token akses, buka intlayer.org/project.string |
    undefined
    undefinedJaga kerahasiaannya; simpan dalam variabel lingkungan.
    clientSecretMemungkinkan paket intlayer untuk melakukan autentikasi dengan backend menggunakan oAuth2. Untuk mendapatkan token akses, buka intlayer.org/project.string |
    undefined
    undefinedJaga kerahasiaannya; simpan dalam variabel lingkungan.
    dictionaryPriorityStrategyStrategi untuk memprioritaskan kamus saat ada kamus lokal dan jarak jauh.string'local_first''distant_first''distant_first': memprioritaskan jarak jauh daripada lokal.
    'local_first': memprioritaskan lokal daripada jarak jauh.
    liveSyncMenunjukkan apakah server aplikasi harus memuat ulang konten secara panas (hot reload) saat terdeteksi perubahan pada CMS
    Visual Editor
    Backend.
    booleantruetrue• Saat kamus ditambahkan/diperbarui, aplikasi memperbarui konten halaman.
    • Sinkronisasi langsung mengeksternalisasi konten ke server lain, yang mungkin sedikit berdampak pada performa.
    • Direkomendasikan untuk menghosting keduanya di mesin yang sama.
    liveSyncPortPort server sinkronisasi langsung (live sync).number40004000
    liveSyncURLURL server sinkronisasi langsung (live sync).string'http://localhost:{liveSyncPort}''https://example.com'Menunjuk ke localhost secara default; dapat diubah untuk server sinkronisasi langsung jarak jauh.

    Konfigurasi Analitik (Analytics)

    Menentukan pengaturan terkait analitik Intlayer: mengumpulkan konten apa yang sebenarnya ditampilkan kepada pengguna (tampilan halaman, eksposur konten) dan mendukung pengujian A/B pada konten.

    Analitik bersifat opt-out: aktif secara default dan mulai mengumpulkan data begitu paket @intlayer/analytics terpasang dan kunci proyek (editor.clientId) dikonfigurasi untuk atribusi. Atur analytics.enabled ke false — atau jangan pasang paketnya — maka seluruh integrasi analitik dihilangkan dari bundel aplikasi Anda (dead-code elimination).

    FieldDeskripsiTipeDefaultContohCatatan
    enabledMengaktifkan pengumpulan analitik (tampilan halaman, eksposur konten, peristiwa A/B).booleantruefalseMembutuhkan @intlayer/analytics terpasang dan editor.clientId diatur agar atribusi berfungsi; jika tidak, analitik tetap nonaktif meskipun enabled bernilai true.
    flushIntervalMilidetik antara pengiriman batch otomatis ke backend.number2000010000
    sampleRateFraksi sesi yang direkam, dari 0 (tidak ada) hingga 1 (semua).number10.5Sampling bersifat deterministik per sesi, sehingga sesi yang direkam melaporkan semua peristiwanya (tidak ada funnel parsial).

    Konfigurasi Routing (Routing)

    Pengaturan yang mengontrol perilaku routing, termasuk struktur URL, penyimpanan locale, dan penanganan middleware.

    BidangDeskripsiTipeDefaultContohCatatan
    modeMode routing URL untuk penanganan locale.'prefix-no-default' |
    'prefix-all' |
    'no-prefix' |
    'search-params'
    'prefix-no-default''prefix-no-default': /dashboard (en) atau /fr/dashboard (fr). 'prefix-all': /en/dashboard. 'no-prefix': locale ditangani melalui cara lain. 'search-params': /dashboard?locale=frTidak berdampak pada manajemen cookie atau penyimpanan locale.
    enableProxyMengaktifkan proxy perutean locale Intlayer (middleware).boolean |
    undefined
    undefined (auto)true• Tidak diatur (auto): server dev dan preview mengabaikan locale yang tersimpan di cookie/header sebagai sumber pengalihan; prefiks, penyimpanan, dan deteksi Accept-Language tetap berlaku. Di produksi berperilaku seperti true.
    true: perilaku penuh di mana pun.
    false: tanpa perutean locale. Di Next.js, middleware intlayerProxy menjadi pass-through.
    storageKonfigurasi untuk menyimpan locale di klien.false |
    'cookie' |
    'localStorage' |
    'sessionStorage' |
    'header' |
    CookiesAttributes |
    StorageAttributes |
    Array
    ['cookie', 'header']'localStorage'
    [{ type: 'cookie', name: 'custom-locale', secure: true }]
    Lihat tabel Opsi Penyimpanan di bawah.
    basePathPath dasar untuk URL aplikasi.string'''/my-app'Jika aplikasi berada di https://example.com/my-app, basePath adalah '/my-app'dan URL menjadihttps://example.com/my-app/en`.
    rewriteAturan penulisan ulang URL kustom yang mengesampingkan mode routing default untuk path tertentu. Mendukung parameter dinamis [param].Record<string, StrictModeLocaleMap<string>>undefinedLihat contoh di bawah• Aturan penulisan ulang (rewrite) didahulukan daripada mode.
    • Berfungsi dengan Next.js dan Vite.
    getLocalizedUrl() secara otomatis menerapkan aturan yang cocok.
    • Lihat Penulisan Ulang URL Kustom.
    domainsMemetakan locale ke nama host domain untuk routing berbasis domain. Jika diatur, URL untuk locale tersebut menggunakan domain ini sebagai basis (URL absolut) dan tidak ada prefiks locale yang ditambahkan ke path.Partial<Record<Locale, string>>undefined{ zh: 'intlayer.zh', fr: 'intlayer.org' }• Protokol default adalah https:// jika tidak disertakan dalam hostname.
    • Domain itu sendiri mengidentifikasi locale, sehingga prefiks /zh/ tidak ditambahkan.
    getLocalizedUrl('/', 'zh') mengembalikan https://intlayer.zh/.

    Contoh rewrite:

    typescript
    routing: {
      mode: "prefix-no-default", // Strategi fallback
      rewrite: nextjsRewrite({
        "/about": {
          en: "/about",
          fr: "/a-propos",
        },
        "/product/[slug]": {
          en: "/product/[slug]",
          fr: "/produit/[slug]",
        },
        "/blog/[category]/[id]": {
          en: "/blog/[category]/[id]",
          fr: "/journal/[category]/[id]",
        },
      }),
    }
    

    Opsi Penyimpanan (Storage)

    NilatCatatanDeskripsi
    'cookie'• Untuk kepatuhan GDPR, pastikan persetujuan pengguna yang tepat.
    • Dapat dikustomisasi melalui CookiesAttributes ({ type: 'cookie', name: 'custom-locale', secure: true, httpOnly: false }).
    Menyimpan locale dalam cookie - dapat diakses di sisi klien dan server.
    'localStorage'• Tidak kadaluarsa kecuali dihapus secara eksplisit.
    • Proxy Intlayer tidak dapat mengaksesnya.
    • Dapat dikustomisasi melalui StorageAttributes ({ type: 'localStorage', name: 'custom-locale' }).
    Menyimpan locale di browser tanpa kadaluarsa - hanya sisi klien.
    'sessionStorage'• Dihapus saat tab/jendela ditutup.
    • Proxy Intlayer tidak dapat mengaksesnya.
    • Dapat dikustomisasi melalui StorageAttributes ({ type: 'sessionStorage', name: 'custom-locale' }).
    Menyimpan locale selama durasi sesi halaman - hanya sisi klien.
    'header'• Berguna untuk panggilan API.
    • Sisi klien tidak dapat mengaksesnya.
    • Dapat dikustomisasi melalui StorageAttributes ({ type: 'header', name: 'custom-locale' }).
    Menyimpan atau mengirimkan locale melalui header HTTP - hanya sisi server.

    Saat menggunakan penyimpanan cookie, Anda dapat mengonfigurasi atribut cookie tambahan:

    BidangDeskripsiTipe
    nameNama cookie. Default: 'INTLAYER_LOCALE'string
    domainDomain cookie. Default: undefinedstring
    pathPath cookie. Default: undefinedstring
    secureMemerlukan HTTPS. Default: undefinedboolean
    httpOnlyFlag HTTP-only. Default: undefinedboolean
    sameSiteKebijakan SameSite.'strict' |
    'lax' |
    'none'
    expiresAngka mewakili hari sejak pembuatan; tanggal (atau string tanggal ISO) adalah tanggal kadaluarsa absolut. Default: undefinedDate |
    number |
    string
    maxAgeMasa pakai dalam detik sejak pembuatan. Diutamakan daripada expires. Default: undefinednumber

    Atribut Penyimpanan (Storage Attributes)

    Saat menggunakan localStorage atau sessionStorage:

    BidangDeskripsiTipe
    typeTipe penyimpanan.'localStorage' |
    'sessionStorage'
    nameNama kunci penyimpanan. Default: 'INTLAYER_LOCALE'string

    Contoh Konfigurasi

    Berikut adalah beberapa contoh konfigurasi umum untuk struktur routing v7 yang baru:

    Konfigurasi Dasar (Standar):

    typescript
    import { Locales, type IntlayerConfig } from "intlayer";
    // intlayer.config.ts
    const config: IntlayerConfig = {
      internationalization: {
        locales: ["en", "fr", "es"],
        defaultLocale: "en",
      },
      routing: {
        mode: "prefix-no-default",
        storage: "localStorage",
        basePath: "",
      },
    };
    
    export default config;
    

    Konfigurasi Patuh GDPR:

    typescript
    import { Locales, type IntlayerConfig } from "intlayer";
    // intlayer.config.ts
    const config: IntlayerConfig = {
      internationalization: {
        locales: ["en", "fr", "es"],
        defaultLocale: "en",
      },
      routing: {
        mode: "prefix-no-default",
        storage: [
          {
            type: "localStorage",
            name: "user-locale",
          },
          {
            type: "cookie",
            name: "user-locale",
            secure: true,
            sameSite: "strict",
            httpOnly: false,
          },
        ],
        basePath: "",
      },
    };
    
    export default config;
    

    Mode Parameter Pencarian (Search Parameter):

    typescript
    import { Locales, type IntlayerConfig } from "intlayer";
    // intlayer.config.ts
    const config: IntlayerConfig = {
      internationalization: {
        locales: ["en", "fr", "es"],
        defaultLocale: "en",
      },
      routing: {
        mode: "search-params",
        storage: "localStorage",
        basePath: "",
      },
    };
    
    export default config;
    

    Mode Tanpa Prefiks dengan Penyimpanan Kustom:

    typescript
    import { Locales, type IntlayerConfig } from "intlayer";
    // intlayer.config.ts
    const config: IntlayerConfig = {
      internationalization: {
        locales: ["en", "fr", "es"],
        defaultLocale: "en",
      },
      routing: {
        mode: "no-prefix",
        storage: {
          type: "sessionStorage",
          name: "app-locale",
        },
        basePath: "/my-app",
      },
    };
    
    export default config;
    

    Penulisan Ulang URL Kustom dengan Rute Dinamis:

    typescript
    // intlayer.config.ts
    import { nextjsRewrite } from "intlayer/routing";
    
    const config: IntlayerConfig = {
      internationalization: {
        locales: ["en", "fr"],
        defaultLocale: "en",
      },
      routing: {
        mode: "prefix-no-default", // Cadangan untuk path yang tidak ditulis ulang
        storage: "cookie",
        rewrite: nextjsRewrite({
          "/about": {
            en: "/about",
            fr: "/a-propos",
          },
          "/product/[slug]": {
            en: "/product/[slug]",
            fr: "/produit/[slug]",
          },
          "/blog/[category]/[id]": {
            en: "/blog/[category]/[id]",
            fr: "/journal/[category]/[id]",
          },
        }),
      },
    };
    
    export default config;
    

    Konfigurasi Konten (Content)

    Pengaturan yang terkait dengan penanganan konten dalam aplikasi, termasuk nama direktori, ekstensi file, dan konfigurasi turunan.

    BidangDeskripsiTipeDefaultContohCatatan
    watchMenunjukkan apakah Intlayer harus memantau perubahan pada file deklarasi konten untuk membangun kembali kamus.booleantrue
    fileExtensionsEkstensi file yang akan dipindai selama kompilasi kamus.string[]['.content.ts', '.content.js', '.content.cjs', '.content.mjs', '.content.json', '.content.json5', '.content.jsonc', '.content.tsx', '.content.jsx']['.data.ts', '.data.js', '.data.json']Dapat membantu menghindari konflik saat melakukan kustomisasi.
    contentDirPath direktori tempat file definisi konten berada (.content.*).string[]['.']['src', '../../ui-library', require.resolve("@my-package/content"), '@my-package/content']Digunakan untuk melacak file konten dan menghasilkan kembali kamus.
    codeDirPath direktori tempat kode sumber berada, relatif terhadap direktori dasar.string[]['.']['src', '../../ui-library']• Digunakan untuk melacak transformasi file kode (pruning bagian yang tidak perlu, optimasi).
    • Pemisahan dari contentDir meningkatkan performa.
    excludedPathDirektori yang akan dikecualikan dari pemindaian konten.string[]['**/node_modules/**', '**/dist/**', '**/build/**', '**/.intlayer/**', '**/.next/**', '**/.nuxt/**', '**/.expo/**', '**/.vercel/**', '**/.turbo/**', '**/.tanstack/**']Saat ini tidak digunakan; direncanakan untuk masa mendatang.
    formatCommandPerintah untuk memformat file konten saat Intlayer menulisnya secara lokal.stringundefined'npx prettier --write "{{file}}" --log-level silent' (Prettier), 'npx biome format "{{file}}" --write --log-level none' (Biome), 'npx eslint --fix "{{file}}" --quiet' (ESLint){{file}} diganti dengan path file.
    • Jika tidak ditentukan, Intlayer akan mencoba mendeteksi secara otomatis (menguji prettier, biome, eslint).

    Konfigurasi Sistem

    Pengaturan yang terkait dengan path internal dan hasil output dari Intlayer. Pengaturan ini biasanya bersifat internal dan tidak perlu diubah oleh pengguna.

    FieldDescriptionTypeDefaultExampleNote
    baseDirDirektori dasar untuk proyek.stringprocess.cwd()'/path/to/project'Digunakan untuk menyelesaikan semua direktori terkait Intlayer.
    dictionariesDirPath direktori untuk menyimpan kamus lokalisasi.string'.intlayer/dictionary'
    moduleAugmentationDirDirektori untuk augmentasi modul, memungkinkan saran IDE yang lebih baik dan pemeriksaan tipe.string'.intlayer/types''intlayer-types'Pastikan ini disertakan dalam tsconfig.json.
    unmergedDictionariesDirDirektori untuk menyimpan kamus yang belum digabungkan.string'.intlayer/unmerged_dictionary'
    typesDirDirektori untuk menyimpan tipe kamus.string'.intlayer/types'
    mainDirDirektori tempat file aplikasi utama disimpan.string'.intlayer/main'
    configDirDirektori tempat file konfigurasi disimpan.string'.intlayer/config'
    cacheDirDirektori tempat file cache disimpan.string'.intlayer/cache'

    Konfigurasi Kamus (Dictionary)

    Opsi yang mengontrol operasi kamus, termasuk perilaku pengisian otomatis dan pembuatan konten.

    Konfigurasi kamus ini melayani dua tujuan utama:

    1. Nilai Default: Tentukan nilai default saat membuat file deklarasi konten
    2. Perilaku Fallback: Berikan nilai fallback ketika field tertentu tidak didefinisikan, memungkinkan Anda menentukan perilaku operasi kamus secara global

    Untuk informasi lebih lanjut tentang file deklarasi konten dan bagaimana nilai konfigurasi diterapkan, lihat Dokumentasi File Konten.

    BidangDeskripsiTipeDefaultContohCatatan
    fillMengontrol pembuatan file output pengisian otomatis (terjemahan AI).boolean |
    FilePathPattern |
    Partial<Record<Locale, boolean | FilePathPattern>>
    true{ en: '/locales/en/{{key}}.json', fr: ({ key }) => '/locales/fr/${key}.json', es: false }true: path default (file yang sama dengan sumber).
    false: dinonaktifkan.
    • Pola string/fungsi memungkinkan pembuatan per-locale.
    • Objek per-locale: setiap locale memiliki pola sendiri; false mengecualikan locale.
    • Menyertakan {{locale}} memungkinkan pembuatan per-locale.
    • Pengaturan fill tingkat kamus selalu didahulukan daripada pengaturan global ini.
    descriptionMembantu editor dan CMS memahami tujuan kamus. Juga digunakan sebagai konteks untuk pembuatan terjemahan AI.stringundefined'User profile section'
    localeMengalihkan kamus ke format khusus untuk locale tertentu. Setiap bidang yang dideklarasikan menjadi node terjemahan. Jika hilang, kamus dianggap berisi banyak terjemahan.LocalesValuesundefined'en'Gunakan ini jika kamus didedikasikan untuk bahasa tertentu, daripada berisi banyak terjemahan.
    contentAutoTransformationApakah akan secara otomatis mengubah string konten menjadi node bertipe (Markdown, HTML, atau sisipan).boolean |
    { markdown?: boolean; html?: boolean; insertion?: boolean }
    falsetrue• Markdown : ### Titlemd('### Title') .
    • HTML : <div>Title</div>html('<div>Title</div>') .
    • Sisipan : Hello {{name}}insert('Hello {{name}}') .
    locationMenunjukkan lokasi penyimpanan file kamus dan bagaimana file tersebut disinkronkan dengan CMS.'local' |
    'remote' |
    'hybrid' |
    'plugin' |
    string
    'local''hybrid''local': Hanya manajemen lokal.
    'remote': Hanya manajemen jarak jauh (CMS).
    'hybrid': Manajemen lokal dan jarak jauh.
    'plugin' atau string kustom: Dikelola melalui plugin atau sumber kustom.
    importModeMengontrol bagaimana kamus diimpor.'static' |
    'dynamic' |
    'fetch'
    'static''dynamic''static': Impor statis.
    'dynamic': Impor dinamis melalui Suspense.
    'fetch': Pengambilan melalui API LIVE Sync; fallback ke 'dynamic' jika gagal.
    • Memerlukan plugin @intlayer/babel dan @intlayer/swc.
    • Kunci harus dideklarasikan secara statis.
    • Diabaikan jika optimize dinonaktifkan.
    • Tidak berdampak pada getIntlayer, getDictionary, dll.
    formatFormat pesan default untuk semua kamus dalam proyek.'intlayer' |
    'icu' |
    'i18next' |
    'vue-i18n' |
    'po'
    'intlayer''icu''intlayer': Format intlayer asli.
    'icu': Format pesan ICU.
    'i18next': Format i18next.
    'vue-i18n': Format Vue I18n.
    'po': Format GNU Gettext PO.
    priorityPrioritas kamus. Saat menyelesaikan konflik antar kamus, nilai yang lebih tinggi akan didahulukan daripada yang lebih rendah.numberundefined1
    liveDEPRECATED - gunakan importMode: 'fetch'. Sebelumnya menunjukkan apakah akan mengambil konten kamus secara dinamis melalui API Live Sync.booleanundefinedDiganti namanya menjadi importMode: 'fetch' di v8.0.0.
    schemaDibuat secara otomatis oleh Intlayer untuk validasi skema JSON.'https://intlayer.org/schema.json'Dibuat otomatisJangan mengedit secara manual.
    titleMembantu mengidentifikasi kamus di editor dan CMS.stringundefined'User Profile'
    tagsMengklasifikasikan kamus dan memberikan konteks atau instruksi untuk editor dan AI.string[]undefined['user', 'profile']
    versionVersi kamus jarak jauh; membantu melacak versi yang sedang digunakan.stringundefined'1.0.0'• Dikelola di CMS.
    • Jangan mengedit secara lokal.

    Contoh fill:

    ts
    dictionary: {
      fill: {
        en: "/locales/en/{{key}}.content.json",
        fr: ({ key }) => `/locales/fr/${key}.content.json`,
        es: false,
      },
    };
    

    Konfigurasi Logger (Log)

    Pengaturan untuk menyesuaikan output log Intlayer.

    BidangDeskripsiTipeDefaultContohCatatan
    modeMenentukan mode logger.'default' |
    'verbose' |
    'disabled'
    'default''verbose''verbose': Mencatat lebih banyak informasi untuk penelusuran kesalahan (debugging).
    'disabled': Menonaktifkan logging sepenuhnya.
    prefixPrefiks untuk semua pesan log.string'[intlayer] ''[mój prefiks] '

    Konfigurasi AI (AI)

    Pengaturan untuk mengelola fitur-fitur AI dalam Intlayer, termasuk penyedia, model, dan kunci API.

    Konfigurasi ini bersifat opsional jika Anda mendaftar dengan kunci akses di Intlayer Dashboard. Intlayer secara otomatis akan mengelola solusi AI yang paling hemat biaya dan efisien untuk kebutuhan Anda. Menggunakan pengaturan default memastikan dukungan jangka panjang terbaik karena Intlayer terus diperbarui untuk menggunakan model-model terbaru.

    Jika Anda lebih suka menggunakan kunci API Anda sendiri atau model tertentu, Anda dapat mendefinisikan konfigurasi AI Anda sendiri. Konfigurasi AI ini akan digunakan secara global di seluruh lingkungan Intlayer Anda. Perintah CLI seperti fill akan menggunakan pengaturan ini sebagai default, begitu juga dengan SDK, Visual Editor, dan CMS. Anda dapat mengesampingkan default ini untuk kasus penggunaan tertentu menggunakan parameter perintah.

    Intlayer mendukung berbagai penyedia AI untuk memastikan fleksibilitas maksimal. Penyedia yang saat ini didukung meliputi:

    • OpenAI (Default)
    • Anthropic Claude
    • Mistral AI
    • DeepSeek
    • Google Gemini
    • Google AI Studio
    • Google Vertex
    • Meta Llama
    • Ollama
    • OpenRouter
    • Alibaba Cloud
    • Fireworks
    • Hugging Face
    • Groq
    • Amazon Bedrock
    • Together.ai
    • LM Studio
    BidangDeskripsiTipeDefaultContohCatatan
    providerPenyedia yang akan digunakan untuk fitur AI Intlayer.'openai' |
    'anthropic' |
    'mistral' |
    'deepseek' |
    'gemini' |
    'ollama' |
    'openrouter' |
    'alibaba' |
    'fireworks' |
    'groq' |
    'huggingface' |
    'bedrock' |
    'googleaistudio' |
    'googlevertex' |
    'togetherai' |
    'lmstudio' |
    'moonshotai'
    undefined'anthropic'Penyedia yang berbeda memerlukan kunci API yang berbeda dan memiliki struktur harga yang berbeda pula.
    modelModel AI yang akan digunakan dalam fitur AI.stringTidak ada'gpt-4o-2024-11-20'Model tertentu bergantung pada penyedia.
    temperatureMengontrol keacakan respons AI.numberTidak ada0.1Temperatur yang lebih tinggi = respons yang lebih kreatif tetapi kurang andal.
    apiKeyKunci API Anda untuk penyedia yang dipilih.stringTidak adaprocess.env.OPENAI_API_KEYJaga kerahasiaannya; simpan dalam variabel lingkungan.
    applicationContextKonteks tambahan tentang aplikasi Anda untuk membantu AI menghasilkan terjemahan yang lebih akurat (domain, audiens target, nada, terminologi).stringTidak ada'mój własny kontekst aplikacji'Dapat digunakan untuk menambahkan aturan (misalnya: "Anda tidak boleh menerjemahkan URL Anda" ).
    baseURLURL dasar untuk AI API.stringTidak ada'https://api.openai.com/v1'
    'http://localhost:5000'
    Dapat merujuk ke endpoint AI API lokal atau kustom.
    dataSerializationFormat serialisasi data untuk fitur AI.'json' |
    'toon'
    undefined'toon''json': default, andal; menggunakan lebih banyak token.
    'toon': lebih sedikit token, kurang stabil.
    • Meneruskan parameter tambahan ke model (upaya penalaran, dll.).

    Konfigurasi Build (Build)

    Pengaturan yang mengontrol bagaimana Intlayer mengoptimalkan dan mengompilasi internasionalisasi aplikasi Anda.

    Pengaturan build berlaku untuk plugin @intlayer/babel dan @intlayer/swc.

    Dalam mode pengembangan, Intlayer menggunakan impor kamus statis untuk memfasilitasi proses pengembangan.
    Selama optimasi, Intlayer mengganti panggilan kamus dengan optimasi pemisahan kode (chunking) sehingga bundel akhir hanya mengimpor kamus yang benar-benar digunakan.
    BidangDeskripsiTipeDefaultContohCatatan
    modeMengontrol mode eksekusi build.'auto' |
    'manual'
    'auto''manual''auto': Build dipicu secara otomatis selama build aplikasi.
    'manual': Hanya dijalankan melalui perintah build eksplisit.
    • Dapat berguna untuk mencegah build kamus (misalnya: untuk menghindari eksekusi di lingkungan Node.js).
    optimizeMengontrol apakah optimasi build dilakukan.booleanundefinedprocess.env.NODE_ENV === 'production'• Jika tidak ditentukan, ini akan dipicu selama build framework (Vite/Next.js).
    true memaksakan optimasi bahkan dalam mode pengembangan.
    false menonaktifkannya.
    • Jika diaktifkan, mengganti panggilan kamus dengan optimasi chunking.
    • Memerlukan plugin @intlayer/babel dan @intlayer/swc.
    minifyMinifikasikan kamus untuk mengurangi ukuran bundle.booleanfalse• Apakah bundel harus diminifikasi.
    • Default: false dalam produksi.
    • Opsi ini akan diabaikan jika optimize dinonaktifkan.
    • Opsi ini akan diabaikan jika editor.enabled adalah true.
    purgeBersihkan kunci yang tidak digunakan dalam kamus.booleanfalse• Apakah bundel harus dibersihkan.
    • Default: false dalam produksi.
    • Opsi ini akan diabaikan jika optimize dinonaktifkan.
    checkTypesMenunjukkan apakah build harus memeriksa tipe TypeScript dan mencatat error.booleanfalseDapat memperlambat performa build.
    chunkGroupingMenentukan apakah potongan kamus per lokal harus dikelompokkan berdasarkan batas pemisahan kode yang menggunakannya.booleantrue• Tanpa pengelompokan, halaman yang tersusun dari banyak komponen mengirim satu permintaan per kamus.
    • Kamus yang dijangkau dari beberapa batas dipindahkan ke potongan bersama, sehingga tidak ada halaman yang membawa konten halaman lain.
    • Hanya berlaku untuk kamus yang menggunakan importMode: 'dynamic'.
    • Hanya berlaku untuk build klien, dan hanya saat bundling (bukan di mode dev).
    dictionariesPreloadMenentukan apakah kamus harus dimuat bersama potongan yang menggunakannya, alih-alih diambil setelah potongan tersebut dirender.booleantrue• Titik masuk yang dihasilkan menunggu lokal penjelajahan di tingkat teratas, sehingga rute yang dimuat secara lazy tidak dianggap dimuat sampai kontennya tersedia.
    • Pembacaan dirender secara sinkron alih-alih ditangguhkan, sehingga navigasi tidak lagi menampilkan kedipan status pemuatan.
    • Hanya lokal yang telah ditentukan yang ditunggu, sehingga halaman hanya mengunduh bahasa yang ditampilkannya.
    • Hanya berlaku untuk kamus yang menggunakan importMode: 'dynamic', pada build klien.
    • Memerlukan bundler yang mendukung top-level await (Vite, esbuild).
    outputFormatMengontrol format output kamus.('esm' | 'cjs')[]['esm', 'cjs']['cjs']
    traversePatternPola untuk file yang akan dipindai selama optimasi.string[]['**/*.{tsx,ts,js,mjs,cjs,jsx,vue,svelte,svte}', '!**/node_modules/**', '!**/dist/**', '!**/.intlayer/**', '!**/*.config.*', '!**/*.test.*', '!**/*.spec.*', '!**/*.stories.*']['src/**/*.{ts,tsx}', '../ui-library/**/*.{ts,tsx}', '!**/node_modules/**']• Meningkatkan performa build dengan membatasi optimasi ke file yang relevan.
    • Diabaikan jika optimize dinonaktifkan.
    • Menggunakan pola glob.

    Konfigurasi Kompiler (Compiler)

    Mengontrol pengaturan kompiler Intlayer yang mengumpulkan kamus langsung dari komponen Anda.

    BidangDeskripsiTipeDefaultContohCatatan
    enabledMenunjukkan apakah kompiler harus aktif untuk mengumpulkan kamus.boolean |
    'build-only'
    true'build-only''build-only' melewati kompiler selama pengembangan untuk waktu mulai yang lebih cepat; hanya dijalankan selama perintah build.
    dictionaryKeyPrefixPrefiks untuk kunci kamus yang dikumpulkan.string'''my-prefix-'Ditambahkan sebelum kunci yang dihasilkan (berdasarkan nama file) untuk menghindari konflik.
    saveComponentsMenunjukkan apakah komponen harus disimpan setelah diubah.booleanfalse• Jika true, file asli akan ditimpa dengan versi yang telah diubah.
    • Memungkinkan kompiler dijalankan sekali, lalu dihapus.
    outputMendefinisikan path file output. Menggantikan outputDir. Mendukung variabel template: {{fileName}},
    {{key}},
    {{locale}},
    {{extension}},
    {{componentFileName}},
    {{componentExtension}},
    {{format}},
    {{componentFormat}},
    {{componentDirPath}} .
    boolean |
    FilePathPattern |
    Partial<Record<Locale, boolean | FilePathPattern>>
    undefined'./{{fileName}}{{extension}}'
    '/locales/{{locale}}/{{key}}.json'
    { en: ({ key }) => './locales/en/${key}.json', fr: '...', es: false }
    • Path ./ dihitung relatif terhadap direktori komponen.
    • Path / dihitung relatif terhadap root proyek.
    {{locale}} memungkinkan pembuatan per-locale.
    • Mendukung definisi objek per-locale.
    noMetadataJika true, kompiler menghapus metadata kamus (key, content wrapper) dari output.booleanfalsefalse{"key":"my-key","content":{"key":"value"}}
    true{"key":"value"}
    • Berguna untuk output i18next per-locale atau ICU MessageFormat JSON.
    • Berfungsi baik dengan plugin loadJSON.
    dictionaryKeyPrefixPrefix kunci kamusstring''Menambahkan prefix opsional ke kunci kamus yang diekstrak

    Skema Kustom (Custom Schemas)

    BidangDeskripsiTipe
    schemasMemungkinkan Anda menentukan skema Zod untuk memvalidasi struktur kamus Anda.Record<string, ZodSchema>

    Plugin (Plugins)

    BidangDeskripsiTipe
    pluginsDaftar plugin Intlayer yang akan disertakan.IntlayerPlugin[]

    Pertanyaan yang Sering Diajukan

    Di root project Anda, di sebelah package.json. Intlayer memindai direktori kerja dan direktori induk untuk mencari intlayer.config.ts, intlayer.config.js, intlayer.config.mjs, atau intlayer.config.cjs. Anda juga dapat menentukan path khusus melalui flag --config pada perintah CLI.

    Jauh lebih sedikit daripada pengaturan berbasis namespace, karena halaman tidak pernah mengunduh katalog yang tidak di-render. Markup yang dirender di server menyelesaikan kontennya di server, dan kompilator build time mengganti panggilan useIntlayer dengan entri kamus persis yang digunakan komponen, sehingga kunci dan bahasa yang tidak digunakan dibuang. Kamus dinamis membagi sisanya per locale. Dibandingkan dengan alternatif konvensional, Intlayer mengurangi ukuran bundle dan halaman hingga 50%. Lihat optimasi bundle dan benchmark.

    Ya, dan ada dua jalur. Anda dapat memigrasikan konten secara bertahap dengan panduan migrasi i18next atau panduan migrasi next-intl. Atau Anda dapat mempertahankan API Anda saat ini sepenuhnya: adapter kompatibilitas mengekspos API yang sama persis dengan i18next, react-i18next, next-intl, next-i18next, react-intl, use-intl, vue-i18n dan Lingui, tetapi ditenagai oleh kamus Intlayer, sehingga hanya import yang berubah dan kode komponen tetap sama.

    Ya. Plugin sync JSON menjaga file /messages/{locale}/{namespace}.json Anda sebagai sumber kebenaran dan menghasilkan kamus Intlayer darinya, di kedua arah. Plugin sync PO melakukan hal yang sama untuk katalog gettext, dan file per locale memungkinkan Anda membagi konten berdasarkan bahasa daripada mengelompokkan lokal dalam satu file.

    Tidak. Jalankan npx intlayer extract dan Intlayer membaca file sumber Anda, mengeluarkan string yang dihadapi pengguna, dan menulis file .content di sebelah masing-masing, sehingga Anda meninjau diff alih-alih menyalin string ke dalam katalog satu per satu. Lihat perintah extract.

    Untuk alur kerja yang sepenuhnya otomatis, Intlayer Compiler melakukan hal yang sama saat build time pada kode JSX, TSX, Vue dan Svelte, menghasilkan kamus pada setiap perubahan sehingga tidak ada kunci yang perlu dikelola secara manual. Karena bekerja melalui analisis statis, string yang hanya ada di runtime berada di luar jangkauannya.

    Lima bagian, semuanya opsional:

    • Ekstensi VS Code: lompat dari kunci useIntlayer ke file konten yang mendeklarasikannya, ekstrak konten dari komponen, dan jalankan build, fill, test, push dan pull dari command palette atau tab Intlayer.
    • Server LSP: kesadaran yang sama di editor mana pun yang mendukung LSP, dengan go to definition, hover preview dari nilai terjemahan, autocompletion kunci, dan peringatan ketika kunci tidak dideklarasikan di mana pun. Ini juga menyelesaikan panggilan i18next, react-i18next, next-intl dan use-intl.
    • Server MCP: mengekspos dokumentasi Intlayer dan CLI ke Cursor, VS Code, Claude Desktop, Claude Code dan ChatGPT.
    • Agent skills: keahlian terfokus seperti intlayer-config, intlayer-cli dan intlayer-content.
    • Plugin ESLint: aturan no-raw-text menandai string hardcoded.