「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > ルーティングを使用した Next.js の国際化ガイド (i)

ルーティングを使用した Next.js の国際化ガイド (i)

2024 年 7 月 30 日に公開
ブラウズ:968

Guide to Internationalisation (i) in Next.js with Routing

国際化 (i18n) は、エンジニアリングを変更せずに、さまざまな言語や地域に簡単に適応できるようにアプリケーションを設計するプロセスです。この記事では、Next.js アプリケーションで i18n を設定し、next-intl.

を使用して英語とスペイン語を切り替える言語スイッチャーを作成する方法を学びます。

インストール

まず、Next.js での国際化の管理を容易にする next-intl ライブラリをインストールする必要があります。ターミナルで次のコマンドを実行します:

npm install next-intl

プロジェクトの構造

プロジェクトの構造は次のようになります:

├── messages
│   ├── en.json
│   └── es.json
├── next.config.mjs
└── src
    ├── i18n.ts
    ├── middleware.ts
    └── app
        └── [locale]
            ├── layout.tsx
            └── page.tsx

1. 翻訳メッセージの設定

プロジェクトのルートにメッセージ ディレクトリを作成します。このディレクトリ内に、サポートする各言語の JSON ファイルを追加します。

メッセージ/en.json

{
  "greeting": "Hello Codú",
  "farewell": "Goodbye Codú"
}

メッセージ/es.json

{
  "greeting": "Hola Codú",
  "farewell": "Adiós Codú"
}

これらのファイルには、アプリケーションで使用されるフレーズの翻訳が含まれています。

2. Next.jsの構成

next.config.mjs で国際化をサポートするように Next.js を構成します。

next.config.mjs

import { getRequestConfig } from 'next-intl/server';

// List of supported languages
const locales = ['en', 'es'];

export default getRequestConfig(async ({ locale }) => {
  // Validate that the incoming `locale` parameter is valid
  if (!locales.includes(locale)) {
    return { notFound: true };
  }

  return {
    messages: (await import(`./messages/${locale}.json`)).default
  };
});

このファイルは、要求された言語に基づいて正しい翻訳メッセージを読み込むように Next.js を構成します。

3. 国際化ミドルウェア

リダイレクトとデフォルト言語の設定を処理するミドルウェアを作成します。

src/ミドルウェア.ts

import createMiddleware from 'next-intl/middleware';

export default createMiddleware({
  // List of all supported languages
  locales: ['en', 'es'],

  // Default language
  defaultLocale: 'en'
});

export const config = {
  // Only match internationalised pathnames
  matcher: ['/', '/(en|es)/:path*']
};

何も指定されていない場合、このミドルウェアはデフォルト言語へのリダイレクトを処理します。

4. 国際化設定

国際化設定を管理するための構成ファイルを作成します。

src/i18n.ts

import { notFound } from 'next/navigation';
import { getRequestConfig } from 'next-intl/server';

const locales = ['en', 'es'];

export default getRequestConfig(async ({ locale }) => {
  if (!locales.includes(locale as any)) notFound();

  return {
    messages: (await import(`../messages/${locale}.json`)).default
  };
});

このファイルはロケールを検証し、対応するメッセージをロードします。

5. レイアウトとページの設定

国際化をサポートするためにレイアウトとメイン ページを構成します。

src/app/[ロケール]/layout.tsx

import { useLocale } from 'next-intl';
import { ReactNode } from 'react';

export default function Layout({ children }: { children: ReactNode }) {
  const locale = useLocale();
  return (
    
      {children}
    
  );
}

src/app/[ロケール]/page.tsx

import { useTranslations } from 'next-intl';

export default function Page() {
  const t = useTranslations();
  return (
    

{t('greeting')}

{t('farewell')}

); }

これらのファイルは、翻訳を使用するためのレイアウトとメイン ページを構成します。

6. 言語スイッチャーの作成

最後に、英語とスペイン語を切り替える言語スイッチャーを作成します。

src/app/[ロケール]/switcher.tsx

'use client';

import { useLocale } from 'next-intl';
import { useRouter } from 'next/navigation';
import { ChangeEvent, useTransition } from 'react';

