WeBlog

Webに関する情報を中心に発信してるブログ

ja.ymlの読み込む方について

モデルが持つ属性を読み込む

ja.ymlファイルで何を読み込んでいるのかを図で書いてみたいと思います。

f:id:weblog_tec:20210503095719p:plain

モデルがもつ属性(カラム)の日本語翻訳情報を取得したい場合は

モデル名.human_attribute_name(カラム名)

のように書きます。

なので、

t(User.human_attribute_name(:email))

のような場合は、/locals/activerecords/ja.ymlファイルを見に行きます。

そこで、activerecord/attributes配下のUseモデル名と同じ名前のemailを見に行って翻訳してくれます。

t('.title')でも読み込み

# views/profiles/show.html.erb

<% content_for(:title, t('.title')) %> # 「プロフィール」になる 
<div class="container pt-3">
  <div class="row">
    <div class="col-md-10 offset-md-1">
      <h1 class="float-left mb-5"><%= t('.title') %></h1>
      <%= link_to t('defaults.edit'), edit_profile_path, class: 'btn btn-success float-right' %>
      <table class="table">
# locals/views/ja.yml

ja:
  time:
    formats:
      default: "%Y年%m月%d日(%a) %H時%M分%S秒 %z"
      long: "%Y/%m/%d %H:%M"
      short: "%m/%d %H:%M"
  profiles:
    show:
      title: 'プロフィール'
    edit:
      title: 'プロフィール編集'

profilesコントローラーshowアクションが実行されると、views/profiles/show.html.erbがrenderされます。

その場合、show.html.erbの中でt('.title')と書いた場合は、locals/views/ja.yml

profiles/show/titleを呼び出す。

なので、コントローラー名#アクション名と同じ階層でja.ymlを書いておくと、t('.title')のように短縮してかけます。

/profilesフォルダの中のshow.html.erbファイルでのt('.title')と考えてもいいかも。

ちなみに

<%= l board.created_at, format: :long %>

のようにlメソッドを使うと、ja.ymlファイルのtime/formatsを読み込んでくれます。

format: :longとしているので、long: "%Y/%m/%d %H:%M"の形式で出力されます。