TacoTranslate
/
ドキュメント料金
 
記事
5月04日

Next.js アプリの国際化 (i18n) に最適なソリューション

Next.jsアプリケーションを新しい市場へ展開したいですか?TacoTranslateを使えば、Next.jsプロジェクトを驚くほど簡単にローカライズでき、手間をかけずに世界中のユーザーにリーチできます。

Next.js に TacoTranslate を選ぶ理由は?

  • シームレスな統合:Next.js アプリケーション向けに設計されており、TacoTranslate は既存のワークフローに簡単に組み込めます。
  • 文字列の自動収集:JSON ファイルを手動で管理する必要はもうありません。TacoTranslate はコードベースから文字列を自動的に収集します。
  • AI による翻訳:AI の力を活用し、アプリケーションのトーンに合ったコンテキストを考慮した正確な翻訳を提供します。
  • 即時の言語サポート:ワンクリックで新しい言語を追加でき、アプリケーションをグローバルに利用可能にします。

仕組み

世界がますますグローバル化するにつれて、異なる国や文化のユーザーに対応できるアプリケーションを構築することは、ウェブ開発者にとってますます重要になっています。One of the key ways to achieve this is through internationalization (i18n), which allows you to adapt your application to different languages, currencies, and date formats.

このチュートリアルでは、サーバーサイドレンダリングを使用して、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 キーのタブに移動します。read キーを1つ、read/write キーを1つ作成してください。これらを環境変数として保存します。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 オブジェクト、2つ目は TacoTranslate の設定、3つ目は任意の Next.js プロパティです。なお、revalidategetTacoTranslateStaticProps でデフォルト 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: デプロイしてテスト!

これで完了です!Next.js アプリケーションは、Translate コンポーネントに文字列を追加するだけで自動的に翻訳されるようになります。API キーに read/write の権限がある環境だけが、新しい翻訳用文字列を作成できる点にご注意ください。そのような API キーを使用して本番アプリケーションをテストし、新しい文字列を公開前に追加できる、閉鎖された安全なステージング環境を用意することをおすすめします。これにより、誰かがあなたの秘密の API キーを盗むのを防ぎ、関連のない新しい文字列を追加して翻訳プロジェクトが膨れ上がるのを防げます。

Be sure to check out the complete example over at our GitHub profile. There, you’ll also find an example of how to do this using the App Router! If you encounter any problems, feel free to reach out, and we’ll be more than happy to help.

TacoTranslate lets you automatically localize your React applications quickly to and from over 75 languages. Get started today!

提供元: Nattskiftetノルウェー製