【Rails】英語を日本語化! Gem i18n
Ruby on Railsで英語を簡単に日本語表示してくれるGem「i18n
」の紹介です。
事前準備
Railsアプリ全体の言語設定を日本語に変更します。
# config/application.rb config.i18n.default_locale = :ja
Gemfile
にrails-i18n
を設定してbundle install
します。
# Gemfile gem 'rails-i18n'
ベースとなる日本語辞書ファイルをダウンロードします。
config/locales/ja.yml
を作成しrails-i18n/ja.yml at master · svenfuchs/rails-i18n · GitHubの内容を全てコピペします。
# config/locales/ja.yml --- ja: activerecord: errors: messages: record_invalid: 'バリデーションに失敗しました: %{errors}' restrict_dependent_destroy: has_one: "%{record}が存在しているので削除できません" has_many: "%{record}が存在しているので削除できません" date: abbr_day_names: - 日 - 月 - 火 - 水 - 木 - 金 - 土 . . .
これで完了です。
基本的な使い方
先ほどのja.yml
に追加します。
ja: views: hoges: hello: 'こんにちは'
この状態で、view側のファイルで= t('views.hoges.hello')
と書くと「こんにちは」と表示されていると思います。
色々な使い方
モデル名を日本語表示
# ja.yml ja: activerecord: models: user: "ユーザー"
# コンソール > User.model_name.human => "ユーザー"
カラム名を日本語表示
# ja.yml ja: activerecord: attributes: user: name: 名前
# コンソール > User.human_attribute_name :name => "名前"
日付フォーマットを操る
日付を色々なパターンで表示する
ja.yml
にformats
が定義されていて、それを利用すると状況に応じて色々なフォーマットで日付を表示することが可能です。
# ja.yml la: date: formats: default: "%Y/%m/%d" long: "%Y年%m月%d日(%a)" short: "%m/%d"
# 指定なし > I18n.l date => "2019年09月26日(木)" # :short > I18n.l date, format: :short => "9月26日(木)" # :long > I18n.l date, format: :long => "2019年09月26日(木)" # viewで使うとき <%= l date, format: :short %>
曜日部分を日本語化する
# ja.yml ja: data: abbr_day_names: - 日 - 月 - 火 - 水 - 木 - 金 - 土
元々曜日に関する日本語が定義されていますので、この状態で下記のように曜日部分を日本語表示することが可能です。
# コンソール > date = Date.today => Thu, 26 Sep 2019 > date.strftime("%Y/%m/%d(%a)") => "2019/09/26(Thu)" > date.strftime("%Y/%m/%d(#{I18n.t('date.abbr_day_names')[date.wday]})") => "2019/09/26(木)"
%w(日 月 火)
って定義しておいてDate.today.wday
でindexを取得してやる方法が調べるとよく出てきますが、こっちの方が余計な記述も不要でスッキリですね。