著者:
    作成:2024-08-13最終更新:2026-08-30

    Intlayer 設定ドキュメント

    概要

    Intlayer 設定ファイルを使用すると、国際化、ミドルウェア、コンテンツ管理など、プラグインのさまざまな側面をカスタマイズできます。このドキュメントでは、設定内の各プロパティの詳細な説明を提供します。

    目次

    設定ファイルのサポート

    Intlayer は、JSON、JS、MJS、および TS の設定ファイル形式をサポートしています。

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

    設定ファイルの例

    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";
    
    /**
     * 利用可能なすべてのオプションを示す Intlayer 設定ファイルの例。
     */
    const config: IntlayerConfig = {
      /**
       * 国際化設定。
       */
      internationalization: {
        /**
         * アプリケーションでサポートされるロケールのリスト。
         * デフォルト: [Locales.ENGLISH]
         */
        locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],
    
        /**
         * 各辞書で定義する必要がある必須ロケールのリスト。
         * 空の場合、`strict` モードですべてのロケールが必須になります。
         * デフォルト: []
         */
        requiredLocales: [Locales.ENGLISH],
    
        /**
         * 国際化されたコンテンツの厳密レベル。
         * - "strict": 宣言されたロケールが欠落している、または宣言されていない場合にエラーをスローします。
         * - "inclusive": 宣言されたロケールが欠落している場合に警告をスローします。
         * - "loose": 既存のロケールをすべて受け入れます。
         * デフォルト: "inclusive"
         */
        strictMode: "inclusive",
    
        /**
         * 要求されたロケールが見つからない場合にフォールバックとして使用されるデフォルトロケール。
         * デフォルト: Locales.ENGLISH
         */
        defaultLocale: Locales.ENGLISH,
      },
    
      /**
       * 辞書操作とフォールバック動作を制御する設定。
       */
      dictionary: {
        /**
         * 辞書のインポート方法を制御します。
         * - "static": ビルド時に静的にインポートされます。
         * - "dynamic": Suspense を使用して動的にインポートされます。
         * - "fetch": Live Sync API を介して動的に取得されます。
         * デフォルト: "static"
         */
        importMode: "static",
    
        /**
         * AI を使用して欠落している翻訳を自動入力する戦略。
         * ブール値、または入力されたコンテンツを保存するパスパターン。
         * デフォルト: true
         */
        fill: true,
    
        /**
         * 辞書ファイルの物理的な場所。
         * - "local": ローカルファイルシステムに保存されます。
         * - "remote": Intlayer CMS に保存されます。
         * - "hybrid": ローカルファイルシステムと Intlayer CMS の両方に保存されます。
         * - "plugin" (または任意のカスタム文字列): プラグインやカスタムソースによって提供されます。
         * デフォルト: "local"
         */
        location: "local",
    
        /**
         * コンテンツを自動的に変換するかどうか (例: Markdown から HTML)。
         * デフォルト: false
         */
        contentAutoTransformation: false,
      },
    
      /**
       * ルーティングとミドルウェアの設定。
       */
      routing: {
        /**
         * ロケールルーティング戦略。
         * - "prefix-no-default": デフォルト以外のすべてのロケールにプレフィックスを付けます (例: /dashboard, /fr/dashboard)。
         * - "prefix-all": すべてのロケールにプレフィックスを付けます (例: /en/dashboard, /fr/dashboard)。
         * - "no-prefix": URL にロケールを含めません。
         * - "search-params": ?locale=... を使用します。
         * デフォルト: "prefix-no-default"
         */
        mode: "prefix-no-default",
    
        /**
         * Intlayer のロケールルーティングプロキシ(ミドルウェア)を有効にします。
         * dev、preview、SSR でのロケール検出・リダイレクト・リライトを担います。
         * - 未設定 (auto): dev および preview サーバーは Cookie やヘッダーに保存された
         *   ロケールを無視し、ルーティングを URL 駆動に保ちます。プレフィックスの解決、
         *   ロケールの永続化、Accept-Language 検出は引き続き動作します。
         *   本番環境では `true` と同じ挙動になります。
         * - true: すべての環境で完全な挙動。
         * - false: ロケールルーティングを行いません。
         * デフォルト: undefined (auto)
         */
        enableProxy: undefined,
    
        /**
         * ユーザーが選択したロケールを保存する場所。
         * オプション: 'cookie', 'localStorage', 'sessionStorage', 'header', またはそれらの配列。
         * デフォルト: ['cookie', 'header']
         */
        storage: ["cookie", "header"],
    
        /**
         * アプリケーション URL のベースパス。
         * デフォルト: ""
         */
        basePath: "",
    
        /**
         * 特定のロケールパスに対するカスタム URL リライトルール。
         */
        rewrite: nextjsRewrite({
          "/[locale]/about": {
            en: "/[locale]/about",
            fr: "/[locale]/a-propos",
          },
        }),
    
        /**
         * ドメインベースのルーティングのために、ロケールをドメインのホスト名にマップします。
         * これらのロケールのURLは絶対URLになります(例:https://intlayer.cn/)。
         * ドメインがロケールを暗示するため、パスにロケールプレフィックスは追加されません。
         * デフォルト: undefined
         */
        domains: {
          en: "intlayer.org",
          zh: "intlayer.cn",
        },
      },
    
      /**
       * コンテンツファイルの検索と処理に関する設定。
       */
      content: {
        /**
         * 辞書をスキャンするファイル拡張子。
         * デフォルト: ['.content.ts', '.content.js', '.content.json', など]
         */
        fileExtensions: [".content.ts", ".content.js", ".content.json"],
    
        /**
         * .content ファイルが存在するディレクトリ。
         * デフォルト: ["."]
         */
        contentDir: ["src"],
    
        /**
         * ソースコードが存在するディレクトリ。
         * ビルドの最適化とコード変換に使用されます。
         * デフォルト: ["."]
         */
        codeDir: ["src"],
    
        /**
         * スキャンから除外するパターン。
         * デフォルト: ['node_modules', '.intlayer', など]
         */
        excludedPath: ["node_modules"],
    
        /**
         * 開発中に変更を監視し、辞書を再生成するかどうか。
         * デフォルト: 開発環境では true
         */
        watch: true,
    
        /**
         * 新しく作成または更新された .content ファイルをフォーマットするためのコマンド。
         */
        formatCommand: 'npx prettier --write "{{file}}"',
      },
    
      /**
       * ビジュアルエディタの設定。
       */
      editor: {
        /**
         * ビジュアルエディタを有効にするかどうか。
         * デフォルト: false
         */
        enabled: true,
    
        /**
         * オリジン検証のためのアプリケーション URL。
         * デフォルト: ""
         */
        applicationURL: "http://localhost:3000",
    
        /**
         * ローカルエディタサーバーのポート。
         * デフォルト: 8000
         */
        port: 8000,
    
        /**
         * エディタのパブリック URL。
         * デフォルト: "http://localhost:8000"
         */
        editorURL: "http://localhost:8000",
    
        /**
         * Intlayer CMS の URL。
         * デフォルト: "https://app.intlayer.org"
         */
        cmsURL: "https://app.intlayer.org",
    
        /**
         * バックエンド API の URL。
         * デフォルト: "https://back.intlayer.org"
         */
        backendURL: "https://back.intlayer.org",
    
        /**
         * リアルタイムコンテンツ同期を有効にするかどうか。
         * デフォルト: false
         */
        liveSync: true,
      },
    
      /**
       * アナリティクス(analytics)設定。
       */
      analytics: {
        /**
         * アナリティクス収集を有効にするかどうか(ページビュー、コンテンツの露出、A/Bイベント)。
         * `@intlayer/analytics` がインストールされ、帰属(attribution)のために `editor.clientId` が設定されている必要があります。
         * デフォルト: true
         */
        enabled: true,
    
        /**
         * バックエンドへの自動バッチ送信間のミリ秒数。
         * デフォルト: 20000
         */
        flushInterval: 20000,
    
        /**
         * 記録するセッションの割合。0(なし)から1(すべて)まで。
         * デフォルト: 1
         */
        sampleRate: 1,
      },
    
      /**
       * AI による翻訳と生成の設定。
       */
      ai: {
        /**
         * 使用する AI プロバイダー。
         * オプション: 'openai', 'anthropic', 'mistral', 'deepseek', 'gemini', 'ollama', 'openrouter', 'alibaba', 'fireworks', 'groq', 'huggingface', 'bedrock', 'googlevertex', 'togetherai', 'lmstudio', 'moonshotai'
         * デフォルト: 'openai'
         */
        provider: "openai",
    
        /**
         * 選択したプロバイダーで使用するモデル。
         */
        model: "gpt-4o",
    
        /**
         * プロバイダーの API キー。
         */
        apiKey: process.env.OPENAI_API_KEY,
    
        /**
         * 翻訳を生成する際に AI をガイドするグローバルコンテキスト。
         */
        applicationContext: "これは旅行予約アプリケーションです。",
    
        /**
         * AI API のベース URL。
         */
        baseURL: "http://localhost:3000",
    
        /**
         * データシリアライゼーション
         *
         * オプション:
         * - "json": デフォルト、信頼性が高いがトークン消費が多い。
         * - "toon": トークン消費が少ないが、JSON ほど一貫性がない。
         *
         * デフォルト: "json"
         */
        dataSerialization: "json",
      },
    
      /**
       * ビルドと最適化の設定。
       */
      build: {
        /**
         * ビルドの実行モード。
         * - "auto": アプリのビルド中に自動的にビルドされます。
         * - "manual": 明示的なビルドコマンドが必要です。
         * デフォルト: "auto"
         */
        mode: "auto",
    
        /**
         * 未使用の辞書を削除して、最終的なバンドルを最適化するかどうか。
         * デフォルト: 本番環境では true
         */
        optimize: true,
    
        /**
         * バンドルサイズを削減するために辞書を圧縮(Minify)する。
         * デフォルト: true
         *
         * 注意点:
         * - `optimize` が無効な場合、このオプションは無視されます。
         * - `editor.enabled` が true の場合、このオプションは無視されます。
         */
        minify: true,
    
        /**
         * 辞書内の未使用のキーを削除(Purge)する。
         * デフォルト: true
         *
         * 注意点:
         * - `optimize` が無効な場合、このオプションは無視されます。
         */
        purge: true,
    
        /**
         * ロケールごとの辞書チャンクを、それを使用するコード分割境界ごとにグループ化し、遅延読み込みされるページが 1
         * 回のリクエストでコンテンツを取得できるようにします。
         * デフォルト: true
         *
         * 注意点:
         * - `importMode: 'dynamic'` を使用する辞書にのみ適用されます。
         */
        chunkGrouping: true,
    
        /**
         * チャンクがレンダリングされてから取得するのではなく、そのチャンクを使用する辞書を一緒に読み込みます。読み取りはサスペンドせず同期的にレンダリングされるため、ナビゲーション時にローディング状態がちらつかなくなります。
         * デフォルト: true
         *
         * 注意点:
         * - 解決されたロケールのみを待つため、ページは表示する言語だけをダウンロードします。
         */
        dictionariesPreload: true,
    
        /**
         * 生成された辞書ファイルの出力形式。
         * デフォルト: ['cjs', 'esm']
         */
        outputFormat: ["cjs", "esm"],
    
        /**
         * ビルド時に TypeScript の型チェックを行うかどうか。
         * デフォルト: false
         */
        checkTypes: false,
      },
    
      /**
       * ロガー設定。
       */
      log: {
        /**
         * ログレベル。
         * - "default": 標準的なログ記録。
         * - "verbose": 詳細なデバッグログ。
         * - "disabled": ログを記録しません。
         * デフォルト: "default"
         */
        mode: "default",
    
        /**
         * すべてのログメッセージのプレフィックス。
         * デフォルト: "[intlayer]"
         */
        prefix: "[intlayer]",
      },
    
      /**
       * システム設定 (高度なユースケース)
       */
      system: {
        /**
         * ローカライズされた辞書を保存するディレクトリ。
         */
        dictionariesDir: ".intlayer/dictionary",
    
        /**
         * モジュール拡張 (module augmentation) 用のディレクトリ。
         */
        moduleAugmentationDir: ".intlayer/types",
    
        /**
         * マージされていない辞書を保存するディレクトリ。
         */
        unmergedDictionariesDir: ".intlayer/unmerged_dictionary",
    
        /**
         * 辞書の型を保存するディレクトリ。
         */
        typesDir: ".intlayer/types",
    
        /**
         * メインアプリケーションファイルが保存されるディレクトリ。
         */
        mainDir: ".intlayer/main",
    
        /**
         * コンパイルされた設定ファイルが保存されるディレクトリ。
         */
        configDir: ".intlayer/config",
    
        /**
         * キャッシュファイルが保存されるディレクトリ。
         */
        cacheDir: ".intlayer/cache",
      },
    
      /**
       * コンパイラ設定 (高度なユースケース)
       */
      compiler: {
        /**
         * コンパイラを有効にするかどうか。
         *
         * - false: コンパイラを無効にする。
         * - true: コンパイラを有効にする。
         * - "build-only": 起動時間を短縮するため、開発中はコンパイラをスキップする。
         *
         * デフォルト: false
         */
        enabled: true,
    
        /**
         * 出力ファイルのパスを定義します。`outputDir` を上書きします。
         *
         * - `./` で始まるパスは、コンポーネントのディレクトリを基準に解決されます。
         * - `/` で始まるパスは、プロジェクトのルート (`baseDir`) を基準に解決されます。
         *
         * - パスに `{{locale}}` 変数を含めると、ロケールごとに個別の辞書生成が有効になります。
         *
         * 例:
         * ```ts
         * {
         *   // コンポーネントの近くに多言語対応の .content.ts ファイルを作成する
         *   output: ({ fileName, extension }) => `./${fileName}${extension}`,
         *
         *   // output: './{{fileName}}{{extension}}', // テンプレート文字列を使用した同等の記述
         * }
         * ```
         *
         * ```ts
         * {
         *   // プロジェクトのルートにロケールごとに集約された JSON を作成する
         *   output: ({ key, locale }) => `/locales/${locale}/${key}.content.json`,
         *
         *   // output: '/locales/{{locale}}/{{key}}.content.json', // テンプレート文字列を使用した同等の記述
         * }
         * ```
         *
         * 変数リスト:
         *   - `fileName`: ファイル名。
         *   - `key`: コンテンツキー。
         *   - `locale`: コンテンツロケール。
         *   - `extension`: ファイル拡張子。
         *   - `componentFileName`: コンポーネントファイル名。
         *   - `componentExtension`: コンポーネントファイル拡張子。
         *   - `format`: 辞書フォーマット。
         *   - `componentFormat`: コンポーネント辞書フォーマット。
         *   - `componentDirPath`: コンポーネントディレクトリパス。
         */
        output: ({ locale, key }) => `compiler/${locale}/${key}.json`,
    
        /**
         * 変換後のコンポーネントを保存するかどうか。
         * これにより、コンパイラを一度だけ実行してアプリケーションを変換し、その後削除することが可能になります。
         */
        saveComponents: false,
    
        /**
         * 生成されたファイルにコンテンツのみを挿入します。ロケールごとの i18next または ICU MessageFormat JSON 出力に有用です。
         */
        noMetadata: false,
    
        /**
         * 辞書キープレフィックス
         */
        dictionaryKeyPrefix: "", // 抽出された辞書キーにオプションのプレフィックスを追加します
      },
    
      /**
       * 辞書のコンテンツを検証するためのカスタムスキーマ。
       */
      schemas: {
        "my-schema": z.object({
          title: z.string(),
        }),
      },
    
      /**
       * 辞書設定。
       */
      dictionary: {
        /**
         * 辞書のインポート方法を制御します。
         * - "static": ビルド時に静的にインポート。
         * - "dynamic": Suspenseを使用して動的にインポート。
         * - "fetch": ライブ同期APIを介して動的に取得。
         */
        importMode: "static",
    
        /**
         * プロジェクト内のすべての辞書のデフォルトのメッセージ形式。
         * - 'intlayer': ネイティブの intlayer 形式 (デフォルト)。
         * - 'icu': ICU メッセージ形式。
         * - 'i18next': i18next 形式。
         * - 'vue-i18n': Vue I18n 形式。
         * - 'po': GNU Gettext PO 形式。
         */
        format: "icu",
      },
    
      /**
       * プラグインの設定。
       */
      plugins: [
        syncJSON({
          format: "icu",
          source: ({ locale }) => `./messages/${locale}.json`,
        }),
      ],
    };
    
    export default config;
    

    設定リファレンス

    以下のセクションでは、Intlayer で利用可能なさまざまな設定項目について詳しく説明します。

    国際化設定 (Internationalization)

    使用可能なロケールやアプリケーションのデフォルトロケールなど、国際化に関連する設定を定義します。

    フィールド説明デフォルト備考
    localesアプリケーションでサポートされるロケールのリスト。string[][Locales.ENGLISH]['en', 'fr', 'es']
    requiredLocalesアプリケーションで必須とされるロケールのリスト。string[][][]• 空の場合、strict モードではすべてのロケールが必須になります。
    • 必須ロケールが locales フィールドにも定義されていることを確認してください。
    strictModeTypeScript を使用して、国際化コンテンツの堅牢な実装を保証します。string'inclusive'"strict" の場合: t 関数は、宣言されたすべてのロケールが定義されていることを要求します。不足している場合や宣言されていない場合にエラーをスローします。
    "inclusive" の場合: ロケールが不足している場合に警告を出しますが、宣言されていない既存のロケールの使用も許可します。
    "loose" の場合: 既存のすべてのロケールを受け入れます。
    defaultLocale要求されたロケールが見つからない場合にフォールバックとして使用されるデフォルトロケール。stringLocales.ENGLISH'en'URL、Cookie、またはヘッダーでロケールが指定されていない場合にロケールを決定するために使用されます。

    エディタ設定 (Editor)

    サーバーポートや有効化ステータスなど、組み込みのビジュアルエディタの設定を定義します。

    フィールド説明デフォルト備考
    applicationURLアプリケーションの URL。stringundefined'http://localhost:3000'
    'https://example.com'
    process.env.INTLAYER_EDITOR_URL
    • セキュリティ上の理由から、エディタのオリジンを制限するために使用されます。
    '*' に設定すると、任意のオリジンからエディタにアクセス可能になります。
    portビジュアルエディタサーバーが使用するポート。number8000
    editorURLエディタサーバーの URL。string'http://localhost:8000''http://localhost:3000'
    'https://example.com'
    process.env.INTLAYER_EDITOR_URL
    • アプリケーションと対話可能なオリジンを制限するために使用されます。
    '*' に設定すると、任意のオリジンからアクセス可能になります。
    • ポートが変更された場合や、エディタが別のドメインでホストされている場合に設定する必要があります。
    cmsURLIntlayer CMS の URL。string'https://app.intlayer.org''https://app.intlayer.org'
    backendURLバックエンドサーバーの URL。stringhttps://back.intlayer.orghttp://localhost:4000
    enabledアプリケーションがビジュアルエディタと対話するかどうか。booleanfalseprocess.env.NODE_ENV !== 'production'false の場合、エディタはアプリケーションと対話できません。
    • 特定の環境で無効にすることでセキュリティが向上します。
    clientIdintlayer パッケージが oAuth2 を介してバックエンドで認証できるようにします。アクセストークンを取得するには、intlayer.org/project にアクセスしてください。string |
    undefined
    undefined秘密にする必要があるため、環境変数に保存してください。
    clientSecretintlayer パッケージが oAuth2 を介してバックエンドで認証できるようにします。アクセストークンを取得するには、intlayer.org/project にアクセスしてください。string |
    undefined
    undefined秘密にする必要があるため、環境変数に保存してください。
    dictionaryPriorityStrategyローカル辞書とリモート辞書の両方が存在する場合の、辞書の優先順位戦略。string'local_first''distant_first''distant_first': ローカルよりもリモートを優先します。
    'local_first': リモートよりもローカルを優先します。
    liveSyncCMS、ビジュアルエディタ、バックエンドでの変更が検出されたときに、アプリサーバーがコンテンツを即座にリロードするかどうか。booleantruetrue• 辞書が追加または更新されると、アプリはページコンテンツを更新します。
    • Live Sync はコンテンツを別のサーバーにオフロードするため、パフォーマンスにわずかな影響を与える可能性があります。
    • 両方を同じマシンでホストすることをお勧めします。
    liveSyncPortLive Sync サーバーのポート。number40004000
    liveSyncURLLive Sync サーバーの URL。string'http://localhost:{liveSyncPort}''https://example.com'デフォルトで localhost を指します。リモートの Live Sync サーバーを使用する場合は変更可能です。

    アナリティクス設定 (Analytics)

    Intlayerアナリティクスに関する設定を定義します。ユーザーに実際に表示されたコンテンツ(ページビュー、コンテンツの露出)を収集し、コンテンツのA/Bテストを可能にします。

    アナリティクスはオプトアウト方式です。デフォルトで有効であり、@intlayer/analytics パッケージがインストールされ、かつ 帰属のためのプロジェクトキー(editor.clientId)が設定されるとすぐに収集を開始します。analytics.enabledfalse にする(またはパッケージをインストールしない)と、アナリティクスの統合全体がアプリケーションのバンドルから削除されます(デッドコード除去)。

    フィールド説明デフォルト備考
    enabledアナリティクス収集を有効にします(ページビュー、コンテンツの露出、A/Bイベント)。booleantruefalse@intlayer/analytics がインストールされ、帰属のために editor.clientId が設定されている必要があります。そうでない場合、enabledtrue でもアナリティクスは無効のままです。
    flushIntervalバックエンドへの自動バッチ送信間のミリ秒数。number2000010000
    sampleRate記録するセッションの割合。0(なし)から1(すべて)まで。number10.5サンプリングはセッションごとに決定的であるため、記録されたセッションはそのすべてのイベントを報告します(部分的なファネルにはなりません)。

    ルーティング設定 (Routing)

    URL 構造、ロケール保存、ミドルウェア管理など、ルーティングの動作を制御する設定。

    フィールド説明デフォルト備考
    modeロケール管理のための URL ルーティングモード。'prefix-no-default' |
    'prefix-all' |
    'no-prefix' |
    'search-params'
    'prefix-no-default''prefix-no-default': /dashboard (en) または /fr/dashboard (fr)。 'prefix-all': /en/dashboard'no-prefix': ロケールは他の手段で管理されます。 'search-params': /dashboard?locale=frCookie やロケール保存の管理には影響しません。
    enableProxyIntlayer のロケールルーティングプロキシ(ミドルウェア)を有効にします。boolean |
    undefined
    undefined (auto)true• 未設定 (auto): dev / preview サーバーは Cookie・ヘッダーに保存されたロケールをリダイレクト元として無視します。プレフィックス、永続化、Accept-Language 検出は引き続き動作します。本番環境では true と同じ挙動です。
    true: どこでも完全な挙動。
    false: ロケールルーティングなし。Next.js では intlayerProxy ミドルウェアがパススルーになります。
    storageクライアントでのロケール保存の設定。false |
    'cookie' |
    'localStorage' |
    'sessionStorage' |
    'header' |
    CookiesAttributes |
    StorageAttributes |
    Array
    ['cookie', 'header']'localStorage'
    [{ type: 'cookie', name: 'custom-locale', secure: true }]
    下記の「保存オプション」の表を参照してください。
    basePathアプリケーション URL のベースパス。string'''/my-app'アプリが https://example.com/my-app にある場合、basePath は '/my-app' となり、URL は https://example.com/my-app/en のようになります。
    rewrite特定のパスに対してデフォルトのルーティングモードを上書きするカスタム URL リライトルール。動的パラメータ [param] をサポートします。Record<string, StrictModeLocaleMap<string>>undefined下記の例を参照してください• リライトルールは mode よりも優先されます。
    • Next.js および Vite で動作します。
    getLocalizedUrl() は一致するルールを自動的に適用します。
    カスタム URL リライトを参照してください。
    domainsドメインベースのルーティングのために、ロケールをドメインのホスト名にマップします。設定されている場合、そのロケールのURLはパスのベースとしてそのドメインを使用し(絶対URL)、パスにロケールプレフィックスは追加されません。Partial<Record<Locale, string>>undefined{ zh: 'intlayer.zh', fr: 'intlayer.org' }• ホスト名に含まれていない場合、デフォルトのプロトコルは https:// です。
    • ドメイン自体がロケールを識別するため、/zh/ プレフィックスは追加されません。
    getLocalizedUrl('/', 'zh')https://intlayer.zh/ を返します。

    rewrite の例:

    typescript
    routing: {
      mode: "prefix-no-default", // フォールバック戦略
      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]",
        },
      }),
    }
    

    保存オプション (Storage Options)

    備考説明
    'cookie'• GDPR コンプライアンスのため、適切なユーザーの同意を確保してください。
    CookiesAttributes ({ type: 'cookie', name: 'custom-locale', secure: true, httpOnly: false }) を介してカスタマイズ可能です。
    ロケールを Cookie に保存します。クライアントとサーバーの両方からアクセス可能です。
    'localStorage'• 明示的にクリアされない限り期限切れになりません。
    • Intlayer プロキシからはアクセスできません。
    StorageAttributes ({ type: 'localStorage', name: 'custom-locale' }) を介してカスタマイズ可能です。
    ブラウザにロケールを無期限に保存します。クライアントサイドのみ。
    'sessionStorage'• タブやウィンドウが閉じられるとクリアされます。
    • Intlayer プロキシからはアクセスできません。
    StorageAttributes ({ type: 'sessionStorage', name: 'custom-locale' }) を介してカスタマイズ可能です。
    ページセッションの間、ロケールを保存します。クライアントサイドのみ。
    'header'• API 呼び出しに有用です。
    • クライアントサイドからはアクセスできません。
    StorageAttributes ({ type: 'header', name: 'custom-locale' }) を介してカスタマイズ可能です。
    HTTP ヘッダーを介してロケールを保存または送信します。サーバーサイドのみ。

    Cookie 保存を使用する場合、追加のアトリビュートを設定できます。

    フィールド説明
    nameCookie の名前。デフォルト: 'INTLAYER_LOCALE'string
    domainCookie のドメイン。デフォルト: undefinedstring
    pathCookie のパス。デフォルト: undefinedstring
    secureHTTPS を必須にします。デフォルト: undefinedboolean
    httpOnlyHTTP-only フラグ。デフォルト: undefinedboolean
    sameSiteSameSite ポリシー。'strict' |
    'lax' |
    'none'
    expires数値は作成からの日数を示し、日付(またはISO日付文字列)は絶対的な有効期限を示します。デフォルト: undefinedDate |
    number |
    string
    maxAge作成からの秒単位の有効期間。expiresより優先されます。デフォルト: undefinednumber

    保存属性 (Storage Attributes)

    localStorage または sessionStorage を使用する場合。

    フィールド説明
    type保存方法のタイプ。'localStorage' |
    'sessionStorage'
    name保存キーの名前。デフォルト: 'INTLAYER_LOCALE'string

    設定例

    新しい v7 ルーティング構造の一般的な設定例をいくつか示します。

    基本設定 (デフォルト):

    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;
    

    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;
    

    検索パラメータモード:

    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;
    

    カスタム保存を使用したプレフィックスなしモード:

    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;
    

    動的パスを使用したカスタム URL リライト:

    typescript
    // intlayer.config.ts
    import { nextjsRewrite } from "intlayer/routing";
    
    const config: IntlayerConfig = {
      internationalization: {
        locales: ["en", "fr"],
        defaultLocale: "en",
      },
      routing: {
        mode: "prefix-no-default", // リライトされないパスのフォールバック
        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;
    

    コンテンツ設定 (Content)

    ディレクトリ名、ファイル拡張子、派生設定など、アプリケーション内でのコンテンツ管理方法に関連する設定。

    フィールド説明デフォルト備考
    watchIntlayer がコンテンツ宣言ファイルの変更を監視して辞書を再生成するかどうか。booleantrue
    fileExtensions辞書をコンパイルする際にスキャンするファイル拡張子。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']カスタマイズすることで競合を回避できる場合があります。
    contentDirコンテンツ定義ファイル (.content.*) が保存されているディレクトリパス。string[]['.']['src', '../../ui-library', require.resolve("@my-package/content"), '@my-package/content']コンテンツファイルの監視と辞書の再生成に使用されます。
    codeDirコードが保存されているベースディレクトリからの相対ディレクトリパス。string[]['.']['src', '../../ui-library']• コード変換 (プルーニング、最適化) のためにコードファイルを監視するために使用されます。
    contentDir と分離することでパフォーマンスが向上する場合があります。
    excludedPathコンテンツスキャンから除外するディレクトリ。string[]['**/node_modules/**', '**/dist/**', '**/build/**', '**/.intlayer/**', '**/.next/**', '**/.nuxt/**', '**/.expo/**', '**/.vercel/**', '**/.turbo/**', '**/.tanstack/**']未使用。将来の実装のために計画されています。
    formatCommandIntlayer がローカルにファイルを書き込む際のコンテンツファイルのフォーマッタコマンド。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}} はファイルパスに置き換えられます。
    • 未定義の場合、Intlayer は自動的に検出を試みます (prettier、biome、eslint をテスト)。

    システム設定

    Intlayerの内部パスと出力結果に関連する設定。これらの設定は通常内部的なものであり、ユーザーが変更する必要はありません。

    FieldDescriptionTypeDefaultExampleNote
    baseDirプロジェクトのベースディレクトリ。stringprocess.cwd()'/path/to/project'すべてのIntlayer関連ディレクトリを解決するために使用される。
    dictionariesDirローカライゼーション辞書を保存するディレクトリパス。string'.intlayer/dictionary'
    moduleAugmentationDirモジュール拡張用ディレクトリ。IDEの提案とタイプチェックを向上させる。string'.intlayer/types''intlayer-types'tsconfig.jsonに含めることを確認する。
    unmergedDictionariesDirマージされていない辞書を保存するディレクトリ。string'.intlayer/unmerged_dictionary'
    typesDir辞書タイプを保存するディレクトリ。string'.intlayer/types'
    mainDirメインアプリケーションファイルが保存されるディレクトリ。string'.intlayer/main'
    configDir設定ファイルが保存されるディレクトリ。string'.intlayer/config'
    cacheDirキャッシュファイルが保存されるディレクトリ。string'.intlayer/cache'

    辞書設定 (Dictionary)

    辞書操作を制御する設定。自動入力動作とコンテンツ生成を含みます。

    このディクショナリ設定には、主に2つの目的があります:

    1. デフォルト値: コンテンツ宣言ファイルを作成する際にデフォルト値を定義する
    2. フォールバック動作: 特定のフィールドが定義されていない場合にフォールバック値を提供し、辞書操作の動作をグローバルに定義できるようにする

    自動入力動作やコンテンツ生成など、辞書操作を制御するパラメータ。

    フィールド説明デフォルト備考
    fill自動入力 (AI 翻訳) の出力ファイルがどのように生成されるかを制御します。boolean |
    FilePathPattern |
    Partial<Record<Locale, boolean | FilePathPattern>>
    true{ en: '/locales/en/{{key}}.json', fr: ({ key }) => '/locales/fr/${key}.json', es: false }true: デフォルトパス (ソースと同じファイル)。
    false: 無効化。
    • 文字列/関数パターンは、ロケールごとのファイルを生成します。
    • ロケールごとのオブジェクト: 各ロケールが独自のパターンに対応します。false はそのロケールを無視します。
    {{locale}} を含めると、ロケールごとの生成がトリガーされます。
    • 辞書レベルの fill は、常にこのグローバル設定よりも優先されます。
    descriptionエディタや CMS が辞書の目的を理解するのに役立ちます。AI による翻訳生成のコンテキストとしても使用されます。stringundefined'User profile section'
    locale辞書をロケールごとの形式に変換します。宣言された各フィールドが翻訳ノードになります。存在しない場合、辞書は多言語対応として扱われます。LocalesValuesundefined'en'辞書が複数の言語の翻訳を含むのではなく、特定のロケール専用である場合に使用します。
    contentAutoTransformationコンテンツの文字列を型付きノード (markdown, HTML, または insertion) に自動変換します。boolean |
    { markdown?: boolean; html?: boolean; insertion?: boolean }
    falsetrue• Markdown : ### Titlemd('### Title')
    • HTML : <div>Title</div>html('<div>Title</div>')
    • 挿入 (Insertion) : Hello {{name}}insert('Hello {{name}}')
    location辞書ファイルの保存場所と CMS との同期方法を指定します。'local' |
    'remote' |
    'hybrid' |
    'plugin' |
    string
    'local''hybrid''local': ローカルでのみ管理。
    'remote': リモート (CMS) でのみ管理。
    'hybrid': ローカルとリモートの両方で管理。
    'plugin' またはカスタム文字列: プラグインやカスタムソースによって管理。
    importMode辞書のインポート方法を制御します。'static' |
    'dynamic' |
    'fetch'
    'static''dynamic''static': 静的インポート。
    'dynamic': Suspense を介した動的インポート。
    'fetch': Live Sync API を介して取得。失敗した場合は 'dynamic' にフォールバック。
    @intlayer/babel および @intlayer/swc プラグインが必要。
    • キーは静的に宣言される必要があります。
    optimize がオフの場合は無視されます。
    getIntlayergetDictionary などには影響しません。
    formatプロジェクト内のすべての辞書のデフォルトのメッセージ形式。'intlayer' |
    'icu' |
    'i18next' |
    'vue-i18n' |
    'po'
    'intlayer''icu''intlayer': ネイティブ intlayer 形式。
    'icu': ICU メッセージ形式。
    'i18next': i18next 形式。
    'vue-i18n': Vue I18n 形式。
    'po': GNU Gettext PO 形式。
    priority辞書の優先順位。辞書間の競合を解決する際、高い値が低い値に優先されます。numberundefined1
    live非推奨 - 代わりに importMode: 'fetch' を使用してください。辞書コンテンツを Live Sync API を介して動的に取得するかどうかを指定していました。booleanundefinedv8.0.0 で importMode: 'fetch' に名前変更。
    schemaJSON スキーマ検証のために Intlayer によって自動生成されます。'https://intlayer.org/schema.json'自動生成手動で編集しないでください。
    titleエディタや CMS で辞書を識別するのに役立ちます。stringundefined'User Profile'
    tags辞書をカテゴリ化し、エディタや AI にコンテキストや指示を提供します。string[]undefined['user', 'profile']
    versionリモート辞書のバージョン。現在使用されているバージョンを追跡するのに役立ちます。stringundefined'1.0.0'• CMS で管理可能。
    • ローカルで編集しないでください。

    fill の例:

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

    ロガー設定 (Logger)

    Intlayer からのログ出力をカスタマイズするためのパラメータ。

    フィールド説明デフォルト備考
    modeロガーのモードを指定します。'default' |
    'verbose' |
    'disabled'
    'default''verbose''verbose': デバッグ用により多くの情報を出力します。
    'disabled': ロガーを完全に無効にします。
    prefixログメッセージのプレフィックス。string'[intlayer] ''[my prefix] '

    AI 設定 (AI)

    プロバイダー、モデル、API キーなど、Intlayer の AI 機能を制御する設定。

    アクセストークンを使用して Intlayer ダッシュボード に登録されている場合、この設定はオプションです。Intlayer は、ニーズに合わせて最も効率的で費用対効果の高い AI ソリューションを自動的に管理します。デフォルトのオプションを使用することで、Intlayer が常に最適なモデルを使用するように更新されるため、長期的なメンテナンス性が向上します。

    独自の API キーや特定のモデルを使用したい場合は、カスタム AI 設定を定義できます。 この AI 設定は、Intlayer 環境内でグローバルに使用されます。CLI コマンド (例: fill) はデフォルトでこれらの設定を使用します。また、SDK、ビジュアルエディタ、CMS も同様です。コマンドパラメータを介して、特定のユースケースに対してこれらのデフォルト値を上書きできます。

    Intlayer は、柔軟性を最大限に高めるために複数の AI プロバイダーをサポートしています。現在サポートされているプロバイダーは次のとおりです。

    • OpenAI (デフォルト)
    • 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
    フィールド説明デフォルト備考
    providerIntlayer の AI 機能に使用するプロバイダー。'openai' |
    'anthropic' |
    'mistral' |
    'deepseek' |
    'gemini' |
    'ollama' |
    'openrouter' |
    'alibaba' |
    'fireworks' |
    'groq' |
    'huggingface' |
    'bedrock' |
    'googleaistudio' |
    'googlevertex' |
    'togetherai' |
    'lmstudio' |
    'moonshotai'
    undefined'anthropic'プロバイダーによって、必要な API キーや価格が異なります。
    modelAI 機能に使用するモデル。stringなし'gpt-4o-2024-11-20'特定のモデルはプロバイダーによって異なります。
    temperatureAI の応答のランダム性を制御します。numberなし0.1温度が高いほど、創造的で予測しにくくなります。
    apiKey選択したプロバイダーの API キー。stringなしprocess.env.OPENAI_API_KEY秘密にする必要があるため、環境変数に保存してください。
    applicationContextAI がより正確な翻訳を生成できるようにするための、アプリケーションに関する追加のコンテキスト (ドメイン、ターゲットオーディエンス、トーン、用語)。stringなし'旅行予約アプリのコンテキスト'ルールを追加するためにも使用できます (例: "URL を変換しないでください")。
    baseURLAI API のベース URL。stringなし'https://api.openai.com/v1'
    'http://localhost:5000'
    ローカルまたはカスタムの AI API エンドポイントを指すことができます。
    dataSerializationAI 機能のデータシリアライゼーション形式。'json' |
    'toon'
    undefined'toon''json': デフォルト、信頼性が高いがトークン消費が多い。
    'toon': トークン消費が少ないが、一貫性に欠ける。
    • 推論の努力 (reasoning effort) などの追加パラメータがコンテキストとしてモデルに渡されます。

    ビルド設定 (Build)

    Intlayer がアプリケーションの国際化をどのように最適化およびコンパイルするかを制御するパラメータ。

    ビルドオプションは、@intlayer/babel および @intlayer/swc プラグインに適用されます。

    開発モードでは、Intlayer は開発体験を簡素化するために辞書の静的インポートを使用します。
    最適化中、Intlayer はチャンキングを最適化するために辞書の呼び出しを置き換え、最終的なバンドルが実際に使用される辞書のみをインポートするようにします。
    フィールド説明デフォルト備考
    modeビルドモードを制御します。'auto' |
    'manual'
    'auto''manual''auto': アプリのビルド中にビルドが自動的にトリガーされます。
    'manual': ビルドコマンドが明示的に呼び出されたときにのみ実行されます。
    • 辞書のビルドを無効にするためにも使用できます (例: Node.js 環境での実行を停止する場合)。
    optimizeビルドの最適化を行うかどうかを制御します。booleanundefinedprocess.env.NODE_ENV === 'production'• 未定義の場合、フレームワークのビルド (Vite/Next.js) 時に最適化がトリガーされます。
    true の場合、開発モードでも強制的に最適化を行います。
    false の場合、無効化されます。
    • 有効な場合、チャンキングを最適化するために辞書の呼び出しを置き換えます。
    @intlayer/babel および @intlayer/swc プラグインが必要。
    minifyバンドルサイズを削減するために辞書を圧縮(Minify)する。booleanfalse• 最終的なバンドルを最小化するかどうかを指定します。
    • デフォルト:本番環境では true
    optimize が無効な場合、このオプションは無視されます。
    editor.enabled が真の場合、このオプションは無視されます。
    purge辞書内の未使用のキーを削除(Purge)する。booleanfalse• 最終的なバンドルをクリーンアップするかどうかを指定します。
    • デフォルト:本番環境では true
    optimize が無効な場合、このオプションは無視されます。
    checkTypesビルド時に TypeScript の型チェックを行い、エラーを記録するかどうかを指定します。booleanfalseビルドプロセスが遅くなる可能性があります。
    chunkGroupingロケールごとの辞書チャンクを、それを使用するコード分割境界ごとにグループ化するかどうかを指定します。booleantrue• グループ化しない場合、多数のコンポーネントで構成されるページは辞書ごとに 1 リクエストを発行します。
    • 複数の境界から到達する辞書は共有チャンクに移動するため、どのページも他ページのコンテンツを含みません。
    importMode: 'dynamic' を使用する辞書にのみ適用されます。
    • クライアントビルドのみ、かつバンドル時のみ適用されます(開発時は対象外)。
    dictionariesPreload辞書を、そのチャンクがレンダリングされてから取得するのではなく、使用するチャンクと一緒に読み込むかどうかを指定します。booleantrue• 生成されたエントリポイントはトップレベルで閲覧ロケールを待つため、遅延読み込みされるルートはコンテンツが揃うまで読み込み完了とみなされません。
    • 読み取りはサスペンドせず同期的にレンダリングされるため、ナビゲーション時にローディング状態がちらつかなくなります。
    • 解決されたロケールのみを待つため、ページは表示する言語だけをダウンロードします。
    • クライアントビルドで importMode: 'dynamic' を使用する辞書にのみ適用されます。
    • トップレベル await をサポートするバンドラー(Vite、esbuild)が必要です。
    outputFormat辞書の出力形式を制御します。('esm' | 'cjs')[]['esm', 'cjs']['cjs']
    traversePattern最適化中にスキャンするファイルを定義するパターン。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/**']• ビルドパフォーマンスを向上させるために、最適化対象を関連するファイルに限定します。
    optimize がオフの場合は無視されます。
    • glob パターンを使用します。

    コンパイラ設定 (Compiler)

    コンポーネントから直接辞書を抽出する Intlayer コンパイラを制御する設定。

    フィールド説明デフォルト備考
    enabled辞書の抽出のためにコンパイラを有効にするかどうかを指定します。boolean |
    'build-only'
    true'build-only''build-only' は起動時間を短縮するため、開発中はコンパイラをスキップします。ビルドコマンドでのみ実行されます。
    dictionaryKeyPrefix抽出された辞書キーのプレフィックス。string'''my-prefix-'競合を避けるために、(ファイル名に基づいた) 生成されたキーに追加されます。
    saveComponents変換後のコンポーネントを保存するかどうか。booleanfalsetrue の場合、元のファイルを変換後のバージョンで上書きします。
    • 実行後、コンパイラを削除することが可能になります。
    output出力ファイルのパスを定義します。outputDir を上書きします。変数テンプレートをサポート: {{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 }
    ./ はコンポーネントディレクトリ基準。
    / はルート基準。
    {{locale}} を含めるとロケールごとの生成がトリガーされます。
    • ロケールごとのオブジェクト記法をサポート。
    noMetadatatrue の場合、出力から辞書のメタデータ (キー、コンテンツラッパー) を除外します。booleanfalsefalse{"key":"my-key","content":{"key":"value"}}
    true{"key":"value"}
    • i18next や ICU MessageFormat JSON 出力に有用。
    loadJSON プラグインと組み合わせて使用。
    dictionaryKeyPrefix辞書のキープレフィックスstring''抽出された辞書キーにオプションのプレフィックスを追加します。

    カスタムスキーマ (Custom Schemas)

    フィールド説明
    schemas辞書の構造を検証するための Zod スキーマを定義できます。Record<string, ZodSchema>

    プラグイン (Plugins)

    フィールド説明
    plugins有効にする Intlayer プラグインのリスト。IntlayerPlugin[]

    よくある質問

    プロジェクトのルート、package.json の隣です。Intlayer は intlayer.config.jsintlayer.config.mjsintlayer.config.cjs、および JSON も受け入れるため、ファイルはプロジェクトが使用するモジュールシステムに一致します。

    名前空間ベースのセットアップよりもはるかに少ないです。なぜなら、ページはレンダリングしないカタログをダウンロードすることがないからです。サーバーでレンダリングされたマークアップはサーバー上でコンテンツを解決し、ビルド時コンパイラは useIntlayer の呼び出しをコンポーネントが使用する正確な辞書エントリに置き換えるため、未使用のキーや未使用の言語は削除されます。動的辞書は残りをロケールごとに分割します。一般的な代替案と比較して、Intlayer は bundle およびページサイズを最大 50% 削減します。bundle optimization および benchmark を参照してください。

    はい、2つの方法があります。i18next 移行ガイドまたは next-intl 移行ガイドを使用して、コンテンツを段階的に移行できます。または、現在の API を完全に維持することも可能です。compat adaptersは、i18nextreact-i18nextnext-intlnext-i18nextreact-intluse-intlvue-i18n、および Lingui とまったく同じ API を公開しますが、Intlayer の辞書によって提供されるため、インポートは変更されますが、コンポーネントのコードは変更されません。

    はい。sync JSON pluginは、/messages/{locale}/{namespace}.json ファイルを信頼できる情報源として保持し、それらから Intlayer 辞書を双方向に生成します。sync PO pluginは gettext カタログに対しても同様の処理を行い、per locale filesを使用すると、ロケールを1つのファイルにまとめるのではなく、言語ごとにコンテンツを分割できます。

    いいえ。npx intlayer extract を実行すると、Intlayer はソースファイルを読み取り、ユーザー向けの文字列を抽出し、それぞれの隣に .content ファイルを書き込みます。これにより、一度に1つずつ文字列をカタログにコピーする代わりに、差分を確認できます。extract command を参照してください。

    完全に自動化されたパイプラインの場合、Intlayer Compiler はビルド時に JSX、TSX、Vue、Svelte のソースに対して同様の処理を行い、変更があるたびに辞書を生成するため、手動でキーを管理する必要がありません。これは静的解析によって機能するため、実行時にのみ存在する文字列は対象外となり、ユーザー向けのテキストとアプリケーションロジックを区別するためにいくつかの注釈が必要です。

    5つのオプションがあり、すべて任意です。

    • VS Code extension: useIntlayer キーからそれを宣言するコンテンツファイルにジャンプしたり、コンポーネントからコンテンツを抽出したり、コマンドパレットまたは専用の Intlayer タブからビルド、フィル、テスト、プッシュ、プルを実行したりできます。
    • LSP server: LSP をサポートする任意のエディタで同様の認識機能を提供します。定義へのジャンプ、すべての参照の検索、翻訳された値のホバープレビュー、キーとフィールドのオートコンプリート、キーがどこにも宣言されていない場合の警告などがあります。また、i18nextreact-i18nextnext-intluse-intl の呼び出しも解決するため、移行中に役立ちます。
    • MCP server: Intlayer のドキュメントと CLI を Cursor、VS Code、Claude Desktop、Claude Code、ChatGPT に公開します。これにより、アシスタントは推測ではなく現在のドキュメントから回答し、intlayer fill などのコマンドを自身で実行できます。
    • Agent skills: intlayer-configintlayer-cliintlayer-content などの特定のスキルに加え、フレームワークごとのスキルがあり、エージェントにルーティング設定とコンテンツノードタイプを教えます。
    • ESLint plugin: no-raw-text はハードコードされた文字列を検出し、静的辞書キーや未使用のコンテンツに対する追加のルールも提供します。