export default function LocalSwitcher() {
  const [isPending, startTransition] = useTransition();
  const router = useRouter();
  const localActive = useLocale();

  const onSelectChange = (e: ChangeEvent) => {
    const nextLocale = e.target.value;
    startTransition(() => {
      router.replace(`/${nextLocale}`);
    });
  };

  return (
    
  );
}

このコンポーネントを使用すると、ユーザーはインターフェイス言語を変更できます。

結論

これらの手順により、Next.js アプリケーションで国際化が正常に設定され、英語とスペイン語を切り替える言語スイッチャーが作成されました。これにより、アプリケーションが複数の言語をサポートし、ローカライズされたユーザー エクスペリエンスを提供できるようになります。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/adrianbailador/guide-to-internationalisation-i18n-in-nextjs-with-routing-3kje?1 侵害がある場合は、削除するために[email protected]に連絡してください。それ
最新のチュートリアル もっと>
  • OpenTelemetry: トレース、メトリカ、ログ、荷物
    OpenTelemetry: トレース、メトリカ、ログ、荷物
    分散アーキテクチャの進歩とマイクロサービスの使用の増加に伴い、従来のアプリケーション監視ではもはや十分ではありません。メトリクスやログを単独でキャプチャするだけのツールでは、複雑なシステムの動作を完全に把握することはできません。このような状況において、OpenTelemetry が堅牢なソリューショ...
    プログラミング 2024 年 11 月 2 日に公開
  • Git LFS を使用して大きなファイルを Git リポジトリにプッシュする方法
    Git LFS を使用して大きなファイルを Git リポジトリにプッシュする方法
    最近、高解像度のアセットを扱う必要があるプロジェクトに取り組んでいましたが、その結果、サイズが大きくなってしまいました。ファイルをリポジトリにプッシュできませんでした。試行すると必ず次のエラーが表示されました: リモート: エラー: ファイル file.csv は 182.47 MB​​ です。これ...
    プログラミング 2024 年 11 月 2 日に公開
  • return ステートメントの配置は For ループの機能にどのような影響を与えますか?
    return ステートメントの配置は For ループの機能にどのような影響を与えますか?
    For ループ内の Return ステートメントの配置この特定のケースでは、make_list 関数内に return ステートメントを配置すると、プログラムの意図した機能が妨げられます。 。 return ステートメントは、for ループ内ではなく、関数の最後に配置する必要があります。for ルー...
    プログラミング 2024 年 11 月 2 日に公開
  • もうプレプテンバーですか?
    もうプレプテンバーですか?
    皆さんおはようございます、MonDEV おめでとうございます ☕ 私たちは本格的に戻ってきており、9 月に PC に戻るのが良い理由の 1 つはプレプテンバーです! 初期の頃からニュースレターをフォローしている人や、オープンソースの世界をフォローしている人はすでに知っていると思いますが、10 月には...
    プログラミング 2024 年 11 月 2 日に公開
  • 間違って配置された return ステートメントが for ループ内でプログラムの早期終了を引き起こすのはなぜですか?
    間違って配置された return ステートメントが for ループ内でプログラムの早期終了を引き起こすのはなぜですか?
    for ループの Return ステートメントが間違っているこのプログラミングの問題では、ユーザーは 3 匹の動物に対するユーザー入力を可能にするプログラムを作成する際に困難に遭遇します。 。このプログラムは、名前、動物の種類、年齢を含むペット オブジェクトをリストに追加するように設計されています。...
    プログラミング 2024 年 11 月 2 日に公開
  • 項目 他の型の方が適している場合は文字列を避ける
    項目 他の型の方が適している場合は文字列を避ける
    1.他のデータ型の代わりに文字列を使用することは避けてください: 文字列はテキストを表すように設計されていますが、数値、列挙型、または集合構造を表すために誤用されることがよくあります。 データが本質的に数値である場合は、String. ではなく、int、float、BigInteger などの型を...
    プログラミング 2024 年 11 月 2 日に公開
  • sync.WaitGroup を使用して Go 同時実行でデッドロックを防ぐ方法
    sync.WaitGroup を使用して Go 同時実行でデッドロックを防ぐ方法
    ゴルーチンのデッドロックの解決このシナリオでは、Go 同時実行コードでデッドロック エラーが発生しました。問題を詳しく調べて、効率的な解決策を提供しましょう。このエラーは、プロデューサとコンシューマの動作の不一致が原因で発生します。プロデューサー関数に実装されたプロデューサーは、限られた期間、チャネ...
    プログラミング 2024 年 11 月 2 日に公開
  • テキスト ファイル内の Unicode テキストを処理する方法: エラーのない書き込みのための完全ガイド
    テキスト ファイル内の Unicode テキストを処理する方法: エラーのない書き込みのための完全ガイド
    テキスト ファイル内の Unicode テキスト: エラーのない記述のための包括的なガイドGoogle ドキュメントから抽出されたデータのコーディングは、特に困難な場合があります。 HTML で使用するために変換する必要がある非 ASCII シンボルが見つかった場合。このガイドでは、Unicode ...
    プログラミング 2024 年 11 月 2 日に公開
  • EchoAPI と不眠症: 実践例による包括的な比較
    EchoAPI と不眠症: 実践例による包括的な比較
    フルスタック開発者として、私は API のデバッグ、テスト、文書化のための一流のツールを用意することがいかに重要であるかを知っています。 EchoAPI と Insomnia は 2 つの傑出したオプションであり、それぞれに独自の特徴と機能があります。これらのツールについて説明し、その機能と利点を比...
    プログラミング 2024 年 11 月 2 日に公開
  • 移動時間と所要時間 |プログラミングチュートリアル
    移動時間と所要時間 |プログラミングチュートリアル
    導入 このラボは、Go の時間と期間のサポートについての理解をテストすることを目的としています。 時間 以下のコードには、Go で時間と期間を操作する方法の例が含まれています。ただし、コードの一部が欠落しています。あなたの仕事は、コードを完成させて期待通りに動作させ...
    プログラミング 2024 年 11 月 2 日に公開
  • ホイスティングにおける面接の質問と回答
    ホイスティングにおける面接の質問と回答
    1. JavaScript におけるホイスティングとは何ですか? 答え: ホイスティングは、変数や関数にメモリが割り当てられる実行コンテキストの作成フェーズ中のプロセスです。このプロセス中に、変数用のメモリが割り当てられ、変数には未定義の値が割り当てられます。関数の場合、関数定義全...
    プログラミング 2024 年 11 月 2 日に公開
  • JavaScript のドキュメント オブジェクト モデル (DOM) を理解する
    JavaScript のドキュメント オブジェクト モデル (DOM) を理解する
    こんにちは、素晴らしい JavaScript 開発者の皆さん? ブラウザは、スクリプト (特に JavaScript) が Web ページのレイアウトと対話できるようにするドキュメント オブジェクト モデル (DOM) と呼ばれるプログラミング インターフェイスを提供します。 We...
    プログラミング 2024 年 11 月 2 日に公開
  • SPRING BATCH でプログラミングを始める
    SPRING BATCH でプログラミングを始める
    Introduction Dans vos projets personnels ou professionnels, Il vous arrive de faire des traitements sur de gros volumes de données. Le traite...
    プログラミング 2024 年 11 月 2 日に公開
  • CSS で Github プロフィールを目立たせる
    CSS で Github プロフィールを目立たせる
    これまで、Github プロフィールをカスタマイズできる唯一の方法は、写真を更新するか名前を変更することでした。これは、すべての Github プロファイルが同じに見え、カスタマイズしたり目立たせるためのオプションが最小限であることを意味しました。 それ以来、Markdown を使用してカスタム セ...
    プログラミング 2024 年 11 月 2 日に公開
  • TypeScript ユーティリティの種類: コードの再利用性の向上
    TypeScript ユーティリティの種類: コードの再利用性の向上
    TypeScript は、開発者が型を効果的に変換および再利用できるようにする組み込みのユーティリティ型を提供し、コードをより柔軟で ​​DRY にします。この記事では、TypeScript スキルを次のレベルに引き上げるのに役立つ、Partial、Pick、Omit、Record などの主要なユー...
    プログラミング 2024 年 11 月 2 日に公開

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3