intlayer: 多言語コンテンツ宣言を管理するためのNPMパッケージ (i18n)

    Intlayerは、JavaScript開発者のために特別に設計されたパッケージのスイートです。React、Next.js、Express.jsなどのフレームワークと互換性があります。

    intlayerパッケージは、コードのどこにでもコンテンツを宣言できるようにします。多言語のコンテンツ宣言を構造化された辞書に変換し、アプリケーションにシームレスに統合します。TypeScriptを使用することで、Intlayerはより強力で効率的なツールを提供し、開発を向上させます。

    なぜIntlayerを統合するのか?

    • JavaScript駆動のコンテンツ管理: JavaScriptの柔軟性を活かして、効率的にコンテンツを定義し管理します。
    • 型安全な環境: TypeScriptを活用して、すべてのコンテンツ定義が正確でエラーがないことを保証します。
    • 統合されたコンテンツファイル: 翻訳をそれぞれのコンポーネントに近づけて、保守性と明瞭性を高めます。

    インストール

    好みのパッケージマネージャを使用して、必要なパッケージをインストールします:

    bash
    npm install intlayer

    Intlayerの設定

    Intlayerは、プロジェクトをセットアップするための設定ファイルを提供します。このファイルをプロジェクトのルートに置きます。

    intlayer.config.ts
    import { Locales, type IntlayerConfig } from "intlayer";const config: IntlayerConfig = {  internationalization: {    locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH],    defaultLocale: Locales.ENGLISH,  },};export default config;

    利用可能なパラメータの完全なリストについては、設定ドキュメントを参照してください。

    使用例

    Intlayerを使用すると、コードベースのどこにでも構造化された方法でコンテンツを宣言できます。

    デフォルトでは、Intlayerは拡張子が.content.{ts,tsx,js,jsx,mjs,cjs}のファイルをスキャンします。

    デフォルトの拡張子は、設定ファイル内でcontentDirプロパティを設定することで変更できます。

    bash
    .├── intlayer.config.ts└── src    ├── ClientComponent    │   ├── index.content.ts    │   └── index.tsx    └── ServerComponent        ├── index.content.ts        └── index.tsx

    コンテンツを宣言する

    以下はコンテンツ宣言の例です:

    tsx
    import { type DeclarationContent, t } from "intlayer";const clientComponentContent = {  key: "client-component",  content: {    myTranslatedContent: t({      en: "Hello World",      fr: "Bonjour le monde",      es: "Hola Mundo",    }),    numberOfCar: enu({      "<-1": "Less than minus one car", // 1台未満      "-1": "Minus one car", // 1台マイナス      "0": "No cars", // 車なし      "1": "One car", // 1台      ">5": "Some cars", // 何台かの車      ">19": "Many cars", // 多くの車    }),  },} satisfies DeclarationContent;export default clientComponentContent;

    辞書を構築する

    需要に応じたintlayer-cliを使用して、辞書を構築できます。

    bash
    npx intlayer build

    このコマンドは、すべての*.content.*ファイルをスキャンし、コンパイルして、intlayer.config.tsで指定したディレクトリ(デフォルトは./.intlayer)に結果を書き込みます。

    典型的な出力は次のようになります:

    bash
    .├── .intlayer│   ├── dictionary  # コンテンツの辞書を含む│   │   ├── client-component.json│   │   └── server-component.json│   ├── main  # アプリケーションで使用するための辞書のエントリポイントを含む│   │   ├── dictionary.cjs│   │   └── dictionary.mjs│   └── types  # 辞書の自動生成された型定義を含む│       ├── client-component.d.ts│       └── server-component.d.ts└── types    └── intlayer.d.ts  # Intlayerの自動生成された型定義を含む

    i18nextリソースを構築する

    Intlayerを設定して、i18nextのための辞書を構築することができます。そのためには、次の設定をintlayer.config.tsファイルに追加する必要があります:

    intlayer.config.ts
    import { Locales, type IntlayerConfig } from "intlayer";const config: IntlayerConfig = {  /* ... */  content: {    // Intlayerにi18nextのメッセージファイルを生成させる    dictionaryOutput: ["i18next"],    // IntlayerがメッセージJSONファイルを書き込むディレクトリ    i18nextResourcesDir: "./i18next/resources",  },};

    利用可能なパラメータの完全なリストについては、設定ドキュメントを参照してください。

    出力:

    bash
    .└── i18next    └── resources        ├── en        │   ├── client-component.json        │   └── server-component.json        ├── es        │   ├── client-component.json        │   └── server-component.json        └── fr            ├── client-component.json            └── server-component.json

    例えば、en/client-component.jsonは次のように見えるかもしれません:

    json
    {  "myTranslatedContent": "Hello World",  "zero_numberOfCar": "No cars",  "one_numberOfCar": "One car",  "two_numberOfCar": "Two cars",  "other_numberOfCar": "Some cars"}

    i18nextまたはnext-intl辞書を構築する

    Intlayerは、i18nextまたはnext-intlのための辞書を構築するように設定できます。そのためには、次の設定をintlayer.config.tsファイルに追加する必要があります:

    intlayer.config.ts
    import { Locales, type IntlayerConfig } from "intlayer";const config: IntlayerConfig = {  /* ... */  content: {    // Intlayerにnext-intlのメッセージファイルを生成させる    dictionaryOutput: ["next-intl"],    // IntlayerがメッセージJSONファイルを書き込むディレクトリ    nextIntlMessagesDir: "./i18next/messages",  },};

    利用可能なパラメータの完全なリストについては、設定ドキュメントを参照してください。

    出力:

    bash
    .└── intl    └── messages        ├── en        │   ├── client-component.json        │   └── server-component.json        ├── es        │   ├── client-component.json        │   └── server-component.json        └── fr            ├── client-component.json            └── server-component.json

    例えば、en/client-component.jsonは次のように見えるかもしれません:

    json
    {  "myTranslatedContent": "Hello World",  "zero_numberOfCar": "No cars",  "one_numberOfCar": "One car",  "two_numberOfCar": "Two cars",  "other_numberOfCar": "Some cars"}

    CLIツール

    IntlayerはCLIツールを提供しており、以下が可能です:

    • コンテンツ宣言を監査し、欠落している翻訳を補完する
    • コンテンツ宣言から辞書を構築する
    • 遠隔辞書をCMSからローカルプロジェクトにプッシュまたはプルする

    詳細については、intlayer-cliを参照してください。

    アプリケーションにIntlayerを使用する

    コンテンツが宣言されたら、アプリケーションでIntlayerの辞書を使用できます。

    Intlayerは、アプリケーション用のパッケージとして利用可能です。

    Reactアプリケーション

    ReactアプリケーションでIntlayerを使用するには、react-intlayerを使用します。

    Next.js アプリケーション

    Next.js アプリケーションでIntlayerを使用するには、next-intlayerを使用します。

    Expressアプリケーション

    ExpressアプリケーションでIntlayerを使用するには、express-intlayerを使用します。

    intlayerパッケージが提供する機能

    intlayerパッケージは、アプリケーションを国際化するのに役立ついくつかの関数も提供しています。

    このドキュメントを改善するアイデアがある場合は、GitHubでプルリクエストを送信することで自由に貢献してください。

    ドキュメントへのGitHubリンク