Padrino での多言語化対応(I18n)のつかいかた

  • 19
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

Rails でのやり方をまとめたこの記事がいいなーと思ったので Padrino 特有の部分を設定方法を中心に書き出してみました。

設定のしかた

Padrino では config/boot.rb で default_locale の設定をします。

I18n.default_locale = :ja

何も設定しなければ、I18n のデフォルト値( :en )が設定されます。

ちなみに、I18n の読み込みは padrino-helper が担当してます。

言語ファイル

以下のファイルが標準で読み込まれます。

これらに設定されている文言が気に入らない場合は、上記ファイルを [your_apps_root_path]/locale/ 配下に設定し、適宜編集すれば、そちらが優先されます。

また、言語ファイルの設置場所を変更したい場合は、[your_apps_root_path]/app.rb で locale_path を設定します。

set :locale_path, Proc.new { Dir[Padrino.root('config', 'locales', '**/*.yml')] }

モデル用の言語ファイルは、

# ActiveRecord or MiniRecord を使っている場合
$ rake ar:translate
# MongoMapper を使っている場合
$ rake mm:translate

app/locale/models/ 直下に生成されます。

今のところ、出力先は固定です…。

view での使い方

省略。Railsと同じ感じで t とか l とかで使えます。

本筋から外れますが、モデルのエラーをバラして1つずつ表示したい場合があったので、次のようにしてみました。
もっといいやり方があれば教えてください。

def show_error_message(model, field)
  return if model.errors.messages[field].blank?
  attribute = I18n.t(field, default: field.to_s.humanize, scope: [:models, model.class.name.underscore, :attributes])
  message = model.errors.messages[field].first
  safe_content_tag :p, "%s %s" % [attribute, message], class: :error-message
end

locale の切り替え

padrino-contribに auto_locale とか便利そうなのがありますが、使ったことないので使ったら追記します。