概要
Next.js
で多言語対応を行う際、next-i18next
は非常に便利なライブラリです。このツールを使うことで、翻訳管理や自動言語切り替えが簡単に行えるようになります。国際化対応はユーザーエクスペリエンスの向上や、グローバルな市場への展開に欠かせません。この記事では、next-i18nextを使ってNext.js
アプリケーションに多言語対応を実装する方法を解説します。
必要な依存関係のインストール
まず、必要なパッケージをインストールします。next-i18next
は、i18next
とreact-i18next
も必要なので、一緒にインストールします。
npm install next-i18next i18next react-i18next
設定ファイルの追加
次に、プロジェクトのルートディレクトリにnext-i18next.config.js
を作成し、サポートするロケール(言語)やデフォルトのロケールを定義します。
// next-i18next.config.js
module.exports = {
i18n: {
locales: ['en', 'fr', 'es'], // 対応する言語
defaultLocale: 'en', // デフォルトの言語
},
};
これをnext.config.js
に追加して、多言語対応を有効にします。
// next.config.js
const { i18n } = require('./next-i18next.config');
module.exports = { i18n };
翻訳ファイルの作成
次に、翻訳データを保存するフォルダを作成します。public/locales
ディレクトリ内に各ロケールごとのJSONファイルを用意します。
public/
locales/
en/
common.json
fr/
common.json
es/
common.json
common.json
には、ページ全体で使用するテキストを定義します。
{
"welcome": "Welcome",
"goodbye": "Goodbye"
}
_app.jsとページでの設定
アプリ全体で翻訳を利用するために、_app.js
を更新して、appWithTranslation
でラップします。
// pages/_app.js
import { appWithTranslation } from 'next-i18next';
function MyApp({ Component, pageProps }) {
return <Component {...pageProps} />;
}
export default appWithTranslation(MyApp);
翻訳の使用
コンポーネント内でuseTranslation
フックを使って、翻訳を表示します。
// components/Hello.js
import { useTranslation } from 'next-i18next';
const Hello = () => {
const { t } = useTranslation('common');
return <h1>{t('welcome')}</h1>;
};
export default Hello;
サーバーサイド翻訳の処理
getStaticProps
やgetServerSideProps
を使用して、ページコンポーネントにサーバーサイド翻訳を適用します。
// pages/index.js
import { serverSideTranslations } from 'next-i18next/serverSideTranslations';
export async function getStaticProps({ locale }) {
return {
props: {
...(await serverSideTranslations(locale, ['common'])),
},
};
}
export default function Home() {
return <Hello />;
}
ロケール切り替え機能の追加
言語を切り替えるためのスイッチャーを作成します。useRouter
を使ってロケールを変更します。
// components/LocaleSwitcher.js
import { useRouter } from 'next/router';
const LocaleSwitcher = () => {
const { locale, locales, push } = useRouter();
const handleLocaleChange = (lng) => {
push('/', '/', { locale: lng });
};
return (
<div>
{locales.map((lng) => (
<button key={lng} onClick={() => handleLocaleChange(lng)}>
{lng}
</button>
))}
</div>
);
};
export default LocaleSwitcher;
まとめ
next-i18nextを使うことで、Next.js
アプリケーションに簡単に多言語対応を追加できます。ロケールの管理、翻訳ファイルの読み込み、サーバーサイドでの翻訳サポートも自動化されており、スムーズな国際化対応が可能です。これにより、グローバルなユーザーに向けて最適化されたアプリケーションを提供することができます。