ruby-gettextだとAccept-Language見て、それに応じた表示をしてくれるようになっていたんだけど、今のとこi18nだとそこまでやってくれないっぽい。どうしようかなと思って調べていたら、http_accept_languageというプラグインがありました。
iain's http_accept_language at master ― GitHub
http://github.com/iain/http_accept_language/tree/master
vendor/plugins以下にhttp_accept_languageのファイルを置いて、app/controllers/application.rbを修正。
before_filter :set_locale private def set_locale available = %w{ja en} if params[:locale] cookies[:locale] = { :value => params[:locale], :expires => 1.year.from_now } end I18n.locale = params[:locale] || cookies[:locale] || request.compatible_language_from(available) end
availableは用意してあるlocale用のファイルから取ってこれるといいけど、とりあえベタ書き。compatible_language_fromがavailableとAccept-Languageを見て、良さそうなのを返してくれる。en-USとかen-UKとか、言語だけじゃなくて国まで厳密に区別したい場合は、preferred_language_from。
あと、パラメータでlocaleが来たときは、それを優先して、Cookieも設定しておくようにしてみた。
ソースは30行くらいなので、本気で使うひとは一応ソースも確認しておくといいと思います。