👀

rails i18n 変数を確認する

に公開

Railsアプリを一人で開発中です。
パスワードリセット機能を実装しました。
パスワードとパスワード確認が一致しない場合のエラーメッセージを用意しています。
i18nはメッセージ内で変数を使うことができることを知っています。
使うことができる変数の確認方法が分からないので探しました。

I18n.interpolate_hashの中でbinding.pryを止めることで、
確認することができることが分かりました。

def interpolate_hash(string, values)
  pattern = INTERPOLATION_PATTERNS_CACHE[config.interpolation_patterns]
  interpolated = false

  interpolated_string = string.gsub(pattern) do |match|
    interpolated = true

    if match == '%%'
      '%'
    else
      key = ($1 || $2 || match.tr("%{}", "")).to_sym
      binding.pry # <= ここ
string #=> "と%{attribute}の入力が一致しません"
values #=> {:model=>"ユーザー", :attribute=>"パスワード", :value=>"dummy"}

▼ 関連箇所

  • lib/i18n/backend/base.rb:184
  • lib/i18n/interpolate/ruby.rb:23
  • lib/i18n/interpolate/ruby.rb:29

Discussion