next.jsアプリルーターで國際化を?qū)g現(xiàn)するコア方法は、多言語管理のためにNext-intlライブラリを組み合わせることです。まず、next.config.jsでi18nルーティングサポートを構(gòu)成し、ロケール、defaultlocale、locedeTectionを定義します。 2。次のINTLをインストールした後、メッセージディレクトリを作成して各言語にJSONファイルを保存し、WISI18NROUTINGを使用してMiddleware.jsを介した言語プレフィックスルーティングを自動的に処理します。 3.アプリ/layout.tsxでロケールを確認(rèn)し、対応する言語メッセージをロードし、nextIntlClientProviderを使用して翻訳コンテキストを提供します。 4.ユーザートランスル(クライアント)またはget translations(server)を介してコンポーネント內(nèi)の翻訳されたテキストを呼び出します。 5.言語スイッチャーコンポーネントを作成し、ユーザーオーターを使用してPathnameを使用してパスプレフィックスを置き換えて、言語スイッチングを?qū)g現(xiàn)します。これは、Cookieでユーザーの好みを維持するために使用できます。 6. GenerateMetadataのGet Translationsを呼び出して、多言語SEOメタタグを生成します。 7.靜的に生成されたページの場合、GeneratestaticParamsを使用して、各言語のパスを事前に生成します。 8。Next-Intlの使用FormatterとGetFormatterを使用して、日付や數(shù)字などの地域の書式設(shè)定を?qū)g現(xiàn)します。 9.メンテナンスを改善し、単一のファイルが大きすぎることを避けるために、機(jī)能モジュールに従って翻訳ファイルを分割することをお勧めします。このソリューションは、SSR、RSC、およびサーバーのアクションを完全にサポートしており、現(xiàn)在最も安定で柔軟なNext.JS Internationalization Practiceです。

Next.jsのApp Routerは、V13以來、國際化のネイティブサポートを?qū)毪?、多言語のWebサイトの開発をよりシンプルで構(gòu)造化しました。組み込みのnext-intl
スタイルの統(tǒng)合(またはnext-i18next
などのサードパーティライブラリを使用)を使用すると、ルーティングレベルの言語の切り替え、翻訳コンテンツ管理、地域化されたエクスペリエンスを簡単に実現(xiàn)できます。アプリルーターを使用した國際化のためのコアアプローチとベストプラクティス(I18N)は次のとおりです。

?1。next.jsを使用した內(nèi)蔵i18nルーティングサポート
next.jsは、パスプレフィックス( /en/about
、 /zh/about
)に基づいて多言語ルーティングをネイティブにサポートします。 next.config.js
でi18n
フィールドを構(gòu)成する必要があります。
// next.config.js
/** @type {import( 'next')。nextconfig}*/
const nextconfig = {
i18n:{
ロケール:['en'、 'zh'、 'ja']、
defaultlocale: 'en'、
LocaledEtection:true、//ユーザー言語を自動的に検出}、
//その他の構(gòu)成...
};
デフォルトのnextconfigをエクスポートします。
-
locales
:サポートされている言語のリスト。 -
defaultLocale
:デフォルト言語。 -
localeDetection
:ユーザーを優(yōu)先言語に自動的にリダイレクトするかどうか( Accept-Language
ヘッダーに基づく)。
?§:この構(gòu)成はアプリルーターでサポートされていますが、 next-intl
またはrouting
ライブラリを組み合わせて、より柔軟な制御を?qū)g現(xiàn)することをお勧めします。

?2。 next-intl
を使用して完全なi18n(推奨方法)を達(dá)成します
next-intl
、現(xiàn)在最も人気のあるI18Nソリューションであり、現(xiàn)在のアプリルーターでは、Reactサーバーコンポーネントとサーバーアクションとよく互換性があります。
ステップ1:依存関係をインストールします
npm next-intlをインストールします
ステップ2:言語リソースファイルを作成します
プロジェクトでmessages
ディレクトリを作成します。

