LoginSignup
3
0

More than 3 years have passed since last update.

rails学習 i18nについて

Posted at

i18nについて

config.i18n.default_locale = :ja

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

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

rails-i18nについて

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

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

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: "パスワードをお忘れの方はこちら"
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: "パスワード確認"
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)を付けないとモデル経由で日本語が表示されなくなってしまう

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0