i18nにおけるアイテム渡し

アイテム渡しによって翻訳文を動的に変更でき、DRYにすることができる。

# comments_controller.rb

def update
  if @comment.update(comment_params)
    redirect_to @comment, success: t('defaults.message.updated', item: Comment.model_name.human)
  else
    flash.now['danger'] = t('defaults.message.not_updated', item: Comment.model_name.human)
    render :edit
  end
end

モデル名を動的に変更しているためモデルごとに記述する必要がなくなる

# views/ja.yml
ja:
  default:
    message:
      updated: "%{item}を更新しました"
      not_updated: "%{item}を更新できませんでした"