/メッセージ
en.json
zh.json
ja.json
例: en.json
{
「ようこそ」:「アプリへようこそ!」
「about.title」:「私たちについて」
}
zh.json
{
「ようこそ」:「アプリへようこそ!」
「about.title」:「私たちについて」
}
ステップ3:ミドルウェアを構(gòu)成します
middleware.js
(または.ts
)を作成して、言語を読み取り、リクエストコンテキストを設(shè)定します。
// Middleware.js
「next-intl/middleware」から{withi18nrouting}をインポートします。
デフォルトをエクスポートwithi18nrouting({
ロケール:['en'、 'zh'、 'ja']、
defaultlocale: 'en'、
});
これにより/en/page
および/zh/page
のルーティングマッピングが自動的に処理され、CookieまたはURL優(yōu)先判斷言語がサポートされます。
ステップ4:ルートレイアウトにメッセージをロードします
// app/layout.tsx
'next/navigation'から{notfound}をインポートします。
'next-intl'から{nextintlclientProvider}をインポートします。
'next-intl/server'から{getMessages}をインポートします。
タイプprops = {
子供:React.ReactNode;
パラメーション:{locale:string};
};
デフォルトのアナカイ機(jī)能rootlayoutをエクスポートする({
子供たち、
パラメーション:{locale}、
}:小道具){
//ロケールが有効であることを確認(rèn)しますconst isvalidlocale = ['en'、 'zh'、 'ja']。
if(!isvalidlocale)notfound();
//対応する言語constメッセージのメッセージを読み込む= await getMessages();
戻る (
<html lang = {locale}>
<body>
<nextlclientProviderメッセージ= {メッセージ}>
{子供たち}
</nextintlclientProvider>
</body>
</html>
);
}
ステップ5:コンポーネントで翻訳を使用します
「クライアントの使用」;
'next-intl'から{usetranslations}をインポートします。
デフォルト関數(shù)をエクスポートwelcome(){
const t = usetranslations( 'common');
return <h1> {t( 'welcome')} </h1>;
}
サーバーコンポーネントでも使用できます。
'next-intl/server'から{get Translations}をインポートします。
デフォルトのasync関數(shù)について(){{
const t = await get translations( 'about');
return <h1> {t( 'title')} </h1>;
}
?3。動的言語スイッチング(言語セレクター)
言語スイッチコンポーネントを作成します。
「クライアントの使用」;
{next/navigation 'から{userouter、usepathname}をimport;
'next-intl'から{uselocale}をインポートします。
export function言語スイッチャー(){
const router = userouter();
const pathname = usepathname();
const locale = uselocale();
const spitchto =(newlocale:string)=> {
//現(xiàn)在のパスを/en/pathnameから/zh/pathnameに変換します
router.push(pathname.replace( `/$ {locale}`、 `/$ {newlocale}`));
};
戻る (
<div>
<button onclick = {()=> spitchto( 'en')}>英語</button>
<button onclick = {()=> spitchto( 'zh')}>中國語</button>
<button onclick = {()=> spitchto( 'ja')}>日本人</button>
</div>
);
}
?ヒント: cookies().set('NEXT_LOCALE', 'zh')
、後続のリクエストで読み取ることもできます。
?4。SEOおよびメタタグの多言語サポート
generateMetadata
で翻訳を使用します。
// app/about/page.tsx
'next-intl/server'から{get Translations}をインポートします。
async関數(shù)generatemetadata({params}:{params:{locale:string}}){{params}){
const t = await get Translations({locale:params.locale、namespace: 'bout'});
戻る {
タイトル:t( 'meta.title')、
説明:t( 'meta.description')、
};
}
()についてデフォルト関數(shù)をエクスポート{{
</h1>について<H1>を返します。
}
?5。高度なヒントと予防策
ネストされたルートのI18n :各layout.tsx
がparams.locale
を受信して渡すことを確認(rèn)してください。
靜的生成(SSG)およびISR : generateStaticParams
を使用して、各言語のページを事前に生成します。
export関數(shù)GenerateStaticParams(){
['en'、 'zh'、 'ja']を返します((locale)=>({locale}));
}
日付と數(shù)字のフォーマット: next-intl
useFormatter()
およびServer getFormatter()
を提供し、地域化された形式をサポートします。
const format = useformatter();
Format.Number(1000); //ロケールに従ってミリメートルを表示します
基本的にそれだけです。 next.jsアプリルーターnext-intl
組み合わせは、現(xiàn)在I18Nを?qū)g裝する最も安定した柔軟な方法です。 SSRとRSCをサポートするだけでなく、多言語コンテンツのメンテナンスも促進(jìn)します。構(gòu)造が明確である限り、數(shù)百の翻訳フィールドを維持することは複雑ではありません。
?小さな提案:モジュール( common.json
、 auth.json
、 product.json
など)でmessages
ファイルを分割して、単一のファイルで大きすぎないようにします。
以上がNext.jsアプリルーターのInternationalization(I18N)の詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國語 Web サイトの他の関連記事を參照してください。