LoginSignup
0
0

More than 1 year has passed since last update.

【Rails】エラーメッセージや時刻表示を日本語化する。

Last updated at Posted at 2022-08-14

はじめに

デフォルトで英語表記になってしまうところが散見される。特にバリデーションをかけた時のエラーメッセージや、投稿した記事のタイムスタンプなどがよくある。
それを日本語化するため、実装した内容を記載していく。

環境

No 項目 内容
1 OS Mac
2 Ruby 2.6.3
3 rails 6.0.4

実装

1. エラーメッセージを日本語化

こちらを参考にエラーメッセージの日本語化を目指す。

config.rb
    # 以下を追記
    I18n.config.available_locales = :ja
    I18n.default_locale = :ja

config/locales/ja.ymlにこちらのURLのコードをコピペすることで、基本的なエラーメッセージの日本語化をしてくれる。ここにない種類は日本語に変換してくれないので、自分で追加するか、HTML本文の方に表示するエラーメッセージを追加する。
私は後者の手段をとっている。

post.rb
validates :image_top, :image_main, 
content_type: { in: %w[image/jpeg image/gif image/png], message: "画像ファイルを添付してください" }

次に自分が定義しているテーブルの日本語(ないし好きな表示させたいワード)をja.ymlに追加する。

ja.yml
ja:
  activerecord:
    models:
      post: ポスト
      user: ユーザー
      comment: コメント
      staticpage: ホームページ
    attributes:
      post:
        title: タイトル
        content: 投稿文
        image_top: トップ画像
        image_main: 本文の画像
      user:
        name: 名前
        email: メールアドレス
        password: パスワード
        password_confirmation: 確認用パスワード
        remember_me: ログインを記憶
      comment:
        comment_content: コメントの内容
      staticpage:
        content: 内容
        name: 名前
        email: メールアドレス
・・・

これはラベルなどに反映される。
例(userモデル)
スクリーンショット 2022-08-14 22.34.07.png

users/_form.html
<%= form_with(model: @user, local: true) do |f| %>
  <%= render 'shared/error_messages', object: f.object %>

  <%= f.label :name %>
  <%= f.text_field :name, class: 'form-control', autofocus: true %>

  <%= f.label :email %>
  <%= f.email_field :email, class: 'form-control' %>

  <%= f.label :password %>
  <%= f.password_field :password, class: 'form-control' %>

  <%= f.label :password_confirmation %>
  <%= f.password_field :password_confirmation, class: 'form-control' %>

  <%= f.submit yield(:button_text), class: "btn btn-primary" %>
<% end %>

ラベルに一つずつ名前を与えなくても、ja.ymlで定義しているため、日本語に変換される。

2. 時刻表示を日本語化

2022/8/15更新
コメントでご指摘いただいた内容をもとに修正しました。
【Rails】l(エル)メソッドを使用して時刻表示を日本語化rev1
下記のやり方でも実装可能ですが、よりDRYにするなら、上記の方法をとるべきかと思います。


l(エル)メソッドを使用しない実装方法
こちらの記事を参考に時刻表示を日本語化を目指す。

config/application.rb
config.time_zone = 'Tokyo'

config/initializers/time_formats.rbを作り、下記を記載する。

config/initializers/time_formats.rb
Time::DATE_FORMATS[:datetime_jp] = '%Y年 %m月 %d日'

投稿のタイムスタンプを修正する。

posts/show.html.erb
<%= post.created_at.to_s(:datetime_jp) %>

rails serverを立ち上げ直すと、時刻表示が日本語になる。
スクリーンショット 2022-08-14 22.55.45.png

おわりに

お疲れ様でした。

0
0
2

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
0
0