はじめに
デフォルトで英語表記になってしまうところが散見される。特にバリデーションをかけた時のエラーメッセージや、投稿した記事のタイムスタンプなどがよくある。
それを日本語化するため、実装した内容を記載していく。
環境
No | 項目 | 内容 |
---|---|---|
1 | OS | Mac |
2 | Ruby | 2.6.3 |
3 | rails | 6.0.4 |
実装
1. エラーメッセージを日本語化
こちらを参考にエラーメッセージの日本語化を目指す。
# 以下を追記
I18n.config.available_locales = :ja
I18n.default_locale = :ja
config/locales/ja.ymlにこちらのURLのコードをコピペすることで、基本的なエラーメッセージの日本語化をしてくれる。ここにない種類は日本語に変換してくれないので、自分で追加するか、HTML本文の方に表示するエラーメッセージを追加する。
私は後者の手段をとっている。
例
validates :image_top, :image_main,
content_type: { in: %w[image/jpeg image/gif image/png], message: "画像ファイルを添付してください" }
次に自分が定義しているテーブルの日本語(ないし好きな表示させたいワード)を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: メールアドレス
・・・
<%= 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.time_zone = 'Tokyo'
config/initializers/time_formats.rbを作り、下記を記載する。
Time::DATE_FORMATS[:datetime_jp] = '%Y年 %m月 %d日'
投稿のタイムスタンプを修正する。
<%= post.created_at.to_s(:datetime_jp) %>
rails serverを立ち上げ直すと、時刻表示が日本語になる。
おわりに
お疲れ様でした。