0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【React】react-i18nextで英語切り替え対応を実装する方法

Posted at

はじめに

こんにちは。アメリカ在住で独学エンジニアを目指している Taira です。
今回は、Reactアプリで英語/日本語の切り替え対応を実装する方法を紹介します。

Reactでアプリを作っていると、

「英語でも使えるようにしたい」
「文言をコード内にベタ書きしたくない」

と感じることはありませんか?

そんなときに役立つのが、react-i18next というライブラリです。
i18next は国際化対応(Internationalization)の定番ツールで、Reactでも簡単に導入できます。


🌍 i18n(国際化)とは?

i18n は “internationalization” の略で、
「i」と「n」の間に18文字あることからこのように略されています。

要するに「アプリを多言語対応させる仕組み」のことです。

たとえば:

<p>{t('welcome_message')}</p>

というように t() 関数で文言キーを呼び出すだけで、
アプリ全体の文言を簡単に切り替えられます。


⚙️ 環境構築とインストール

今回は Vite + React 19 環境を前提に進めます。
(すでにReact環境がある方はそのままでOKです)

まずはライブラリをインストールします。

npm install react-i18next i18next --save

📁 ディレクトリ構成の例

src/
 ├── i18n.js
 ├── locales/
 │    ├── en/translation.json
 │    └── ja/translation.json
 └── App.jsx

🗂 1. JSONファイルで翻訳文を定義する

まずは、翻訳用のJSONファイルを用意します。

src/locales/ja/translation.json

{
  "welcome": "ようこそ!",
  "description": "これは日本語のサンプルです。"
}

src/locales/en/translation.json

{
  "welcome": "Welcome!",
  "description": "This is a sample in English."
}

これで文言を「コードから分離して管理」できるようになります。
後から文言を修正するときにも便利ですね。


⚙️ 2. i18n設定ファイルを作成する

次に、Reactでi18nextを初期化する設定ファイルを作ります。

src/i18n.js

import i18n from "i18next";
import { initReactI18next } from "react-i18next";
import ja from "./locales/ja/translation.json";
import en from "./locales/en/translation.json";

i18n
  .use(initReactI18next)
  .init({
    resources: {
      ja: { translation: ja },
      en: { translation: en },
    },
    lng: "ja", // 初期表示の言語
    fallbackLng: "ja", // 翻訳がない場合に使う言語
    interpolation: { escapeValue: false },
  });

export default i18n;

⚙️ 3. アプリに設定を読み込む

Reactアプリ全体で i18n を使えるようにします。

src/main.jsx

import React from 'react'
import ReactDOM from 'react-dom/client'
import App from './App'
import './i18n' // ←これを追加!

ReactDOM.createRoot(document.getElementById('root')).render(
  <React.StrictMode>
    <App />
  </React.StrictMode>,
)

🌏 4. 言語切り替えボタンを実装する

実際にボタンで日本語⇄英語を切り替えられるようにします。

src/App.jsx

import { useTranslation } from "react-i18next";

function App() {
  const { t, i18n } = useTranslation();

  const changeLanguage = (lang) => {
    i18n.changeLanguage(lang);
  };

  return (
    <div style={{ textAlign: "center", marginTop: "50px" }}>
      <h1>{t("welcome")}</h1>
      <p>{t("description")}</p>
      <div style={{ marginTop: "20px" }}>
        <button onClick={() => changeLanguage("ja")}>日本語</button>
        <button onClick={() => changeLanguage("en")} style={{ marginLeft: "10px" }}>
          English
        </button>
      </div>
    </div>
  );
}

export default App;

💡 実行結果

初期状態では日本語で表示され、
「English」ボタンを押すと、文言がすべて英語に切り替わります。

日本語表示 英語表示
ようこそ! / これは日本語のサンプルです。 Welcome! / This is a sample in English.

🧮 よくあるエラーと対処法

エラー内容 原因 対処法
t is not a function i18nの初期化が正しく読み込まれていない main.jsximport './i18n'を追加する
切り替えが反映されない JSONのキーが不一致 各言語でキー名を統一する
英語表示にならない fallbackLngja固定になっている lngの初期値をenに変更して確認する

🧠 補足:翻訳ファイルを増やすには?

もし他の言語(例:フランス語)を追加したい場合は、
locales/fr/translation.json を作って以下を追記するだけです「

import fr from "./locales/fr/translation.json";

resources: {
  ja: { translation: ja },
  en: { translation: en },
  fr: { translation: fr },
},

🚀 まとめ

  • react-i18next を使うと、Reactアプリを簡単に多言語対応できる
  • 翻訳文を JSONファイルで管理 できるので、保守性が高い
  • t() 関数で文言を呼び出し、i18n.changeLanguage() で切り替えるだけ

📚 参考リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?