i18nはRailsアプリケーションを多言語対応させることができる便利なgemです。
以前、軽くこちらで紹介しました。
参考:Railsアプリにi18nで多言語の設定をする
i18nは通常の表示部分だけでなく、flashメッセージを多言語化する際にも使えます。
ymlファイルの設定
日本語の単語の定義をconfig/locales/views/users/ja.ymlに設定している場合、例えば、flashメッセージは下記のように記述します。
ja:
users:
new:
form_registration: '登録'
first_name: '姓'
last_name: '名'
mail: 'メールアドレス'
image_file: 'プロフィール画像'
password: 'パスワード'
password_confirmation: 'パスワード(確認)'
login: 'ログイン'
forget_password: 'パスワードをお忘れの方はこちら'
login_link: 'ログインはこちら'
flash:
success: "ユーザー登録が成功しました"
danger: "ユーザー登録失敗"
設定はこれだけです。
controllerからflashメッセージを呼び出す
あとは、controller側で通常のviewファイルでi18nを使う場合と同様に下記のように呼び出すことができます。
def create @user = User.new(user_params) if @user.save flash[:success] = t 'users.flash.success' redirect_to root_path else flash[:danger]= t 'users.flash.danger' render :new end end
viewファイル
ちなみにviewファイルは例えば下記のような感じです。
<% if flash[:success] %> <%= flash[:success] %> <% elsif flash[:danger] %> <%= flash[:danger] %> <% end %>
flashメッセージ内で変数を使う
フラッシュメッセージを変数を使って動的に表現することもできます。
ymlファイルを下記のように定義します。
ja:
boards:
flash:
delete: "%{title}を削除しました"
そして、flashメッセージの呼び出し側で、変数の内容を設定します。
flash[:danger] = t '.flash.delete' ,title: @board.title
これによって、flashメッセージが動的になります。
i18nは多言語サービスを作るときにとても便利です。ぜひ使ってみてください。
Ruby on Railsをこれから本格的に勉強したい人は「エンジニアになるための600時間のプログラミング学習に耐え抜くコツ」という記事がおすすめです。