TacoTranslate
/
ドキュメント料金
 
チュートリアル
5月04日

Next.js アプリケーションで Pages Router を使用している場合の国際化の実装方法

国際化(i18n)で React アプリをより利用しやすくし、新しい市場にリーチしましょう。

世界がますますグローバル化するにつれて、ウェブ開発者はさまざまな国や文化のユーザーに対応できるアプリケーションを構築することが一層重要になっています。国際化(i18n)はこれを実現する主要な方法のひとつであり、アプリケーションを異なる言語、通貨、日付形式に合わせて調整できるようにします。

このチュートリアルでは、サーバーサイドレンダリングを用いて、React Next.jsアプリケーションに国際化を追加する方法を解説します。 TL;DR: 完全な例はこちらをご覧ください。

このガイドは、Pages Router を使用している Next.js アプリケーション向けです。
もし App Router を使用している場合は、代わりにこちらのガイドをご覧ください。

ステップ 1: i18n ライブラリをインストールする

Next.js アプリケーションで国際化を実装するには、まず i18n ライブラリを選択します。人気のあるライブラリはいくつかあり、例えば next-intl. ただし、この例では TacoTranslate を使用します。

TacoTranslate は最先端の AI を使って文字列を任意の言語に自動翻訳し、JSON ファイルの面倒な管理から解放します。

ターミナルで npm を使ってインストールしましょう:

npm install tacotranslate

ステップ2: 無料のTacoTranslateアカウントを作成してください。

モジュールをインストールしたので、TacoTranslateのアカウント、翻訳プロジェクト、および関連するAPIキーを作成しましょう。ここでアカウントを作成してください。 無料で、クレジットカードの登録は必要ありません。

TacoTranslateのアプリケーションUI内でプロジェクトを作成し、APIキーのタブに移動します。1つの read キーと1つの read/write キーを作成します。それらを環境変数として保存します。read キーは我々が public と呼ぶもので、read/write キーは secret です。例えば、プロジェクトのルートにある .env ファイルに追加できます。

.env
TACOTRANSLATE_PUBLIC_API_KEY=123456
TACOTRANSLATE_SECRET_API_KEY=789010

秘密の read/write API キーをクライアントサイドの本番環境に決して漏らさないでください。

さらに、2つの環境変数を追加します: TACOTRANSLATE_DEFAULT_LOCALETACOTRANSLATE_ORIGIN.

  • TACOTRANSLATE_DEFAULT_LOCALE: デフォルトのフォールバックロケールコード。ここでは例として英語の en を設定します。
  • TACOTRANSLATE_ORIGIN: 文字列が保存される「フォルダ」(例:ウェブサイトの URL)。 オリジンについて詳しくはこちら。
.env
TACOTRANSLATE_DEFAULT_LOCALE=en
TACOTRANSLATE_ORIGIN=your-website-url.com

ステップ3: TacoTranslateの設定

TacoTranslateをアプリケーションに統合するには、先ほどのAPIキーを使ってクライアントを作成する必要があります。たとえば、/tacotranslate-client.jsというファイルを作成します。

/tacotranslate-client.js
const {default: createTacoTranslateClient} = require('tacotranslate');

const tacoTranslate = createTacoTranslateClient({
	apiKey:
		process.env.TACOTRANSLATE_SECRET_API_KEY ??
		process.env.TACOTRANSLATE_PUBLIC_API_KEY ??
		process.env.TACOTRANSLATE_API_KEY ??
		'',
	projectLocale: process.env.TACOTRANSLATE_DEFAULT_LOCALE ?? '',
});

module.exports = tacoTranslate;

まもなく TACOTRANSLATE_API_KEY を自動的に定義します。

クライアントを別ファイルに作成しておくと、後で再利用しやすくなります。次に、カスタムの /pages/_app.tsx を使って、 TacoTranslate プロバイダを追加します。

/pages/_app.tsx
import React from 'react';
import {type AppProps} from 'next/app';
import {type Origin, type Locale, type Localizations} from 'tacotranslate';
import TacoTranslate from 'tacotranslate/react';
import TacoTranslateHead from 'tacotranslate/next/head';
import tacoTranslate from '../tacotranslate-client';

type PageProperties = {
	origin: Origin;
	locale: Locale;
	locales: Locale[];
	localizations: Localizations;
};

