RailsのI18nと日付・数値フォーマットを完全ガイド!t・l・number_to_delimitedの実践入門
生徒
「Railsで画面の文字を翻訳したり、日付をきれいに表示したりする方法はありますか?アプリによって表示が違うので混乱してしまって…」
先生
「RailsにはI18nという仕組みがあって、翻訳やフォーマットを統一できます。ビューやテンプレートでもよく使うtメソッドやlメソッド、数値フォーマットを整えるヘルパーなどが揃っていますよ。」
生徒
「I18nって聞いたことはあるんですが難しそうです。日付や数字を見やすくするだけでも使えるんですか?」
先生
「もちろんです。まずは身近な例から実際に試しながら学んでみましょう!」
1. I18nとは?Railsで翻訳やフォーマットを管理する仕組み
I18n(アイ・エイティーン・エヌ)は「internationalization」の略です。単語が長いため、最初と最後の文字の間に18文字あることからI18nと呼ばれています。RailsではI18nが標準機能として組み込まれており、アプリ全体のテキストを共通のファイルで管理できます。
例えばERB・Haml・Slimなどのテンプレートで使われる画面の見出しやボタンの名前を、YAMLファイルにまとめて管理することができます。また日付や数値のフォーマットなども共通化できるため、アプリの見た目がバラバラにならず、ユーザーにとって読みやすい画面作りができます。
翻訳だけではなく、フォーマットの統一にも使えるのがI18nの大きなメリットです。初心者でも「設定ファイルで文字列を管理する仕組み」と理解すれば十分です。
2. tメソッドで画面文言を翻訳しよう(ERB・Haml・Slim共通)
Railsのビューで最もよく使うI18n機能がtメソッドです。YAMLファイルに定義したキーを呼び出すことで画面に文字を表示します。モデル名やボタン名を変更したい場合、テンプレートではなくYAMLファイルを変更するだけで済むため、とても便利です。
<%= t("users.new.title") %>
YAML側は次のように記述します。
ja:
users:
new:
title: "ユーザー登録画面"
この仕組みにより、ERB・Haml・Slimのいずれを使っていても一定の記述で画面文言を管理できます。大規模なRailsアプリほどI18n管理の便利さが際立つため、初心者のうちに慣れておくと後々の開発が楽になります。
3. lメソッドで日付をフォーマットする方法
Railsではlメソッドを使うと、日付や時刻を読みやすい形に整えることができます。lは「localize(ローカライズ)」の略で、日付のフォーマットをI18nで管理できるようにするためのヘルパーです。
<%= l @user.created_at %>
例えばI18nで次のように設定すると、lメソッドで統一されたフォーマットが使えるようになります。
ja:
time:
formats:
default: "%Y年%m月%d日 %H:%M"
このように設定すると、年月日や時刻がアプリ全体で統一され、テンプレートに複雑な書き方をしなくて済みます。ビューの読みやすさが向上し、パーシャルやレイアウトでも書き間違いが減るメリットがあります。
4. 数値のフォーマットを整えるnumber_to_delimited
大きな数値を読みやすくするために、Railsではnumber_to_delimitedが使えます。例えば10000を「10,000」のように桁区切りで表示できます。金額や数量が登場する画面ではとても役立ちます。
<%= number_to_delimited(1000000) %>
1,000,000
数値フォーマットをテンプレート側で整えると、ERB・Haml・Slimどのテンプレートでも共通の見た目を保てます。Railsには他にもnumber_to_currencyなどの便利なヘルパーがあるため、画面の品質を簡単に上げることができます。
5. I18nとパーシャル・レイアウトの相性が良い理由
Railsのパーシャルやレイアウトを使うと、画面の共通部分を効率的に管理できます。I18nも同様に共通化の仕組みのため、両者は非常に相性が良いです。
例えばヘッダーやフッターにあるメニュー名をtメソッドで管理すれば、テンプレートファイルを触らずに文言だけを変更できます。また日付フォーマットや数値フォーマットもlメソッドとnumber_to_delimitedを使うだけで統一されるため、パーシャル化したビューでも矛盾のない表示が可能になります。
Railsアプリを長く運用するうえで「画面文言とフォーマットの一元管理」は重要なポイントです。I18nを正しく使えると、画面の種類が増えても品質を保ちながら開発を進められます。
6. 実際の例で学ぶ:ユーザープロフィール画面にI18nを適用する
最後に、実際の画面をイメージしながらI18nとlメソッド・number_to_delimitedを組み合わせて使う例を見てみましょう。プロフィール画面では登録日の表示やフォロー数など、さまざまな数値や日付が登場します。
<h2><%= t("users.profile.title") %></h2>
<p>登録日:<%= l @user.created_at %></p>
<p>フォロワー数:<%= number_to_delimited(@user.followers_count) %></p>
YAMLは次のように設定します。
ja:
users:
profile:
title: "ユーザープロフィール"
このように、ビューのテンプレートは非常にシンプルになり、パーシャルやレイアウトに分割されていても一貫性を保てます。RailsのI18n機能は初心者でも扱いやすく、画面表示の整理に大きく役立つ機能です。