rails学習　i18nについて

#i18nについて

>config.i18n.default_locale = :ja

config.i18n.default_locale = :jaをconfig/application.rbに記述することでデフォルトで日本語を使用するようになる。

```ruby:config/application.rb
config.i18n.default_locale = :ja
```

>rails-i18nについて

rails-i18nのgemを導入することである程度基本的な日本語が書いてあるデータが使えるようになる。
※ただしconfig.i18n.default_locale = :jaを書いていないと反映されないので注意が必要

>複数の日本語ファイル(ja.yml)を読み込むことができる方法

```ruby:config/application.rb
 config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]
```
config/applicationに上記のコードを記入することでconfig/localesの下層に各ファイルを細かく分けても全てのファイルが反映されるようになる。(config/locales/views/ja.ymlやconfig/locales/activerecord/ja.ymlなど)

>ja.ymlの書き方

①ビューを国際化に対応させる

```config/locales/views/ja.yml
ja:
  users:
    new:
      user_entry: "ユーザー登録"
      entry: "登録"
      to_login_page: "ログインページへ"
  login:
    login: "ログイン"
    to_entry_page: "登録ページへ"
    forget_password: "パスワードをお忘れの方はこちら"
```

```ruby:app/views/user_sessions/new.html.erb
<div class="container">
  <div class="row">
    <div class="col-md-10 offset-md-1 col-lg-8 offset-lg-2">
      <h1><%= t('users.new.user_entry') %></h1>
       <%= form_with model: @user, local: true do |f|%>
        <div class="form-group">
          <%= f.label :last_name %>
          <%= f.text_field :last_name, class: 'form-control', id: 'user_last_name'%>
        </div>
        <div class="form-group">
          <%= f.label :first_name%>
          <%= f.text_field :first_name, class: 'form-control', id: 'user_first_name'%>
        </div>
        <div class="form-group">
          <%= f.label :email%>
          <%= f.email_field :email, class: 'form-control', id: 'user_email'%>
        </div>
        <div class="form-group">
          <%= f.label :password%>
          <%= f.password_field :password, class: 'form-control', id: 'user_password'%>
        </div>
        <div class="form-group">
          <%= f.label :password_confirmation%>
          <%= f.password_field :password_confirmation, class: 'form-control', id: 'user_password_confirmation'%>
        </div>
          <%= f.submit t('users.new.entry'), class: 'btn btn-primary'%>
      <%end%>
      <div class='text-center'>
        <%= link_to t('users.new.to_login_page'), login_path%>
      </div>
    </div>
  </div>
</div>

```

例えばuser_entryを日本語で表示させたい場合はusers/newに書いてあるuser_entryという意味でt(‘users.new.user_entry’)と記述してやれば”ユーザー登録”という日本語になって返ってくる。

②モデルを使って国際化に対応させる

```config/locales/activerecord/ja.yml
ja:
  activerecord:
    models:
      user: "ユーザー"
    attributes:
      user:
        last_name: "性"
        first_name: "名"
        email: "メールアドレス"
        password: "パスワード"
        password_confirmation: "パスワード確認"
```
```ruby:app/views/users/new.html.erb
<div class="container">
  <div class="row">
    <div class=" col-md-10 offset-md-1 col-lg-8 offset-lg-2">
      <h1><%= t('login.login')%></h1>
      <%= form_with url: login_path, local: true do |f|%>
        <div class="form-group">
          <%= f.label :user_email, User.human_attribute_name(:email)%>
          <%= f.email_field :email, class: 'form-control', id: 'user_email'%>
        </div>
        <div class="form-group">
          <%= f.label :user_password, User.human_attribute_name(:password)%>
          <%= f.password_field :password, class: 'form-control', id: 'user_password'%>
        </div>
          <%= f.submit t('login.login'), class: 'btn btn-primary'%>
      <%end%>
      <div class='text-center'>
        <%= link_to t('login.to_entry_page'), new_user_path%>
        <a href="#"><%= t('login.forget_password')%></a>
      </div>
    </div>
  </div>
</div>
```
user_sessionsのnew.html.erbでは@userを引数としてインスタンスを作りモデルと対応させていたので

```
f.label :last_name
```
と書くと、自動的にラベルの名前が”姓”と変換される。これは実際は

```
f.label :last_name, User.human_attribute_name(:last_name)
```
という形でモデル経由で日本語を探し出しlast_nameを日本語で表示させているのだが、@userをインスタンスとして設定した場合は、すでにモデルと繋がっているのでUser.human_attribute_name(:last_name)と記載する必要はない

逆にいうとログインのフォームのように@userを引数としてインスタンスを指定していない場合はUser.human_attribute_name(:last_name)を付けないとモデル経由で日本語が表示されなくなってしまう