export default function App({Component, pageProps}: AppProps<PageProperties>) {
	const {origin, locale, locales, localizations} = pageProps;

	return (
		<TacoTranslate
			client={tacoTranslate}
			origin={origin}
			locale={locale}
			localizations={localizations}
		>
			<TacoTranslateHead rootUrl="https://your-website.com" locales={locales} />
			<Component {...pageProps} />
		</TacoTranslate>
	);
}

既にカスタムの pageProps および _app.tsx をお持ちの場合は、上記のプロパティとコードで定義を拡張してください。

ステップ4: サーバーサイドレンダリングの実装

TacoTranslate は翻訳のサーバーサイドレンダリングをサポートします。これにより、翻訳されていないコンテンツが一瞬表示される(フラッシュ)ことなく、翻訳済みのコンテンツを即座に表示できるため、ユーザー体験が大幅に向上します。さらに、必要な翻訳は既に用意されているため、クライアント側でのネットワークリクエストを省略できます。

まずは /next.config.js を作成または変更することから始めます。

/next.config.js
const withTacoTranslate = require('tacotranslate/next/config').default;
const tacoTranslateClient = require('./tacotranslate-client');

module.exports = async () => {
	const config = {};

	return withTacoTranslate(config, {
		client: tacoTranslateClient,
		isProduction:
			process.env.TACOTRANSLATE_ENV === 'production' ||
			process.env.VERCEL_ENV === 'production' ||
			(!(process.env.TACOTRANSLATE_ENV || process.env.VERCEL_ENV) &&
				process.env.NODE_ENV === 'production'),
	});
};

設定に合わせて isProduction チェックを変更してください。もし true の場合、TacoTranslate はパブリック API キーを公開します。ローカル、テスト、またはステージング環境の場合(isProduction is false)、新しい文字列が翻訳に送信されるように、秘密の read/write API キーを使用します。

これまでは、Next.js アプリケーションにサポート言語の一覧を設定しただけでした。次に行うのは、すべてのページの翻訳を取得することです。これを行うには、要件に応じて getTacoTranslateStaticProps または getTacoTranslateServerSideProps を使用します。

これらの関数は3つの引数を受け取ります:1つは Next.js Static Props Context オブジェクト、1つは TacoTranslate の設定、そしてオプションの Next.js プロパティです。注意: getTacoTranslateStaticPropsrevalidate はデフォルトで60に設定されているため、翻訳が最新の状態に保たれます。

どちらかの関数をページで使用するには、例えば /pages/hello-world.tsx のようなページファイルがあると仮定します。

/pages/hello-world.tsx
import {Translate} from 'tacotranslate/react';
import getTacoTranslateStaticProps from 'tacotranslate/next/get-static-props';
import tacoTranslateClient from '../tacotranslate-client';

export async function getStaticProps(context) {
	return getTacoTranslateStaticProps(context, {client: tacoTranslateClient});
}

export default function Page() {
	return <Translate string="Hello, world!"/>;
}

これで、すべての React コンポーネント内で文字列を翻訳するために Translate コンポーネントを使用できるはずです。

import {Translate} from 'tacotranslate/react';

function Component() {
	return <Translate string="Hello, world!"/>
}

ステップ5: デプロイしてテスト!

これで完了です!Reactアプリケーションは、Translateコンポーネントに文字列を追加すると自動的に翻訳されるようになります。APIキーにread/write権限がある環境のみが、新しい翻訳対象の文字列を作成できることに注意してください。そのようなAPIキーを使って本番と同様の動作を確認できる、閉鎖された安全なステージング環境を用意し、本番公開前に新しい文字列を追加してテストすることを推奨します。これにより、誰かがあなたの秘密のAPIキーを盗むのを防ぎ、無関係な文字列を追加して翻訳プロジェクトが不必要に膨らむのを防げます。

ぜひ当社のGitHubプロフィールにある完全な例をご覧ください。そこには、App Routerを使った実装例もあります!問題があれば、遠慮なくお問い合わせください。喜んでお手伝いします。

TacoTranslateは、Reactアプリケーションを75以上の言語間で自動的かつ迅速にローカライズできるサービスです。今すぐ始める!

Nattskiftetの製品ノルウェー製