LoginSignup
20
19

More than 5 years have passed since last update.

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

Posted at

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 とか便利そうなのがありますが、使ったことないので使ったら追記します。

20
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
19