GetTextが翻訳してくれるフィールド名の書き方

scaffoldが生成してくれるフィールド名を表示するコードは、以下のようになる。全てのフィールド名を順番に表示してくれる。

      • Csv.content_columnsを、Csv.columnsに変更してある。
</tr>
<% for column in Csv.columns %>
  <th><%= column.human_name %></th>
<% end %>
</tr>


しかし、時には表示したくないフィールド名があったり、順番を変更したいこともある。そこで、以下のように自分好みのフィールド名の配列を作り、その配列順に表示するようにした。

column_titles = %w{file_name file_comment editable file_size created_at file_updated_at management_section_id user_id}
<% for title in column_titles %>
  <th><%= title %></th>
<% end %>

ところが、これだとフィールド名がRubyGetTextによって、翻訳されないことに悩む。訳も分からず、<%= _(title) %> こんな風にしても駄目だった...。


もう一度、順を追って考え直す。scaffold生成のコードでは、human_nameというメソッドを呼び出している。そうすると、RubyGetTextが翻訳してくれるようだ。そこで、Railsマニュアルで human_name のソースを確認すると、その中では、human_attribute_name(@name) としている。そこで、以下のようにしてみた。

column_titles = %w{file_name file_comment editable file_size created_at file_updated_at management_section_id user_id}
<% for title in column_titles %>
  <th><%= Csv.human_attribute_name(title) %></th>
<% end %>

これで無事、翻訳されるようになった!