i18nでアプリの日本語部分を共通化

viewに直接日本語を書くのではなく、i18nで変換した日本語を表示させます。

ロケールの設定

Devise-i18nの設定で、すでにconfig/initializers/locale.rbの中に設定を記載しました。

(config/initializers/locale.rb)

I18n.config.available_locales = :ja
I18n.default_locale = :ja

I18n.config.available_locales = :jaで アプリケーションでの利用を許可するロケールホワイトリスト化しています。

I18n.default_locale = :jaロケールを:jaに変更しています。 設定の変更をしたので反映させるには一度サーバを再起動する必要があります。

Active Recordでモデルの日本語化

モデルやカラムについても日本語化の設定をします。

日本語の辞書ファイルを作成します。 config/locales/ja.ymlを作成します。

すでに素晴らしい辞書ファイルが存在するので、以下のリンクから内容をコピペします。

github.com

config/locales/model.ja.ymlというファイルを作ってモデルやカラムの設定はここに記載することにします。

(config/locales/model.ja.yml)

ja:
  activerecord:
    models:
      blog: ブログ
      user: ユーザー
    attributes:
      blog:
        title: タイトル
        content: 内容
      user:
        name: 名前
        email: メールアドレス
        current_password: 現在のパスワード
        password: パスワード
        password_confirmation: 確認用パスワード
        remember_me: ログインを記憶

Model.model_name.humanメソッドとModel.human_attribute_name(attribute)メソッドによりモデル名と属性名が参照できます。

例えば、 Blog.model_name.humanは"ブログ"を返します。 Blog.human_attribute_name("title")は"タイトル"を返します。

独自の日本語化翻訳

viewも日本語化します。config/locales/translate.ja.ymlというファイルを作ってその中に記載していくことにします。

(config/locales/translate.ja.yml)

ja:
  Are you sure?: 本当によろしいですか?
  Back: 戻る
  Blogs: ブログ一覧
  Contributer: 投稿者
  Destroy: 削除
  Edit: 編集
  Editing Blog: ブログ編集
  New Blog: 新規投稿
  Show: 詳細
  sign_in: ログイン
  sign_out: ログアウト
  sign_up: アカウント登録

これでt('Blogs')としたら"ブログ一覧"を返すようになります。

例としてapp/views/blogs/index.html.erbを修正していきます。

(app/views/blogs/index.html.erb)

<%= form_with(model: blog, local: true) do |form| %>
  <% if blog.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(blog.errors.count, "error") %> prohibited this blog from being saved:</h2>
      <ul>
        <% blog.errors.full_messages.each do |message| %>
         <li><%= message %></li>
        <% end %>
      </ul>
    </div>
  <% end %>
  
  <div class="field">
    <%= form.label :title %>
    <%= form.text_field :title %>
  </div>

  <div class="field">
    <%= form.label :content %>
    <%= form.text_area :content %>
  </div>

  <div class="actions">
   <%= form.submit %>
  </div>
<% end %>

同様にすべてのviewを直していきます。

以上でアプリの日本語部分を共通化の設定終わりです。