みるべあのエンジニア日記

勉強したことについてTwitterとガチブログの中間くらいのスタンスで書く日記

Railsのi18nでラベルが日本語で表示されない

前提

Railsガイド見ながら以下のように設定します。

# config/application.rb
module AppName
  class Application < Rails::Application
    # 略
    config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]
    config.i18n.default_locale = :ja
    # 略
  end
end

Userモデルの翻訳ファイルは以下のとおりです。

# config/locales/models/user/ja.yml
ja:
  activerecord:
    models:
      user: ユーザー
    attributes:
      user:
        email: メールアドレス
        password: パスワード

以上が終わったらRailsサーバーを再起動しておきます。

今回検証するViewに対応するコントローラーのnewアクションの内容は以下のとおりです。

def new
  @user = User.new
end

日本語訳の検証

よくあるログインフォームを例に見ていきます。
※Slimで書いています。

.signup-form
  = form_with url: auth_login_path, local: true do |f|
      = f.label :email
      = f.email_field :email, placeholder: :email, autofocus: true
      = f.label :password
      = f.password_field :password, placeholder: :password
    .signup-form__submit
      = f.submit 'ログイン'

これでページを表示してみると...

f:id:milkybear814:20200217000124p:plain

おや、ラベルが日本語化されていませんね。
これ、実は form_withmodel を指定していないことが原因のようでした。
model: @user を追加します。

.signup-form
  = form_with model: @user, url: auth_login_path, local: true do |f|
    .signup-form__input
      = f.label :email
      = f.email_field :email, placeholder: :email, autofocus: true
      = f.label :password
      = f.password_field :password, placeholder: :password
    .signup-form__submit
      = f.submit 'ログイン'

f:id:milkybear814:20200217000311p:plain

きちんとメールアドレスとパスワードが日本語化されました! いや〜意外なところでつまづいてしまいました。