24
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Rails】localeの使い方

Posted at

##localeとは
もともとは多言語化用の言語ファイル。
多言語化以外にも、何度も使う文言を一限管理するために使われる。
住所、会社名、時間をフォーマットする時の形式、今日の日付を出力する時の形式などを管理する。

##基本
config/application.rbでデフォルトの言語を指定

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

config/locales以下にlocaleファイルを作成

config/locales/ja.yml
ja:
  hello: Hello World
  company:
    name: サンプル株式会社
    address: 〒231-0001 神奈川県横浜市中区新港2丁目7−1
viewから呼び出す
<%= t('hello') %> <!-- Hello World -->
<%= t('company.name') %> <!-- サンプル株式会社 -->
modelから呼び出す
I18n.t('hello') #=> 'Hello World'
I18n.t('company.name') #=> 'サンプル株式会社'

###ポイント

  • 呼び出し時、jaの部分は書かない
  • localeファイルの名前は何でも良い。
  • viewから呼び出す時はI18n.の部分を省略できる。
  • 同じキーのデータが複数あった場合、後に定義したデータで上書きされる

##日付や時刻のフォーマットを定義する

config/locales/ja.yml
ja:
  date:
    formats:
      default: "%Y/%m/%d"
      long: "%Y年%m月%d日(%a)"
      short: "%m/%d"
  time:
    formats:
      default: "%Y/%m/%d %H:%M:%S"
      long: "%Y年%m月%d日(%a) %H時%M分%S秒 %z"
      short: "%y/%m/%d"
I18n.l(Date.today) #=> '2020/02/14'
I18n.l(Date.today, format: :long) #=> '2020年02月14日(金)'

I18n.l(Time.zone.now) #=> '2020/02/14 18:34:25'
I18n.l(user.created_at, format: :short) #=> '20/02/14'

###ポイント

  • DateクラスやTimeクラスの値をセットすると、datetimeに定義した形でフォーマットする
  • formatを省略するとdefaultの内容が適用される。
  • lはlocalizeの略。ちなみにtはtranslateの略。
  • created_atupdated_atI18n.l()でラップすると、timeに定義したフォーマットで出力される。

##変数を渡す

config/locales/ja.yml
ja:
  airmax: "NIKE AIRMAX %{year}"
I18n.t('airmax', year: 95) #=> 'NIKE AIRMAX 95'

##モデルの情報を定義する
主にエラーメッセージ中のモデル名や属性名を日本語化する目的で。

config/locales/ja.yml
ja:
  activerecord:
    # モデル名
    models:
      user: ユーザー
      item: アイテム
    # モデルごとの属性
    attributes:
      user:
        name: 名前
        address: 住所
      item:
        power: パワー
  # 全モデル共通の属性
  attributes:
    created_at: 作成日時
    updated_at: 更新日時

##階層分け
・スッキリ管理する
・conflictのリスクを減らす
ために、localeファイルを階層分けしてたくさん作ることも多い。

階層分けをする場合config.i18n.load_pathの設定をすることで、config/locale直下のファイル以外も参照できるように設定します。

config/application.rb
config.i18n.default_locale = :ja
#↓追加
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]

##rails-i18n
rails-i18nというgemを使うと、よく使う単語を全部一気に導入できます。

多言語対応をする時には有用だと思いますが、日本語だけの場合はわざわざgemを入れなくても、上記のページに書いてある内容を全部コピペすれば良い気がします。

##参考

24
17
0

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
24
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?