[Rails3]コントローラーのflashメッセージ等をi18n対応させる

[Rails3]コントローラーのflashメッセージ等をi18n対応させるためのTips


各種Viewファイルの場合は以下のi18nのショートカットが利用できます。


FileName: app/views/admin/books/index.html.erb
<h2><%= t('.title') %></h2>

上記のように記述した場合、Railsは各種言語ファイルの以下の部分を読み取りに行きます


ja:
admin:
books:
index:
title: 'タイトル'

参考: http://guides.rubyonrails.org/i18n.html 「4.1.4 “Lazy” Lookup」


これと同じようなことをコントローラーでもやりたい場合のTips


FileName: app/controllers/application_controller.rb
...
protected

def i18n_scope
self.class.name.underscore.gsub(/_controller/, '').split('/')
end

def i18n_field(field)
t(field, scope: i18n_scope)
end

このメソッドを使いたい箇所で以下のようにします


FileName: app/controllers/admin/books_controller.rb
...
def index
flash[:notice] = i18n_field(:hello)
end

言語ファイルは以下のように定義します


FileName: config/locales/ja.yml
ja:
admin:
books:
hello: 'こんにちわ'

以上である程度楽に設定ができるようになります。


i18n_scopeのメソッドの中身を変えることで、先頭にcontrollersというのをつけたりすることもできます


def i18n_scope
['controllers'] + self.class.name.underscore.gsub(/_controller/, '').split('/')
end

こうすることで、言語ファイルはcontrollers.admin.books以下を参照することになります。
また、_controllerを消していますが、つけたままにしておいても良いでしょう

スポンサーサイト
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。