📘 hkob-astro-notion-blog

これまではてなブログにて情報発信をしていましたが、令和5年3月22日より、こちらでの情報発信を始めました。2019年以前の古い記事は過去の Middleman 時代のものなので、情報が古いです。記録のためだけに残しています。

devise の日本語化 - 不定期刊 Rails App を作る(11)

💡
この記事は Middleman 時代に書いた古いものです。記録のため、astro-notion-blog に移行していますが、あまり参考にしないでください。

devise が表示するメッセージは全て英語になっている. 【Rails5】devise を日本語化する を参考に devise を日本語化する.

notice, alert メッセージの日本語化
  1. config/application.rb に default locale の設定を追記する.
    module Attendance
      class Application < Rails::Application
        config.i18n.default_locale = :ja
  2. devise.ja.yml を I18n - plataformatec/devise Wiki - GitHub から取得する.
  3. 取得した devise.ja.yml を config/locales/devise.ja.yml に保存する.
  4. この結果,devise が表示するメッセージは日本語化される.
モデルの日本語化
  1. これだけでは form で表示されるラベルは日本語化されない.そこで,model の属性についても日本語化する.config/locales/models.ja.yml に teacher モデルの属性の翻訳テキストを記述する.
    ja:
      activerecord:
        attributes:
          teacher:
            email: メールアドレス
            name: 氏名
            password: パスワード
            password_confirmation: 確認用パスワード
            remember_me: 次回から自動的にログイン
  2. この結果,form の label 部分が日本語化される.
ビューの日本語化

form 部分のラベルは直ったものの,属性以外の部分はまだ英語が残ったままである.これらも locale で対応する.こうすることで,翻訳のゆらぎがなくなるだけでなく,翻訳がふさわしくない時に,yml を書き換えるだけでサイト全体の修正をする必要がなくなる.

  1. config/locales/views.ja.yml を記載する(全部書くと大変なので一部のみ掲載).
    ja:
      devise:
        sessions:
          new:
            log_in: 'ログイン'
        registrations:
          new:
            sign_up: 'サインアップ'
        shared:
          links:
            log_in: 'ログイン'
            sign_up: 'サインアップ'
            forgot_your_password: 'パスワードを忘れた?'
  2. 現在の views は単にメッセージが直接書かれている. そこで,メッセージ部分を I18n.t で変換する. ただし,application_helper で I18n は include されているので,ビューでは t だけ書けばよい. また,locale の yml に書かれている locale を直接指定すると,jp.devise.sessions.new.log_in となるが,ビューのページ名に相当する部分は省略可能となるため,単に「t('.log_in')」だけを書けばよい.例としてサインインページの該当部分は app/views/devises/sessions/new.html.haml は以下のようになる.
    %h2= t '.log_in'
    (中略)
      .actions
        = f.submit t('.log_in')
    = render "devise/shared/links"
  3. 一番下の devise/shared/links は各ページから呼び出されているので,こちらも修正する.上に書かれているように jp.deise.shared.link.* に翻訳文字列を記載しているので,こちらも .log_in のようにすればよい.最終的にこんな感じで日本語化された.

長くなったので今日はここまで