このページとあなたの好きなAIアシスタントを使ってドキュメントを要約します
バージョン履歴
- "Solid の useIntlayer API の使用法を直接プロパティアクセスに更新"v8.9.02026/5/4
- "initコマンドを追加"v7.5.92025/12/30
- "履歴の初期化"v5.5.102025/6/29
このページのコンテンツはAIを使用して翻訳されました。
英語の元のコンテンツの最新バージョンを見るこのドキュメントを改善するアイデアがある場合は、GitHubでプルリクエストを送信することで自由に貢献してください。
ドキュメントへのGitHubリンクドキュメントのMarkdownをクリップボードにコピー
IntlayerでNext.js and Page Routerを翻訳する | 国際化(i18n)
目次
代替手段ではなく Interlayer を使用する理由
「next-intl」や「i18next」などの主要なソリューションと比較して、Intlayer は次のような統合された最適化を備えたソリューションです。
Intlayer は、効率的なレンダリングのために サーバー コンポーネント と連携するように最適化されており、Turbopack と完全に互換性があります。静的レンダリングをブロックせず、ミドルウェアとスケーリング国際化 (i18n) に必要なすべての機能を提供します。
Intlayer は Next.js 12、13、14、15、および 16 と互換性があります。 Next.js Pages Router を使用している場合は、この ガイド を参照してください。 ロケール ルーティングは、SEO、バンドル サイズ、パフォーマンスに役立ちます。必要ない場合は、このガイドを参照してください。 App Router を使用した Next.js 12、13、14、および 15 については、この ガイド を参照してください。
大量の JSON ファイルをページにロードするのではなく、必要なコンテンツのみをロードします。 Intlayer は、バンドルとページのサイズを最大 50% 削減するのに役立ちます。
アプリケーションのコンテンツのスコープを設定すると、大規模なアプリケーションの メンテナンスが容易になります。コンテンツ コードベース全体を確認するという精神的な負担を負うことなく、単一の機能フォルダーを複製または削除できます。さらに、Intlayer は完全に型指定されており、コンテンツの正確性を保証します。
AI プロバイダーの費用で、選択した LLM を使用して CI/CD パイプラインで自動化を変換します。 Intlayer は、コンテンツ抽出を自動化する コンパイラー と、バックグラウンドでの翻訳を支援する Web プラットフォーム も提供します。
大量の JSON ファイルをコンポーネントに接続すると、パフォーマンスと反応性の問題が発生する可能性があります。 Intlayer は、ビルド時のコンテンツの読み込みを最適化します。
Intlayer は単なる i18n ソリューションではなく、自己ホスト型 ビジュアル エディター と 完全な CMS を提供します。 リアルタイムで多言語コンテンツを管理できるようになり、翻訳者、コピーライター、その他のチーム メンバーとのコラボレーションがシームレスになります。コンテンツはローカルおよび/またはリモートに保存できます。
Page Router を使用した Next.js アプリケーションでの Intlayer セットアップ手順
依存関係のインストール
お好みのパッケージマネージャーを使って必要なパッケージをインストールします:
bashコードをコピーコードをクリップボードにコピー
--interactiveフラグはオプションです。AI エージェントの場合はintlayer-cli initを使用してください。このコマンドは環境を検出し、必要なパッケージをインストールします。例えば:
bashコードをコピーコードをクリップボードにコピー
プロジェクトの設定
アプリケーションでサポートする言語を定義する設定ファイルを作成します:
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;この設定ファイルを通じて、ローカライズされたURL、ミドルウェアのリダイレクション、クッキー名、コンテンツ宣言の場所と拡張子、Intlayerのコンソールログの無効化などを設定できます。利用可能なパラメータの完全なリストについては、設定ドキュメントを参照してください。
IntlayerをNext.jsの設定に統合する
Next.jsの設定を修正してIntlayerを組み込みます:
next.config.mjsコードをコピーコードをクリップボードにコピー
withIntlayer()は Next.js と Intlayer を統合するためのプラグインです。コンテンツ宣言ファイルのビルドを保証し、開発モードでそれらを監視します。また、Webpack や Turbopack 環境内で Intlayer の環境変数を定義します。さらに、パフォーマンス最適化のためのエイリアスを提供し、サーバーコンポーネントとの互換性を確保します。withIntlayer()関数は Promise 関数です。他のプラグインと組み合わせて使用する場合は、awaitできます。例:tsxコードをコピーコードをクリップボードにコピー
ロケール検出のためのミドルウェア設定
ユーザーの優先ロケールを自動的に検出し処理するミドルウェアを設定します:
Intlayer v9 以降、このミドルウェアは
routing.enableProxyオプション(デフォルトはtrue)を尊重します。このファイルを削除せずにパススルーにするには、設定でrouting.enableProxy: falseに設定します。v9 リリースノート を参照してください。src/middleware.tsコードをコピーコードをクリップボードにコピー
export { intlayerProxy as middleware } from "next-intlayer/middleware"; export const config = { matcher: "/((?!api|static|assets|robots|sitemap|sw|service-worker|manifest|.*\\..*|_next).*)", };matcherパラメータをアプリケーションのルートに合わせて調整してください。詳細については、Next.js の matcher 設定に関するドキュメントを参照してください。動的ロケールルートの定義
ユーザーのロケールに基づいてローカライズされたコンテンツを提供するために動的ルーティングを実装します。
ロケール別ページの作成:
メインページファイルの名前を
[locale]の動的セグメントを含むように変更します。bashコードをコピーコードをクリップボードにコピー
ローカライズ対応のために
_app.tsxを更新:plaintextコードをコピーコードをクリップボードにコピー
getStaticPathsとgetStaticPropsの設定:
[locale]/index.tsxファイル内で、異なるロケールを処理するためのパスとプロパティを定義します。src/pages/[locale]/index.tsxコードをコピーコードをクリップボードにコピー
plaintextコードをコピーコードをクリップボードにコピー
getStaticPathsとgetStaticPropsは、Next.js のページルーターにおいて、すべてのロケールに対して必要なページを事前にビルドすることを保証します。このアプローチにより、実行時の計算が削減され、ユーザー体験が向上します。詳細については、Next.js のドキュメントのgetStaticPathsおよびgetStaticPropsを参照してください。コンテンツを宣言する
翻訳を格納するためのコンテンツ宣言を作成および管理します。
src/pages/[locale]/home.content.tsコードをコピーコードをクリップボードにコピー
import { t, type Dictionary } from "intlayer"; const homeContent = { key: "home", content: { title: t({ ja: "私のウェブサイトへようこそ", en: "Welcome to My Website", fr: "Bienvenue sur mon site Web", es: "Bienvenido a mi sitio web", }), description: t({ ja: "このページを編集して始めましょう。", en: "Get started by editing this page.", fr: "Commencez par éditer cette page.", es: "Comience por editar esta página.", }), }, } satisfies Dictionary; export default homeContent;詳細なコンテンツ宣言については、コンテンツ宣言ガイドを参照してください。
コード内でコンテンツを利用する
アプリケーション全体でコンテンツ辞書にアクセスし、翻訳されたコンテンツを表示します。
src/pages/[locale]/index.tsxコードをコピーコードをクリップボードにコピー
src/components/ComponentExample.tsxコードをコピーコードをクリップボードにコピー
import type { FC } from "react"; import { useIntlayer } from "next-intlayer"; export const ComponentExample: FC = () => { const content = useIntlayer("component-example"); // 対応するコンテンツ宣言があることを確認してください return ( <div> <h2>{content.title}</h2> <p>{content.content}</p> </div> ); };string属性(例:alt、title、href、aria-label)で翻訳を使用する場合は、関数の値を次のように呼び出してください:関数の値は以下の通りです:
htmlコードをコピーコードをクリップボードにコピー
useIntlayerフックの詳細については、ドキュメントを参照してください。メタデータの国際化
ページのタイトルなどのメタデータを国際化したい場合は、Next.js の Page Router が提供する
getStaticProps関数を使用できます。その中で、getIntlayer関数からコンテンツを取得し、メタデータを翻訳できます。src/pages/[locale]/metadata.content.tsコードをコピーコードをクリップボードにコピー
import { type Dictionary, t } from "intlayer"; import { type Metadata } from "next"; const metadataContent = { key: "page-metadata", content: { title: t({ en: "Create Next App", fr: "Créer une application Next.js", es: "Crear una aplicación Next.js", }), description: t({ en: "Generated by create next app", fr: "Généré par create next app", es: "Generado por create next app", }), }, } satisfies Dictionary<Metadata>; export default metadataContent;src/pages/[locale]/index.tsxコードをコピーコードをクリップボードにコピー
next-intlayerからインポートされるgetIntlayer関数は、コンテンツをIntlayerNodeでラップして返すため、ビジュアルエディタとの統合が可能です。対照的に、intlayerからインポートされるgetIntlayer関数は、追加のプロパティなしでコンテンツを直接返します。メタデータの最適化について詳しくは、公式の Next.js ドキュメントをご覧ください。
コンテンツの言語を変更する
Next.js でコンテンツの言語を変更するには、推奨される方法として
Linkコンポーネントを使用して、ユーザーを適切なローカライズされたページにリダイレクトする方法があります。Linkコンポーネントはページのプリフェッチを可能にし、完全なページリロードを回避するのに役立ちます。src/components/LanguageSwitcher.tsxコードをコピーコードをクリップボードにコピー
import { Locales, getHTMLTextDir, getLocaleName, getLocalizedUrl, } from "intlayer"; import { useLocalePageRouter } from "next-intlayer"; import { type FC } from "react"; import Link from "next/link"; const LocaleSwitcher: FC = () => { const { locale, pathWithoutLocale, availableLocales } = useLocalePageRouter(); return ( <div> <button popoverTarget="localePopover">{getLocaleName(locale)}</button> <div id="localePopover" popover="auto"> {availableLocales.map((localeItem) => ( <Link href={getLocalizedUrl(pathWithoutLocale, localeItem)} hrefLang={localeItem} key={localeItem} aria-current={locale === localeItem ? "page" : undefined} onClick={() => setLocale(localeItem)} > <span> {/* ロケール - 例: FR */} {localeItem} </span> <span> {/* そのロケールでの言語名 - 例: Français */} {getLocaleName(localeItem, locale)} </span> <span dir={getHTMLTextDir(localeItem)} lang={localeItem}> {/* 現在のロケールでの言語 - 例: Locales.SPANISHに設定された現在のロケールでのFrancés */} {getLocaleName(localeItem)} </span> <span dir="ltr" lang={Locales.ENGLISH}> {/* 英語での言語 - 例: French */} {getLocaleName(localeItem, Locales.ENGLISH)} </span> </Link> ))} </div> </div> ); };もう一つの方法として、
useLocaleフックが提供するsetLocale関数を使用する方法があります。この関数はページのプリフェッチを許可せず、ページをリロードします。この場合、
router.pushを使ったリダイレクトなしで、サーバーサイドのコードだけがコンテンツのロケールを変更します。src/components/LocaleSwitcher.tsxコードをコピーコードをクリップボードにコピー
useLocalePageRouterAPIはuseLocaleと同じです。useLocaleフックの詳細については、ドキュメントを参照してください。ドキュメント参照:
ローカライズされたリンクコンポーネントの作成
アプリケーションのナビゲーションが現在のロケールを尊重するようにするために、カスタムの
Linkコンポーネントを作成できます。このコンポーネントは内部URLに自動的に現在の言語のプレフィックスを付けます。例えば、フランス語を話すユーザーが「About」ページへのリンクをクリックすると、/aboutではなく/fr/aboutにリダイレクトされます。この動作は以下の理由で有用です:
- SEOとユーザーエクスペリエンス: ローカライズされたURLは、検索エンジンが言語ごとのページを正しくインデックスし、ユーザーに好みの言語でコンテンツを提供するのに役立ちます。
- 一貫性: アプリケーション全体でローカライズされたリンクを使用することで、ナビゲーションが現在のロケール内に留まり、予期しない言語の切り替えを防ぎます。
- 保守性: ローカリゼーションのロジックを単一のコンポーネントに集約することで、URLの管理が簡素化され、アプリケーションの成長に伴いコードベースの保守や拡張が容易になります。
以下は、TypeScriptで実装したローカライズされた
Linkコンポーネントの例です。src/components/Link.tsxコードをコピーコードをクリップボードにコピー
"use client"; import { getLocalizedUrl } from "intlayer"; import NextLink, { type LinkProps as NextLinkProps } from "next/link"; import { useLocale } from "next-intlayer"; import { forwardRef, PropsWithChildren, type ForwardedRef } from "react"; /** * 指定されたURLが外部リンクかどうかをチェックするユーティリティ関数。 * URLが http:// または https:// で始まる場合、外部リンクと見なされます。 */ export const checkIsExternalLink = (href?: string): boolean => /^https?:\/\//.test(href ?? ""); /** * 現在のロケールに基づいてhref属性を適応させるカスタムLinkコンポーネント。 * 内部リンクの場合、`getLocalizedUrl`を使用してURLにロケールをプレフィックスします(例: /fr/about)。 * これにより、ナビゲーションが同じロケールコンテキスト内に留まることを保証します。 */ export const Link = forwardRef< HTMLAnchorElement, PropsWithChildren<NextLinkProps> >(({ href, children, ...props }, ref: ForwardedRef<HTMLAnchorElement>) => { const { locale } = useLocale(); const isExternalLink = checkIsExternalLink(href.toString()); // リンクが内部リンクで有効なhrefが提供されている場合、ローカライズされたURLを取得します。 const hrefI18n: NextLinkProps["href"] = href && !isExternalLink ? getLocalizedUrl(href.toString(), locale) : href; return ( <NextLink href={hrefI18n} ref={ref} {...props}> {children} </NextLink> ); }); Link.displayName = "Link";動作の仕組み
外部リンクの検出:
ヘルパー関数checkIsExternalLinkはURLが外部リンクかどうかを判定します。外部リンクはローカライズの必要がないため、そのままにされます。現在のロケールの取得:
useLocaleフックは現在のロケール(例:フランス語の場合はfr)を提供します。URLのローカライズ:
内部リンク(つまり外部リンクでない場合)には、getLocalizedUrlが使用され、URLの先頭に現在のロケールが自動的に付加されます。つまり、ユーザーがフランス語環境にいる場合、hrefに/aboutを渡すと/fr/aboutに変換されます。リンクの返却:
コンポーネントはローカライズされたURLを持つ<a>要素を返し、ナビゲーションがロケールに沿って一貫するようにします。
この
Linkコンポーネントをアプリケーション全体に統合することで、一貫性のある言語対応のユーザー体験を維持しつつ、SEOや使いやすさの向上も期待できます。バンドルサイズの最適化
next-intlayerを使用すると、辞書はデフォルトですべてのページのバンドルに含まれます。バンドルサイズを最適化するために、Intlayerはマクロを使用してuseIntlayerの呼び出しをインテリジェントに置き換えるオプションのSWCプラグインを提供しています。これにより、辞書は実際に使用されているページのバンドルにのみ含まれるようになります。この最適化を有効にするには、
@intlayer/swcパッケージをインストールしてください。インストール後、next-intlayerは自動的にプラグインを検出して使用します。bashコードをコピーコードをクリップボードにコピー
注意: この最適化はNext.js 13以降でのみ利用可能です。
注意: このパッケージは、Next.jsでのSWCプラグインがまだ実験的なため、デフォルトではインストールされていません。将来的に変更される可能性があります。
TypeScriptの設定
Intlayerはモジュール拡張を使用して、TypeScriptの利点を活かし、コードベースをより強固にします。


TypeScriptの設定に自動生成された型が含まれていることを確認してください。
コードをクリップボードにコピー
Gitの設定
リポジトリをクリーンに保ち、生成されたファイルのコミットを避けるために、Intlayerによって作成されたファイルを無視することを推奨します。
以下の行を .gitignore ファイルに追加してください:
コードをクリップボードにコピー
VS Code 拡張機能
Intlayerでの開発体験を向上させるために、公式の Intlayer VS Code 拡張機能 をインストールできます。
この拡張機能は以下を提供します:
- 翻訳キーの オートコンプリート。
- 欠落している翻訳の リアルタイムエラー検出。
- 翻訳された内容の インラインプレビュー。
- 翻訳を簡単に作成・更新できる クイックアクション。
拡張機能の使用方法の詳細については、Intlayer VS Code 拡張機能のドキュメントを参照してください。
追加リソース
- Intlayer ドキュメント: GitHub リポジトリ
- 辞書ガイド: 辞書
- 設定ドキュメント: 設定ガイド
このガイドに従うことで、Next.js アプリケーションの Page Router を使用して Intlayer を効果的に統合し、ウェブプロジェクトに対して堅牢でスケーラブルな国際化サポートを実現できます。
さらに進む
さらに進めるには、ビジュアルエディターを実装するか、CMSを使用してコンテンツを外部化することができます。
よくある質問
Pages Router は引き続き next.config.js の組み込み i18n フィールドをサポートしていますが、これはロケールのルーティングと検出のみを処理し、翻訳自体は処理しないため、コンテンツレイヤーを選択する必要があります:
next-i18next/i18nextおよびnext-intl:ページごとに読み込まれる JSON 名前空間で、Pages Router との歴史的なペアリングです。react-intlおよびLingui:抽出ステップを伴う ICU メッセージです。Intlayer:最も高度なソリューションです。コードベースのどこにでもコンテンツを宣言でき(各コンポーネントの隣またはセントラライズ)、コンポーネントごとにコンパイルされ、完全に型付けされ、AI 翻訳、ビジュアルエディタ、CMS を備えています。
Intlayer を選ぶ理由および Next.js i18n ベンチマークを参照してください。
はい、2 つのパスがあります。next-intl 移行ガイドまたは i18next 移行ガイドを使用してコンテンツを段階的に移行できます。または、現在の API を完全に保持できます:互換性アダプタは next-intl、react-i18next、react-intl と同じ API を公開しますが、Intlayer 辞書によって提供されるため、インポートは変更されますがコンポーネントコードは変更されません。
はい。sync JSON プラグインは /messages/{locale}/{namespace}.json ファイルを信頼できるソースとして保持し、双方向で Intlayer 辞書を生成します。sync PO プラグインは gettext カタログに対して同じことを行い、ロケールごとのファイルでは 1 つのファイルにロケールをグループ化する代わりに言語ごとにコンテンツを分割できます。
いいえ。npx intlayer extract を実行すると、Intlayer はコンポーネントを読み取り、ユーザーに見える文字列を抽出し、各コンポーネントの隣に .content ファイルを書き込むため、カタログに 1 つずつ文字列をコピーする代わりに diff をレビューします。
完全に自動化されたパイプラインの場合、Intlayer Compiler はビルド時に同じことを行います:変更のたびに JSX、TSX、Vue、Svelte ソースをスキャンし、辞書を生成し、hot module replacement を通じて同期を保つため、手動で保守するキーはまったくありません。
コンパイラをオンにする前に知っておく価値のある 2 つの制限があります。静的分析によって機能するため、API エラーコードや CMS フィールドなど、実行時にのみ存在する文字列は到達不可能なままです。また、className="active" やステータスコードなどのアプリケーションロジックからユーザーに見える文字列を区別する必要があり、大規模なコードベースではいくつかのアノテーションが必要です。extract コマンドはループに保つことで両方を回避します。
5 つのピース、すべてオプションです:
- VS Code 拡張機能:
useIntlayerキーからそれを宣言するコンテンツファイルにジャンプし、コンポーネントからコンテンツを抽出し、コマンドパレットまたは専用 Intlayer タブからビルド、fill、test、push、pull を実行します。 - LSP サーバー:LSP を話す任意のエディタで同じ認識を持ち、定義へのジャンプ、すべての参照を検索、翻訳値のホバープレビュー、キーとフィールドのオートコンプリート、キーがどこにも宣言されていない場合の警告があります。また、
i18next、react-i18next、next-intl、use-intl呼び出しを解決し、移行中に役立ちます。 - MCP サーバー:Intlayer ドキュメントと CLI を Cursor、VS Code、Claude Desktop、Claude Code、ChatGPT に公開するため、アシスタントは推測する代わりに現在のドキュメントから回答でき、
intlayer fillなどのコマンドを自分で実行できます。 - エージェントスキル:
intlayer-config、intlayer-cli、intlayer-contentなどの焦点を絞ったスキル、およびフレームワークごとに 1 つ、エージェントにルーティング設定とコンテンツノードタイプを教えます。 - ESLint プラグイン:
no-raw-textはハードコードされた文字列にフラグを立て、静的辞書キーと未使用コンテンツのさらなるルールがあります。
