JavaScriptの国際化(i18n)ライブラリと多言語対応の基本

先生

グローバル対応は当たり前!JavaScriptのi18nライブラリで、あなたのWebアプリを世界へ🚀

JavaScript国際化(i18n)の重要性とライブラリ選定

JavaScriptでウェブアプリケーションを開発する際、国際化(i18n、Internationalization)は、より多くのユーザーにリーチするために不可欠な要素です。異なる言語や地域に対応することで、ユーザーエクスペリエンスを向上させ、グローバルな展開を支援します。

国際化とは、ソフトウェアを特定の言語や地域に依存しないように設計することであり、ローカライゼーション(l10n、Localization)とは、国際化されたソフトウェアを特定の言語や地域に合わせて調整することです。JavaScriptでは、これらのプロセスを支援する様々なライブラリが存在します。

代表的なi18nライブラリとしては、以下のようなものがあります。

* i18next: 高機能で柔軟性が高く、大規模なプロジェクトに適しています。豊富なプラグインと多言語対応が特徴です。

* FormatJS: Yahoo!によって開発されたライブラリで、Reactとの連携が容易です。メッセージフォーマット、日付、数値のローカライズ機能を提供します。

* Globalize: jQueryのライブラリで、日付、数値、通貨のフォーマット、カレンダーのローカライズに優れています。

ライブラリ選定の際には、プロジェクトの規模、必要な機能、フレームワークとの相性などを考慮することが重要です。

i18nextを使った多言語対応の基本

ここでは、i18nextを使ってJavaScriptアプリケーションを多言語対応させる基本的な方法を解説します。

まず、i18nextをインストールします。npmを使用する場合は、以下のコマンドを実行します。

npm install i18next i18next-browser-languagedetector i18next-http-backend

次に、i18nextの設定を行います。通常、i18n.jsのようなファイルを作成し、初期化処理を記述します。

import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';
import Backend from 'i18next-http-backend';
import LanguageDetector from 'i18next-browser-languagedetector';

i18n
  .use(Backend)
  .use(LanguageDetector)
  .use(initReactI18next)
  .init({
    fallbackLng: 'en',
    debug: true,
    interpolation: {
      escapeValue: false, // not needed for react as it escapes by default
    }
  });

export default i18n;

上記のコードでは、fallbackLngでデフォルトの言語を設定し、debugでデバッグモードを有効にしています。interpolationでは、エスケープ処理を無効化しています(Reactではデフォルトでエスケープされるため)。

i18next-http-backendは、翻訳ファイルをHTTP経由でロードするために使用します。i18next-browser-languagedetectorは、ブラウザの言語設定を自動的に検出するために使用します。

翻訳ファイルは、JSON形式で保存します。例えば、locales/en/translation.jsonというファイルを作成し、英語の翻訳を記述します。

{
  "greeting": "Hello, world!",
  "welcome": "Welcome to our website!"
}

同様に、locales/ja/translation.jsonを作成し、日本語の翻訳を記述します。

{
  "greeting": "こんにちは、世界!",
  "welcome": "当ウェブサイトへようこそ!"
}

アプリケーションで翻訳を使用するには、useTranslationフックを使用します(Reactの場合)。

import { useTranslation } from 'react-i18next';
function MyComponent() {
  const { t, i18n } = useTranslation();
  return (
    <div>
      <h1>{t('greeting')}</h1>
      <p>{t('welcome')}</p>
      <button onClick={() => i18n.changeLanguage('ja')}>日本語</button>
      <button onClick={() => i18n.changeLanguage('en')}>English</button>
    </div>
  );
}

上記のコードでは、t関数を使って翻訳キーに対応するテキストを取得しています。i18n.changeLanguage関数を使って言語を切り替えることができます。

日付、数値、通貨のローカライズ

i18nライブラリは、日付、数値、通貨のローカライズもサポートしています。これらのローカライズは、地域によってフォーマットが異なるため、適切に処理する必要があります。

FormatJSを使用すると、日付や数値を簡単にローカライズできます。例えば、日付をローカライズするには、FormattedDateコンポーネントを使用します(Reactの場合)。

import { FormattedDate } from 'react-intl';
function MyComponent() {
  const date = new Date();
  return (
    <div>
      <FormattedDate value={date} year="numeric" month="long" day="numeric" />
    </div>
  );
}

上記のコードでは、year, month, dayオプションを使って日付のフォーマットを指定しています。localeオプションを使って、特定の地域のフォーマットを指定することもできます。

数値をローカライズするには、FormattedNumberコンポーネントを使用します。

import { FormattedNumber } from 'react-intl';
function MyComponent() {
  const number = 1234567.89;
  return (
    <div>
      <FormattedNumber value={number} style="currency" currency="USD" />
    </div>
  );
}

上記のコードでは、styleオプションをcurrencyに設定し、currencyオプションで通貨を指定しています。

参考リンク

まとめ

JavaScriptの国際化は、グローバルなウェブアプリケーション開発において重要な要素です。i18nextやFormatJSなどのライブラリを活用することで、多言語対応を効率的に実現できます。日付、数値、通貨のローカライズも忘れずに行い、ユーザーエクスペリエンスを向上させましょう。