0Pricing
React Academy · レッスン

言語切り替えと翻訳の遅延ロード

localeの切り替えを実装し、初期サイズを抑えるために翻訳bundleを必要に応じて読み込みます。

「言語切り替えと翻訳の遅延ロード」はCoddyKit上の無料React Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはReact Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 React Academyコースには全4レッスンが含まれています。

ようこそ

このレッスンでは、言語スイッチャーコンポーネントを作成し、i18nextが必要なときに翻訳バンドルを読み込むよう設定します。これにより、初期JavaScriptペイロードを削減できます。

シンプルな言語スイッチャー

ボタンのクリック時にi18n.changeLanguage()を呼び出して、アクティブな言語を切り替えます。useTranslationを使用しているすべてのコンポーネントが、新しい言語で自動的に再レンダリングされます。
function LanguageSwitcher() {
  const { i18n } = useTranslation();
  return (
    <div>
      {['en', 'tr', 'fr'].map(lng => (
        <button
          key={lng}
          onClick={() => i18n.changeLanguage(lng)}
          style={{ fontWeight: i18n.language === lng ? 'bold' : 'normal' }}
        >
          {lng.toUpperCase()}
        </button>
      ))}
    </div>
  );
}

言語選択の永続化

選択した言語をlocalStorageに保存すると、ページを再読み込みしても選択が維持されます。LanguageDetectorプラグインで`localStorage`の検出順序を指定すると、この処理を自動化できます。
i18n.init({
  detection: {
    order: ['localStorage', 'navigator'],
    caches: ['localStorage'],
  },
});

翻訳を遅延読み込みする理由

すべての翻訳をJavaScriptバンドルに含めると、初期読み込み時間が増加します。遅延読み込みを使用すると、初回読み込みではデフォルト言語だけを送信し、ユーザーが切り替えたときにのみ他の言語を取得できます。

HTTPバックエンドの設定

i18next-http-backendプラグインは、URLパターンから翻訳ファイルを取得します。翻訳ファイルは`public/`フォルダーに配置し、静的アセットとして配信します。サーバー側のコードは必要ありません。
import Backend from 'i18next-http-backend';

i18n.use(Backend).init({
  backend: {
    loadPath: '/locales/{{lng}}/{{ns}}.json',
  },
  ns: ['common', 'auth'],
  defaultNS: 'common',
});

翻訳ファイルの追加

`public/locales/`に、言語と名前空間の組み合わせごとに1つのJSONファイルを作成します。HTTPバックエンドは、その言語または名前空間が初めて必要になったときに自動的にファイルを取得します。
public/locales/
  en/common.json
  en/auth.json
  tr/common.json
  tr/auth.json

言語切り替え中の読み込み状態の表示

changeLanguage()を呼び出すと、i18nextは新しい言語のファイルを非同期で読み込みます。`i18n.on('languageChanged')`イベントを購読するか、`i18n.isInitialized`を確認して読み込みスピナーを表示します。
const [switching, setSwitching] = useState(false);

const change = async (lng) => {
  setSwitching(true);
  await i18n.changeLanguage(lng);
  setSwitching(false);
};

特定の名前空間の遅延読み込み

`i18n.loadNamespaces(['dashboard'])`を使用すると、初めて必要になったときに名前空間を読み込めます。ダッシュボードのルートがマウントされたときにuseEffect内で呼び出すと、認証されていないユーザーには読み込まずに済みます。
useEffect(() => {
  i18n.loadNamespaces('dashboard');
}, []);

翻訳用CDN

本番環境では、翻訳ファイルをCDN(S3 + CloudFront)に配置します。`loadPath`をCDNのURLに更新すると、翻訳の更新とコードのデプロイを分離できます。
backend: {
  loadPath: 'https://cdn.example.com/locales/{{lng}}/{{ns}}.json',
}

URL内のロケール

多くのアプリでは、URLにロケールを含めます(例:/en/products、/tr/products)。React Routerとi18nを組み合わせ、URLパラメーターからロケールを読み取り、changeLanguageを呼び出し、ユーザーが切り替えたときにURLを更新します。

確認

i18next-http-backendプラグインは何をしますか?

まとめ

i18n.changeLanguage()を使用して言語スイッチャーを作成します。localStorage検出機能で選択を永続化します。i18next-http-backendを使用して翻訳ファイルを遅延読み込みします。言語の切り替え中は読み込み状態を表示します。本番環境ではファイルをCDNに配置します。

コース完了

おめでとうございます!**Reactにおける国際化(i18n)**を修了しました。これでreact-i18nextを設定し、名前空間を使って文字列を翻訳し、複数形と補間を扱い、翻訳ファイルを遅延読み込みできるようになりました。

よくある質問

「言語切り替えと翻訳の遅延ロード」レッスンは無料ですか?

はい。「言語切り替えと翻訳の遅延ロード」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、React Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 React Academyコースには全4レッスンが含まれています。

「言語切り替えと翻訳の遅延ロード」で何を学びますか?

localeの切り替えを実装し、初期サイズを抑えるために翻訳bundleを必要に応じて読み込みます。 ブラウザで直接実行するハンズオンコードでReact Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

React Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのReact Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「言語切り替えと翻訳の遅延ロード」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このReact Academyレッスンでコードを書いて実行できますか?

はい。すべてのReact Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. react-i18nextのセットアップ
  2. useTranslation Hookの使い方
  3. 複数形とInterpolation
  4. 言語切り替えと翻訳の遅延ロード
← React Academyに戻る