BerandaSandboxShowcaseAplikasiDokumentasiBlog
    • EnglishInggris
      EN
    • русскийRusia
      RU
    • 日本語Jepang
      JA
    • françaisPrancis
      FR
    • 한국어Korea
      KO
    • 中文Tionghoa
      ZH
    • españolSpanyol
      ES
    • DeutschJerman
      DE
    • العربيةArab
      AR
    • italianoItalia
      IT
    • British EnglishInggris (Britania)
      EN-GB
    • portuguêsPortugis
      PT
    • हिन्दीHindi
      HI
    • TürkçeTurki
      TR
    • polskiPolski
      PL
    • IndonesiaIndonesia
      ID
    • Tiếng ViệtVietnam
      VI
    • українськаUkraina
      UK
    /
    Filter dokumen berdasarkan framework
    Alt+←
    Mengapa Intlayer?
    Mulai
    Konsep
    • Bagaimana Intlayer bekerja
    • Konfigurasi
    • TestFillBuildWatchExtractLoginPushPullConfigurationListVersionEditorLiveDebugDoc ReviewDoc TranslateSDK
    • Editor visual
    • CMS
    • Integrasi CI/CD
    • TerjemahanPluralPenumeraanKondisiJenis kelaminPenambahanBerkasNestingMarkdownHTMLPengambilan fungsi
    • File untuk setiap lokal
    • Kompilator
    • Pengisian otomatis
    • Pengujian
    • Optimasi paket
    Lingkungan
    • Next.js 14 dan App Router
      Next.js 15
      Next.js tanpa locale URL
      Next.js dan Page Router
      Compiler
    • Tanstack Start Solid
    • Astro dan React
      Astro dan Svelte
      Astro dan Vue
      Astro dan Solid
      Astro dan Preact
      Astro dan Lit
      Astro dan Vanilla JS
    • React Router v7
      React Router v7 (fs-routes)
      Compiler
    • Nuxt dan Vue
    • Vite dan Solid
    • SvelteKit
    • Vite dan Preact
    • Vite dan Vanilla JS
    • Vite dan Lit
    • Angular 19 (Webpack)
      Analog
    • React CRA
    • React Native dan Expo
    • Express.js
      NestJS
      Fastify
      Hono
      Adonis
    • Lynx dan React
    Plugins
    • JSON
    • gettext (.po)
    Ekstensi VS Code
    Agen
    • Server MCP
    • Keahlian agen
    Rilis
    • v8
    • v7
    • v6
    Benchmark
    • Next.js
    • TanStack
    • Vue
    • Solid
    • Svelte
    Blog
    Ajukan pertanyaan
    1. Documentation
    2. Konsep
    3. Konfigurasi
    Dibuat:2024-08-13Terakhir diperbarui:2026-05-12
    Referensikan dokumen ini ke asisten AI favorit Anda
    ChatGPT
    Claude
    DeepSeek
    Google AI mode
    Gemini
    Perplexity
    Mistral
    Grok

    Ajukan pertanyaan Anda dan dapatkan ringkasan dokumen dengan merujuk halaman ini dan penyedia AI pilihan Anda

    Riwayat Versi

    1. "Menambahkan dukungan untuk penyedia LM Studio"
      v8.9.412/5/2026
    2. "Menambahkan opsi `minify` dan `prune` ke konfigurasi build"
      v8.7.07/4/2026
    3. "Menambahkan opsi `currentDomain`"
      v8.7.03/4/2026
    4. "Menambahkan notasi per-locale untuk 'compiler.output' dan 'dictionary.fill'"
      v8.4.020/3/2026
    5. "Memindahkan 'baseDir' dari konfigurasi 'content' ke 'system'"
      v8.3.011/3/2026
    6. "Memperbarui opsi kompiler, menambahkan dukungan 'output' dan 'noMetadata'"
      v8.2.09/3/2026
    7. "Memperbarui opsi kompiler"
      v8.1.725/2/2026
    8. "Menambahkan opsi kompiler 'build-only', dan prefix kamus"
      v8.1.523/2/2026
    9. "Menambahkan dukungan untuk penyedia Open Router, Alibaba, Amazon, Google Vertex Bedrock, Fireworks, Groq, Hugging Face, dan Together.ai"
      v8.0.612/2/2026
    10. "Menambahkan `dataSerialization` ke konfigurasi AI"
      v8.0.56/2/2026
    11. "Mengubah nama mode impor `live` menjadi `fetch` untuk mendeskripsikan mekanisme dasarnya dengan lebih baik."
      v8.0.024/1/2026
    12. "Memindahkan konfigurasi build `importMode` ke konfigurasi `dictionary`."
      v8.0.022/1/2026
    13. "Menambahkan opsi `rewrite` ke konfigurasi routing"
      v8.0.022/1/2026
    14. "Memisahkan konfigurasi sistem dari konfigurasi konten. Memindahkan path internal ke properti `system`. Menambahkan `codeDir` untuk memisahkan file konten dari transformasi kode."
      v8.0.018/1/2026
    15. "Menambahkan opsi kamus `location` dan `schema`"
      v8.0.018/1/2026
    16. "Menambahkan dukungan untuk format file JSON5 dan JSONC"
      v7.5.110/1/2026
    17. "Menambahkan opsi `buildMode`"
      v7.5.017/12/2025
    18. "Menambahkan konfigurasi `dictionary`"
      v7.0.025/10/2025
    19. "Mengganti `middleware` dengan konfigurasi `routing`"
      v7.0.021/10/2025
    20. "Menambahkan opsi `formatCommand`"
      v7.0.012/10/2025
    21. "Memperbarui opsi `excludedPath`"
      v6.2.012/10/2025
    22. "Menambahkan opsi `outputFormat`"
      v6.0.223/9/2025
    23. "Menghapus bidang `dictionaryOutput` dan bidang `i18nextResourcesDir`"
      v6.0.021/9/2025
    24. "Menambahkan mode impor `live`"
      v6.0.016/9/2025
    25. "Mengganti bidang `hotReload` dengan `liveSync` dan menambahkan bidang `liveSyncPort` dan `liveSyncURL`"
      v6.0.04/9/2025
    26. "Mengganti `activateDynamicImport` dengan opsi `importMode`"
      v5.6.125/7/2025
    27. "Mengubah default contentDir dari `['src']` menjadi `['.']`"
      v5.6.013/7/2025
    28. "Menambahkan perintah `docs`"
      v5.5.1129/6/2025

    Konten halaman ini diterjemahkan menggunakan AI.

    Lihat versi terakhir dari konten aslinya dalam bahasa Inggris
    Sunting dokumen ini

    Jika Anda memiliki ide untuk meningkatkan dokumentasi ini, silakan berkontribusi dengan mengajukan pull request di GitHub.

    Tautan GitHub ke dokumentasi
    Salin

    Salin Markdown dokumentasi ke clipboard

    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
    Salin kode

    Salin kode ke clipboard

    import { Locales, type IntlayerConfig } from "intlayer";import { nextjsRewrite } from "intlayer/routing";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",    /**     * 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,  },  /**   * 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'     * 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,    /**     * 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 plugin.   */  plugins: [],};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.

    Tampilkan semua isi tabel

    Buka tabel dalam modal untuk melihat semua isi data dengan jelas

    Bidang Deskripsi Tipe Default Contoh Catatan
    locales Daftar locale yang didukung dalam aplikasi. string[] [Locales.ENGLISH] ['en', 'fr', 'es']
    requiredLocales Daftar locale wajib dalam aplikasi. string[] [] [] • Jika kosong, semua locale wajib dalam mode strict.
    • Pastikan locale wajib juga didefinisikan dalam bidang locales.
    strictMode Memastikan 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.
    defaultLocale Locale default yang digunakan sebagai cadangan (fallback) jika locale yang diminta tidak ditemukan. string Locales.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.

    Tampilkan semua isi tabel

    Buka tabel dalam modal untuk melihat semua isi data dengan jelas

    Bidang Deskripsi Tipe Default Contoh Catatan
    applicationURL URL aplikasi. string undefined '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.
    port Port yang digunakan oleh server visual editor. number 8000
    editorURL URL 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.
    cmsURL URL Intlayer CMS. string 'https://app.intlayer.org' 'https://app.intlayer.org'
    backendURL URL server backend. string https://back.intlayer.org http://localhost:4000
    enabled Menunjukkan apakah aplikasi berinteraksi dengan visual editor. boolean false process.env.NODE_ENV !== 'production' • Jika false, editor tidak dapat berinteraksi dengan aplikasi.
    • Menonaktifkan untuk lingkungan tertentu akan menegakkan keamanan.
    clientId Memungkinkan paket intlayer untuk melakukan autentikasi dengan backend menggunakan oAuth2. Untuk mendapatkan token akses, buka intlayer.org/project. string |
    undefined
    undefined Jaga kerahasiaannya; simpan dalam variabel lingkungan.
    clientSecret Memungkinkan paket intlayer untuk melakukan autentikasi dengan backend menggunakan oAuth2. Untuk mendapatkan token akses, buka intlayer.org/project. string |
    undefined
    undefined Jaga kerahasiaannya; simpan dalam variabel lingkungan.
    dictionaryPriorityStrategy Strategi 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.
    liveSync Menunjukkan apakah server aplikasi harus memuat ulang konten secara panas (hot reload) saat terdeteksi perubahan pada CMS
    Visual Editor
    Backend.
    boolean true true • 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.
    liveSyncPort Port server sinkronisasi langsung (live sync). number 4000 4000
    liveSyncURL URL 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 Routing (Routing)

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

    Tampilkan semua isi tabel

    Buka tabel dalam modal untuk melihat semua isi data dengan jelas

    Bidang Deskripsi Tipe Default Contoh Catatan
    mode Mode 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=fr Tidak berdampak pada manajemen cookie atau penyimpanan locale.
    storage Konfigurasi 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.
    basePath Path 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`.
    rewrite Aturan penulisan ulang URL kustom yang mengesampingkan mode routing default untuk path tertentu. Mendukung parameter dinamis [param]. Record<string, StrictModeLocaleMap<string>> undefined Lihat 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.
    domains Memetakan 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
    Salin kode

    Salin kode ke clipboard

    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)

    Tampilkan semua isi tabel

    Buka tabel dalam modal untuk melihat semua isi data dengan jelas

    Nilat Catatan Deskripsi
    '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.

    Atribut Cookie (Cookie Attributes)

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

    Tampilkan semua isi tabel

    Buka tabel dalam modal untuk melihat semua isi data dengan jelas

    Bidang Deskripsi Tipe
    name Nama cookie. Default: 'INTLAYER_LOCALE' string
    domain Domain cookie. Default: undefined string
    path Path cookie. Default: undefined string
    secure Memerlukan HTTPS. Default: undefined boolean
    httpOnly Flag HTTP-only. Default: undefined boolean
    sameSite Kebijakan SameSite. 'strict' |
    'lax' |
    'none'
    expires Tanggal kadaluarsa atau jumlah hari. Default: undefined Date |
    number

    Atribut Penyimpanan (Storage Attributes)

    Saat menggunakan localStorage atau sessionStorage:

    Tampilkan semua isi tabel

    Buka tabel dalam modal untuk melihat semua isi data dengan jelas

    Bidang Deskripsi Tipe
    type Tipe penyimpanan. 'localStorage' |
    'sessionStorage'
    name Nama kunci penyimpanan. Default: 'INTLAYER_LOCALE' string

    Contoh Konfigurasi

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

    Konfigurasi Dasar (Standar):

    typescript
    Salin kode

    Salin kode ke clipboard

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

    Konfigurasi Patuh GDPR:

    typescript
    Salin kode

    Salin kode ke clipboard

    import { Locales, type IntlayerConfig } from "intlayer";// intlayer.config.tsconst 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
    Salin kode

    Salin kode ke clipboard

    import { Locales, type IntlayerConfig } from "intlayer";// intlayer.config.tsconst 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
    Salin kode

    Salin kode ke clipboard

    import { Locales, type IntlayerConfig } from "intlayer";// intlayer.config.tsconst 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
    Salin kode

    Salin kode ke clipboard

    // intlayer.config.tsimport { 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.

    Tampilkan semua isi tabel

    Buka tabel dalam modal untuk melihat semua isi data dengan jelas

    Bidang Deskripsi Tipe Default Contoh Catatan
    watch Menunjukkan apakah Intlayer harus memantau perubahan pada file deklarasi konten untuk membangun kembali kamus. boolean true
    fileExtensions Ekstensi 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.
    contentDir Path 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.
    codeDir Path 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.
    excludedPath Direktori 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.
    formatCommand Perintah untuk memformat file konten saat Intlayer menulisnya secara lokal. string undefined '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 Kamus (Dictionary)

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

    Tampilkan semua isi tabel

    Buka tabel dalam modal untuk melihat semua isi data dengan jelas

    Bidang Deskripsi Tipe Default Contoh Catatan
    fill Mengontrol 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.
    description Membantu editor dan CMS memahami tujuan kamus. Juga digunakan sebagai konteks untuk pembuatan terjemahan AI. string undefined 'User profile section'
    locale Mengalihkan kamus ke format khusus untuk locale tertentu. Setiap bidang yang dideklarasikan menjadi node terjemahan. Jika hilang, kamus dianggap berisi banyak terjemahan. LocalesValues undefined 'en' Gunakan ini jika kamus didedikasikan untuk bahasa tertentu, daripada berisi banyak terjemahan.
    contentAutoTransformation Apakah akan secara otomatis mengubah string konten menjadi node bertipe (Markdown, HTML, atau sisipan). boolean |
    { markdown?: boolean; html?: boolean; insertion?: boolean }
    false true • Markdown : ### Title → md('### Title') .
    • HTML : <div>Title</div> → html('<div>Title</div>') .
    • Sisipan : Hello {{name}} → insert('Hello {{name}}') .
    location Menunjukkan 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.
    importMode Mengontrol 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.
    priority Prioritas kamus. Saat menyelesaikan konflik antar kamus, nilai yang lebih tinggi akan didahulukan daripada yang lebih rendah. number undefined 1
    live DEPRECATED - gunakan importMode: 'fetch'. Sebelumnya menunjukkan apakah akan mengambil konten kamus secara dinamis melalui API Live Sync. boolean undefined Diganti namanya menjadi importMode: 'fetch' di v8.0.0.
    schema Dibuat secara otomatis oleh Intlayer untuk validasi skema JSON. 'https://intlayer.org/schema.json' Dibuat otomatis Jangan mengedit secara manual.
    title Membantu mengidentifikasi kamus di editor dan CMS. string undefined 'User Profile'
    tags Mengklasifikasikan kamus dan memberikan konteks atau instruksi untuk editor dan AI. string[] undefined ['user', 'profile']
    version Versi kamus jarak jauh; membantu melacak versi yang sedang digunakan. string undefined '1.0.0' • Dikelola di CMS.
    • Jangan mengedit secara lokal.

    Contoh fill:

    ts
    Salin kode

    Salin kode ke clipboard

    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.

    Tampilkan semua isi tabel

    Buka tabel dalam modal untuk melihat semua isi data dengan jelas

    Bidang Deskripsi Tipe Default Contoh Catatan
    mode Menentukan mode logger. 'default' |
    'verbose' |
    'disabled'
    'default' 'verbose' • 'verbose': Mencatat lebih banyak informasi untuk penelusuran kesalahan (debugging).
    • 'disabled': Menonaktifkan logging sepenuhnya.
    prefix Prefiks 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
    Tampilkan semua isi tabel

    Buka tabel dalam modal untuk melihat semua isi data dengan jelas

    Bidang Deskripsi Tipe Default Contoh Catatan
    provider Penyedia yang akan digunakan untuk fitur AI Intlayer. 'openai' |
    'anthropic' |
    'mistral' |
    'deepseek' |
    'gemini' |
    'ollama' |
    'openrouter' |
    'alibaba' |
    'fireworks' |
    'groq' |
    'huggingface' |
    'bedrock' |
    'googleaistudio' |
    'googlevertex' |
    'togetherai' |
    'lmstudio'
    undefined 'anthropic' Penyedia yang berbeda memerlukan kunci API yang berbeda dan memiliki struktur harga yang berbeda pula.
    model Model AI yang akan digunakan dalam fitur AI. string Tidak ada 'gpt-4o-2024-11-20' Model tertentu bergantung pada penyedia.
    temperature Mengontrol keacakan respons AI. number Tidak ada 0.1 Temperatur yang lebih tinggi = respons yang lebih kreatif tetapi kurang andal.
    apiKey Kunci API Anda untuk penyedia yang dipilih. string Tidak ada process.env.OPENAI_API_KEY Jaga kerahasiaannya; simpan dalam variabel lingkungan.
    applicationContext Konteks tambahan tentang aplikasi Anda untuk membantu AI menghasilkan terjemahan yang lebih akurat (domain, audiens target, nada, terminologi). string Tidak ada 'mój własny kontekst aplikacji' Dapat digunakan untuk menambahkan aturan (misalnya: "Anda tidak boleh menerjemahkan URL Anda" ).
    baseURL URL dasar untuk AI API. string Tidak ada 'https://api.openai.com/v1'
    'http://localhost:5000'
    Dapat merujuk ke endpoint AI API lokal atau kustom.
    dataSerialization Format 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.
    Tampilkan semua isi tabel

    Buka tabel dalam modal untuk melihat semua isi data dengan jelas

    Bidang Deskripsi Tipe Default Contoh Catatan
    mode Mengontrol 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).
    optimize Mengontrol apakah optimasi build dilakukan. boolean undefined process.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.
    minify Minifikasikan kamus untuk mengurangi ukuran bundle. boolean false • Apakah bundel harus diminifikasi.
    • Default: false dalam produksi.
    • Opsi ini akan diabaikan jika optimize dinonaktifkan.
    • Opsi ini akan diabaikan jika editor.enabled adalah true.
    purge Bersihkan kunci yang tidak digunakan dalam kamus. boolean false • Apakah bundel harus dibersihkan.
    • Default: false dalam produksi.
    • Opsi ini akan diabaikan jika optimize dinonaktifkan.
    checkTypes Menunjukkan apakah build harus memeriksa tipe TypeScript dan mencatat error. boolean false Dapat memperlambat performa build.
    outputFormat Mengontrol format output kamus. ('esm' | 'cjs')[] ['esm', 'cjs'] ['cjs']
    traversePattern Pola 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 Sistem (System)

    Pengaturan ini ditujukan untuk pengguna tingkat lanjut dan konfigurasi internal Intlayer.

    Tampilkan semua isi tabel

    Buka tabel dalam modal untuk melihat semua isi data dengan jelas

    Bidang Deskripsi Tipe Default Contoh Catatan
    dictionariesDir Lokasi untuk kamus yang dikompilasi. string '.intlayer/dictionary'
    moduleAugmentationDir Direktori tempat module augmentation TypeScript berada. string '.intlayer/types'
    unmergedDictionariesDir Direktori tempat kamus yang belum digabungkan berada. string '.intlayer/unmerged_dictionary'
    typesDir Direktori tempat tipe yang dihasilkan berada. string '.intlayer/types'
    mainDir Direktori tempat file utama Intlayer berada. string '.intlayer/main'
    configDir Direktori tempat file konfigurasi yang dikompilasi berada. string '.intlayer/config'
    cacheDir Direktori tempat file cache berada. string '.intlayer/cache'

    Konfigurasi Kompiler (Compiler)

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

    Tampilkan semua isi tabel

    Buka tabel dalam modal untuk melihat semua isi data dengan jelas

    Bidang Deskripsi Tipe Default Contoh Catatan
    enabled Menunjukkan 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.
    dictionaryKeyPrefix Prefiks untuk kunci kamus yang dikumpulkan. string '' 'my-prefix-' Ditambahkan sebelum kunci yang dihasilkan (berdasarkan nama file) untuk menghindari konflik.
    saveComponents Menunjukkan apakah komponen harus disimpan setelah diubah. boolean false • Jika true, file asli akan ditimpa dengan versi yang telah diubah.
    • Memungkinkan kompiler dijalankan sekali, lalu dihapus.
    output Mendefinisikan 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.
    noMetadata Jika true, kompiler menghapus metadata kamus (key, content wrapper) dari output. boolean false false → {"key":"my-key","content":{"key":"value"}}
    true → {"key":"value"}
    • Berguna untuk output i18next per-locale atau ICU MessageFormat JSON.
    • Berfungsi baik dengan plugin loadJSON.
    dictionaryKeyPrefix Prefix kunci kamus string '' Menambahkan prefix opsional ke kunci kamus yang diekstrak

    Skema Kustom (Custom Schemas)

    Tampilkan semua isi tabel

    Buka tabel dalam modal untuk melihat semua isi data dengan jelas

    Bidang Deskripsi Tipe
    schemas Memungkinkan Anda menentukan skema Zod untuk memvalidasi struktur kamus Anda. Record<string, ZodSchema>

    Plugin (Plugins)

    Tampilkan semua isi tabel

    Buka tabel dalam modal untuk melihat semua isi data dengan jelas

    Bidang Deskripsi Tipe
    plugins Daftar plugin Intlayer yang akan disertakan. IntlayerPlugin[]
    Bagaimana Intlayer bekerja
    CLI
    Alt+→

    Di halaman ini

      Diskusi bersifat anonim dan ditinjau secara berkala untuk mengatasi masalah umum. Jangan ragu untuk berbagi ide fitur, masukan tentang dokumentasi, atau apa pun yang terkait dengan Intlayer, kami menggunakan masukan ini untuk membentuk peta jalan dan meningkatkan produk.

      import { Locales, type IntlayerConfig } from "intlayer";import { nextjsRewrite } from "intlayer/routing";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",    /**     * 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,  },  /**   * 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'     * 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,    /**     * 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 plugin.   */  plugins: [],};export default config;
      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]",    },  }),}
      import { Locales, type IntlayerConfig } from "intlayer";// intlayer.config.tsconst config: IntlayerConfig = {  internationalization: {    locales: ["en", "fr", "es"],    defaultLocale: "en",  },  routing: {    mode: "prefix-no-default",    storage: "localStorage",    basePath: "",  },};export default config;
      import { Locales, type IntlayerConfig } from "intlayer";// intlayer.config.tsconst 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;
      import { Locales, type IntlayerConfig } from "intlayer";// intlayer.config.tsconst config: IntlayerConfig = {  internationalization: {    locales: ["en", "fr", "es"],    defaultLocale: "en",  },  routing: {    mode: "search-params",    storage: "localStorage",    basePath: "",  },};export default config;
      import { Locales, type IntlayerConfig } from "intlayer";// intlayer.config.tsconst 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;
      // intlayer.config.tsimport { 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;
      dictionary: {  fill: {    en: "/locales/en/{{key}}.content.json",    fr: ({ key }) => `/locales/fr/${key}.content.json`,    es: false,  },};