概要
Next.js
アプリケーションで、アラビア語やヘブライ語など右から左に読む言語(RTL)への対応は、グローバルユーザーに向けた重要な機能です。本記事では、Next.js
でnext-i18next
とCSSの設定を使って、簡単にRTL対応を実装する方法を解説します。
RTL対応の基本設定
まず、HTMLのdir
属性を使ってテキストの方向を制御します。dir="rtl"
を使えば、ページ全体や特定の要素にRTLを適用できます。
import { useRouter } from 'next/router';
import { useEffect } from 'react';
function MyApp({ Component, pageProps }) {
const { locale } = useRouter();
useEffect(() => {
const dir = locale === 'ar' ? 'rtl' : 'ltr';
document.documentElement.setAttribute('dir', dir);
}, [locale]);
return <Component {...pageProps} />;
}
export default MyApp;
このコードでは、ユーザーの言語設定に応じてdir
属性を動的に変更します。
next-i18nextを使った多言語対応
Next.js
での多言語対応には、next-i18next
を使用します。RTL対応の言語(例: アラビア語)を設定し、翻訳ファイルを用意します。public/locales
ディレクトリに言語ごとの翻訳ファイルを配置し、次のように設定します。
// next-i18next.config.js
module.exports = {
i18n: {
locales: ['en', 'ar'],
defaultLocale: 'en',
},
};
これにより、ユーザーの選択した言語に応じたテキストが表示され、RTL言語が自動的に右から左にレイアウトされます。
Tailwind CSSによるRTLサポート
Tailwind CSS
を使用している場合、v3.3.0以降ではRTLサポートが組み込まれており、rtl
クラスでレイアウトを簡単に変更できます。これにより、スタイルの方向(margin、paddingなど)が自動的にRTLに適応します。
<html dir="rtl">
<div class="rtl:bg-gray-200 rtl:text-right">
<!-- RTL対応のコンテンツ -->
</div>
</html>
さらに、ms-0
(左マージン)やpe-5
(右パディング)などの論理プロパティを使用することで、左右のレイアウトが適切に反転されます。
ロケール切り替え機能
Next.js
のuseRouter
フックを使って、ユーザーが言語を変更できるスイッチャーを作成します。言語変更に応じて、レイアウトが自動的にRTLに切り替わります。
import { useRouter } from 'next/router';
const LocaleSwitcher = () => {
const { locale, locales, asPath } = useRouter();
return (
<div>
{locales.map((loc) => (
<button key={loc} onClick={() => router.push(asPath, asPath, { locale: loc })}>
{loc}
</button>
))}
</div>
);
};
このようにして、ユーザーが言語を切り替えると同時に、ページ全体のRTL設定が適用されます。
まとめ
Next.js
でのRTL対応は、dir
属性やCSSの論理プロパティを活用することで簡単に実現できます。next-i18next
やTailwind CSSを組み合わせることで、グローバル対応したアプリケーションの構築が効率化されます。適切な設定により、右から左に読む言語も問題なくサポートできるようになります。