ReactやNext.jsのサイトを多言語化する

ReactとNext.jsのi18n(多言語化)ガイド

ReactやNext.jsのサイトを多言語化する(next-intl) | We.Inc

ReactやNext.jsのサイトを正しく翻訳する方法を解説します。メッセージファイル、next-intlによるロケールのルーティング、日付、金額、複数形のIntlによる書式設定、右から左へのレイアウト、hreflangタグまで扱います。

すべての文字列を言語ごとに1つのJSONメッセージファイルにまとめ、各言語に/de/aboutのような専用のURLを割り当て、日付、価格、複数形はブラウザーに組み込まれたIntlのAPIで書式設定します。Next.jsのApp Routerでは、next-intlがこれらをつなぎます。[locale]というルートセグメント、言語を選ぶプロキシ、そしてコンポーネント内のuseTranslationsです。

翻訳されたサイトを構成する要素

翻訳は単語を置き換えるだけではありません。語順は変わり、複数形のルールは異なり、アラビア語は右から左に読み、日付の書き方は国ごとに違います。下の切り替えで小さな商品カードの言語が変わる様子を試し、その後、セットアップ用のファイルとhreflangジェネレーターを使って自分のアプリで同じものを作りましょう。

よくある質問

Reactではどのi18nライブラリを使うべきですか?

Next.jsのApp Routerには、専用に作られていてServer Componentsにも対応したnext-intlが適しています。Next.jsを使わない素のReactアプリでは、メッセージをJSONで保存するライブラリを選びましょう。そうすれば、後で別のライブラリに移行するときも扱いやすくなります。

言語はサブフォルダー、サブドメイン、別ドメインのどれに置くべきですか?

example.com/de/のようなサブフォルダーが最も運用しやすい方法です。1つのサイトと1つのドメインですべてをまかなえるからです。de.example.comや国別ドメインが必要な場合は、next-intlのドメインベースのルーティングも使えます。

Next.jsでhreflangを追加するには?

metadataまたはgenerateMetadataからalternates.languagesを返し、言語ごとのURLを1件ずつ指定します。Next.jsはそれぞれについてlink rel="alternate" hreflangタグを出力します。各言語版は他のすべての言語版と自分自身を列挙する必要があり、そうしないと検索エンジンがそのセットを無視することがあります。

サイトを機械翻訳してもよいですか?

機械翻訳を最初の下書きとして使うのは構いませんが、その言語に堪能な人に、特に見出し、価格、法的な文章を確認してもらいましょう。内容の薄い翻訳や確認されていない翻訳は、読者を混乱させ、信頼を損なうおそれがあります。

コンポーネント内の文字列ではなく、メッセージを使う

書式設定はIntlに任せる

右から左に書く言語

App Router向けのnext-intlのセットアップ

npm install next-intlでインストールします。これらのファイルは、ロケールベースのルーティングに関するnext-intl公式の入門ガイドの構成に沿っています。

言語ごとに1ファイルで、どのファイルも同じキーを持ちます。メッセージ内の複数形はICU構文で処理します。

src/i18n/routing.tsとsrc/proxy.ts

ルーティングではロケールを1回だけ列挙します。プロキシ(Next.js 16より前はmiddleware.tsと呼ばれていました)は、訪問者を言語の接頭辞付きのパスにリダイレクトします。

src/i18n/request.ts

[locale]セグメントからロケールを読み取り、未知のロケールは拒否して、その言語のメッセージを読み込みます。

next.config.ts、レイアウト、ページ

プラグインがrequest.tsを結びつけます。ページをapp/[locale]/の下に移動し、useTranslationsでメッセージを読み込みます。next/root-paramsはNext.js 16.3からデフォルトで有効で、それより前のバージョンではexperimental.rootParamsが必要です。

ライブラリを使わない書式設定

素のJavaScriptでのIntl

翻訳の有無にかかわらず、どんなReactアプリでも使えます。

検索エンジンが確認するhreflangのルール

言語の指定を正しく行う

試してみよう:1枚のカードを5つの言語で

言語を切り替え、商品の数を変えてみてください。文字列はメッセージオブジェクトから、価格、日付、複数形はブラウザーのIntlのAPIから取得しています。

言語

カート内の商品数:{n}

選ばれた複数形のカテゴリー:

向き:

このデモは通貨を換算しません。同じ数値を書式設定しているだけです。

hreflangジェネレーター

ドメイン、ページのパス、言語コードを入力すると、head用のlinkタグ、またはNext.jsのalternatesオブジェクトを取得できます。

ドメイン

ページのパス

言語コード(カンマ区切り)

x-defaultの言語

無効なコードをスキップしました:{codes}。deやen-GBのような形式を使ってください。

出力形式

HTMLのlinkタグ

Next.jsのmetadata

コピー

無料で始める · クレジットカード不要

関連: ガイド|Webマーケティングと集客を学ぶ

製品

ご利用いただける方

機能

リソース

会社情報

サイトマップを見る