日本語表示にしたい!
- デフォルト言語を日本語に設定
- gem 'rails-i18n'をインストール
- 複数のロケールファイルが読み込まれるようpathを通す
- config/locales以下にロケールファイルを配置
- ja.ymlに日本語を設定する
- 設定した日本語を表示させる
- 様々な記述方法
1.デフォルト言語を日本語に設定 config/application.rbに以下の記述を追記
module 〇〇 class 〇〇 < Rails::Aplication ... config.i18n.default_locale = :ja end end
# rails5系なら gem 'rails-i18n', '~> 5.1' $ bundle
1の設定をしていないと反映されないため注意!!
3.複数のロケールファイルが読み込まれるようpathを通す config/application.rbに以下の記述を追記
module 〇〇 class 〇〇 < Rails::Aplication ... config.i18n.default_locale = :ja config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s] end end
長いやつを記入すると、複数のロケールファイルが読み込まれる。
4.config/locales以下にロケールファイルを配置 views/modelによってロケールファイルを分ける。
config └── locales ├── model.ja.yml # modelは1つのファイルで管理します。 └── views # views関連のファイルはここで管理する ├── admin │ ├── dashboards │ │ └── ja.yml │ ├── ja.yml │ ├── user_sessions │ │ └── ja.yml │ └── users │ └── ja.yml ├── boards │ └── ja.yml ├── dashboards │ └── ja.yml ├── password_resets │ └── ja.yml ├── shared │ └── ja.yml ├── user_sessions │ └── ja.yml └── users └── ja.yml
各階層ごとにymlをつくる。
5.ja.ymlに日本語を設定する
views
の日本語化を設定する
# ビューはビューを格納しているフォルダ名を起点にし、ビュー名毎に記述する。 # インデント(2space)でpathを制御している ja: users: index: title: 'ユーザ一覧' show: # 引数の指定もできる。 title: '%{user_name}さんのユーザ情報' edit: # view側で t(.titile), user_name: @user.name みたいな感じで設定できる title: '%{user_name}さんのユーザ情報を編集'
model
の日本語化を設定する
# モデルは全て activerecord 以下に記述する。 # これにより、User.model_name.human / User.human_attribute_name({attr_name})で使用可能。 ja: activerecord: models: # view側: User.model_name.human => "ユーザ" / t("activerecord.models.user")と同じ user: ユーザー board: 掲示板 # model毎に定義したいattributesを記述 attributes: user: id: ID # view側: User.human_attribute_name :name => "名前" / t("activerecord.attributes.user.name")と同じ first_name: 名前 last_name: 姓 email: メールアドレス file: プロフィール画像 crypted_password: パスワード # 全てのmodelで共通して使用するattributesを定義 attributes: created_at: 作成日 updated_at: 更新日
6.設定した日本語を表示させる
viewで使う場合
# 対応するビューの中ではツリーを省略できる。 # 「ユーザ一覧」が表示される(users.index.titleを参照。) # 「users.index.html.erb」に記述されているので # ja.ymlの # users: index: 部分を自動的に読み込んでいるから省略できる <%= t '.title' %> # 省略しない記述は以下のようになる。 # 「ユーザ一覧」が表示される <%= t 'users.index.title' %> # 日付・時刻(DateオブジェクトやTimeオブジェクト)変換するする場合 <%= l Time.now %> # 翻訳対象がnilになる(変数とか)場合、defaultを設定しておく <%= l nil %> => I18n::ArgumentError: Object must be a Date, DateTime or Time object. nil given. ↓ ↓ nil対策 ↓ <%= l nil, default: '' %> => "" # t = translate (config/locales配下の訳文(ja.yml)を参照する)(I18n.t) # l = localize (DateオブジェクトやTimeオブジェクトを現地のフォーマットに変換する)(I18n.l) ----------------------------------------------- #### modelで使う場合 # 「ユーザー」が表示される。(activerecord.models.userを参照) <li><%= User.model_name.human %></li> # 「ID」が表示される。(activerecord.attributes.user.idを参照) <li><%= User.human_attribute_name(:id) %></li> # 「メールアドレス」が表示される。(activerecord.attributes.user.emailを参照) <li><%= User.human_attribute_name(:email) %></li>