Simple Calendar は Rails アプリケーション向けに設計された軽量なカレンダー gem であり、直感的な日表示機能を提供します。グローバルなユーザーベースを持つアプリケーションでは、多言語対応(i18n)の実装が不可欠です。本稿では、Simple Calendar に対して多言語サポートを設定し、ローカリゼーションのベストプラクティスを適用する方法について解説します。
Rails I18n フレームワークの仕組み
Simple Calendar の多言語機能は、Rails 標準の I18n フレームワークに依存しています。これにより、翻訳ファイルの管理、ロケールの切り替え、日時フォーマットの定義などを統一的に扱えます。
翻訳ファイルの構成
翻訳データは config/locales ディレクトリ配下に配置します。例えば、フランス語を追加する場合は fr.yml を作成します。
config/locales/fr.yml
ファイル内容は YAML 形式で記述し、以下のようにキーを定義します。
fr:
simple_calendar:
previous: "Précédent"
next: "Suivant"
month: "Mois"
week: "Semaine"
day: "Jour"
today: "Aujourd'hui"
アプリケーション設定
デフォルトのロケールを config/application.rb で指定します。
config.i18n.default_locale = :ja
動的な言語切り替え
コントローラー内で言語パラメータに基づきロケールを変更する処理を実装します。
def configure_language
I18n.locale = params[:lang] || I18n.default_locale
end
日時フォーマットのローカリゼーション
翻訳ファイル内で日時フォーマットを定義することで、地域に適した表示が可能になります。
ja:
date:
formats:
default: "%Y/%m/%d"
long: "%Y 年 %m 月 %d 日"
time:
formats:
default: "%Y/%m/%d %H:%M"
実装上の注意点
ハードコーディングの回避
ビューファイル内のテキストは、すべて I18n ヘルパーを通じて取得するようにします。
<!-- 推奨 -->
<%= t('simple_calendar.previous') %>
<!-- 非推奨 -->
Previous
複数形の処理
言語によって複数形規則が異なるため、count オプションを利用します。
ja:
message:
one: "メッセージが 1 件あります"
other: "メッセージが %{count} 件あります"
検証方法
翻訳の欠落を確認するには、i18n-tasks gem の利用が有効です。
bundle exec i18n-tasks unused
また、URL にパラメータを追加して各言語での表示動作を検証します。
http://yourapp.com/events?lang=fr