

Railsを勉強中です。scaffoldでフォームを作成し、モデル名のエラー表示を日本語化させたいのですが、  
「Addressを入力してください」「Contentを入力してください」  
という表示でうまくできません。

解決策を教えていただければと思います。

ja.yml

[code]

    ja:
      activerecord:
        models:
          post: 投稿
      attributes:
          post:
      address: メールアドレス
      content: 問い合わせ内容
    
[/code]

_form.html.erb

[code]

    <div class="field">
        <%= f.label :name %>
        <%= f.text_field :name %>
      </div>
    
      <div class="field">
        <%= f.label :address %>
        <%= f.text_field :address %>
      </div>
    
      <div class="field">
        <%= f.label :content %>
        <%= f.text_area :content %>
      </div>
    
      <div class="actions">
        <%= f.submit %>
      </div>
    
[/code]

application.rb

[code]

    config.i18n.default_locale = :ja
    config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
    
[/code]

Gemfile

[code]

    gem 'rails-i18n'
    
[/code]

**追記 10/23**  
インデントはPythonと同じように重要なんですね。  
ja.ymlを以下のようにしたらできました。

[code]

    ja:
      attributes:
        address: メールアドレス
        content: 問い合わせ内容
    
[/code]

ymlの書き方がイマイチ、ピンッときていないのですが、フォームの場合は、上記のような形で決まり文句として覚えるしかないのでしょうか？


CC BY-SA 3.0
2017-10-19T16:57:17.603
38880
2017-10-23T05:57:15.960
2017-10-23T05:57:15.960
25223
25223
question
ruby-on-rails
Ruby on Rails モデルのエラー表示が日本語にならない


ymlはインデント量で構造を表すので、インデント量を以下の通りに修正してみてください。

[code]

    ja:
      activerecord:
        models:
          post: 投稿
        attributes:
          post:
            address: メールアドレス
            content: 問い合わせ内容
    
[/code]

このように書けば`address`や`content`は`ja.activerecord.attributes.post`の配下の値となります。フォームのエラーメッセージはそこを見に行きます。

なお`i18n`は、値の定義がyml内に見つからない場合は、htmlにヒントを出力するようになっています。  
「Addressを入力してください」「Contentを入力してください」の要素をブラウザのインスペクタで確認すると分かると思います。


CC BY-SA 3.0
2017-10-20T08:17:51.147
38903
2017-10-20T08:17:51.147
9608
38880
answer