Railsにはlocale(ロケール)という日本語の文字列を保存できるファイルがあります。
もともとは英語など他の言語と切り替えができるように多言語用としてのファイルですが、日本語の文字列データを保存しておく目的でもよく使われます。
Railsで開発をしていると、このロケールのプロパティの値は何だ?というようにプロパティの値を確認したい場合がでてきます。
ここでは、プロパティの値をコントローラー(controller)、ビュー(view)、Railsコンソールのそれぞれで表示(参照・デバッグ)する方法をまとめています。
localeファイルの中身を確認する方法
locale(ロケール)の指定したプロパティの値を表示する方法には以下の3つの方法があります。
以下でそれぞれの方法を解説します。
Controller(コントローラ)で表示する
デバッグ方法
コントローラの中でロケールに記述したデータを表示するには「pp」を使います。
localeを指定するときに入れ子になっているデータはt('プロパティ名.プロパティ名…')
といったようにプロパティ名をつなげて指定します。
pp t('プロパティ名1.プロパティ名2,,,,')
実例
localeファイルとして、次のようなja.ymlがあるとします。
ja:
test: テスト
xxx:
test: 深いテスト
子の中の「test」と、「xxx」の中の「test」を参照する場合は以下のように記述します。
class TopController < ApplicationController
def index
pp t('test')
pp t('xxx.test')
end
end
保存してページをリロードすると、アプリケーションを起動しているコンソールに変数の中身が表示されます。
注意点
ja.ymlに指定した値が存在しない場合は、translation missing: 入力した値
が表示されます。
pp t('dummy')
pp t('xxx.存在しない')
▼画面の表示
View(ビュー)で表示する
デバッグ方法
View(ビュー)の中でlocaleの値を表示する場合は、<%= %>タグを使って以下のように記述します。
<%= t('プロパティ名') %>
入れ子になっているデータはt('プロパティ名.プロパティ名…')
といったようにプロパティ名をつなげて指定します。
<%= t('プロパティ名1.プロパティ名2,,,,') %>
実例
localeファイルとして、次のようなja.ymlがあるとします。
ja:
test: テスト
xxx:
test: 深いテスト
子の中の「test」と、「xxx」の中の「test」を参照する場合はビューファイルの中で以下のように記述します。
<%= t('test') %>
<%= t('xxx.test') %>
保存してページをリロードすると、記述した場所に指定したlocaleの内容が表示されます。
▼ブラウザの表示
注意点
ja.ymlに指定した値が存在しない場合は、入力した値がそのまま表示されます。(入れ子の場合は末尾のプロパティ名が表示されます。)
<%= t('dummy') %>
<%= t('yyy.存在しない') %>
railsコンソールで表示する
localeファイルの指定したプロパティをrailsコンソール上で表示することもできます。
まずは、railsのコンソールに入ります。
rails c
なお「c」は「console」の略です。
railsコンソールで「I18n」と「tメソッド」を使うと、指定した値を表示することができます。
I18n.t('プロパティ名')
入れ子になっているデータはt('プロパティ名.プロパティ名…')
といったようにプロパティ名をつなげて指定します。
I18n.t('プロパティ名1.プロパティ名2,,,,')
実例
localeファイルとして、次のようなja.ymlがあるとします。
ja:
test: テスト
xxx:
test: 深いテスト
それぞれのプロパティの値をrailsコンソールで表示する場合は以下のようになります。
# rails c
Running via Spring preloader in process 197
Loading development environment (Rails 6.1.3.1)
irb(main):002:0> I18n.t('test')
=> "テスト"
irb(main):001:0> I18n.t('xxx.test')
=> "深いテスト"
注意点
指定した値が存在しない場合
ja.ymlに指定した値が存在しない場合は、translation missing: 入力した値
が表示されます。
localeファイルの内容を修正・変更した場合
localeファイルの内容を修正・変更した場合、変更内容はリアルタイムで反映されません。
このため、後からlocaleのja.ymlを変更した場合は、一旦railsコンソールを「exit
」で抜けて、「rails c
」で再度対話モードに入る必要があります。