おぴよの気まぐれ日記

おぴよの気まぐれ日記

岡山やプログラミング、ファッションのこと、子育てや人生、生き方についての備忘録。

【Rails】英語を日本語化! Gem i18n

Ruby on Railsで英語を簡単に日本語表示してくれるGem「i18n」の紹介です。

事前準備

Railsアプリ全体の言語設定を日本語に変更します。

# config/application.rb
config.i18n.default_locale = :ja

Gemfilerails-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.ymlformatsが定義されていて、それを利用すると状況に応じて色々なフォーマットで日付を表示することが可能です。

# 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を取得してやる方法が調べるとよく出てきますが、こっちの方が余計な記述も不要でスッキリですね。